From 4f1e21dfb024fa2aea33eee150e2e6816b6c5bdd Mon Sep 17 00:00:00 2001 From: c4rlosdias Date: Sat, 5 Aug 2023 10:50:27 -0300 Subject: [PATCH 001/220] Add element guId in BCF report --- src/ifctester/ifctester/reporter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ifctester/ifctester/reporter.py b/src/ifctester/ifctester/reporter.py index ae9e0cd479..0cac09d14d 100644 --- a/src/ifctester/ifctester/reporter.py +++ b/src/ifctester/ifctester/reporter.py @@ -342,7 +342,7 @@ class Bcf(Json): continue for failure in requirement["failed_entities"]: element = failure["element"] - title = f"{element.id()}/{element.is_a()}/" + title = f"ID:[{element.id()}]/GUID:[{element.GlobalId}]/{element.is_a()}/" title += getattr(element, "Name", None) or "Unnamed" title += " - " + failure.get("reason", "No reason") description = f'{specification["name"]} - {requirement["description"]}' From ddd4b0e2621f1abfcf23dbeb145b2297ae8e91ce Mon Sep 17 00:00:00 2001 From: c4rlosdias Date: Mon, 2 Oct 2023 13:49:27 -0300 Subject: [PATCH 002/220] Fix problem in getpsets(facet.py) and added descriptions to specifications (IfcTester) --- src/blenderbim/blenderbim/bim/module/tester/operator.py | 4 +++- src/blenderbim/blenderbim/bim/module/tester/prop.py | 1 + src/blenderbim/blenderbim/bim/module/tester/ui.py | 3 ++- src/ifctester/ifctester/facet.py | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) 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/ifctester/ifctester/facet.py b/src/ifctester/ifctester/facet.py index d10664fee2..78e718a264 100644 --- a/src/ifctester/ifctester/facet.py +++ b/src/ifctester/ifctester/facet.py @@ -48,7 +48,7 @@ def get_pset(element, pset): @lru_cache -def get_psets(element, pset): +def get_psets(element): return ifcopenshell.util.element.get_psets(element) From 1621449143340384bc26e2f041a0f8994621503a Mon Sep 17 00:00:00 2001 From: Massimo Fabbro Date: Wed, 27 Sep 2023 18:28:38 +0200 Subject: [PATCH 003/220] Add predefined type to AuthoringData --- .../blenderbim/bim/module/covering/prop.py | 1 + .../bim/module/covering/workspace.py | 28 +++++++++++++++++-- .../blenderbim/bim/module/model/covering.py | 2 +- .../blenderbim/bim/module/model/data.py | 8 ++++++ 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/covering/prop.py b/src/blenderbim/blenderbim/bim/module/covering/prop.py index d66aac26cd..330632ab05 100644 --- a/src/blenderbim/blenderbim/bim/module/covering/prop.py +++ b/src/blenderbim/blenderbim/bim/module/covering/prop.py @@ -38,3 +38,4 @@ import ifcopenshell class BIMCoveringProperties(PropertyGroup): pass # depth: bpy.props.FloatProperty(name="Depth", default=0.1, subtype="DISTANCE", description="Flooring depth") + depth: 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..9989d7caea 100644 --- a/src/blenderbim/blenderbim/bim/module/covering/workspace.py +++ b/src/blenderbim/blenderbim/bim/module/covering/workspace.py @@ -93,8 +93,32 @@ class CoveringToolUI: 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") + + if AuthoringData.data["predefined_type"] == "FLOORING": + if element and bpy.context.selected_objects and element.is_a("IfcWall"): + op = row.operator("bim.add_instance_flooring_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_flooring_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) + +# 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: op = row.operator("bim.add_constr_type_instance", text="Add") op.from_invoke = True diff --git a/src/blenderbim/blenderbim/bim/module/model/covering.py b/src/blenderbim/blenderbim/bim/module/model/covering.py index da5f09cb06..3f9f0f4b2d 100644 --- a/src/blenderbim/blenderbim/bim/module/model/covering.py +++ b/src/blenderbim/blenderbim/bim/module/model/covering.py @@ -25,7 +25,7 @@ import blenderbim.core.covering as core 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 Covering 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" diff --git a/src/blenderbim/blenderbim/bim/module/model/data.py b/src/blenderbim/blenderbim/bim/module/model/data.py index b1ad345e75..c9fde070e8 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() @@ -247,6 +248,13 @@ 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 + relating_type = tool.Ifc.get().by_id(int(relating_type_id)) + predefined_type = relating_type.PredefinedType + return predefined_type + @classmethod def selected_material_usages(cls): selected_usages = {} From 09a9753ca714f875ec36b316e629643fbfd41f6f Mon Sep 17 00:00:00 2001 From: Massimo Fabbro Date: Wed, 27 Sep 2023 21:43:42 +0200 Subject: [PATCH 004/220] refactor create spaces from walls --- .../blenderbim/bim/module/model/space.py | 27 +++++++++++ src/blenderbim/blenderbim/core/spatial.py | 46 ++++--------------- src/blenderbim/blenderbim/core/tool.py | 4 +- src/blenderbim/blenderbim/tool/spatial.py | 9 ++++ .../test/bim/feature/spatial.feature | 11 ----- 5 files changed, 49 insertions(+), 48 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/space.py b/src/blenderbim/blenderbim/bim/module/model/space.py index 5f0e8edaf3..2ae6135205 100644 --- a/src/blenderbim/blenderbim/bim/module/model/space.py +++ b/src/blenderbim/blenderbim/bim/module/model/space.py @@ -68,6 +68,13 @@ class GenerateSpace(bpy.types.Operator, tool.Ifc.Operator): bpy.context.window_manager.popup_menu(msg, title="Error", icon="ERROR") return +# core.generate_space(tool.Ifc, tool.Spatial) + + + + + + active_obj = bpy.context.active_object element = None if bpy.context.selected_objects and active_obj: @@ -233,6 +240,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/core/spatial.py b/src/blenderbim/blenderbim/core/spatial.py index 109168847b..c8c36e500b 100644 --- a/src/blenderbim/blenderbim/core/spatial.py +++ b/src/blenderbim/blenderbim/core/spatial.py @@ -123,31 +123,13 @@ def select_decomposed_elements(spatial): spatial.select_products(spatial.get_decomposed_elements(container)) #HERE STARTS SPATIAL TOOL +def generate_space(ifc, spatial): + pass + 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 +139,16 @@ 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) - 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 - ) + spatial.assign_container_to_obj(obj) def toggle_space_visibility(ifc, spatial): model = ifc.get() diff --git a/src/blenderbim/blenderbim/core/tool.py b/src/blenderbim/blenderbim/core/tool.py index de5d5f31cb..6aeed3a2ea 100644 --- a/src/blenderbim/blenderbim/core/tool.py +++ b/src/blenderbim/blenderbim/core/tool.py @@ -821,12 +821,14 @@ class Spatial: def get_bmesh_from_polygon(cls, poly, h): pass def get_named_obj_from_bmesh(cls, name, bmesh): pass def set_obj_origin_to_bboxcenter(cls, obj): pass - def get_active_obj_z(cls, obj): pass + def get_active_obj_z(cls): pass + def get_active_obj_height(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 regen_obj_representation(cls, ifc, geometry, obj, body): pass def toggle_spaces_visibility_wired_and_textured(cls, spaces): pass diff --git a/src/blenderbim/blenderbim/tool/spatial.py b/src/blenderbim/blenderbim/tool/spatial.py index f838703059..efa5d659a0 100644 --- a/src/blenderbim/blenderbim/tool/spatial.py +++ b/src/blenderbim/blenderbim/tool/spatial.py @@ -427,6 +427,11 @@ class Spatial(blenderbim.core.tool.Spatial): 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 traslate_obj_to_z_location(cls, obj, z): if z != 0: @@ -468,6 +473,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 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 From cda61bff5b180039da7de918cafdf5104f21b443 Mon Sep 17 00:00:00 2001 From: Massimo Fabbro Date: Mon, 2 Oct 2023 22:12:11 +0200 Subject: [PATCH 005/220] Refactor create_space operator and better UI for covering tool --- .../bim/module/covering/workspace.py | 12 +- .../blenderbim/bim/module/model/covering.py | 2 +- .../blenderbim/bim/module/model/prop.py | 1 + .../blenderbim/bim/module/model/space.py | 161 +-------------- src/blenderbim/blenderbim/core/spatial.py | 51 ++++- src/blenderbim/blenderbim/core/tool.py | 14 ++ src/blenderbim/blenderbim/tool/spatial.py | 184 +++++++++++++++++- 7 files changed, 251 insertions(+), 174 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/covering/workspace.py b/src/blenderbim/blenderbim/bim/module/covering/workspace.py index 9989d7caea..e41145d959 100644 --- a/src/blenderbim/blenderbim/bim/module/covering/workspace.py +++ b/src/blenderbim/blenderbim/bim/module/covering/workspace.py @@ -42,13 +42,14 @@ 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")]}), ) @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] @@ -71,7 +72,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"): @@ -97,6 +97,7 @@ class CoveringToolUI: if AuthoringData.data["predefined_type"] == "FLOORING": if element and bpy.context.selected_objects and element.is_a("IfcWall"): op = row.operator("bim.add_instance_flooring_coverings_from_walls") +# 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"): else: @@ -183,8 +184,11 @@ 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() + 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() + else: + bpy.ops.bim.add_constr_type_instance() else: bpy.ops.bim.add_constr_type_instance() diff --git a/src/blenderbim/blenderbim/bim/module/model/covering.py b/src/blenderbim/blenderbim/bim/module/model/covering.py index 3f9f0f4b2d..a5d954aea0 100644 --- a/src/blenderbim/blenderbim/bim/module/model/covering.py +++ b/src/blenderbim/blenderbim/bim/module/model/covering.py @@ -25,7 +25,7 @@ import blenderbim.core.covering as core class AddInstanceFlooringCoveringsFromWalls(bpy.types.Operator, tool.Ifc.Operator): bl_idname = "bim.add_instance_flooring_coverings_from_walls" - bl_label = "Add 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" diff --git a/src/blenderbim/blenderbim/bim/module/model/prop.py b/src/blenderbim/blenderbim/bim/module/model/prop.py index 2723e7904e..2b167bd730 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): diff --git a/src/blenderbim/blenderbim/bim/module/model/space.py b/src/blenderbim/blenderbim/bim/module/model/space.py index 2ae6135205..7a63a31604 100644 --- a/src/blenderbim/blenderbim/bim/module/model/space.py +++ b/src/blenderbim/blenderbim/bim/module/model/space.py @@ -50,13 +50,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,158 +62,7 @@ class GenerateSpace(bpy.types.Operator, tool.Ifc.Operator): bpy.context.window_manager.popup_menu(msg, title="Error", icon="ERROR") return -# core.generate_space(tool.Ifc, tool.Spatial) - - - - - - - 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) class GenerateSpacesFromWalls(bpy.types.Operator, tool.Ifc.Operator): diff --git a/src/blenderbim/blenderbim/core/spatial.py b/src/blenderbim/blenderbim/core/spatial.py index c8c36e500b..85a09cc7b4 100644 --- a/src/blenderbim/blenderbim/core/spatial.py +++ b/src/blenderbim/blenderbim/core/spatial.py @@ -16,9 +16,7 @@ # 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 - +import blenderbim.core.type def reference_structure(ifc, spatial, structure=None, element=None): if spatial.can_reference(structure, element): @@ -123,8 +121,51 @@ def select_decomposed_elements(spatial): spatial.select_products(spatial.get_decomposed_elements(container)) #HERE STARTS SPATIAL TOOL -def generate_space(ifc, spatial): - pass +def generate_space(ifc, spatial, model): + 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"): + 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) ##mat + 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: + blenderbim.core.type.assign_type(tool.Ifc, tool.Type, element=element, type=relating_type) def generate_spaces_from_walls(ifc, spatial, collector): diff --git a/src/blenderbim/blenderbim/core/tool.py b/src/blenderbim/blenderbim/core/tool.py index 6aeed3a2ea..fc2964d3bc 100644 --- a/src/blenderbim/blenderbim/core/tool.py +++ b/src/blenderbim/blenderbim/core/tool.py @@ -810,6 +810,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,9 +827,16 @@ 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 edit_active_space_obj_from_mesh(cls, mesh): pass def set_obj_origin_to_bboxcenter(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 diff --git a/src/blenderbim/blenderbim/tool/spatial.py b/src/blenderbim/blenderbim/tool/spatial.py index efa5d659a0..e8b9664e4e 100644 --- a/src/blenderbim/blenderbim/tool/spatial.py +++ b/src/blenderbim/blenderbim/tool/spatial.py @@ -270,6 +270,123 @@ 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,11 @@ class Spatial(blenderbim.core.tool.Spatial): @classmethod def get_bmesh_from_polygon(cls, poly, h): - mat = bpy.context.active_object.matrix_world + if bpy.context.selected_objects and bpy.context.active_object: + mat = bpy.context.active_object.matrix_world + else: + mat = Matrix() + bm = bmesh.new() bm.verts.index_update() bm.edges.index_update() @@ -398,13 +519,32 @@ 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) + if bpy.context.active_object: + mat = bpy.context.active_object.matrix_world + obj.matrix_world = mat + 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 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,6 +562,34 @@ 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 @@ -432,6 +600,12 @@ class Spatial(blenderbim.core.tool.Spatial): 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: From 7ca24ede4c53172f48f6a54459a9ab2caf1c48b6 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 3 Oct 2023 10:50:26 +0500 Subject: [PATCH 006/220] IfcSverchok docs update urls --- src/ifcopenshell-python/docs/ifcsverchok/installation.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 From 3904162360361b89609dc1849390fca8e36e809b Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 3 Oct 2023 21:19:11 +1100 Subject: [PATCH 007/220] New IfcPatch recipe to fix Revit bug with hardcoded Uniformat classification --- .../RemoveRevitUniformatClassification.py | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/ifcpatch/ifcpatch/recipes/RemoveRevitUniformatClassification.py diff --git a/src/ifcpatch/ifcpatch/recipes/RemoveRevitUniformatClassification.py b/src/ifcpatch/ifcpatch/recipes/RemoveRevitUniformatClassification.py new file mode 100644 index 0000000000..22cad79bba --- /dev/null +++ b/src/ifcpatch/ifcpatch/recipes/RemoveRevitUniformatClassification.py @@ -0,0 +1,60 @@ +# IfcPatch - IFC patching utiliy +# Copyright (C) 2023 Dion Moult +# +# This file is part of IfcPatch. +# +# IfcPatch 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. +# +# IfcPatch 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 IfcPatch. If not, see . + + +class Patcher: + def __init__(self, src, file, logger): + """Removes the built-in Revit Uniformat classification. + + Revit has a bug (see https://github.com/Autodesk/revit-ifc/issues/486) + where it always inserts a Uniformat classification regardless if your + project needs it or not. This patch removes it. + + Example: + + .. code:: python + + ifcpatch.execute({"input": model, "recipe": "RemoveRevitUniformatClassification"}) + """ + self.src = src + self.file = file + self.logger = logger + + def patch(self): + for classification in self.file.by_type("IfcClassification"): + if classification.Name != "Uniformat": + continue + references = self.get_references(classification) + for reference in references: + self.file.remove(reference) + self.file.remove(classification) + for rel in self.file.by_type("IfcRelAssociatesClassification"): + if not rel.RelatingClassification: + self.file.remove(rel) + for rel in self.file.by_type("IfcExternalReferenceRelationship"): + if not rel.RelatingReference: + self.file.remove(rel) + + def get_references(self, classification): + results = [] + if not classification.HasReferences: + return results + for reference in classification.HasReferences: + results.append(reference) + results.extend(self.get_references(reference)) + return results From 748055dcf197cfbb7c28109f431b7d97a88a5024 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 3 Oct 2023 21:19:28 +1100 Subject: [PATCH 008/220] New IfcPatch recipe to fix Revit bug with occurrence based classifications --- .../FixRevitClassificationCodeTypes.py | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/ifcpatch/ifcpatch/recipes/FixRevitClassificationCodeTypes.py diff --git a/src/ifcpatch/ifcpatch/recipes/FixRevitClassificationCodeTypes.py b/src/ifcpatch/ifcpatch/recipes/FixRevitClassificationCodeTypes.py new file mode 100644 index 0000000000..d6bdde4b5a --- /dev/null +++ b/src/ifcpatch/ifcpatch/recipes/FixRevitClassificationCodeTypes.py @@ -0,0 +1,51 @@ +# IfcPatch - IFC patching utiliy +# Copyright (C) 2023 Dion Moult +# +# This file is part of IfcPatch. +# +# IfcPatch 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. +# +# IfcPatch 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 IfcPatch. If not, see . + +import ifcopenshell +import ifcopenshell.util.element + + +class Patcher: + def __init__(self, src, file, logger): + """Reassigns occurrence classifications to types + + Revit has a bug (see https://github.com/Autodesk/revit-ifc/issues/691) + where it assigns classification codes to occurrences instead of types. + Almost always, this is not what you want. This patch reassigns all + classifications to their respective types. + + Example: + + .. code:: python + + ifcpatch.execute({"input": model, "recipe": "FixRevitClassificationCodeTypes"}) + """ + self.src = src + self.file = file + self.logger = logger + + def patch(self): + for rel in self.file.by_type("IfcRelAssociatesClassification"): + related_types = set() + for related_object in rel.RelatedObjects: + relating_type = ifcopenshell.util.element.get_type(related_object) + if relating_type: + related_types.add(relating_type) + else: + related_types.add(related_object) + rel.RelatedObjects = list(related_types) From a24fab6d92b8b1c51697094e340b7e136ccb476a Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 3 Oct 2023 21:20:16 +1100 Subject: [PATCH 009/220] You can now select and bulk process multiple models using IfcFM in Blender. --- .../blenderbim/bim/module/fm/operator.py | 47 ++++++++++++++----- .../blenderbim/bim/module/fm/prop.py | 2 + src/blenderbim/blenderbim/bim/module/fm/ui.py | 5 +- 3 files changed, 41 insertions(+), 13 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/fm/operator.py b/src/blenderbim/blenderbim/bim/module/fm/operator.py index d48502790a..a59fe1dc9a 100644 --- a/src/blenderbim/blenderbim/bim/module/fm/operator.py +++ b/src/blenderbim/blenderbim/bim/module/fm/operator.py @@ -32,9 +32,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): @@ -42,6 +49,7 @@ class SelectFMIfcFile(bpy.types.Operator): return {"RUNNING_MODAL"} + class ExecuteIfcFM(bpy.types.Operator): bl_idname = "bim.execute_ifcfm" bl_label = "Execute IfcFM" @@ -66,17 +74,32 @@ class ExecuteIfcFM(bpy.types.Operator): 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] - 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(self.filepath) - elif props.format == "xlsx": - writer.write_xlsx(self.filepath) + 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"} diff --git a/src/blenderbim/blenderbim/bim/module/fm/prop.py b/src/blenderbim/blenderbim/bim/module/fm/prop.py index f6a3074da3..c75ac52518 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,7 @@ from bpy.props import ( class BIMFMProperties(PropertyGroup): ifc_file: StringProperty(default="", name="IFC File") + ifc_files: CollectionProperty(name="IFC Files", 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..e838d72a0f 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 props.ifc_files: + 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() From 82d4829c83535f4587657784eb692161ad7d6fa0 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 3 Oct 2023 21:21:16 +1100 Subject: [PATCH 010/220] Clean up IfcFM's Basic preset to be more true to IFC rather than follow naming schemes from stuff like COBie --- src/ifcfm/ifcfm/basic.py | 96 +++++++++++++++++++++++----------------- 1 file changed, 56 insertions(+), 40 deletions(-) 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", ], From 0e5e1f787330f3455ee10cb58a83414cf37d7a9a Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Tue, 3 Oct 2023 21:26:00 +0200 Subject: [PATCH 011/220] Option to write Earth-Centered Earth-Fixed glTF --- cmake/CMakeLists.txt | 12 + src/ifcconvert/IfcConvert.cpp | 5 +- .../GeometrySerializer.h | 5 +- src/serializers/GltfSerializer.cpp | 301 +++++++++++++++++- src/serializers/GltfSerializer.h | 4 +- win/build-deps.cmd | 35 ++ 6 files changed, 350 insertions(+), 12 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 05b9c9cfb5..32f3debde2 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) @@ -934,6 +935,17 @@ 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}") + message(STATUS "WITH_PROJ ${WITH_PROJ}") + + 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/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/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/serializers/GltfSerializer.cpp b/src/serializers/GltfSerializer.cpp index 3c285b7c03..f0a4f62737 100644 --- a/src/serializers/GltfSerializer.cpp +++ b/src/serializers/GltfSerializer.cpp @@ -23,6 +23,10 @@ #include "../ifcparse/utils.h" +#ifdef WITH_PROJ +#include +#endif + #include static const uint32_t GLTF = 0x46546C67U; @@ -177,13 +181,23 @@ void GltfSerializer::write(const IfcGeom::TriangulationElement* o) { node_array_.push_back(json_["nodes"].size()); const std::vector& m = o->transformation().matrix().data(); - // nb: note that this contains the Y-UP transform as well. - const std::array matrix_flat = { - m[0], m[ 2], -m[ 1], 0, - m[3], m[ 5], -m[ 4], 0, - m[6], m[ 8], -m[ 7], 0, - m[9], m[11], -m[10], 1 - }; + std::array matrix_flat; + if (settings_.get(SerializerSettings::WRITE_GLTF_ECEF)) { + matrix_flat = { + m[0], m[1], m[2], 0, + m[3], m[4], m[5], 0, + m[6], m[7], m[8], 0, + m[9], m[10], m[11], 1 + }; + } else { + // nb: note that this contains the Y-UP transform as well. + matrix_flat = { + m[0], m[2], -m[1], 0, + m[3], m[5], -m[4], 0, + m[6], m[8], -m[7], 0, + m[9], m[11], -m[10], 1 + }; + } static const std::array identity_matrix = {1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1}; json node; @@ -317,6 +331,22 @@ void write_block(std::ostream& fs, It begin, It end) { } void GltfSerializer::finalize() { + if (north_rotation_) { + (*north_rotation_)["children"] = json::array(); + for (int i = 0; i < json_["nodes"].size(); ++i) { + (*north_rotation_)["children"].push_back(i); + } + json_["nodes"].push_back(*north_rotation_); + } + + if (ecef_transform_) { + (*ecef_transform_)["children"] = json::array(); + for (int i = 0; i < json_["nodes"].size(); ++i) { + (*ecef_transform_)["children"].push_back(i); + } + json_["nodes"].push_back(*ecef_transform_); + } + tmp_fstream1_.close(); tmp_fstream2_.close(); @@ -335,7 +365,11 @@ void GltfSerializer::finalize() { } json scene_0; - scene_0["nodes"] = node_array_; + if (north_rotation_ || ecef_transform_) { + scene_0["nodes"] = std::array{json_["nodes"].size() - 1}; + } else { + scene_0["nodes"] = node_array_; + } json_["scenes"].push_back(scene_0); //The generated glb file will contain the indices buffer followed by the vertices buffer. @@ -375,4 +409,255 @@ void GltfSerializer::finalize() { write_padding(fstream_, binary_length); } +namespace { + void normalize(std::array& v) { + auto l = std::sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); + + v[0] /= l; + v[1] /= l; + v[2] /= l; + } + + void cross(const std::array& v1, const std::array& v2, std::array& result) { + result[0] = v1[1] * v2[2] - v1[2] * v2[1]; + result[1] = v1[2] * v2[0] - v1[0] * v2[2]; + result[2] = v1[0] * v2[1] - v1[1] * v2[0]; + } + + void proj_log(void *, int, const char* c) { + Logger::Error("PROJ: " + std::string(c)); + } +} + +void GltfSerializer::setFile(IfcParse::IfcFile* f) { + if (!settings_.get(SerializerSettings::WRITE_GLTF_ECEF)) { + return; + } + + boost::optional crs_epsg; + boost::optional> crs_x_axis; + boost::optional> eastings_northings_elevation; + + aggregate_of_instance::ptr coordops; + try { + coordops = f->instances_by_type("IfcCoordinateOperation"); + } catch (IfcParse::IfcException&) { + // Ignored. Schema likely doesn't support IfcCoordinateOperation. + } + if (coordops) { + for (auto& coordop : *coordops) { + IfcUtil::IfcBaseClass* source_crs = *coordop->as()->get("SourceCRS"); + if (source_crs->declaration().is("IfcGeometricRepresentationContext")) { + IfcUtil::IfcBaseClass* target_crs = *coordop->as()->get("TargetCRS"); + auto name_attr = target_crs->as()->get("Name"); + if (coordop->declaration().is("IfcMapConversion")) { + + if (!name_attr->isNull()) { + std::string epsg_code = *name_attr; + crs_epsg = epsg_code; + + // @todo in which unit are these? + double eastings = *coordop->as()->get("Eastings"); + double northings = *coordop->as()->get("Northings"); + double height = *coordop->as()->get("OrthogonalHeight"); + height = 0.; + + eastings_northings_elevation = { { eastings, northings, height} }; + + auto xaxis_attr = coordop->as()->get("XAxisAbscissa"); + auto yaxis_attr = coordop->as()->get("XAxisOrdinate"); + if (!xaxis_attr->isNull() && !yaxis_attr->isNull()) { + double xaxis = *xaxis_attr; + double yaxis = *yaxis_attr; + + crs_x_axis = { { xaxis, yaxis, 0. } }; + } + } + } + } + } + } + + if (!crs_epsg) { + auto sites = f->instances_by_type("IfcSite"); + + if (sites && sites->size() == 1) { + auto lat_attr = (*sites->begin())->as()->get("RefLatitude"); + auto lon_attr = (*sites->begin())->as()->get("RefLongitude"); + + if (!lat_attr->isNull() && !lon_attr->isNull()) { + std::vector lat_dms = *lat_attr; + std::vector lon_dms = *lon_attr; + + auto to_decimal = [](const std::vector& dms) { + double val = dms[0] + dms[1] / 60. + dms[2] / 3600.; + if (dms.size() == 4) { + val += dms[3] / 3600.e6; + } + return val; + }; + + auto lat = to_decimal(lat_dms); + auto lon = to_decimal(lon_dms); + double elev = 0.; + + /* + auto elev_attr = (*sites->begin())->as()->get("RefElevation"); + if (!elev_attr->isNull()) { + elev = *elev_attr; + } + */ + + crs_epsg.reset("EPSG:4326"); + eastings_northings_elevation = { { lat, lon, elev } }; + } + } + } + + auto contexts = f->instances_by_type_excl_subtypes("IfcGeometricRepresentationContext"); + + if (contexts && contexts->size() > 0) { + auto context = (*contexts->begin())->as(); + auto north_attr = context->get("TrueNorth"); + if (!north_attr->isNull()) { + IfcUtil::IfcBaseClass* north = *north_attr; + if (north->declaration().is("IfcDirection")) { + std::vector ratios = *north->as()->get("DirectionRatios"); + crs_x_axis = { { ratios[1], -ratios[0], 0. } }; + } + } + } + +#ifdef WITH_PROJ + + if (crs_epsg) { + PJ_COORD wgs84_point; + + auto C = proj_context_create(); + proj_log_func(C, nullptr, proj_log); + + // @todo a bit ugly we assume a proj.db in current working directory. + // a very simplistic but at least portable solution. + proj_context_set_database_path(C, "proj.db", nullptr, nullptr); + + if (*crs_epsg == "EPSG:4326") { + wgs84_point = proj_coord( + (*eastings_northings_elevation)[0], + (*eastings_northings_elevation)[1], + (*eastings_northings_elevation)[2], + 0); + } else { + // @todo a bit ugly we assume a proj.db in current working directory. + // a very simplistic but at least portable solution. + proj_context_set_database_path(C, "proj.db", nullptr, nullptr); + + auto P = proj_create_crs_to_crs( + C, crs_epsg->c_str(), "EPSG:4326", + NULL); + + if (!P) { + Logger::Error("Failed to create PROJ transformation object"); + return; + } + + auto a = proj_coord( + (*eastings_northings_elevation)[0], + (*eastings_northings_elevation)[1], + (*eastings_northings_elevation)[2], + 0); + + wgs84_point = proj_trans(P, PJ_FWD, a); + + Logger::Notice("Calculated latitude: " + std::to_string(wgs84_point.lp.lam) + " longitude: " + std::to_string(wgs84_point.lp.phi)); + } + + std::swap(wgs84_point.lp.phi, wgs84_point.lp.lam); + + const char *input_crs = "+proj=latlong +datum=WGS84"; + const char *output_crs = "+proj=geocent +datum=WGS84 +units=m"; + + // Create a transformation object + PJ *transform = proj_create_crs_to_crs(C, input_crs, output_crs, NULL); + + // Perform the transformation + PJ_COORD output_point = proj_trans(transform, PJ_FWD, wgs84_point); + + // Extract the ECEF coordinates + double x = output_point.xyz.x; + double y = output_point.xyz.y; + double z = output_point.xyz.z; + + const char *ellipsoid_def = "WGS84"; + + // Create a CRS object representing the ellipsoid + PJ *ellipsoid_crs = proj_create(C, ellipsoid_def); + + if (!ellipsoid_crs) { + Logger::Error("Failed to create ellipsoid CRS"); + return; + } + + auto ellipse = proj_get_ellipsoid(C, ellipsoid_crs); + + + int _; + double semi_major, semi_minor, __; + proj_ellipsoid_get_parameters(C, ellipse, &semi_major, &semi_minor, &_, &__); + + std::array dxyz = { { + x * (1. / (semi_major * semi_major)), + y * (1. / (semi_major * semi_major)), + z * (1. / (semi_minor * semi_minor)) + } }; + normalize(dxyz); + + // Oblate spheroid, so X and Y axis are equal, so rotation around Z yields east axis. + std::array east_xyz = { { + -y, + x, + 0. + } }; + normalize(east_xyz); + + std::array north; + cross(dxyz, east_xyz, north); + + std::array matrix = { + east_xyz[0], east_xyz[1], east_xyz[2], 0, + north[0], north[1], north[2], 0., + dxyz[0], dxyz[1], dxyz[2], 0, + 0,0,0,1 + }; + + ecef_transform_ = json::object({ + {"matrix", matrix } + }); + + json_["extensions"]["CESIUM_RTC"]["center"] = std::array{ {x, y, z} }; + json_["extensionsUsed"].push_back("CESIUM_RTC"); + + // Clean up + proj_destroy(ellipsoid_crs); + proj_destroy(transform); + proj_context_destroy(C); + } + + if (crs_x_axis) { + normalize(*crs_x_axis); + + auto phi = std::atan2((*crs_x_axis)[1], (*crs_x_axis)[0]); + + north_rotation_ = json::object({ + {"matrix", std::array{ + +std::cos(-phi), -std::sin(-phi), 0., 0., + +std::sin(-phi), +std::cos(-phi), 0., 0., + 0., 0., 1., 0., + 0., 0., 0., 1. + }} + }); + } +#endif +} + + #endif diff --git a/src/serializers/GltfSerializer.h b/src/serializers/GltfSerializer.h index 7450fa2afb..5f7265730f 100644 --- a/src/serializers/GltfSerializer.h +++ b/src/serializers/GltfSerializer.h @@ -36,9 +36,9 @@ private: std::ofstream fstream_, tmp_fstream1_, tmp_fstream2_; std::map materials_, meshes_; json json_, node_array_; + boost::optional ecef_transform_, north_rotation_; int bufferViewId; - int writeMaterial(const IfcGeom::Material& style); public: GltfSerializer(const std::string& filename, const SerializerSettings& settings); @@ -50,7 +50,7 @@ public: void finalize(); bool isTesselated() const { return true; } void setUnitNameAndMagnitude(const std::string& /*name*/, float /*magnitude*/) {} - void setFile(IfcParse::IfcFile*) {} + void setFile(IfcParse::IfcFile*); }; #endif diff --git a/win/build-deps.cmd b/win/build-deps.cmd index 4c7d1aa591..238d3df0d1 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -193,6 +193,41 @@ IF "%IFCOS_INSTALL_PYTHON%"=="TRUE" ( echo PYTHONHOME=%PYTHONHOME%>>"%~dp0\%BUILD_DEPS_CACHE_PATH%" ) + +:proj + +set DEPENDENCY_NAME=sqlite3 +md %INSTALL_DIR%\sqlite3\lib %INSTALL_DIR%\sqlite3\bin %INSTALL_DIR%\sqlite3\include +call :DownloadFile https://www.sqlite.org/2023/sqlite-amalgamation-3430100.zip "%DEPS_DIR%" sqlite-amalgamation-3430100.zip +IF NOT %ERRORLEVEL%==0 GOTO :Error +call :ExtractArchive sqlite-amalgamation-3430100.zip "%DEPS_DIR%" "%DEPS_DIR%\sqlite-amalgamation-3430100" +IF NOT %ERRORLEVEL%==0 GOTO :Error +pushd "%DEPS_DIR%\sqlite-amalgamation-3430100" +cl /c sqlite3.c +lib /OUT:%INSTALL_DIR%\sqlite3\lib\sqlite3.lib sqlite3.obj +cl sqlite3.c shell.c /link /out:%INSTALL_DIR%\sqlite3\bin\sqlite3.exe +copy sqlite3.h %INSTALL_DIR%\sqlite3\include +popd + +set DEPENDENCY_NAME=proj +set DEPENDENCY_DIR=%DEPS_DIR%\proj-9.2.1 +call :DownloadFile https://download.osgeo.org/proj/proj-9.2.1.zip "%DEPS_DIR%" proj-9.2.1.zip +IF NOT %ERRORLEVEL%==0 GOTO :Error +call :ExtractArchive proj-9.2.1.zip "%DEPS_DIR%" "%DEPS_DIR%\proj-9.2.1" +IF NOT %ERRORLEVEL%==0 GOTO :Error +cd "%DEPENDENCY_DIR%" +call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\proj-9.2.1" ^ + -DSQLITE3_INCLUDE_DIR=%INSTALL_DIR%\sqlite3\include -DSQLITE3_LIBRARY=%INSTALL_DIR%\sqlite3\lib\sqlite3.lib ^ + -DENABLE_TIFF=Off -DENABLE_CURL=Off -DBUILD_PROJSYNC=Off ^ + -DBUILD_SHARED_LIBS=Off +IF NOT %ERRORLEVEL%==0 GOTO :Error +call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\PROJ.sln" %BUILD_CFG% +IF NOT %ERRORLEVEL%==0 GOTO :Error +call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG% +IF NOT %ERRORLEVEL%==0 GOTO :Error + +goto :Successful + :mpir set DEPENDENCY_NAME=mpir set DEPENDENCY_DIR=%DEPS_DIR%\mpir From 4fe459dab6993d04f38c2e75f5bebe98e59701eb Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 3 Oct 2023 10:59:09 +0500 Subject: [PATCH 012/220] Fixed typo --- src/blenderbim/blenderbim/bim/module/model/sverchok_modifier.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/sverchok_modifier.py b/src/blenderbim/blenderbim/bim/module/model/sverchok_modifier.py index 7c6428a4eb..ab54ef8d24 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) From 0d7967ff622eb88cdcb19b7b4288b9523f4ab057 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 4 Oct 2023 15:13:57 +0500 Subject: [PATCH 013/220] .reg file for #3778 Forgot to commit the .reg file... --- src/blenderbim/blenderbim/bim/operator.py | 2 +- .../blenderbim/libs/desktop/windows_bbim_association.reg | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 src/blenderbim/blenderbim/libs/desktop/windows_bbim_association.reg diff --git a/src/blenderbim/blenderbim/bim/operator.py b/src/blenderbim/blenderbim/bim/operator.py index 7b491e58be..e65ad34b49 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 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 From dff70f2608fd7af03280a2fa504d0c5df70dd192 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 4 Oct 2023 18:14:43 +0500 Subject: [PATCH 014/220] bim.flip_object #3803 Added new operator bim.flip_object that flips the object by flipping two of its axes and keeps the original placement. Currently it can be found either from F3 search or from Shift-F hotkey for IfcBeam and IfcColumn in BIM tools. --- .../bim/module/geometry/__init__.py | 1 + .../bim/module/geometry/operator.py | 16 +++++++++++++ .../blenderbim/bim/module/model/opening.py | 13 +--------- .../blenderbim/bim/module/model/workspace.py | 3 +++ src/blenderbim/blenderbim/tool/blender.py | 2 ++ src/blenderbim/blenderbim/tool/geometry.py | 24 ++++++++++++++++++- 6 files changed, 46 insertions(+), 13 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/geometry/__init__.py b/src/blenderbim/blenderbim/bim/module/geometry/__init__.py index 29503856bc..1b64ef180e 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/__init__.py @@ -23,6 +23,7 @@ classes = ( operator.AddRepresentation, operator.CopyRepresentation, operator.EditObjectPlacement, + operator.FlipObject, operator.GetRepresentationIfcParameters, operator.OverrideDelete, operator.OverrideDuplicateMove, diff --git a/src/blenderbim/blenderbim/bim/module/geometry/operator.py b/src/blenderbim/blenderbim/bim/module/geometry/operator.py index 157366aeb7..ef8c3e865c 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/operator.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/operator.py @@ -1723,3 +1723,19 @@ 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"} diff --git a/src/blenderbim/blenderbim/bim/module/model/opening.py b/src/blenderbim/blenderbim/bim/module/model/opening.py index 9b841cfe2b..32f42340e9 100644 --- a/src/blenderbim/blenderbim/bim/module/model/opening.py +++ b/src/blenderbim/blenderbim/bim/module/model/opening.py @@ -393,18 +393,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"} diff --git a/src/blenderbim/blenderbim/bim/module/model/workspace.py b/src/blenderbim/blenderbim/bim/module/model/workspace.py index 6af2600dee..0f8d59b683 100644 --- a/src/blenderbim/blenderbim/bim/module/model/workspace.py +++ b/src/blenderbim/blenderbim/bim/module/model/workspace.py @@ -358,6 +358,7 @@ class BimToolUI: 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__) @@ -668,6 +669,8 @@ 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() diff --git a/src/blenderbim/blenderbim/tool/blender.py b/src/blenderbim/blenderbim/tool/blender.py index d544a67787..73e245bdc9 100644 --- a/src/blenderbim/blenderbim/tool/blender.py +++ b/src/blenderbim/blenderbim/tool/blender.py @@ -343,6 +343,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 diff --git a/src/blenderbim/blenderbim/tool/geometry.py b/src/blenderbim/blenderbim/tool/geometry.py index 8e624d61f0..ce33fbcd7d 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 @@ -641,3 +641,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() From ef8f4df4ab67482027d4182cad55bd760dc42785 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 5 Oct 2023 09:56:51 +1100 Subject: [PATCH 015/220] Fix #3841. Bump IOS. --- src/blenderbim/Makefile | 2 +- src/ifcopenshell-python/Makefile | 2 +- .../docs/ifcconvert/installation.rst | 10 ++-- .../docs/ifcopenshell-python/installation.rst | 56 +++++++++---------- 4 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/blenderbim/Makefile b/src/blenderbim/Makefile index 08f291afa1..f8ea60a639 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-f0e03c7-$(PLATFORM)64.zip cd dist/working && unzip ifcopenshell-python* cp -r dist/working/ifcopenshell dist/blenderbim/libs/site/packages/ diff --git a/src/ifcopenshell-python/Makefile b/src/ifcopenshell-python/Makefile index 05442dacbb..105f0faf28 100644 --- a/src/ifcopenshell-python/Makefile +++ b/src/ifcopenshell-python/Makefile @@ -103,7 +103,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-f0e03c7-$(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..3ff4cc9f0f 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-f0e03c7-linux64.zip +.. _build-win32: https://s3.amazonaws.com/ifcopenshell-builds/IfcConvert-v0.7.0-f0e03c7-win32.zip +.. _build-win64: https://s3.amazonaws.com/ifcopenshell-builds/IfcConvert-v0.7.0-f0e03c7-win64.zip +.. _build-macos64: https://s3.amazonaws.com/ifcopenshell-builds/IfcConvert-v0.7.0-f0e03c7-macos64.zip +.. _build-macosm164: https://s3.amazonaws.com/ifcopenshell-builds/IfcConvert-v0.7.0-f0e03c7-macosm164.zip 2. Unzip the downloaded file and run IfcConvert using the command line. diff --git a/src/ifcopenshell-python/docs/ifcopenshell-python/installation.rst b/src/ifcopenshell-python/docs/ifcopenshell-python/installation.rst index 8dc7811f1d..f7ea78d3c6 100644 --- a/src/ifcopenshell-python/docs/ifcopenshell-python/installation.rst +++ b/src/ifcopenshell-python/docs/ifcopenshell-python/installation.rst @@ -41,34 +41,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-f0e03c7-linux64.zip +.. _py37-linux64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-37-v0.7.0-f0e03c7-linux64.zip +.. _py38-linux64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-38-v0.7.0-f0e03c7-linux64.zip +.. _py39-linux64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-39-v0.7.0-f0e03c7-linux64.zip +.. _py310-linux64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-310-v0.7.0-f0e03c7-linux64.zip +.. _py311-linux64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-311-v0.7.0-f0e03c7-linux64.zip +.. _py36-win32: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-36-v0.7.0-f0e03c7-win32.zip +.. _py37-win32: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-37-v0.7.0-f0e03c7-win32.zip +.. _py38-win32: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-38-v0.7.0-f0e03c7-win32.zip +.. _py39-win32: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-39-v0.7.0-f0e03c7-win32.zip +.. _py310-win32: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-310-v0.7.0-f0e03c7-win32.zip +.. _py311-win32: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-311-v0.7.0-f0e03c7-win32.zip +.. _py36-win64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-36-v0.7.0-f0e03c7-win64.zip +.. _py37-win64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-37-v0.7.0-f0e03c7-win64.zip +.. _py38-win64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-38-v0.7.0-f0e03c7-win64.zip +.. _py39-win64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-39-v0.7.0-f0e03c7-win64.zip +.. _py310-win64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-310-v0.7.0-f0e03c7-win64.zip +.. _py311-win64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-311-v0.7.0-f0e03c7-win64.zip +.. _py36-macos64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-36-v0.7.0-f0e03c7-macos64.zip +.. _py37-macos64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-37-v0.7.0-f0e03c7-macos64.zip +.. _py38-macos64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-38-v0.7.0-f0e03c7-macos64.zip +.. _py39-macos64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-39-v0.7.0-f0e03c7-macos64.zip +.. _py310-macos64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-310-v0.7.0-f0e03c7-macos64.zip +.. _py37-macosm164: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-37-v0.7.0-f0e03c7-macosm164.zip +.. _py38-macosm164: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-38-v0.7.0-f0e03c7-macosm164.zip +.. _py39-macosm164: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-39-v0.7.0-f0e03c7-macosm164.zip +.. _py310-macosm164: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-310-v0.7.0-f0e03c7-macosm164.zip +.. _py311-macosm164: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-311-v0.7.0-f0e03c7-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 From 6660bf7618476d0366e7b461927329f51bf755a2 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 5 Oct 2023 15:50:49 +1100 Subject: [PATCH 016/220] Document geolocation util and add support for ePSet IFC2X3 fallbacks. --- .../ifcopenshell/util/geolocation.py | 427 ++++++++++++++++-- 1 file changed, 399 insertions(+), 28 deletions(-) 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) From 3c02da416ea386a7c1ee4f24a7c93ec3d046625f Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 5 Oct 2023 16:15:16 +1100 Subject: [PATCH 017/220] Georeference module now supports IFC2X3 georeferencing / conversion utilities. --- .../bim/module/georeference/data.py | 18 ++++-- .../blenderbim/bim/module/georeference/ui.py | 13 ++-- .../blenderbim/core/georeference.py | 6 +- src/blenderbim/blenderbim/core/spatial.py | 19 ++++-- src/blenderbim/blenderbim/core/tool.py | 5 +- .../blenderbim/tool/georeference.py | 59 ++----------------- src/blenderbim/test/core/test_georeference.py | 6 +- src/blenderbim/test/tool/test_georeference.py | 38 ++++++------ 8 files changed, 68 insertions(+), 96 deletions(-) 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..f401376bbe 100644 --- a/src/blenderbim/blenderbim/bim/module/georeference/ui.py +++ b/src/blenderbim/blenderbim/bim/module/georeference/ui.py @@ -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/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/spatial.py b/src/blenderbim/blenderbim/core/spatial.py index 109168847b..0e75438933 100644 --- a/src/blenderbim/blenderbim/core/spatial.py +++ b/src/blenderbim/blenderbim/core/spatial.py @@ -17,7 +17,6 @@ # along with BlenderBIM Add-on. If not, see . import blenderbim.core -import bpy def reference_structure(ifc, spatial, structure=None, element=None): @@ -98,33 +97,43 @@ 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 + +# HERE STARTS SPATIAL TOOL + def generate_spaces_from_walls(ifc, spatial, collector): + import bpy + active_obj = bpy.context.active_object element = ifc.get_entity(active_obj) container = spatial.get_container(element) @@ -172,9 +181,8 @@ def generate_spaces_from_walls(ifc, spatial, collector): 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 - ) + 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 +190,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/tool.py b/src/blenderbim/blenderbim/core/tool.py index de5d5f31cb..afa3a6810c 100644 --- a/src/blenderbim/blenderbim/core/tool.py +++ b/src/blenderbim/blenderbim/core/tool.py @@ -384,12 +384,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 +401,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 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/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/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): From ef56c6ce7e6e0ceb28a67d4d004f2f9b2073294b Mon Sep 17 00:00:00 2001 From: taylor Date: Thu, 5 Oct 2023 20:12:06 +1300 Subject: [PATCH 018/220] Fixed model reference --- .../ifcopenshell/api/sequence/assign_product.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 = { From ec4f0e5ad6fbbf5c40258c08e38b7ba6bf3ade1c Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 5 Oct 2023 15:32:45 +0500 Subject: [PATCH 019/220] Fixed issue applying array with Sync Children #3822 --- src/blenderbim/blenderbim/bim/module/model/array.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/array.py b/src/blenderbim/blenderbim/bim/module/model/array.py index 087bf1e436..f8a40c2713 100644 --- a/src/blenderbim/blenderbim/bim/module/model/array.py +++ b/src/blenderbim/blenderbim/bim/module/model/array.py @@ -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"]) From 948993e06692784d1db61261ebf024b4409f1af7 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 5 Oct 2023 22:47:05 +1100 Subject: [PATCH 020/220] Fix #3845. Select similar for predefined type now takes into account inheritance. --- src/blenderbim/blenderbim/bim/module/search/operator.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/search/operator.py b/src/blenderbim/blenderbim/bim/module/search/operator.py index ee018ccef8..78b5887751 100644 --- a/src/blenderbim/blenderbim/bim/module/search/operator.py +++ b/src/blenderbim/blenderbim/bim/module/search/operator.py @@ -822,10 +822,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) From 371daa6c808141679f415b1b785b2402b4aabe1f Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 5 Oct 2023 22:49:52 +1100 Subject: [PATCH 021/220] Revise COBie 2.4 mappings for facility, floor, and some of space worksheet in collaboration with Emma Hooper --- src/ifcfm/ifcfm/cobie24.py | 73 +++++++++----------------------- src/ifcfm/ifcfm/cobie24legacy.py | 1 + 2 files changed, 21 insertions(+), 53 deletions(-) diff --git a/src/ifcfm/ifcfm/cobie24.py b/src/ifcfm/ifcfm/cobie24.py index 29d13cc3c2..7134d8b72e 100644 --- a/src/ifcfm/ifcfm/cobie24.py +++ b/src/ifcfm/ifcfm/cobie24.py @@ -320,27 +320,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 +347,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 +360,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 +390,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,7 +429,7 @@ 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, @@ -976,6 +966,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 +1000,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 +1022,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..83c9f85d9c 100644 --- a/src/ifcfm/ifcfm/cobie24legacy.py +++ b/src/ifcfm/ifcfm/cobie24legacy.py @@ -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): From ceae7d4fdb7f33ac90ef16ca0283617e9cda16be Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 5 Oct 2023 17:31:12 +0500 Subject: [PATCH 022/220] DumbWallJoiner to work with IfcBooleanResult correctly #3831 It wasn't detecting extrusion as part of IfcBooleanResult and was using default wall data as fallback. Occured after 0044ef5 Solves #3831 Related to #3709 --- src/blenderbim/blenderbim/bim/module/model/wall.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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 From 68a1da91900a07d7b597f9bd4dfd0898d6bdeff8 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 5 Oct 2023 18:38:15 +0500 Subject: [PATCH 023/220] test for model.get_manual_booleans() #3709 added test that model.get_manual_booleans will ignore IfcBooleanClippings until we find some other solution to distinguish automatic and manual clippings. And some refactor along the way. --- src/blenderbim/test/tool/test_model.py | 46 +++++++++++++++---- .../ifcopenshell/api/geometry/add_boolean.py | 26 ++++------- .../test/api/geometry/test_add_boolean.py | 46 +++++++++++++++++++ 3 files changed, 91 insertions(+), 27 deletions(-) create mode 100644 src/ifcopenshell-python/test/api/geometry/test_add_boolean.py diff --git a/src/blenderbim/test/tool/test_model.py b/src/blenderbim/test/tool/test_model.py index 90546c0a16..20329a3cad 100644 --- a/src/blenderbim/test/tool/test_model.py +++ b/src/blenderbim/test/tool/test_model.py @@ -52,12 +52,14 @@ 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): + def setup_profile_represntation(self, clippings=[]): 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 +67,43 @@ 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) + return element, representation + + def test_manual_booleans(self): + element, representation = self.setup_profile_represntation() 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) + ifcopenshell.api.run( + "geometry.add_boolean", self.ifc, representation=representation, type="IfcHalfSpaceSolid", matrix=matrix + ) assert len(subject.get_manual_booleans(element)) == 1 + def test_automatic_booleans_ignored(self): + clipping = { + "type": "IfcBooleanClippingResult", + "operand_type": "IfcHalfSpaceSolid", + "matrix": np.eye(4).tolist(), + } + element, representation = self.setup_profile_represntation(clippings=[clipping]) + assert len(subject.get_manual_booleans(element)) == 0 diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_boolean.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_boolean.py index 7569f58bbc..c477d0cfe6 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,7 +45,6 @@ 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. @@ -56,23 +56,13 @@ class Usecase: self.settings["representation"].Items = 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/test/api/geometry/test_add_boolean.py b/src/ifcopenshell-python/test/api/geometry/test_add_boolean.py new file mode 100644 index 0000000000..041e6c1980 --- /dev/null +++ b/src/ifcopenshell-python/test/api/geometry/test_add_boolean.py @@ -0,0 +1,46 @@ +# 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 +from ifcopenshell.util.shape_builder import ShapeBuilder + + +class TestAddBoolean(test.bootstrap.IFC4): + def test_returning_ifc_boolean_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") + + builder = ShapeBuilder(self.file) + extrusion = builder.extrude(builder.rectangle()) + rep = builder.get_representation(body, extrusion) + 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() == "IfcBooleanResult" + assert rep.RepresentationType == "CSG" From 285fc2269ebdd83a8ab5f16095512495feef3fb2 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Thu, 5 Oct 2023 15:52:59 +0200 Subject: [PATCH 024/220] #3852 Update pyproject.toml --- src/ifctester/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ifctester/pyproject.toml b/src/ifctester/pyproject.toml index be2f338522..1936495312 100644 --- a/src/ifctester/pyproject.toml +++ b/src/ifctester/pyproject.toml @@ -24,4 +24,4 @@ dependencies = [ include = ["ifctester"] exclude = ["test*"] [tool.setuptools.package-data] -ifctester = ["*.xsd"] +ifctester = ["*.xsd", "templates/*.html"] From 6343f77c0ddef5a83ae06a36a9b1c8376b0e8f6e Mon Sep 17 00:00:00 2001 From: Massimo Fabbro Date: Thu, 5 Oct 2023 21:17:25 +0200 Subject: [PATCH 025/220] Minor spatial refactor --- src/blenderbim/blenderbim/bim/module/model/space.py | 2 +- src/blenderbim/blenderbim/core/spatial.py | 6 ++---- src/blenderbim/blenderbim/core/tool.py | 1 + src/blenderbim/blenderbim/tool/spatial.py | 5 +++++ 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/space.py b/src/blenderbim/blenderbim/bim/module/model/space.py index 7a63a31604..4dc348be99 100644 --- a/src/blenderbim/blenderbim/bim/module/model/space.py +++ b/src/blenderbim/blenderbim/bim/module/model/space.py @@ -62,7 +62,7 @@ class GenerateSpace(bpy.types.Operator, tool.Ifc.Operator): bpy.context.window_manager.popup_menu(msg, title="Error", icon="ERROR") return - core.generate_space(tool.Ifc, tool.Spatial, tool.Model) + core.generate_space(tool.Ifc, tool.Spatial, tool.Model, tool.Type) class GenerateSpacesFromWalls(bpy.types.Operator, tool.Ifc.Operator): diff --git a/src/blenderbim/blenderbim/core/spatial.py b/src/blenderbim/blenderbim/core/spatial.py index 85a09cc7b4..14478ea651 100644 --- a/src/blenderbim/blenderbim/core/spatial.py +++ b/src/blenderbim/blenderbim/core/spatial.py @@ -16,7 +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.type def reference_structure(ifc, spatial, structure=None, element=None): if spatial.can_reference(structure, element): @@ -121,7 +120,7 @@ def select_decomposed_elements(spatial): spatial.select_products(spatial.get_decomposed_elements(container)) #HERE STARTS SPATIAL TOOL -def generate_space(ifc, spatial, model): +def generate_space(ifc, spatial, model, Type): active_obj = spatial.get_active_obj() selected_objects = spatial.get_selected_objects() element = None @@ -165,8 +164,7 @@ def generate_space(ifc, spatial, model): element = ifc.get_entity(obj) if relating_type: - blenderbim.core.type.assign_type(tool.Ifc, tool.Type, element=element, type=relating_type) - + spatial.assign_relating_type_to_element(ifc, Type, element, relating_type) def generate_spaces_from_walls(ifc, spatial, collector): z = spatial.get_active_obj_z() diff --git a/src/blenderbim/blenderbim/core/tool.py b/src/blenderbim/blenderbim/core/tool.py index fc2964d3bc..5bd6c431cd 100644 --- a/src/blenderbim/blenderbim/core/tool.py +++ b/src/blenderbim/blenderbim/core/tool.py @@ -844,6 +844,7 @@ class Spatial: 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 diff --git a/src/blenderbim/blenderbim/tool/spatial.py b/src/blenderbim/blenderbim/tool/spatial.py index e8b9664e4e..d52d772f0f 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 @@ -661,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 From 69e447be1c3cecab8defda21ba359883a8cfc9ac Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 6 Oct 2023 08:16:56 +1100 Subject: [PATCH 026/220] Active drawing panel moved from camera properties to drawing tab. --- src/blenderbim/blenderbim/bim/__init__.py | 4 ++ .../blenderbim/bim/module/drawing/__init__.py | 4 +- .../blenderbim/bim/module/drawing/ui.py | 41 ++++++------- src/blenderbim/blenderbim/bim/ui.py | 60 +++++++++++++++++++ 4 files changed, 83 insertions(+), 26 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/__init__.py b/src/blenderbim/blenderbim/bim/__init__.py index ccafb12784..8e90e72cc1 100644 --- a/src/blenderbim/blenderbim/bim/__init__.py +++ b/src/blenderbim/blenderbim/bim/__init__.py @@ -142,6 +142,10 @@ classes = [ 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, 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/ui.py b/src/blenderbim/blenderbim/bim/module/drawing/ui.py index e96eb9defe..4784b48354 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/ui.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/ui.py @@ -31,17 +31,18 @@ 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): + if not (context.scene.camera and hasattr(context.active_object.data, "BIMCameraProperties")): + row = self.layout.row() + row.label(text="No Active Drawing", icon="ERROR") + layout = self.layout if "/" not in context.active_object.name: @@ -97,12 +98,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 +165,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 +244,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 +294,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 +336,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/ui.py b/src/blenderbim/blenderbim/bim/ui.py index 33112cbb8f..8a5a324fff 100644 --- a/src/blenderbim/blenderbim/bim/ui.py +++ b/src/blenderbim/blenderbim/bim/ui.py @@ -629,6 +629,66 @@ class BIM_PT_tab_styles(Panel): 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 + + class BIM_PT_tab_services_object(Panel): bl_label = "Services" bl_space_type = "PROPERTIES" From 88d96f7d5759fe5a83663e7a54092f5efbf8f775 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 6 Oct 2023 10:43:47 +1100 Subject: [PATCH 027/220] You can now easily create orthographic and perspective model drawings from a preset --- src/blenderbim/blenderbim/bim/module/drawing/data.py | 2 ++ src/blenderbim/blenderbim/core/drawing.py | 2 +- src/blenderbim/blenderbim/core/tool.py | 2 +- src/blenderbim/blenderbim/tool/drawing.py | 11 +++++++++-- src/blenderbim/test/core/test_drawing.py | 2 +- 5 files changed, 14 insertions(+), 5 deletions(-) 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/core/drawing.py b/src/blenderbim/blenderbim/core/drawing.py index 683f7350d0..3febd51e20 100644 --- a/src/blenderbim/blenderbim/core/drawing.py +++ b/src/blenderbim/blenderbim/core/drawing.py @@ -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/tool.py b/src/blenderbim/blenderbim/core/tool.py index afa3a6810c..756f2a4192 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 diff --git a/src/blenderbim/blenderbim/tool/drawing.py b/src/blenderbim/blenderbim/tool/drawing.py index ae75535699..7a88fe2c86 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 @@ -954,6 +959,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 diff --git a/src/blenderbim/test/core/test_drawing.py b/src/blenderbim/test/core/test_drawing.py index cb5e76f248..f2759fc3d2 100644 --- a/src/blenderbim/test/core/test_drawing.py +++ b/src/blenderbim/test/core/test_drawing.py @@ -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", From c34a9c52d086c7c4b6b3536194c1b4b49bc62266 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 6 Oct 2023 10:45:54 +1100 Subject: [PATCH 028/220] New drawing width / height / depth / raster DPI controls --- .../blenderbim/bim/module/drawing/handler.py | 27 ++++++++-- .../blenderbim/bim/module/drawing/prop.py | 4 +- .../blenderbim/bim/module/drawing/ui.py | 49 ++++++++++--------- src/blenderbim/blenderbim/tool/drawing.py | 16 ++---- 4 files changed, 57 insertions(+), 39 deletions(-) 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/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/ui.py b/src/blenderbim/blenderbim/bim/module/drawing/ui.py index 4784b48354..e051207dbc 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/ui.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/ui.py @@ -39,21 +39,20 @@ class BIM_PT_camera(Panel): bl_parent_id = "BIM_PT_tab_drawings" def draw(self, context): - if not (context.scene.camera and hasattr(context.active_object.data, "BIMCameraProperties")): + if not (context.scene.camera and hasattr(context.scene.camera.data, "BIMCameraProperties")): row = self.layout.row() row.label(text="No Active Drawing", icon="ERROR") - - layout = self.layout - - if "/" not in context.active_object.name: - layout.label(text="This is not a BIM camera.") 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") @@ -64,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): diff --git a/src/blenderbim/blenderbim/tool/drawing.py b/src/blenderbim/blenderbim/tool/drawing.py index 7a88fe2c86..7083cbf131 100644 --- a/src/blenderbim/blenderbim/tool/drawing.py +++ b/src/blenderbim/blenderbim/tool/drawing.py @@ -633,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)) @@ -650,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 From eb836436b96a4f8c27a8108729f225bebc764b5e Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 6 Oct 2023 13:04:34 +1100 Subject: [PATCH 029/220] Implement projected surface area calculation function in util.shape --- .../ifcopenshell/util/shape.py | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/src/ifcopenshell-python/ifcopenshell/util/shape.py b/src/ifcopenshell-python/ifcopenshell/util/shape.py index 9053838679..d4da57390c 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/shape.py +++ b/src/ifcopenshell-python/ifcopenshell/util/shape.py @@ -188,7 +188,10 @@ 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): + 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 +204,21 @@ 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): + 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,10 +231,19 @@ 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] + + # Flatten vertices along the direction + for idx in range(len(vertices)): + vertices[idx] = vertices[idx] - np.dot(vertices[idx], direction) * direction + return get_area_vf(vertices, filtered_faces) From ed3e9f33478bfefeab95763c3d248a1015c64ad1 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 6 Oct 2023 13:04:54 +1100 Subject: [PATCH 030/220] New documentation for shape utility --- .../ifcopenshell/util/shape.py | 314 ++++++++++++++++++ 1 file changed, 314 insertions(+) diff --git a/src/ifcopenshell-python/ifcopenshell/util/shape.py b/src/ifcopenshell-python/ifcopenshell/util/shape.py index d4da57390c..cc9e9dbce5 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/shape.py +++ b/src/ifcopenshell-python/ifcopenshell/util/shape.py @@ -25,12 +25,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 +73,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 +143,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 +163,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 +272,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 +383,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 +407,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)]) @@ -189,6 +422,27 @@ def get_area(geometry): 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] @@ -216,6 +470,29 @@ def get_side_area(geometry, axis="Y", direction=None): 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] @@ -248,6 +525,16 @@ def get_footprint_area(geometry, axis="Z", direction=None): 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)]) @@ -268,6 +555,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)]) @@ -307,6 +604,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] @@ -314,6 +621,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 From 3d76de30417c4890f00b97928e9783c508106fd7 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 6 Oct 2023 13:05:38 +1100 Subject: [PATCH 031/220] New geometry tree documentation picture and minor documentation improvements including mention of COBie 2.4 legacy mode in IfcFM. --- src/ifcopenshell-python/docs/ifcfm.rst | 5 +++++ .../geometry_processing.rst | 3 +++ .../docs/ifcopenshell-python/geometry_tree.rst | 2 ++ .../images/geometry-tree.png | Bin 0 -> 247767 bytes .../docs/ifcopenshell-python/installation.rst | 9 ++++++--- 5 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 src/ifcopenshell-python/docs/ifcopenshell-python/images/geometry-tree.png 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..75c89cfcc3 100644 --- a/src/ifcopenshell-python/docs/ifcopenshell-python/geometry_processing.rst +++ b/src/ifcopenshell-python/docs/ifcopenshell-python/geometry_processing.rst @@ -66,9 +66,12 @@ related information in ``shape.geometry``: 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 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 0000000000000000000000000000000000000000..a61c3c171f5e8888a7234ff233d8301c050ef81b GIT binary patch literal 247767 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%0Ad}!AZ zNx94?^#;I=n+lI_dU{5R6PJ5{nLtVvE6DzPVgs2Fn`U2spDa7q8m8$q{NAZs@jKgJ zz`wqG96z{d;D1~hX-mWV7pMDi+e`wV-F6Cly8G~Fr-#fmg-4p08zwh9vJbmby^$d>5A{iE|RB5y4ocq3F^^Xcz z>A$jEw`$lc+W#B;wWewgke7*(vB@{LpJG_|p+1#YDgE5{y% z#RUAk)*Hn_?ze&{XO*%7&i$6_^ML~ghZn5?luDP!sJ53^2qKP7SCJRlEv47Zj z30`G6uL*$kYgz?=v3?T2al9KJ95nFR^)VcnFXG$dWejK~tD}G^Yk07$fVf`9zD{w@ zwW{PI#2G-*;Kr9ne@I-D@*;YS3Jw^f2$q5(sPy4{A&j8_{lIFPnYGkJDdS8f9(M=m zjqWQlSTNbAeYe~q^>8Y1Ww6F`$oG}HHP<>zTZ|t*_nb7`P;Pm7V34}gBWxuQ9I{G zT`M-{uxg=+G60+PQ_KvVNe{i1YNGa3 zeb}jo5ixX(3*hu-HIG>xRtue#t#1m)I5psYMUC>JXB39+#t@<6U zwNI4Y09I?wKzUW~@ir3g!&owf_iY|W`BVk36n8-j$8A8Vy0tIUxs*bfSscb~v01#Y zXBy94_G3C#Y*RdL0zTE)mn|$jeV;t;8M&vdzISHHtX{7-vIbk#ni$uGl`>onds~1t z9&4WfdyKA`vLjG(ryVs*AEQ~-e%ui0k3#BPMvYC*<>AFm7z$3}j-g5H?8)H2p4^Np z1%H!cH>c!l3lSXIzZbu{;}ZVhmLvG<6I-M`g0u9Q=9w?O^rCDax_R>!&y)?Rd5WG( zCGp%BUzDfgzWeTNkY4n1Ms?h)K*FO6OLwI*ii&-@245)x7+HZL-cPq2>D8jq?grP6 zPn0PhH+{uq-#ZntH#jcNy(uw2u3nvxm3IofxFbfj);I$<1!h;%Ie{rU&dFoPj!Cvr zdEV4jJzARypLgSpH%c~v!4N?#(p4Su77?IyInTUI?Pjv+{ z#V-8*$qIgbTL?>q3VO9EJTkiIDrYf2l_r{I1+b1Ixqg!Y5)u4{koo*=u{0(MQG~IC zJ^ED)&}YbqVzv@Ow|HK~s5bP8YPagnd9U^;l_60ezitokxUX8{nm~wcTiEw57LC~# zg72rA&@$j9J7n54m~)W^muF6&!Mh)RSb_w%c%0{-fRW6WWT!l?b3OZ{`rb{N=CQif z_s(UUX|E0q#N%AoOIA8hrsJ(DvVx@xGc7xUHbd(!bWp8_jJn~axmF=_O%FMI=12|@ zIH@C2ZBw|1F_>XbRkG2ofE3qwS|Ma)amcJGI+ydWz3M!tPgJA%+$FB%%|-~Lnph{r z)~#PqgHu@-G;$tq^tjo*(krOS6{$ON%k+NCZ*GP!YE@}@3w65OEQY^a;j$0>7`;+ zn$6wSEzos7hs#-CYw>u=?0eVM-6gd{XrX;l_pSM57SqJ*Olq7xpMvg2yh?P=$`GGl3M>~F7o^t;tM?jxhok9)Sm?u8ADKlw zl*L2CS5Yk|WILEfpj(OCscU<2x&uKYjL&X6hNK?C;f1L5u_Coh52u^=?Gqd1#-^JU ztGB-Wt#3+Jg3+bk!2Y6fI4vEAAYbvbQl?gHZJ z^_^i=GMnp|E&)zfYNtYWnp>R@9xs7j*lHD17ne(0hDEc$#QMD|nBW+beL1BiieVKq zIbUx`4KJ??=L&ncNt8?e6)zO%LD>v6inB z<9h~WydeP8(P~M~g?4aDJARj{h{4Z;;mKvh?^K;PW0+RsM9u|KMR7`;^-?2dyChf6jGAO{;a5vHo_sn;T>YywD=!loX>*CO&XC!uCj=!)gKmh)veB4N!5 z)KFY!InHw)+S7!&lbaF(d{hZZzUgzPvSCe>i?q>Ybw$u2dTQ1@kzcw#`+Xm?a z!xH00mKNLy-+28s8Ie8kzyp?7QLTEiRSSeVgzCW{IomAJB$f-BtpiyDUn!@(fl8Gq z{Yk6&>g5yV6*NdK8iR(;*5dJng+&SG82vNKSFdl!iC8h|PVJ0p`LR-88ClJ;l1-VFieG6_fZJR)=vtC3uqk6`S}( zvF2rNb`Hs&9{kDZB3_@#B3-Cpsv5^aC4iim6G^><$zlLM(R)q=6ErieVnb-gUVwgk zFl~LbhBG-{yCSX>;^+@#5f{ffQ|!P)o%6_41Nhq1AU-#cg&yceM60EcR^t<;bb6}q zowF%>D+Y_t^5shs{1VV97JkLf<8Izsd>DZp88N05ySsaA zp}iL{h1dHT^{FzBtAOQPUd$JyX|wZ)+>Dh<`SDt@IelkWr#wG;BP8g!u{}~xcek8l ztdMObI(Pa+x#wSy;&Bm3Z#GPjb=)Z6Exm~Bwfa^zcr1%qR5xRV^4z(`R*%~~AXS2@ z^a`raoY(udrHL|(H3d-NNK{7890*^(G>ErS8!=nz$Bym^yeE7Z>#I}N@%rQj#vD42 zQ+k2q3$~-{V%dl9PW6jutP7vrp2O~Bd6{^8VsgSXfK%f5rcSWtJ%x>PQj{8&ReLP~ z)Us+IN5x{*Sd~YI4L}S>@3?C?{i@Q5z?Cfqa@IIpmfrK3#&F!s8A;8GMU3L^MqlBN z&fbV@DT&YRoxv|ZJB(u0hcE6sjN3Z0wRRj$#?9%uJbvNHBwoK5!qOFft(}E2S3-g)Ng^ zLvAu;1;|>}0Vp?P&+jRYjqE}Xk43y!hjA6Jrovbs7Jx?_Qiq7n_eK}6A)LhrdamG5 zdI-ldJvdF_H+1XACw~0$he6Hy2xSUEe08A%L9sbKBcA_yt`9#-ufs$sj`t-q=oOz6 zEM@IfkKJC&rHN|9KuH~sm6qkEOu*;{P>o(M3y;Kg9~ak%_*T(P!FIC$2wW9ni?#X;bHrrr=EO5o% z23-J3S+cg{Jnnof&1OYlO#yky(qlTuZGBHiqkgq9T%vV{w1)t`Y^4VYpcLa&uPpI+ zYKE^PM&)-0vD?H@q}ad^}?4c#jst4lRVNR>f;Z1}}>- znpp*|Sqb3ss|am12yLZ|mC8RW?SfMItA)B9O_Tyyn!Yv$l0j+75L%|qd128^CBC&Z zf` zSUU#F4Wt~M3epYT`qW-0rIgKq5QvajP zr<;=z6dN!%F|}bZh*%QALrnIn3^ryU#Ve)?VN5J6q2!OEyQ>>{0lZ4qxcLto$8kQ_ zgI|;p9C2 z_4pY6c=#$KX5{_8I*po!a!XB=a(w5$z_F*w%UfxmWaDgVo5Vd+cDLVt2Zo1-&5S`C z&g0Z4J@fR_xci=aWObck0r7k;D+`2J0Kvd97LQ5sxZa?Gm%ypkW~gde7o3-tCR`&z zR@wNDLvKI_EeH0ummg%yUC26yhSO1sxo69v-;$~2IM3F1p-*XrcWK-Foe9GM2P zSeGw3`tND2fE1)oQUd3EPU;J3dE(w)-I^%&WxdG=V7ned$k1@nDB(@yv7oQMh1E*% zjc>z-4PWrm2CS7Ps*!d=MT@FAs><0m(nQrZen^MtR%V;+=%J)xnDzO~M9|{*my1#P z(?C~5~`^JE~M$TB9;<|$j%E`q{=>=%tWy@RduJzYAM3z zx$d*7fUf!GNWm%psfHW7y*}5zqjsGt{dnD}cOp038qm)jqhj*i)7U2dzcVOB3ZR_D~ue z=LWr243t}wBsU{!A}MrrbV;|ZM;ui;PEC+o6Ge)isak4xn5yM_(=W{nK=GPSOitm_ z<#E$8!eSuSLc5>>H^b47Pc4@2bZ_sQg-{w z=r*$W?qWa|R8Yt0rHNu!f?BUOOAz<>nrof_z;qrr#p47nEHoe+Lt6ss=>ir&xfTGW0EEmSi8aV?wH~umgO0K7 zp07MdNiR*574XR5s9cic$f=F;(m;7XuD@sYgKHeqbj;YO)VgzjbFP1?0Dz!-a%xKU z6Q%tLTZAcnqgxZzE7qC25W+U`!%=%gE8rDF0C-*VoZr{u-oF+M(`pc&nqW%h?)3er zW1<}GOzh8Ho63B7(ZZJ7ZL{0Arblp3GKvF>BY0@t0R*Z`m@g&pOmP&N=B&J^7oBrb zQ84%SS1Y)0V-G&Qdl7F>=JEV=s3lj+zDpD#a?-YQj4K0DsHLXl`K>OuLU4=6-wDqt z&D4;-un&q8y)mA6|I@=1xk+J8#b_)>0*neT`SE~JDR9Q^H&+~szqBdvh^AwtCfa` zBH73_9*es|XorZM;^=fnjPtbALET{W2)mYESdAV#88rn`RfKLk4?D#43OqG>KfVY1 z?-3Mn;b+ObD!s?DHbFYB`g;(Gh9%3&xs4VnJ>?S>kpRt1&v1jIwT<7cAClzQ)@wfn96pvrMaz$2ZMl4?@FF>Setu;^1#|1eqOEPsw>jHQ6oxAgg zvx>~zJGEu0N1MsBfUA>(XqSO%cF*(2>qI{+*?*4??neD?%yod*oohaY>{75T?%4{A zsX>{ZbT(fW2f0fNV7C!QLd>s8lyOjir_0sKny(+N@J!3zd8_e>YWK01(>WtFNj*9? zcy|iPSff2#rfRQ5R$1HHXi078Z=y+%%f9nF08Q~(q z#g!a7ZF>jKMt z`yK8a6SVs8k&#m1$nU{Qal!V-ivl_x)2i@}IWhONSCT zonE~-pTHsH*t89cW9Rqh9FW!pj*Zpr8`a83YBl#>%{|@ol`NbBQc85L*lGIS^ohT3 z?(^oiGDsHqt7)QiTi07Vu9{C&yN}^usGN@j7TBZHc`lcf z!Gs*sWwZMOtDjk=uE7bIO|xrNRKzrThuEw6*ZcJdHo`0}Ix4`^Tbh{1#@enI?c$lH zz4Na3V<#o+v{sOw6yiXohm5|wzgRoH^H#ENn9vMk5jm<+8ub^m_lOI!i|s{8qXtLvsLNv z%L@azyK@E)Z&<`PPsQYfy)c)>KOFUAM`s1U@sQY*x^95jei{NOGGmWE`W-}ihVatd z0D6Ny{QRCX@K+-^vJhJF_oG%qMePKFED2`OLMD@z07aJ18b;HqF0J)RZ0U5Zc{pDy z*Z)Qlu9~lEF;S7`(W6IYBq{YQm9lAH5j0y&lnSO}Ip-%g&p81i$kLi+=i$0k@%6q} zo4V4RskEDFg`;$5&ECg(K9o5u1@PP%s?VM;@OExE51sOifQ?{n(hi7N3k>kfxX~EOlU}T$4elbl#s` z8NkQ-CvYs&jT@q~=ntgDd;4%G(}BrS4AbQRzAu1LuXwLiHH^)XMcf>pL`MMlh0~q* z?%s>y{c|Xaxf0Z?$Qd!5E5>kAtZS)~=|DXY^2wB)Q`F3xbSw`q;ydY1oApyhrplkN zowZxp+)zAD5W92NZghxs*4D{3(3YAEe*v$)`l_sOz3;yJr5=;NmwhnBn51hrSw3D{ zv+rHpo;tPl*nBerC@BVK-#Y=ijvqUYH(q~Tre)b$LF z+$+CBGW{~8jasFo>d?@tciy!=R((QUnzdS@~SMDT@Q89X6TD0A?qr z5J~6o?sz{^0=VyI-#e6LyQ*fL30Bg(ccpm7?_`)%G`Si^X|3+|MhB@sl_(F^j*xyhUydJY;1g>2>@E zQZZb~hj91MEJhPKJUJf0LMA7f3E7A3$I$oAj3``2pFbu5<-D;mF-7NG;BuDe+zBqt zF>9FZdBm9H-zfy0u*^Ko1%pEKQS6AH$A7u)0{-XcdU5jPN$lCX2Y`ZUK-%pOgnJ^|zf8fmna#G)V%Pn@Z)32RL;=uHF{L8(Uv8y+Q|L4#;%oSID!Wg|u zpBLNL$aD~227KPBdux;OdHAom?@gZ^zXYyyT~DZ<5Ee-i}M2fEX)JZxU^kRn`GU%@mMK8GmsMF zG>Hvi0cgc@P75%#JvNI?;ha7H-<7zkif~Qgc{wQnLkZvCa|M@komd|!3XnE{E?)^d zqKnuO%OF*b<5OqW;UBl0!yiv>_1?g&>P_VvsH*l9JJ?PUfef}~b$1N!de{B6zISaP zl1UK=J^j>^c=yBaku1Lo8l`oC2x{hMXQjr7Kx1HVz;o@^w3=m%Ok>gxB)x>QXU}13 zass<|?XuULYt=rv#p4VrP3x59sm*roodiQ|t*`Geuv!L6?H}#j^V&0&Iy-Gv5*B48 zYJK&kVQDCBz#@X_og%J0m(AjaUz#M4jM8cmo~p{=VkC7@ zx^C-Dt|t>!zoAtnWv-}YSz0T88uev*VPG6UaH)e_hjeP18#*=W#o|=bT|brW?lxQ$y5}(B2?yRh^hs zOlFFP(G(denH~@uSU~)r^e-naQy&zX8`U`ae3$V5y_S^>2+NeYSxuHgcy)0-Zts}D zdwNe}Jl88dbjS!i@%UqMT<+MuZCL@rbis!wE_LC??gBoy;}TMN5tXOg1HfFg1G2xQ zRf$B0ZE0VSlLZxqCF)(KVQQ0MYWK0`dR#SX)kUg!#A`mQHc@Pi!ru`SbW}PCQorL#p?lGH-N>&R4s>ajcMqV1*~w4+6+tB3f2V)V$R@ zkLQZ)DO(^diLvn3TW`r!G<&DXai%nA;yup9*5PC+C_t1S!Lk5WnG~KoGmh8pnZqZ0 z^4P7FG0J{?;(Xs6Ov48Oa#Ed`Db*}CcwNav9axN_Gf=`avmN-OiC*k4Br)U7Q!iaUKr?2m)XFcKKHz9!HbM73=$& z&f@`lZ*0bhHhZkvX>s2qXjhguHen(DpIThBn5fkO7-|8iam!}&cw3=cO`5C#i z6q@$qr=`e9alvI34v$&(Pjk4)vszELoO@X+%W6MWbw_WPgA;jl3ZVOocLs1O-2-1N zX)^_7L&N@5A9N#vPY%BfU&)W(`|IyZ@i5aY%{)t9nTldD8^>pNUc@FbEMK3Fwq#2Q zq8LrX+DyoFnj3maE-pc<6xs=-42NcIHIKcj^xS{9tMe?Dz_S{~DnH-9f4^i~7`dxW z(dTg7Rtycz9#5V;B|#%?0TlbQmg`QtkClL#_ez7Kqy$Qjrve$b2DIIKSxsxD_p;d> z?uwQW7N2K>s9?>poY$M<^URqu;x)adMou^9;d}jQaqecJcl9AB;<(HC5?-BJ!f63i zXaVs=YEZUv35rX%K~Lk}@CCA0Xg%YFD4gY(!O z&*07&bw5=cN&E2VQV55NQ30wFcq-kCqq#2J7oS1gSHSx_moQQ3z~}p>F&xf{&&wj> zBYWmUZzzv-!K?sVKD=Jq$u%0=q2T<5aDc|%CY-ryp>pYN&DKk@vlDl)}zx}C>4 z4~`x=id%2J4VyM^HXX#*`|#N$3wJWlY$6gDe)DLpZT@nx6R$VvsGWi65Yn7SuvYa{MM4)OSEdk#AHSJgn+ ztyz<4|U4Z+^n`UL8Hg*;+Y?-CQ4Pg5M?XZbi0a13`jCj?us{FmrVBhfhZ>{ z)ehjILv^|ukj8AC0Uf(~(ztDC3YAm|=d)30{(v39sH!+lTIwMPvWA9+krJ=JkWXNH zM;SLHQkcy8#iFUNLIkrq_Q`HPqSfnZ6o9pz&R1EX*Bz)zw{W$fn1F3{Uq>wn%&XIX zh=7CONm1;z&EF?Kj8PXg4qQx0`=`2g<9+>?aR1;WzH_$2Hepn^Qz<{b{rosSaYGiL zzpGO`?)7w?ci+xu{P^MJ9y~a*h>vfY!G(pmWU4$QXqLsnk}PJB4%O944Zs)8mMgqA zoCAJq(i$FBsVjYat(qt$0;YJJn}`(7TFjH0*UC;nXQxr5fSv+Zt2rL72?PtbmkwfcNW)9P5iHCv$YUUY<{04lp+<_DyWydA zW-A{yI2B|1&R`nfpU5F1{!TD9H#aZSP<&r0h!5Ut|=u6f)Q%VMi9k4KWTxF@oN z4|ZHa#Snm4FX6@X7{0#PfpGz_Ud;63?$|7T>&hNHCcxH_Y&VYNy0I^o!X|;{y8Jn@ z4i@l@RBxSa1lRac@%KIc8GLIovCR8PnM67PIDgOc!Rp(do?hH>#~m0N8L1VSH1*dr z+r7NG{|(%K{{yn}R#o3IeaH4YQgAIkhkr8-Ikn~W0CwNIs?3h?|4a)qy-yne8DLrL zS;+Dnl&M)(eQGsTL_4Xws?9zXBwTS;!LC*VsP z5xE6$c)A0RY@R@@ltx^j<}2l7jgl6d~_NZ%?uB(a84LhgZF8cYz=p24=$4R_r_$t0PK2!r@HRs6{X9^YgGX={! zrUi&44e!(ns1jtdOzeF}$6a10Qpp5gqlp;$LMhzRF^eBfb<6Z0kBe0`?0Xj(*oYs^ z3}9=bf}g$Nf{31CIJwk1O-JvrA6!WwuKT6vJmCxB;9R)wT&h9|f;zZ>y7Gxq4Q@G> zIX_IGVp9B#dg`@x-^eG*@z~2JO3hc(T=cNqIJoIF^JU^3CcDD#!PKcLv3@6fTio}` z!P#t?Q<0meQ~TuZ^{ITJ6g$#x??A76e(yVDA@u5t_{zDGWTFUy=-y7oN%|5Iyq`LS z{=Qzj@$K-Ss1yBj{T_~Jia7?7L9r= z9ps!INnFL_=^?RZ8Mq@_z=Mf7nFc(W4P#q$QM`8*-^ldWF&{j>fl>xHhL)tT+-t*k z0&vslm3;`$$li3+eaQyoZs&22dtTocUwA>j&)s+5WA@8)h{u`2lYQI7-_101v_T;4 zv@Y<;wd2T^qE&$vH`5pBGW-%QKx0@w&E5)Tph%HC?4fSxw259h(zVJ3v1c z1FAE7MYazh*rHh9XR)4Kq+YsQgcj(>j*fZUn!Jh^X9w`+oBMJ4)M?zZ?-s-paZB?S z!Q@gBpV)pGH*}Tp##CHfi`M6h)p~~nIQ#IXX*@WT!r_?&vQ@p#K7u+J4PFh13okN;jx*DZ74`!AVGmi<(jTplE0)|3!*b|?@-i}4g6~Z`{jpD)XN!$}(#Mj2T4pn8l;tzFB;jyK4 zvH;_3DS-c}^D+)*dr_!Vk@S@i4^;8(Y`?vUtBTA~tt2&3-(_1FmsCJKR&0zcZx`o+ z#UC3tZ8pXCO4`vR7e;TU#~*tPcinZDc-YyBo1 z2vjiZ(^}#WRV}Q}yT1<6%y!+>S8c0AyW|OyyUwkO_Wo7x2o1HPQy*3aeD8)11bFcj<-eB z;6q5S;Ctt{;IGdQx_m>7m6co8fj=G2Tp)p9L>dv6WonhB408jclQsS0=oiJ5t^!fLJ>Bv=B}+Nn5=`T71&G?U_eS$tyF}NGHiD1E zXJx4Jf&l-M*`nDPR$PZcql98$0E=Q%?GKj4`qGI50_YsgbYXjR5syxd;jMHpGR27a z91SHsA%dX-f|`N2KaEfJE#O@O*uA%77Exao-=FS6R=oNDJ$f4ADHsvQI~+`*V)*ed z=Xct`RWTsa;y^D85S3oWL^-R+_}nW3=upG7VdF;0!r4I|w1!j;uhm;`y(zN;4?p~{ z1W9ULQR4BuY==Va(|WNkba>$ibFFcR$64rc{_HvY;0MnMklQN*XK63sJ`Amv|0`Op zg#yw|JZz1n(z0zrvZAtmSYB$p)EsH2O3~|H^{rDrbBb|Q#S>f`S=3RrDhuHvrpeM# zvsAJ6ZIw!_8CRXaNu$ZBRyYmxXf&?m6RuAG5y&5h&J$sv?GVmK(qOJxN( zgx^yI8P0Z0YpsEDzs|S&?!hl42C|5BS5PhnP)uppMFYhP!il9^m{rd{FND{KiBgL^ zL6mAt>P|ad4-my6KtnJNM0T5I&bDe@FvBwV@=AW6TnZwet>6z|kKu>dT)Dl2(lj}o$5$;9*J_KI;UPLFfcntb zS@GDwTrPsQrn=D;F5%6EM1vTt_Rwer{-A{K-p`XR-{MDk?9g~H;&OUd=5$;f`L}}? z=MgHT@!4AfxR{Eg67=qUNA~H3Ndej`5&Z0)a~KTzBumu}@P2bHiiuPbKfV2;0Bkij zt1*Zw*ewk-mqw3cPP2TOY&zTBRCFa8DfjOz28K*;nkn;GTvjy=4GqaOK(hs$^O@;8 z21z3$BXyCqm*&N(U07=dO1YA&U`?5UuIBxe?n1RLQF z9m>s~O|+FC8hxVJy`Ig@AI22{zID9axy>{{TtPYe$Ko>^`U2uuLp}ImwZ~?k$_~2@Rh{=}X1U9M$?6kG z;K9l}rr9I_@#$uzs!U~@`pvp}e3==T!(-q7o_yVI%k|zCk6#(b)Wn1Y29Zcq0H_hq zHeZtCcBJpPW)cXTIdfJTb8gwR$!&I`$vwjYBzdcCi`2gW zxIjn0MWV}`$5(o<7+0s~mSUf{)(x&3!iEhSCAj40vE>R`GG}KHMI ztJ*RKkK%E@HfgmzYFT+Les&Zz42gYm|J)=V?jOP7kbz5DwP|4D);u{MtKes)4ESpB zjSSFxqFcYfLW@LS9#5)Q=2B{1OE0>7771Rlwzfh_C`-Q^+e9 zWLUz+`tO^n_(jy1#HM%!H+3#yI_pQK(w+&YYJAHDL062IwkD`@ndtmMu`qvP+bO(q zA&!`cbTy-lU;0iJzjE6mPFxL$1>JAD!fVX{l(jTjEQ{*;Zl@lb96J{UrkuDz_4f72 z=EOmdzKCi9koM;SeMK9_6K6F1_FY%;#JO109(dG6y>_Js?;D%N2gVj~axQ^|lI{tf zoC4}g86Td$++D|J9iPfHWTJvr6lIIOQSbb$G)hWJk+&>JEKduSNseF^8yUb;lo`5*i}05`GND8FDGSX-p#QE+@G96P`u9@ z=@@<>0MLDjS-hPa!BDV(gPAyH@)aa}Ros}&Ac-lw%fE!ZS^?{|3WAysixmOR#rmU| zDAha9na<)EV%mM%w(U~xpgRDC@=ueSzJqn)8hrA^ahy1I91p$w-O_i=={!#HIJHVe zah=u)5W(ul_WIrxabE0Xa$>F#U=h%` zTOF)Wh4efq|s#{pYo$x(67l?!6_bB=-4YFbick86Xo`aaz?!F z==_?*<6-IrhGUY~g9Dmoazm%W9B}^>&@Qb(Ro#YJeLSknk9Ro3wIcn1c< z8h-wUvtp%*;@D!aUO(n)nyoApoNU&p_~;id2byZ48Zk(!fj2iA<*Z+IIt{Nv6GiHu z?^hAO=Z3Rm=T7;)>xPEp4{bl_ePmWc2JGWtr5@)iOYRjgY8LS+%3TRTor~VJFi_lx zB39#KRq4B04O64X&8oklO9vshgJ0W#wTqA6T2&;1*mnpJJ zS?&`w^VEHQ`Ms5|-AWiI=lF4p$N8hu@C0Waon110*CRn-xOU{0ag`)E#Oo<)mpV-k zpD4N35PUf1t4epO=jC&G*``Q|$J@DWC>q$5t>F6?PvNJAH)AH^$0@yPYg(H*kGK0+ zF`OzL&*OIjsnu$t+`!fLi7GAxkrta=FeWBOe-5#JF~G&bUt9>RSQDkh<7!b=y?d0? zc`M(jcA2PU;%7@=wHD?7j0~mWr=_Wp0zs?%(~EU52^1b%R<^tt=>Pwjdk-i{&g(q% ztIoNnC-2N`&b!zMU>8{AL_nk{(xga&k|G z``z#M>14>-YcHj}xSaK2jn9eo(JXH7A457(#kh$6oCNoZ!6_F*Bl@!NY|3to6~ovQ z%VVoQgR!hzwvw@WA!eiAE_wWV9I3^G7V*748Ng%befa)KFMf7c9v_T5&=DXW5)krM z@xb~x_Jk9{aCd5sr-dVB^zbvH&E^F5Qn4hf@5mvdg3szY$rKBi>V|PRWWfmM&<=uvt43m{Vjc)n(#fjg6+! z#C#PZPP^~JDJpJxV@A~MUaxVYREb1c|4z@E$oGWe(Y^ka&=k((JMdoFzoLc1K%y*8 z)W6>_g+I8q7I%lMI24%04=25dmmJs>c42QgjSCqkdR%!tCxSgi=MSDJ2zyob;)?iL z<8%v$sv8%CL$xz7j#uLYxFEjIhK?YPC0+R6$sm51a3L$~(Qw&;<0T)S&j#^h;e_4r~J{QmsLU9jCzit2i1M>T~QXc1kaAb5;R^J^ud{_!^a!|(PadJo{ z^+JqGLSXD{X&rgoq1pFY;dl*Sy(+~Z*NJg$@M>TqoVm=_EwpAO5{uHVkh4#yV_k=i zWjM-K#FgeRO9RoKnzmC4o}?S--!8tdHlCmqGL}K6A{@_IBN#Jtpt$vnByPKFye-+8 zK-?=r^sVIaMhKKw-0yuw2cDmwfLokz-{3kNca@QFC^t+ej`hemE5?D(N;px>voxy; z)agW3^G>8D+@vOkKxYw=H3hgsL^^k)QfzM`%ZH*zge9XZw7M(=s~t{MLx}^{ele#m zRzM!7v_wEB#*(LA6V0?w-H_u%lY}a}x~xjNmXV~PQf{1?@4zGLN8rw9p;Q$loe`ZR zsWpPM_6?LM7m?2MA#`|MIMSU!p(qA_(P=@SU`trP5gSE*B+p;aJH``VOce(A^E-05 zG%F^TPsO7@3}agd@ah#0Ze5$j!N>w$nv5CT1$ICgEU8c3*~=;RrVl|-rPFc#)U8}&VW)=(@TLn0T#wT!D} zI+@U{KYb&QjS&UEek2L6>caao&ZeBGMw})swX73C&5*m=`u*IijG|&fO}A{>Dgu`d z8MTtycuIFZB`KexFLD0YUw=)eO37H8``)c26~R$6r^uG8%f$La9APq5V7Z*9mF#&@ zF_X@%SmELPR)L!vCb^ITOAKGBuJM8SjI!3D&` zJ@W@5k}i<<_F|p4fPV3Fdmw?4q=K2MTb8>UK|{eO94Ze+ghTaHktu|Ho%oybTC8^~ zxY@gahkV0$D-}grSz2^a5?3@)ap0FartpJA56-5G7#$sxW3m=*|>am&0GkLuMCOHBs>_N6y+=gr^84FRP^>J* zOBoU6W&G$TDTK%(?&=>wu$ae%La&U-suhj+XDEqV7x0pZB+DV((v?P^r-+d>rD9-G z9>+(r(Iln@&4jwpV$85_P&kQOdQ=S0JMikLf}^8u=_qXLP%s$Db`ab2UI@(_G}R8d=OvRHH`Is1@FuTTHZGzmcK0mmaDTqeC0qIcdjkt%@H>i zbB#GsjgBj((swe{gsgFMV>>QXMQ^lA%I`Ffh&Q1TdA;&Gu|vj46n+2Gr%&POpZr8t zrV^)vl-wIBnlBgWF{jAd)n(#{kcqS$ZGM#cQ=C@i2$h?{S~;IqPLw&&q}P%`rq_Nc zn2{B|-%p2EOm-zC>P)s1o4h5wm9ABC-W4feK>Y4|6JfZN2yO|@;zBxrHJ&^Il{E5> z5QcMJZ1JaYU*{YSdNO!?UaSEmI%c#$9tn@(Vrd;d9bUv}s)Ehl8F-W;J{6tA z4^sWM4#1t>GH&tB#$??7Wrri?7G}1pUJQ6~Qo_PFm?BBm%rv0dj)}d<~EzHkJ zCyJE5$#EDQ8kAMI_UKc+qni?A`SPX9Qu=@z-Udw7WQ{JTZaOu29h1k4vL|cMAdk~n z(;!-w%Ara}`Dx9gsf*Z+-^CN8>Ol8B8 zPeb{Bmqs2ZcsK0xU@%;T&sD*T*J=jskcskIrh?gfK5+bhk7ql2j`z({eIjbTa`}o(`LU)L8CV)0#EasRV#U1Yk5=Gzp=u0n2)$uiwoa&ba z6GZ-9&8j*Meps5oTqI(rGiRj=+=wc_c8|?1C#-^hR!$WCovTL83n9JkTOE^lHrMrJvmVad?oycjWgIDOvC4>;(tx}vB#UmzUU(U>)Zwr>^P*T z@8&=WiK-9h%UyUk9mCC`1sn=w@xw{Ysg@#)!~^qt@rZ92iAoH?Y7!ww8KYUZaL_Wi zTIj>`x$u(SceMRNU=n|DItO)N3$_X;sH?ME+KDBG(xUrBS`4Y zm7?_C*@Z6LzjhqHQVRVpG0Cf)5>?=8zcV5QAxyxJD`gP`Iu&g6P&*nOW1LeneVzY>03{J%> z1^2&mtpi{0pMcky$NxFAO)8sPsTpLW{^b1;^z6S~79bdNu0<}4(sM7q@Vs;o_8&MP z9eetHQUp?yljD+$Nku%gh-;{{yGD36X%m^r<4&hW9v>dQD)rB(;j<)wG39A6p(G!{6$$2}c+E;HYc=A^keOEzv6_K4^VR7Fc`5C`|I1W7ZQ zG~!|oPftxsr$_}_B2YOI+|y@Miqx$)S*DbptSqNO9&b%{g()Rl3RSGnR&aD`6rWzR z0cS)&J?z3q+AFisaVrGetTV@sD?46GbfVhnomX6RAv^DZ+pi$llSQbvj4D;cxW!^f zjZO4c3RdOul~(m#7bmKT#DR73qcT`p^raJ|G!}BJn4Ku9Vi1#?1{EP3gj{JYG8}Co z21~o3ukdl-x%@<;Sd#tgCUh~nRE`lq*QAu;L@vv7DeNN=#iUqFiVobfE{;3< z7I0!ViUM3qJWLu>biawC)+-inJB4BMwOkX%F|DVe7>zMIw%j$I{+`qO@A0+K-|0Qq zGGbD}ha+pIaG*Pjx8nV>YLbc#xXObG@OC5ZR9sUm|Lo>z+|{4K$+?hN*p!A&6mK8S z08f5c!oS!fBKJLcT%B`cGNUY82Z{wV>D00s$e}e%B|@&o6^Y379ak(VmXpyn9ed|( zDKNNg>sHy@&Cijt7KDl}I<@^RIVrr*wX+M=X*exOrFU zTvDaX@B3;fj=6FeFX#O${(K@5JQSM7w9qGmo=OXy_;3VdRE&1({ zPJFR9j*4)0ZVROGbX)`#VmzM}L9rMqs0ceV=%=Q|;u(nFT*(Iz4MwqDIC(Rv9Kw}6 zHu-1qOkxwhHyOkiBa7H8=J?;mci~vsw}f*?NbW7&5qx$3HdNPdleV&@;I-JUiXiA6 zF$V9x`ySaZkT==)PB>45fK&QTQ^oJCt8$ZkCp`;M)vNimMXw^8LX#W^jj>)ah8vN` z)pn35YZYF(B%8`ZFE}soG!`^8U#t4!an77S*4(O?MR3Dm=|B;AT+@egqIC*F zl@-fWxk%|dmKOkgIR^XHn$<5sFb+r9Iw$7;!iIho4gpQ2o*XpdIv7!3Bci6RSiYm9j9=O{f>J>^jwyFjCrT=Q zr%QPDS{Qu+1^?=fBw`{^d27P8JVc7gl;xW7r3Hslpqn>ukq)WT=~(LEE0EPT&p!LC z{2jF$p{g6nFVWA>P89JW%!X^V_t2{knRL$NaYlhZjvjpN?ybtn2VHr%)e>ILxEltV z-|oDIzg}E}8Mu}mc+xpJpjj^r;0IsUm#eVFZ7gQUaL(nBHI#2atCE`ydk?z~Gw zopljMO}b!Kj%%_t>o%;Hfvj1%!=MG|)pyz$bxJ4Y%$c(|{_b%x54sT0(Vcc3r)Ef$ zYB-Hr7RGG~w3g!tvqS--PfR-J;w(n2B9W*JhGLyvl9m7{Z8@e?TtoLTA?9zr+hmVG zky<;+7nsT8jZUxX&fVHf0Ylj`{^-=Z__g&rktFiCA_5DC(vtghqd8Hn<||VLSh|FP zp;nz)8gim+%aax1;3R}+EXJlotOu0d^NK~HN);XnWz~AotQsfEZgCR>sH*3{4OFAW z%%KQlettnNp7goQkKr^EiE%R7+3WGvFW_k1dC2;L%O+H6V@C#udMD6ZP2)tWQ%gwd z=@+S?WD^<8mObJpjQz0;)_U_&>AZ4-+6mI<6YoemP|}fd$h01fflC=bHifF#B#ijq zpQ-iHV#l2RO{u+~-cm*^D4d52Vr;p!2CM|R(*i_L{u13L6I3t7EJsJAaW!igDa}gS zD1R@xLvA_FB1D$Xq@|JK2C#JAqqE((vnPSWYl?X0nqMw7)MAE=h1B)&c$y+(v>luE zV?G_mmv)R|XS9NMW`mNy(M++N4A!wpCr(dz@uj^vJiNJt_eB7cEGcaxQql;Bu{kLW zCoMF@B_Sd&r}*qzUR*eL9&f$%rmRk))EyHrrDMxn0+SPUqd7+;=jUR`Rh&2wS;Taauqqck!gzPM=ka2E0Gk3u+!;*Z!%P?jMVn_Aif)X$ z!caW{Y;ga0Bwa8~eecBUG!$l_u6nRecTQy? zWQS3Ra`ECNNlxFmaf5-XwsMS?g+%FTX9}o2>~O3=dEAVsv3=nMJreDZs2p(^4e0_q z&XeWXOdhB6*p8 zauKB)eat#@2K~VV9@%v!u)e=3C(3-x%Ae$^0G#+ zE9OM;@oFPc939a@OABVusGw6!&2{Z(OiAy_Mya%*F00QvMpeD?#i>inQ~Lor8|ScX zIZ{f4V+$fBQK`6y02Gg`nA{$lg|Co9PB=(;GH@o+xt*LruIj**d>CuQb2;2Gk5s{h zc-gV)PL$RMup%8hGM@CkiC@6~R^UOvsp7W20-nE8F(71KoauY~!x=X|zq5n~*Dd0) zi(&a1G8WVZ!&bULe|BWBsVOMI^xX2GwF6ZfN3vO^&o3P*Dzhepicl#@qIGJ|*`vA; za+h(WCyt{NfjW|>BxLHwuGuz{bxFnYyVj)f#jVqrNQQ8sp<;Q_(21JJDEQ$yFAnxq z@Xf<%;jFrFdfwR_fzlT;8kc9zp2g76TFDn#v!-7gfh3DG4^o;V@7j1N8Z z35m3@@;KS-WO7lC0UEz+jlOqEL+Jv(KN@*_R5s2gULReL%Vd{Vx^J{x$W*SrATL*e zob3vY9h$#%FFB%X_Eo2v1|6vKEpYYvoyDu3MA9uZMWZvuaP ztZ4L2Gjm?(KCbf>@W(GsVk{fNmTg;g0k|gQabX-NedqDGjfJ&Q`p(|@)2@@@TXyWo zKut|+no=a6KxkU2;=`f7IdSjfcz-&CysCXaLU?G5P)fI%6auGOUzrNQUG?CrH#Ji% zFD}uEIy&M;JnhC;Z^;OUs)|>{aiwZMo(O%So@}K2OqF-kRGH_IL2!lECyX{qxjgmM zQ&PHsI3i&a@1dZlEzK<)ZZs!~?rT6-i8kxZnNwt~beTS`Juif;;lruNL*9a+6J;i` z(tEmvbM=+zdHg|qy_l!V|J>U>Su7U)=x~?tNAp{7cW@rFWuL6hdo1C_=ey#VD{5^x z{^NKD?hI?n*|X&Uy4`tnx(Xt=@?pSR#OYiIlD;q$N;ww9eHX#eSW!X0qk^0K3z$&4 zk*s(z;99_U#<$=H`A#G4O0pRwE=<}_B%Dc<2eOO%@^d)jjY-0}T`q_g_ov19Bjjn% z-n|BAD!G`DPJONKo!>xG?a(LHL>{N#FnOG+N@-lvT;+LH)kSGn>PR)>L`igAPsc3> zfwCiy%Z!Uyd&sU6m_YN5=7q+yY8?!l$>YTPY{jb7D*dw3?nNT)_r2SmS238Y;@JEo z9`0R>4?R_kilDimE7Eg7WGxc;xHwRDI&)@K0lsDq_L+iWt=?;!6Ga<6I6esrdzlfW zQp%0gjBp^N6oOc;`$|$6qLA?DZA?BMP86p!=A}lEPc9OT5GO`9U=Z7@a^R5@K-y2T z%>coh{2*BInT)&6ao`*{T{jW&$eE(=BFVeDlh%kM#m7o5fRNfq{5@s~Ue9~c?-gFJ zc;Q~7|DO0xZm+!0L;%zV)>025S#e=FAI6q&1^c2Y%w%22R#yp?QZ#W)MHdI6nK&nnF>;P*?92)$%BA|Tzh@Tr4#vgxbsA2$X8at|U@<4G*>*1J z!SSh1e0ldAKDoJwGa?X~FVriRd(324eSc}uiKi}j@zACce)(Vy(+M|*Qx4O6lR}n*=6#jayM=F+ou5&@6U^(HuD;1A$oJzumxbWA>7+h69w)nHisvayj)?iaW z!BbN?cqu5;gUl~R(zqvlNnBwT7t_Lq1S^PO9J_*Dcydvzk|c@*HT)*&g5I89qe!Et zQbcbhkF)Nm4T(s_#fukk`qU}hcmMs;&Ttn-y$$E0&6nzIAmHYdv5i>e^SBpWM_t0gCr6GWPH zBM>Vg+%G0#M0lejdM@Yik#nMCZl3zyiHJO=D=^ph4qKW-)&w0j4^(?!ObVFEiX>ss zr4!WviDG4OzAvo4Od^kj6iF0MSHNurjjGJq(fi(+7qAmL>HJK*3l9#B!dplQgI2~g zIt(JQ_I#FVV^K%;kzxQYrx$niCFw?CGQT>cbJnn`IZv91rBg?HuH^#Q7_4GT$0A-h zTR}$k7)VDvo{%Zlg9i^{Gv)jJc^v7S!P|>V+ci*Hb#!DzrrLa7Z&UJkqm9rddKPpJ zt!%y)m1sPzvN7pt?9*q`>&7Y(+}4>yOe{Ljo)?je(`Pus47ZaZBHoOskp@96ROlI(wr>xm;Yq=%zJN z{3!OcnFSNAJ^QSRHWWVVZT$KQ^P;4g&3^u?}8{7HNeQSmpw zqlzA>I-_|AZWYM^l^e52-MYCY<S&-wG`v3>gvY}?L#?`i|~reXp! zt^nqp^@5s25`Xp8R}c(_aQN_HgF{p!k86GJXbqt9{XihlK;KU_k;fe}@F7vybGmc^ zai1JId7Re<*}8(f6*3P1!0QyK)|19^8V3pd05MRaup2hbWnKnK+|mR!09Q zQ|(-M#8r<>9&hB2m|OFh8?e{OAy_$4T$;-STQ2cy#}mxVD#$MiV;E2oB2B3tVcg+D zKJNI)I8j>V-MlpX^nQm)k-Aw9S$5YZ*?aMwDe57DxS=J*P82IZn>bMweerU;-AnEV zeHTKssO^YbUnpSWU@b+YOpSLP^$rw!Senwg)_-q9G=u%Zc&>LQa5B>;odcsma+Cgh z6U8w0bz~)1Vm#|v+JA2)fRrg+#NXZNs5vSpQysXcXC6PjtBk*VM^o$_A0NlMb?b1` zo;}iGohf-lB<)0>S2$Y}QE5CFQKZxzp?f~R&mfdK6s1k{36g|KM%ig1DiblEoGEU7 zqRQ^!PHCigai@7e&yb?TcTz*Rw=a%|HZ071^Wu9HOwe#qwf3B4l#h`Iwa7-x=}Y^SiV7g}oWPb9w>^rBfD5kaPjf4Lcu> zz7s|MCr+M3S7%I0dob^TBXmRe$_9zL5u7Nd3Ya6pcFCaJ;)D5`Z0tTN4iw8Su+3u9 zu6^%3)b-AzadMMVz&(L!{Bdbh!!Gmf^vXM$jNqO~3a?~3Ws~2Sqky@B1Mj7rxFwjv zgZ(88r^>jHQc+U;*e2%vYlSX2h0`-Cjtf;M_Bv;TGoOS{IA0IN^7sVx;8UCkIP>EC zoACWq1Szo=Y^g5d&e#l2#{D?1#;|wqKCBaC&TUa1cZvV)Da_%0UzZHv`1jPm@}(DF z#BI0VE|F4MBtzu!`8mXe-6lB`sw5?Qp!LJF?|Y|77pR7G!JK&i)hkz|wiMYEi5%D{ zkE?p1#Q|%yv-aOPT$!nj}wiAWMlXP$X;=eOxdMCHU?It?UB+2 zA~+&)K8?fXx=)(kA!SVH`%?w3)50gU3-mq0M(!;tcwv4LZt?G12iM_!Zx!=UmvDxx z)%rYNIq0N0&wIA0NI$SWqeo-AKioYC_+gKTOITO2- zQIMMSNv||Sr1SnfTpo27qI6`BH;p~r z8N4zc#=(O(%l>N~quq!@@-U)~JoZK6IF;>^=+3p_Vfoc1{Ho|(@AR}(TMm?TXk0Z2 z+!O)v=n`AqLFrLCbl_} zcHp1R`Ed8TGQNImMmX}o<&>`_VmZE8#6O<*VWWQzzxhZ9LcV^){c9U?8M4_Nj=ubo z9Ba`?7#-0LO}tPa!{!Jbdc*A-$%*2KkP#d^ow;^(nb=6OapUKCqYx-_(_>aL=7rGi z^>)4UX#Xpr1x%L1c&i*TIF-vq)Tme9tLZ524lm-hTo<;w^U{fWc`An?VI#jhIEoLm z8}ONdaXc~Z!yCCMerAmm=hRN*9AZHh&v+_Zf=_i}gEuQ2sS-LpCH!RCk3+FIezLd? ze;fB=gK(bi@+a_f16MKlgDSE+k6`nbEeJ<6d!y?2ThZs_`brKSG1{(D^Hm+;KmP8! z(sti_-~C!=2;Ke?c|5h46l1F-Z7w-i(P*S$Ai#5zYz!eOSA_HQ>MO5`G1)EG3<_?V znSIv&<28?YnQEI{sg)v8+}XptzVcXQ2TD^OH<8Cxs|`@}K(N-!jxrwh=##w#A%Wyf zHY3)%K+FE1y!92U*q&4I*un(96dgb@;=?JIa4gzP)m!BRI7PR?tAxf2U75O{v2Cb{fiK5?; z6GYb>>xkB(mo{bu5pl_YbKg5d$H}1>Gmg%iqyAR9p=iX3YLw&UXjziZ%S<}=7;cj6 zJ)~=#7zKQ8BnyHBFf2yo%{i1|?##cy#ABC^s%rO29z(2c}4Nq*w_VNJ388%GM*(xKw$sHct-We~!N04m1p zf*4ByVFcfq@5Q2P2fna%9J?b0;ao?>`RcES7MT}C^iNfHJ>A`s^lMy?>AdFFCDIOv zdFIviu#{EgM42PPW(dx5l+M}tFjsvx6UbZXF$bDv@_4I2lQ~glB+4!J-;7sg-b|xT4n~9lyMRxUz62IZvAN z*hG2Uw0G!P4ocsVh9NnH-1eyv2a1q(N|_SUP815KDb?9%Pb8Eb1>mj3EDGX&-`_ig zlb$Lj99XgL6VF$>6xnKXqL?Z`Kdiacs#l&}&pp0IMhtnr%Il|e9+StVv!Ij5SHtj> zQsO~Riv`fCh_J%ZyjVUQ zJg&8(v9>ia%KVA=?$YH9OzOc^Q~MDsaz%oiR~E&~GfDJ{0O9pZ3d-)_5@(n02lwaW zA_H?}Q6t6jXGyVqFYxm>mnnC>kJK+<#AZ7HE-@frTl$y&g`K8NuP`yBUJB+&xF; zTmi>O)oPuejWHWiMl4(DIx!OUYTj?yl~4I{SSJFPzf8r9>tqczyWW9~I8o$88Aw#N z6E79K*yFAsQ!L|RvMiBiF%pp%cJZ;fE_h>|n9CIKsBqverGg@8@faiEW`7=AeN(ua z@4>GP&ZFNi9H62D8~rKV{#poId)LFU;{c8X6j( zH;>+ET(ywK8!QH*4pi?ht=6LFu&apdYdDW2Ry_erZx zo|3%-3B{AwPGeI?mDrgxpP;M@L(}*rsh(E-WNGUV(cO-01y3wY;ESPt_+nwa>#U&Q zP*z20oSi97$1`tjwE`crssN);E2-kMJ3r4?naxJ#rAg?a z$caw(#>ky2iR z&TSeplX}QlF@TEV$DKV%c-1n-n)Kh}mM1K>36nEJzvlbo&>cgXy!1?oJ3$0&x&{ZL z*x;X9;z*r8cNUNT(~t4%_w?Y;KbOPl=?*NEU3CLn(UGnt-hh5T4Dz_cX~WvDIe#n= zYCTaQpKDr1Ok?vxHiqwi=)k`_G>+%41?6Yj*(EwZp;AQpq*g(^2saYjoKBOlXBb04 z;M;ek5Ej??&ZJZJCsbtLJIHFKO|tJ@m+lxt_St(k9zn4b!WTE4L9Z}&zxzL5kUCi1 z;&pPIn;oboO6N4bD>_L!sykj)6QO%0oG9iJEC<0^$uVCe&nt%9mkZrn$*3&kYOYdl z_x&|aRIR1UH)FFnCdSaovbWCunGrR%jm;1>D<^6mPONoQa41qhB45D&cQu69=UsSV zHh?c|2;*m?bGR=!gU2WQc(^l#*K;vBZnY}BE8^cGFi5XQ5M^|^g(D=Kyx({yg&nsX zhPrj1Bx`ReF5IIpkVyq5m$6Tc_U7s)|HbzL@C*CCtri^=2UM5U68nl2oDS6$s-3*4OYxT@c` zoa|{^lt`V|B1YVZ1GTxRVtuB97siM2nf?v9Aa3zRXn;YZ^=&0pc1)MybUgRPydFQq zTI|7^TPxA6Z1y=u({$m*f0vAcxlH&*kTG)$4)H^zb0E~4L$Ievn56vuN;pwDvCvWO zn~c2M!~-dtb)qaYfEI#ODlPv`=#$4xhHSDYhlikNYYyE=BQ)Ve*;PG~!$;?#6eRu7 z#5F6Ox1%d%_kznN()qe*7Pt0|$(B45l}T2#-5PwXV4_UX5IIuQ!jYQ5t23Q=?X_2=Hq1t0Snk>2!oGnL zUJ(w(Y|&#NS{(J-MN&>ZqA|$hO5@a{qLa$GvasHXDwwJc8z}UO?-CZ@%U?+0g>y;C zFEA6$tOs{SCqX!3Gse zS2G^`-Se063kP!ewYwr1PX>{w`df0WmQ;!Aq*srgzM}L2p_&p=TqY-qd6q1I*b2e9 z-o07pg`?c%q{z&BdOwrz%~e#(IggbSH6(odFGVloKgZW0uc9HM#@Egi2Rr3*D<^7J z%-2W!Dcls8#@a|Xw)FO4Lzf5^gB`dxG=XOlz1ZYU<9A1*_~n5)-0Cagp>PVj{9`Cq z19&{K6;Ee_@RU_NIab9R{teiB^I`OgG3U}NjJK4Mxa5v#NR-7e(Y#WxoWWllKaE4T zACdE(=NO?+vU-ek`-%lQhR7MWn`f$y7FSJu@2IMjU(G1d}4jrS5)xK+$6}Y+byp1xTlH)mM2%Tk`_PXdR~(}d0NCAR#b(Zs3omi%1DUGOA$G>z^JR*Yq96*yo!k@W@ujM-e@yU zl$rQS514y^v3E?wK!zWkmef^SO6Qi1N#|$gI`Qy^5qNTGVZ;^09Z_w<=>yhI3ZbMr zFkA>BBCh3#?7ydAChycp_G%5qXa)y!=XPqPLVfS3%0w|zel=m!iIOlNN(7P02!8WV zk4oLAo~|z3Jy6BJyfuTjhCSHY1st0T8ay?2L>0EQX6XW_a|wC8KJ}>792ccloo96? zC|y9$M~f&OO)C;dDn0nWZkfhY$ETr+2tihLHn=rzz3P>CQl!n|P+;Rkl?;*AtMMZK z;fxo1dn))pJ`sk;w+;zUuZ%S9HbVS}`xGy^@clC$Y>s*HukT7DBEHA5DYq@hN@;>f zkpXh+&M-&l^lWElXAMqNtMY#i7??c1T2z5{jyY1~>O-@W(#}G_={vbViSb}|WR|l( zqJA;Bh*C9(C$qt(G7dZjtuhYg`)=h#&58MYmnV&wKZHNZY{6dPz*R~`6vadR z!?`|ODT!#m>cdz268PDZ5e#@e$f!ZA5!d)edH_F4`mrd2)W@#OAQc{3#cbsBcxk4 z5!UGe^!{__&f(axW0E{h+&-QI?4Vmy`A)rPg6#HkY@sJDgERQ~k^y$w#3QztOf zHSr?O!8ZMkQtFg~Clpyq@0cCYh8!pr)6-K}jMvEHjS#Vtj_}eC1+e6(I!y?4v;CSv z1>3T~V~Gho+A)As(1WusRqBwfg!{DI-gwMK<)RaFAwfGFC|+Ofr~=oc8`sLeSyu17 zRXG-uBR}UxK}5{%kcx0$20^h%RD=^%OgbAPQCvDMVOkRK(usLi7+4}vsOLmw#U#v$ zn@Wb?&srueCG+c%D6Y;^O*wSgY*&xan>`3FX{Ei{JLXgY8AyuGXc3eZ9DZM2ZC*>I z^JZKruM?Z2NgVDOL1!h4v-v)G%~jI^W9KN4+`vLPgafe*27P&4OS@#+Pif^q3FnC* zclz#BYOD!I!f>7x#Y}fp@%EK@OwX6_?;Z%?mu^<@H^+0B$hi@6xNzJ00=!NIFHXb^ z5l^F~f^p9^^0-!g=V+XIRP>&MrfX-Cvz-&gB5~HOzjeu z@~RZct0G5=%CR}(tvOK|`a=uH%p9S35xg@mJW20He16j6YV7+kR0^WH2 zb=eYw(gTE4y*=r|g=rri-J8Qh8%sDg=0>K}8p^loL@D~h!aTQ05eZWiZS7%aUf?+* zv^G&~)(h@N?9C}MbFV|Y6dzv?6GmxI*UqWOc66KUj;)-iZ+DL42gzPst2kS}pY?Q@ zbZ(B&?Kn~QcyqWprr@#p4qU3Z@iX2LT*w8m-J8VgS*?jTed>LYDa;ik_|>5iVI#z| z5jNmIO>`qcM1L`l_H5pSBWwGy)0snO`3hbMA26~_5{V)w%0zyqs^}m6=rR1tf$i8Y z-kWfHWss7HFCd*t$`l@rX+nrZ;BFfTumnLJc|4WIqDPbZ*CqlJ}MPemV+bCXdrTECR_jEL~vkd)I)o%g1#8#)v#W zIbjrFG^0$>HEJC?@)89kTSG-m6`kv8Ym>y^_7oMo8lREXns;{(-~&$;GY%|Upmrry zb=H(1qsBZ3TLnH`^+@x>T=lqGy?k5xH_h}NS{++2bUDXa5gCuZ5k&l21fF0SYxXUo zdv6v_uTtk}b4eymQmPapD3lgO5(p&2HY=jyvf03yxG_Y6r4|_U*<|!(Nq60dL+fKJ z#;gxiiHPZgnyN~;+}SRb!RY`>Lo&II9Yc0XD0-pEHhgVZ!q$>hYFX(T9h;TTtybx; zulC}dxdBY&I&q+P0uT8=L~mum;9*hoU_wRgaO9by15eC!qvG)6(TyodK5teHM+TqJ zr{2CkdB0_D8!(|yrZQV`A15>=nU12Wgz(xog~Obgmc6=&cW3v3 zh9g1FS8tEJU*^}AN@bM9vp;|FlH_~z_xFjYeI4Fe4B>Z996-Qb#P97piS2=c?&uWp z%F&}TQXiD$+%COfK|_?@o^s&P$0C?cJMowQB7x6sE!QDVuyCZTG9KnzRTK*Yr?Y~( zTD*CFvw<|HGRW|=^0?J7Ez3|{=P}JKt&K)aY|r|7MmE^_qt`QH+|KnkIlK;*=Uf)}}}3x77+i(fp~kDkSg*c|fUo144w-(yGdP4!j8DpPp2^E37H#pv9i z@rF*G_y8A$6aSS*AH^-50WqKbx^%&eM4%`*r1?4^oF@{2wKF1;JT9w=Ro(F};Of<@ zICuUWD#WK88Z;bwJM&Do!Q=HAT?iD#WUtY7v39*9RjKHR0LVZ$zeYg@%syRw+8Sre z6q-J!$mWrqr#=19`$-0ZoF_tsC>>AEWy?TbY}3<|k~>C)NYH5%^)IhKrZs6%1ZGst z91`nETI$Wi0D#7Y$$%&2&BZX90-_M*SH7q7d@NGVv7a&L9q?(5p| z6Qlzy?j!S?7%Z{AzR`TOJAW(AvfXhz{!ClF^KR5Jst%+@v|KK@;f;#PE=lJV#>;AcZwxtX05hshD4bcs8*fKUz+a5gZ&Hm>`fK?%?D1oc+j;GWN-KJsbory z8A>lxfdt(@>A23#$uu=NM4LBn5#zpw#!~;ix8`GTsa||#%SrgfQ2X7#dPcT1qV^Uc zlW3lGe7tncE#`w8U%NGh-QB>eBQ8|c=Htmuv7CNKoG5aVnIzBABS(Z*1m~YiZ#y%I zl~ZI^Juvz`%~w0*Y^8fMC+cgF1zasf@n+uJ^g6AGlxnRa)5qgy12cFfBgTj$f_);$ zIT)_sjoAu5%sSEItYUv4iMetBK}Q8Y9hsL3FJOncK*ubL;v_ zHi*~PX3FC?loMsASl%uts$JcvR>!1ho}Kr>>C;H(fvyr3hc(R)8W7}6vC&Xvg+fi@ zfLm@*l^z*BIwm-iCNrh)+zPSr#quROQR1O8SAx?3^gC`V-zRUhcm| z&LLNLD5l)GUDY01=t>z%=U%7mi?zRZ0>xBW63HE={(Fip{~#AdHyaIy?7w#{AI8>5 z88?Y&c3LdRxvKV^5{X4w>1an1<$I)!lZq_2Cu0-sh-%27nHZn-;Qd4xeI6%n8;Ik4 zybqoJB3_wZk8K@uD3)CqPX%#wqNWk%;Pjr658xI)Hj3|7C#nf2$}Dj}*WHRAMcaT+ zjJZGtk8CO8#AE4or}x*hI#DXMZV=}T27e-0B1Zj5A{4PVcS)|N7m%GG%_nLcOml-Y%~&ztYL<&7 z$^;aI?GI_egT;YTSX6SEoT$bEovKka=GJK(4!y}d1#|@+rIjd(cpdS1*9;8S$m6nK zUkmDpx|BTLD$XaHO~q2wh&`lNK3iW$*TkfA3d(ma=FyieR8t4OLh zmix4lUU@uU&1rV}H=|G7l5RD)Pb>9bK6*}61L(R^P>`OW+^rMAt}@0?s_593MQ3pqwabYGSyQ?>9!^8J!Zf+K%qa)HN22HSXeM&;xe-IB~Uo?x|-IKVm zIDo^w!+7%Q5O#OXU&4&Ya)-&mIC2wln(^GhSF0XS5-LeG{RjpcW6L%fpbemHOyJm6f^eKG! z;fLty>O{cQ-pOj7X^iFa1(Yh<=aBk27n_(bw|JdMlpSDHF|~wZIUaM7kk22GloPUv zb>wli6#}J7-j|s?-ik6M``!uLK~00bZS=h(FrX)qK{Qvw-(EU}Ul`hkM8J*nF0FEX zHJWx`FDI&*pf1l%bKg5gmRq%mT2&5|c-)TANO05y>Dk4$l-g)#B62^p(FLDgHi+e$D zLTgq|UP(@tIU165F1`~P6)Nk6uG-zOYEP{%`mpLK5h`^>C!KGMWpJ=-5<`w8j>kLT z@@VAMW>N@KIpFMM0k;h~vAfrY*-B9Bk7esXRWUMhO`>WZy?oW&nuLo0SUQ2bvOl`{ zDqbF6k9}R^@^9Ze(T697yKH0)oO*Pt^XNabb|l{Z5Cj`U;@^XKu@ z$s!7lfKfO=d~e2u_eQ*UbYC8y+*-uxNe>nZO5N-0oG6># zdE82Y7njx2W%?+Nr7)vD7HJVQ6Z}_G@Q;zGE#5TNiT!KYZk#H*mTlPUbrmKIO48iM_?W$ReU$4giYQ!eq($W<|+>SRCE@9I=dPFV>*Jgn3ES(Kh|#D ziC-7NP^>bBzv{jpB{-VeK@zxp_UWhb+lRNqwRMj%nn=1}=i(Sf=Hs|rcFJm8;sDvD zz-!V4wF=6Fa2$v{zLqz0;E3bhL2F4ikATh30TdqB^zfBBJ_gBT-gAk{$sI zII>-L>Eniud;9t&SCddiIr2ZER#&0ywY6&+jiaF)YT>6{eHr4EP=zY|(R1DjGxbW?)D zGp7ZB7Ak{;sbW<*QS=?wt>1uds`wKIjUh*tm1oG^tUkPwg@sclbbh=3d+qA}*!_Z# z6Gz31qWIam32zU2mtlEW6PZbBl3&@K1QOeKC zskwaVvOEXFuaa;{QM5y;t4gESRQ0wFpYD(2rk)wB4=v&!FRsP+PWCtWK8nGKQgq!a z#e@=S>4(OM)N+t0cKMk5)0`jGh5Pyw`1Gy{{^xO3I*%k3K#`M1{Pf8_d>@`Vg^e3F zO0hwz+|e8~rH+duHP*zUarEfR@_7(S#i>xf>Z?fy9zXBHeH+X8+QAIsX*Vt>l$PUR zHm~4^XGuaq#kX!tOEl}mtg|5}%8W#<)ddn6api&u);8ir=AUCq&#XMo8a~W};M9_IO?L^cU!->TpX39P+RD9@i zm2fDK$E)ceswEE&`=;lB7z`7<2!Zq z$w0!}P#%}fm*WdIbuLS1Fxe)mehviubt0optA~Ztv?HhDALA4FQe*(-NB}1s70d^` zMiB^CGk%;LD7#}`|Cm_LRgYXb&Fd@A*N?JTr6DKE&Xc=Qx>0mYjuR1S>4s1`PSen# zsxBw8Gj2qC0_fa6httpH5Z*ooucHH*#iAUrR3c8VC+CU92ie>c>6|z{^YaUGA*C|U z)#5}^#Ib(kM#N%WdNdxCkr6p<#LeOe%&ham>5gXHsAe8N6B_9=2&Ojr@7XAwFA>0N zkm95BU(FC1-;L394EGLA;7IQ%T)7giRC-PQ_bR$0MWpZ<8EG+je7fXAvg*eH;YdZD zWlR=*5*3;lAD7V;_ZhQ(E;&+EiN=C@s;=eraQ`Aczx5LS?)+w)nUCP{(V)Fa(H#s* zdpUH4VDn<5Sn7A|P^sl2QGD&1Jys^_|Z9+ArMMqVq#)aj(JLVY~H#> zjH8YvitHL9r{dbRYk2Ot=d`|eJ>9bMPCg4Bo{SKQ%YEjGTRKADxIKjp5d}v_Ty=<4 zBkmKuZZhuG(X1+7z2*k7G3+=|bfQ@iw9vJ)^TbH2xrbdNU8aw7ZzYeDy)jD$(04JD z&RJeyxu0W2kO+y|;7#FTp$E_9Ln}g{th!a4dVI*AMZ74SoOo3_MLR+&wu+zio;1>B z2YTH}TuAwFe|QXUh@k0nYs2_rkAf~=2wyBbh4s}1JRN)x=Y6sIgpFAmh z-tFAE3obEVh!gc*4q_aSODBM;Nw4|4(L1!(7O6EjP`ZM)q+|$3;L4TD!bXf?yO;w$ z-Cn!&_p>gO6sx3;5#q-w9ms$ob0X7cx)XIHkSNvUxOydm?2zXy=@q;5cake0-9bri zcR6*^zr()wo#~iFFiG}7Qyx#YjOS$rhWg%#?;H+?41wup?;{IEeed3m&mp&%!h^ko zI3>*Xh*~k6CZ;LyykO4V$HjrNQyy>BDZs3B&abK2=#P;TwbGpBa*yfXgg#L^fG#Q} z%Q3S{3`t>84BS)@g9nQkJvWcUs6$RRZUWfd-CgUgWZ$ z**H?mN1|$E&UX1xTVrYb)RsKnyrLpmQgG$!Rp~U5Rt{A)QFLp^X`|F1b-kzN!9(J; zvacAFmWK1gIR{?7>ceMuO|4?u#;g|MaB_2FRIt0v$Pt=Rs@I1$IZ?@q5C0+Fy`uMXDuYvxtb;?_ z*E>e>qeM4;XK)e+d^1wc;P>J~c(K$i0w6d3+gK3q%*642#~%FJfCKaWH;FIj$F2Df z@O<PB;p=S9cnSxlU%BC;)s zuE-FSs;lY5aLDL0AdiUP>y{N~?qwrUG>K`_banS=UN3p@#)MZ4Rb)!HkWeT^8O*h) zm>SwLbZYHdy__60_k5G2bKwk8#f7Vx(z$BVm15Gbvb6mFgE%Rji^X%H3lFXxg|8&; zu~Ni@-hYpKzs1C}TaewusX9iR)Ku{M;ZzQ(xhW~^7#8<=B=iQ^!*Ik_ibR=-=B{#O7b|#Tf95%YWR9SE{d=G>=ie> zaN<`Fr-TCtyfW&o6Q86M%=FBR3|`u)B5RZ)`^cbnU4F!zdTiC=iV-!d()miss)R&E zT@}2UqyCi3dp|F1c2$qG{bQyFzt?*e71e=wC4%3b9z<2w8oMZL<2$EM2Z{^*x zmDKhP>v71L!#kcBRLeYC()Uih|HBVYN?};)Oh5s&Q?IO5Ob)o#N=vV})%#>}z-GQr z^g2R_Rtt$TJ1{a;q!;s)WCw$iq3;&$h)MCxNVKC)wm?G*{RX;jPD#o8Dy0h+r1L}? zPHF?rlWOAn()vh&D+TGSlhrC9+E`SvFl8P-!_oz0<~bcUk8Nxtwmf09!F2 z?qp7BMuNMk(>PbIad|8g6S8o9u+qRGLZik-aM+?!tg8aG=8QDcn*5g=XD}2@ zU~M>oA79#pw~CvP%H-rCPO9%@T+(R`J){;6L^`GKLwud6TfyC33&Qwh@$^Uli)97Z zvoWuU@h4TSrRqqb*zIw*s1R<1Af30pIxen5;_e>F&}*F>M@~g1pBic}x|6 z?EJFGYyI4+$SUpL-ad`mU^yQ-P&1R0%M#ku5Ld0;3#B0C+NcX3^Xmo&hvc={aV&$O zu-@>!Ea$$~QNe}T*%=vFlM`k49PPdvIb9S;1se3pv~FH;y}QMHeSCf#`CYVPmmes&+Sbnkluw001BWNklSXht-1l=Ikb+Ypao9(Lw7qU}64DI$~ZX$=tGi8J}F2bXB zNb$~A zP@gz*A_$r%gpW`-ayW~sf{U2|VqO>S?oWXP(Wmmxl{rv)yB5CBuo$3LNK{>VPj|)) z(z!!fBID3564j0nCyn!kcmkI)eth#*1wXqhji<-DG*Y-_9V6KeivFnrlbmj?KbWg7 zLTAUoX>Enj1YsJ_IPln6FK!>K;2XE5k;%DnF79ZGNYOr7cH+<9C}2l#M7(brPT@Pe zJE<7edFI}Etq_&6(W|kBD40p-%jF2Qvu6Z{{>^INEBQQDPi92T%xzrG`F@n?#!r%c zxKb3so9e(uPaa1CbNE7J6rTwtaJRpR9b&=jAmrU4=Cm(h1X{chSns!VcAYAA`r-&G zW$bWe@%WU8+T&yB>g>kXH+JB#SJ(zc%vteNFL-*9bGmB97N!SJW1f1`5$bWzz4uBQ z1RDt=j}vc4ay-T7exu)w>5et>&o`IiIPHoet2j;M@tSZZ-TU+B&*Sa4-$t)+o;qV4 zvTDuF+*0Ko@t??=y7h6wsU7C)m>0~|=0s6YO!myF3sOqwL2vb9ejTOO$o_Mst=U#l zRzO3zopLXG*pUM&?jJc&Y`>ZzNp#($G){B~zs@~vjzFncQ&O=ltKzZvI3A4-AQ$%G zl%s-b8&!4YJr`SW8rj^s=|*v&xC)(}9}3Jld$W>e#ynqneKi+#tp*3m>hCxQ1_r)s z?iPL{%9F{nrGw}l>XPUXaivI6mcF}FCqbKq+w4ej zcATh2$E;aGjub_5Vj7jd|A9w!%KC@Hm6=f#T`arEd>#DwG2C8B%gC0K`} z)+N4TIN;JCT3a63?CBgY4!gwy<;K?!rLemTIC{-f>nCm5b3{lB&<6_vT%Pve7jDkr z-t}d?HLPG{CT=)UE7fIUBear;wb?P<8w%9uJCHG54c#g>%)GF$u2i$$fp*75YPwx< z;AGj07jpqTo{8bHRG*knoyb+(=yjEF(3ir`geLGA?={@vOkt0sfIb)X;7|}3L1NW% z{!=A4T-7kP`xbFF8^nf?2cO*##n%Q3h>F0b19@zzT*Dh3H{*)KS4Xnv0Y)gv6AIF9(W#xP=tYS8FlHvOA&ZD{fg;52QZ^(O!Vva$PU1+Fwm1c@U|uBhSE#r5bW@i9lv4CPxn9oKt)Gor>krRzb| zIUzKbPMtc1(a}+S z;u8;xfG=hQj`MSKvUO2``o@W%Y+z^*ow1la2leD5C+a4#j|<0aN^u+fC+>Sk!n$-` zMVzagv*4;6k8RW*$*OJP^iVq$ z?nNq{D7_)Glr9i~y4IT%#`;S4Nv*1N94M+*PKj%!@hjWhm}Es7sq;jOW$ex?czl7# zk zB~N6!|IB|_>3uhsmy>}Z1kkJ|uC~&WYO>wppT?{65&X&B=keZT2hwU3FJ(7kd~95N zMo``hYbw#aZT1&%b8H^x=Ty8r<+F{h6iZc|Rk_!?watlYz-i+2GaFQLgxcjqS+AQG z5{e`V>hJF9mgB>E&EMI465ZZe{PYj{Wcq}hCygiQhl1sC$DFK_LJm1c&uV*6-!~5w z@wq)IJaIaNKRm82Om2Pdb0kiSD2*L60sb?aviSPpJl-Am;k&Q+QL3&SG2#W0$Go+` zpxyKF{NVtw702^>kJ-L)gljCkZ6I29wt7F}F>H60u+v+>26q;leY051XK?$= zKK%M^doi$aD-zxy7O4qwqsmdeX)tNdz5Ujk*uG<@?9s?WFS(eI1vnJ!xpjgsX_&Es zKK=jG`Efky8^9;?lX%wChm5X$K>=Gjm6qv!(tldNPOCn(6V4>+fo!ZS)&@C;jSdOT zH|D%ZyPeI-fA_4A6J^#JqH7^%M^%?!#V64eF;CX6TQC1j1bjm8sOPJ?ghT1Ao3G?h zQ4mT&7YRtWl1|}``rdWt%6NHZ9QUr>h;yzAW*oR->nq(WCb!cVCC+cVI&gOLhso<^ zwAfB(trZ8#dfbSM&014zYgXFRlO1_>y6M{MbfQ>vj;lh<(c^MBQJlWxXqImHauBDL z>`O^EifKQFZqDQ4do%D4&A{gmLn-=Eqa@o;42tNfJwZ||p832cFla_A>_R9O)?`GW z86w5U1d|gXkqMgwqch=_p;BH9%pA3LBM5GP!>ZAgu4FZJi7qtLA!%c~w5aia)`f+^ z2xo9h?-&Zn63z;z$QumT(7Ogrf8%8ru4IGQ6{}!>EQ^V>6WK~F;xb2|EV$Ro;ad?B zWhxk8%^CSjb!UnZ!ge=ml|wuUS}>@RiFC9A{($ZEzP8YdzdY`cW!@B>6FFDTwHC;! z-Cm9x9W~|@nM4{?wI%22-6;FG>Z`vfub!7)0k3AyyJu5RStFp3ops*7lK!5;90${Vr zZb>aot0kM3X>4pX-6PY7vH1b~GG?-o%*Mt>n#DAxQEyUrOWjR2$tFl}0T%$oUWMBC z%Brl&eUFSi!sp%Vem!1zx<`0KMrQQ{kmlu?v3R)qd-uL`&pn5bCHM0ywp5IaSCgGK z)>!k2;-$OP>9tLjD|jSZ!4FpFkW};6vC&a{5H2DeG6E}$x3U#(p)6SFzLhc13@1uD z@AUEN_xyHx;Yo~@@hZr2GZirUw|l(uIQH_+(><{Srt~6bx%cVhO8HKt3uq#4w&vLC zL|4g&usyFmLg(5np)(}G<3>WF#JrD?ipuk6(BpWvAJffQydts{#=@u;= zlUUT@9M$7WQQ)>n=RFMluCY&2ZL6u2_jD3#BaW2ZoRZv0iHUB2PHB&ILB!1_QB=mH zRn)b@Ad;atF0KvX^~o6ws?$Uh>O!T*9<*g^MHe!5perTQz|Bk&$w(BhjBUa!0du)X zmGJIDpBg1mO>v?;x@klwN{-bM0xdbN@E|2uj7 z&5gK&^t5R0Xiajq1%-TeO(NwpAur{__|EMfJlb#Izk7NKg^Yo7i;cbWF5F$idu!tu zj)(Bizp#mcXaw)w54D8w2vo@Zcb^Vu0NqUG}HAb z-;oj_a!fdJ>J%fM8<801BT3webmC^b2Xm1Q8GD^=Upmg`QCZm ze?lH7=>kcD+~|vY0p_(JlPU?FL+N64FBsgMDA+U(9RZc3yP>sRfPF%fcwt@V`8-~U z14cftTU(4+$88g1zxS8NM4^JC*)smkrBCqBCQoC%BZkYNGEHO+<3l^PGAHOZEE1y{ zaiRpl5!#C0?6F(Ub>RHKZW58XCMXA7y0~@SDjBbJb)saYsDGfF46bL6L@Z|LUp=2n zcZ5LcB(!#T>jh)YhmlzhBh{6{(3y4o>ThnN|3uY)&wGVox6Rv$AR!9G-y-fwLR#4C zEKMpltS6|HU)P@O3oK3Nj8Ho=-=uB~L1N@QOIM2AY<^1SvZ|sBD^B7yrOqy^RoH-0 zE2JBc6ID$Z3Xc83?Mwo9vI&f+O@s}Sj9rIVHrjy0@6()PQ>uYu+u>#-GusSBxT}z_h$JT zk-{;xWq*Bg1;2JQi;wR`uvH2*n9V694e=48C@>j8A6m@6qH!$gOlPldk(d zmgfuNDuK|A;OrFw)eb~WN;=Y2Yn72ofj%#9t9BCs`q49IaOB7lzSdszQ&F9xO(TNE zNCJ0NLiLN~H2&=me}?Bi|2(Fqj^MOPgr-ztb!_7sA*ot?iqP)Ds7nq+-bTF2X>CRg&jM9go+C)wz2tZ{TOEdRj$i&Eor4lz z^~zjB?>wF5E?O_{E;9NML7(WklzfP;#KZ97a|T%2KyD?4sb^AHyqm_-^$L29s!6EW z$t}jZz+1Kb-{4iZwR%~K;f+KICxM=DezOy|S2B2ZxP;R~8%P#1 z$Q8oaL`O}D3`Q*~#iib&iA$SFOmv3v(nuQVTnHIy}L6uq-XG^bgqGvOzHlVu}t5U%8@rWLipabBwjyKP{~vV%NtQ#St|N^=Sg?oTn6|r zm*RMOq>SHxUhNda_-rW{ufxrO5ZGNe7j-8jI^wFY2=@YUYUUw{piH{@c-1+lf|>~N zJ;>)t+xOz)A`TrsjH&5q7QE#|$Ebf}P-1=d>?d5>|MFK}W1ABC{cJdi57u+|aI35q zLltZwibqC=@RS;hkCxVPq@2M4vw&_w$<+&rrWzNFZkqU9c^S7#F}yu9&-PAqwMn|5 z9(kOV$IB%yy-9VW5#rQnpUb(_oo9RJ@tkK?CpJN%!nVhr<9nx($6HY{54!Ju&^4z7 zO832Ee^LWBCoICTNT(7E7AiQEG4XBkz3Ul6r8|YsBI@4X$N1`3B9l^_9*6YtDCBWz z_K@DN=DUVAK7lYg&x>3#S zw_FP?she#%fv%xA`cJIj!dn@19bZH&+zX==anL8&?f2A1kPCXy-c?4rOX2$bHHqH9gj#T6ednqc(=OTUhmcv^Q&+q{lI zHCN8Fx;U-Q#OfE{+}uEqdjBhHefZL$CA>T_k4Ub7Yq@?tuWUN1wY1VIj6C`17--^{ z%_op9CGg_tHU=UE+)76u0uoiL6D8-}J=xQ>rHPPMkCaG|e1#X%M%Q*jC0e&{-Qr}N z#0k5!wq=o!cws1wzGNOhxLCoq8EcDKYMJ~F%jKF98ILJ-uIQeo^Ht;$Qr_}36RwJy zyWhMSW5x2{dwvU3D&D>`8?WI+dFe#a@87-~#rkF#|KxKSJTqFxFYd-rte`F@$ZKNM zOWHy<){_&x`J!E2eL*=)jkbChnHy1)6}w)_2=cx>_tJ!}?zdydkF&5X(Ew^7WuGna zo8J8X_i^;tF+B3)>ImBsy_3l){xz2NsM3%4&hq zZI&>u5~@?>4VqKH_L$vx({uko>g-+ckFg|JNj>M#%tM;N^$hD)EGXI zH!-df+>ci0@%r#VT!>Y0FJv~2AnoN=$knnyknt(xah=TVr9-(F9H^k)csi#`^srC8CMr1*v;M+O2MzVd?7$gwy`tSw`>lCT1?Lp|doN z>8DllXQp6ob<`px9u+P6j^wgUJA^#c1noLvOLVR{$OcGN?4xBq)`JHRxWk1w3A(y= z6#=Tk*?MO0J|Dtw8=siq0B(46el(LrQQ0wMBaixH_TF7*CGy{&T*YLUnryo_@%+W-cu9PuBDuKU^ zFTD67caF*5mX|HzObY7s{$t}4YCL!Em_sbd0+W*u(^ei2=T!2y_y8X*t}(YL5s%rL zc{>kBl*b9VjM>dHK|9ZyLH~$CLWb~8cb@HLz{rQXSGR0K`+}zOzgvW`M>^kaU z56g|fc%7Wpy`MZ<(GY+~{TNGxFr3=P8`F7wd@qcxQaF&ie8YXy)}pZ|XVKQ7k~12-eytF~ zzk9cUM@FLf=Pzs_fe1cc2zw(@+C)WVpYPp>pi^Cw-+z7!lN}-a{9d>v*(jE~OJl#%qw*7wyij8`rPnEaq1kS);?#N3AK{TbRwToLF>^p&i(8jI*+U%8Shb%GSLv4Wj=W~P?^m^iD5h_KAkd!f^y3nE~AhzF}DAtzIk|=sy z-HhRy`k6?EFxivG3*(E(Zk92V>txf?Mx^tlLKJtiDLgSy#EGsf?xiCrRE&M$L`gYM z_&J0=k?aKp8!E|>Z=kcHts#$_SeT#3+}xZ+9`Ent@gk)t!|-2)lf_QBqQ39&I^H;z z!=GKKme3lN3VgRhbkymJSbbt#s6Jw91b z3H3|@zx{X?fA>TIe{nh1)U}ar7&>>t9TE*Yxi)`WAA%Z7X+w;drIc0g*e&7XFyCiS zKJ^rHpqy^c1{Z#I_8xxvlb_&)7hlBW!AVCsn`}qc)Z&lEX+B?I4yLaCej7WjOtk0PYKU_u23xSSRwQ&9En!l9Sox-&QlOhl&)AVU%)EY8C$bHL8$Dv`d=q*6$E)**mQ6f0eh~N7G_c;?v7@Q$VQ`@8 zZFMAven;_6w_cJiR(C$J+mdcOP0Hn1rQ|E5bGJZeOPnYnj}!MvoRx|DB%LKf9+Q%R zJEINit+$sPDH=pX;HLLsSL`jdN?7i|#F+$E?q@M~xrp8qS%iySwWM>8ZJ7P{QV!Hk zYSfHMG#Ht5z9pxyr z=c$y$C-YtS`q5={SGEyW3&IuCDlhnv&N+ZrLhQdcn2g}1ku9~NGq98o?GX}Hn=w)n zMc0bH7ad#wKtBct2f2Kw^IRyv@Tx_vc*(d`IB~7;YN_mS?ryXi11mVaTQgx~vo9$_=Dj<>%dr{|wNmB*pYWY58+b?F<$3?>7{o)YvE0+#&zbP7V~!9ow00juDprTjTt9q)^7mtckx|eZanVxz0E)Mog^R zGAmLVuGgi#UmPf}tq`zfyhL>6oyX@8kMzMP z#hj)W?}1~m^a0tbkh-sF6Tcfl21FjD8_Yrj!gUcTF1@JWOcPdDcMlUNDUq^B&DGM3 zlmK;6F+G{7L83g^FgZ{{r1c_?%Q)0Y=Q4@QDxJmwp@t_#{ z^xf}#%&`b`001BWNklN7#*dKO`6BY$0yh*+>4J%$di7q zX`Z=t^Colqj!hr2j)%$}Vt{Qgg6O@8IG)YsoDMkmf}vH!snM2$p!&?tj!s7q)RMrk zN@{G&LUICS%lDKQ56n3ZLm=iAjf^AhT|6(q8LGdcB`ce0Miz zNh}p*0zp*u_*$bQ<;RJlFD%OA^ky`uXr-fb72GU+`9S%Qy{Lr-MXV$PmgG0O zN9#Jon14l(HMJ+x^9TvlCt*=ymB~vt=-h8klw%z163+Z=ErFB~LwBr#M}}4rQ9|CHz(f3CRaWuhJXQF< zu>?_Ng)W>6{rO%xQ6Jwg;XCin;O~E~7r*;>9(UA2HfQP@gnZ11pX_py~bQUiPS_MXESo@5>|5*y*KgrJiAEEDyk~J zceD5IF|Ut)N8*_l4Z-TR{n=K6hJu#+fV zN6kVyEuYVd3sGy81I656;y|i-u~Q|hjY{#f-=`Mwr?xBj&Wh!G7whlFN1-C}9?Ih~ z#|yF}D6+dmwx1j*eY|Fccjoba+>D~)uU-+7V}Dp2C^0G5$>V;WeKKA}15Oa|hMXvx z5Qxt~FB0W(5z?xcA-V&)E*!aEoGALYv=h^3(*1 zsFujw6F!CanQTIBlX&^SHWDb~?slY2NECRHKnW3jZeMR7`zVHdcuZSco49-TE_W+Z zd-nj9`l1nE&%o+6F9qgD9qUUwLY!$$h|_Cgj(D{HOG4y(8=4k(Ll82{y2z|~ou6X) zxjU<@SbiX3;9tDBg&y_!zj_eD|M|5Ho*d8PfBAVA{`jJWc=V_o^fy!zr6W=9Yasj~ zy_+XUXI5F0agfQaRh_3+9=dLoPz8c`F3LiRlG)Eb`wWjg{y6*Bk!Y*0?vr-G>Hd5B zCqLmN|EZ^*vKCJ!jl*>=-7PIH@`50$761niPWX0)ifJ&IhZ*99;GLN}xP19C2KxJ) zKvQEiWJ^#KD3J|^*tSJ@vF+wO)!TO(oNNJ2TF|;xAG{RH%XaXlk|QJfnl4i-I#6Vh zLtL<~u1-fMtI=b+036ybDbNuXqB^R#-5Xo7Tl_nsI*lGK7}yRD0_k4)fF#*|FDX-eGx=^h2^MFej{n|jF@igp4m{Rhz$3jG z%w^*!Aks1tRk4Y)a<3BMHf|Guy@DU>>ntpAGBGePz?M4hvQE8+OeFQ5NBk&Vi1SY` zc$>H~QQQt9lJw}FT|u^{?Z2n5(98A;y#|TGPMxUt=fb!&m%u-MGK*iEE@2~U;P?Kf z3pduQ=b=yCDsCi7mjMWZ;P`EI1YEA4%rkqVX%y&asVdStj&@CUICrcDoHSV*?+Iz zz+yWJm4MP`udT1Kc8NnehyMzbk`v3qAi_bBlBjxJd{zIwUM^=Xs|i%Pg4{K9UOA}5 zvMElK5u6i6lQFG+Wipb)O(y72$h)hKq!7A7QCwK+##fKdqoa^U(loG8>8kqgNn+x9 z2Wq3gkx8LT-B&LkNUQG~!eYMpM2gP&>dGo7eq4ou{Kl#L4o;LzXoAS<2u?GcBpm@4!n}^e26?|`A713~AnzwD_u1L| zI5>F_r%s<{WH}_Id76}M4K*0G3otrI@4xpR|C+2MQd z33;4QT)M_rE?>rnAAX3T!9hk=#rMvAzv$%gXtWx@^?>e$BDTtTa&Lu$BNkV5?DUy6 z-FZ3^Wta23IZP%a!?0D)tpwaUH;oXed_Kq5u}gifMU!ZZSO7Lb$-a#hDmb1o@t124 z@H@R@*yxDka>PW*htpJVU*{t03ubp0SvxsUI^rthwbl47%@z`~={x9NbnWoc)wlE+ zVn-z8@mBK>LBNGm#pQfLqS$(*r^n$BQP)|}F1vdAOnMiY1YZ3@w}T@k7nde}Izet% z=%6}MHT!DCkY807xKjnoGn@F?UtUw&EhJ)nFp6<$DBHo2lKmJ5h!`UrR{c2UsW5C> zOG2k+PpdrY_9LE7Bkw)oVo>7Sr6ywf?pwSviq@D&^NnhkH`~jJsv6&lsHCYSP(1i* z+MD5xN^Qk4kql$HZyV2#&12Ze;M`WfEet6Q3f`#Hd?AXJau1#v%wr;+!@cb&$^lsN z63m3hMpi7ueUi^`CsE{XPvtvO9;b0aE#i$3Cqt7O@CsyB2_@W^Xg;!vUq4yEAD<0b z=hGpN$E!Y8Gy%D~rCL%t=WADHgn{0l?kB5Z!rMDf?!yDA3SK-^#DBUF-x2uw;4o65GI2^tTS(`6KyQ~axis2H=}}s_gS?)eUt(ROB+fkc7>*u2YWd#Tiv;08 z>C^*3vWXo2t#ADmo_+2)Osm&PIhdsjR#z}TH^SBRd}37^Zr;4X z<-a3SQ#Oax*pYD4ac6AuxTX74T^LJ1mn27I9NgW9yX8RX99QAsxOJl3$E|asymgsS zn}Acp4+TnBDcmV#vgApce?iLQ?oy}MLM5!e!(#;lKVMs*>^jZ#fly@UIjIxIlmqGhaA7e*YKG$XE=$X zFF>UzH$=Bvj*^>nE?-i=5Usqw3@kxg=mhCPeC_D+D`g_cEGKd7^PO0@vx()KK<}{} z!Ud8-FzNzK^gTN}I=FLX(+);XJH6px>O9~=8gfD6Z0x^h6T!WZsA`}#7?q;(E1^;} zxstNFUe=)NN+l<$q1OcU7CBLr6iR|aft}ijL-u>?Zsbl9WjIO(zNl13D2ASR1t$mA zkj$$DCl^6FWclw|E9a_^UJXJNiejeNi?I#^&-SijGatcvDO9(dMtm}QPa@k=0_B*v zx_A@R9ZA|d^n8mvK2#MwY{YvJ=?23ai4&WLdi*F}!D>RBzq%VkDN@y5;R($SVC@nN zl(A{r9cGj?8g>BIktjMBa?g&b%k;{T0w+=Kht7$T1rKbLD=31~%tIz(y-O?z$Ewjo zrwT|pAjm_4#k@*{sO#?d@e_RCIplHemgbU)#($xE@zbnOdzK#-{05gkjG8bmilwzd#BE8D%DZbg{yy-EZPLM z@Zv?b!hsTwtDd;(jWfDVlsiEZPE;d~lMtOPQCeGz%&d~mVWV0kq?=Utua`in*Q2jk z#;I)+f4x43-|iZP(bI)bLM0SK?d1gPC2b*{dv%dD%Y735kQai}YK6*;1WO4&%5<2N z1HRNd{viA8e`|M2yQw|x%5UVp;UtPq5G7FV+GMNUb6!g4I?G)rowt%RQdYr6ekDcbOTc3sMili4r{;n-j&QCxG z!HZbxBvGytmG^i61|XV; zDk(fNkjB&F5&ZaG($Q$E>85M*R+2QDh@{Mw5eJEg~F5S&)F z?tm_1xfKMeUMZu|>#g}Tj0+deb zC<%Fd?*4r&E-r8vFCkkK69-vtr4f0Y#w#TP#H+e~{hGS}y~*Pa0!7z~+$gyFFy(MB z>y=RSE;4<=+zJQE-9;qb9c(aegSjF8$poeL7q)J>NCn>I|G zC>WT?R`CAH9Nrk7z-4vW@1VRV%HlFNib$l~^O6`g%Y72r9KAWqotU+fANXy>S5G*S zGEcY>uV!^2h2|g#b)zo6W-D%z%!kLu#=a>qmmlKOY{u!gueW7-vD|}XfU+VKBCVT@ zx>s({`E`{cr#mqIR1UY#FJW6HR=rayh~-lnQsg~Q$tH#ZF=-D`P$ndYJMuz?Z#NEi z@Z?1bA<uRVJ_!M@Tc!X z-9n;-y(5W&x1zfjDy5Uo>7AZDu#C!f0e7}LU__!-K8IG`lO&3}1j`ZJ$#vm)cL|Sn zZ($)5LAGM8Y-o{C$QM{9f{46w56StH_oEf)-I+T~v?Y#;Xg@V&GUx>bxD!`r1s_0& zGabVz^_@E6W&GmOCbmkUT_a9G_Gx@c;1u2n-2=-jD>aJc^^mB(WEkH#k;R{1?Wysi z+Utj|qvqCSY6gAM$>Y-X8010o(z;57Nc!Tr&wm~VxXc!*+jS@7{^pGvj6i+y<(Ij6 zLC{^&q$Bb;jXAn+Mh}cK2|N_?L7!~par!%*3qrIgfuheCRPQTRBq5(t7Yh%nF(75M zpa_y)BGWr3n@L=y#3M+a#0mX*o{HrGIZ=N5i~!nAF?1Z%aZMh9WOJjBU%%IPs_XJ- z#>Dqm=a5qO+!1yCKaN(AZi4d^WZ!EmByF*Il9IMN?$wLm5?^V&(0Shr1jlP%w?&d` zFI?1SbRmV>BgxZlD_%h=V&U=e@o%<@Fg4;t`FZRJjIZmw$PMiGdc8eS+PFn{Z?|23 zK{M)-%Ga_BDGVJ+p!4uNuKz*>w&_*G(8q|CA4f_E(rg)`-gAw+!Qz&IZ39SvHKS~= zD?g=k9a17>D{lMmQRyj{%{i7aqN5^1-Y{JgpdTV7oD+LxP2^KKKuSzjR+hO85p{XQ ziR3{&X<)zdUZ+8%^B#Ql$O1Y_Y4jRp%$6*rWyc)V9`s?&2$(ogck}A|Mq+qrcnc9D zjB867{u^oV5Fy-;i$vuS(%m5xfX){^KN^j;HMs9YrRocD%HrdLm2Q0F-~zsJI=@4R zbFa42ohN!aAv>X(Q^B|q5+#9fpfiE5O>g24&c*^GIPKi(ZQmNTOoZ9 zz3%jVH%HBjbnX}5CB6!RBiC;)JaPTFMwYWjv4-m`iB!FKu6O&1(CuD%_W63}HJXsx zox!@X1f^py%kCTGjQ!u>JRTbU!&> zaaNX1Nr+`GT=wpo+o5z`aky#`+kelGBPCn*-|OyT4I@gZxckX~gW`zcC2R`>Kf)4U z6IjooGMBqMkHqkQQksZjY#JqO!sH;86 z9q~wX7V{xonaktJfeaoW@4;qd0I9AXcrlddJKn!Pi+lI(a<>y{L{ZmNBl37_5J^>E ztRB(aOA&ia%@HFFggD!YNEI}lC?eaM_LyB*T!fl8obl>Lq6EQVc;3w6>&G*kL_MsB zlsZIvO;+e$d@K>pq~}PdZ&38fO3p&Ocp>elsUt_6(s!d1et&irKYr^iJpaNAoFK`4 zO40?ybENJ&TEx(ONl2;}c^r;(fyqf5T{G(3rG$>g=%GW0IO%Z9WrTe4IxfxG^KUDh zCY__Elg_=oCna&!1EC}Xbrs7!I8k~M7lad~@0YnzW{W?Aw4daj5Xl*@dm+lccOm>_ zZ5|Odr$0A&7@tNfSP5az;%CtKs%rq@wFWssGwbSf<8(^nvl+QN{3q) z(#@IM&-1-QC#sR&LePvd2x2Am^Rf*YOAryR2)F0kon=BEm*=DwI^2&?m1In44k?|}&B~}p%qovH^vJT!Of62CHT8LM zq#Ul42I~?RixVj(wCfX?_57Mi&C2|$$4>v*gg>`pIm=;iH>X8DrVc|{x%zRUJh>n~ z`3jTHjVOBKWtB{AqN7M1m?3PSvr5S2(rA^FMTyXZ2XolWmvFZ{fbpIrp6%O2rWECp zA6yeHbtn}J7SD*v95Ekp!ZzYj)g02kPP$RCzL?OFt8)#6IQI&PlKYkdD*34qCyD~H zjM0%q$w{Il5DFQ!D_ru`iQ4b21awLAYR0EMR)k2aD;WpjV9}&c%HxNprr7(gx3{ml zfT-uGSt{bwPd?#t^Q&L_vZXs_){@8R-lVZ~@Zco#9wq69)@`dNC(^-o{n~ZB`_3;h zr0!|r|4~pgX@_Ji+!K?>#K~8jztIoj*;+^Nki9(B;b_PYUOZ63QORH)F71FuH zS9yQEIZG1P-6)y2jf-sSsR`d#*OSwAAw|OZc&gYSc^ujDgt${}KsMw)s1DE~x z2wjUtSPFq=Lkq=0L#6Xt|2;J1O6eLa^wmqY87Z^?ZAx;bb*vaROe9L@UOG{NL~*>J ziKAjAR?;;V7GX)F@l0maL8ZEF()p{0mhjTp0y@;^Ud{|?RyS4B=KA^ue@9xelPKw8 zDS^#O5>IxmqAyayT;4MGCEnAG>(^MKfu1KM)_r@plB8-PW%!cO-9nsyb}_MotI;k* ziUJA~gf$^Sx(6tUqVpx=btGxxi-)rK_N~5}@ycrX9y(DE^C5vn?;_J}EOec@AP;L& zw|G}4PM+lClC6RQ-0xHd|C{f9m-V9PM;1~{9)EBji}Ul=0yAlm$D_6?eyx96wfnB> zd$)~SH*axgDM=}$Y(9_Q;rMZ)IQh|#C^zEN%vQJh(7VV4`IDe2dO<~4yzWM~YPX!Ikj_7H3^1k)HJ58w2ww&0SZ|z02pDxK9tO%;acc*~d#Akbb2RdAzyMjm<(A zx)KJ4BbmCVv$cJbQC~{%DZwmhG75S!LeF7$f^e*cQ0?xbae^mXXp;c&>|=~%+Hh9g~Y<;rE1K;&^q9S<3ow{kzoePE#0 zEVj}0YqU?nj_w;N-$@{(-|6PGLAD(9UCkOsgJxs*-)XTWwpEls=_PV_bSsk3X1_|B z4sMt5gT-0=R&o&2>iWDFD`Um1y>Hz2(QfwL@vq*#*YD}ya*pXC0> zW6*uS_)N!4+LfY%D5Bt!8|cd8&3taFiIe*{9~vjhZ(mf0-SP;MD_#U>SMPr<5@mWKQF465_oBp%f-v3eqOk4PtrvtVMY|s}>D=<)d+qQ7Ql%~Q zhl;qH@8X1wR_heV1_t_Brhv{5bw={duioLxY6&azb9im4fDWUC_2^JT_3*s~qqM80 zk)azMlUs;091gdogh!+VVVGv^VkWBsAxSCRxPBc2{ry~$3Tj?m zj}uki1t-dHU+x6QK@(%?ylj;dmCa_jP}Re1K31Jz6gOtvz1>nWZ8|C$rk3P(!dIl922Jnkl)2URlN z?=9QC(4|82p(VrK`h zyJ759UZC>cb@elr3}YZ!!As+_D5Om+M@JEf#cdPps7eC5ILRYYF0Ee3_wN4v`?$MV z#zuS+PmdaSq$h*fw7O;$t;{5nt7+a;?B~q5HN0vom6E;tR z0x|uYJ=1cQJi+SP8lxjZ9v_J0@bcjt{`69Ehc1&_vHW3jq8!xK94J)5+D&cvw{G3yMC^!7W;YBY@O2N$iQ0|lom(JT<}KZ#O1B0J@_wyyqUbZ}_k`wA z0wp?G_11L>wTO5;Z{V$!ImFe!A03~-XORllJCnY;O#8uk3c7VSXG!uQF-8#0hsA-a zx79gwG+xtu?ZS=}f*WWF!im}q2Wm%m-d=N}8r4{JSXa8xBs-QGx=hwVmCko-HPB4P zFS;7y%uY9_Ss;PVB*srAvGO2`xl1K<9N9qJ>{XLrs4gdkl9Uei-z#EmZQatik$Qg} zu9VdpS|yzuK1h_5A@X)P!xG}N1G-j=H+0guA>x6JIZ?V`XvO9bMC?^VdMj-UpIM@# z2GCG9$G>sVz=sP_JXp-&LGd8Ic6bJRK+ybOWzLv?-l&e}xtCx+MY#<3h573;`W zP!5z>_s}o8X;mL~wTo*;tt%_5tYAGgHRS}tkwlq^<$rWGykop}hRc7eI8i!zT(o2a zT@nOPy2x~;bD5j&&CaR>XdI_bJz}Z3ySq<4PB4v;_uqe?-|wZDUSfYut5L>6pX!p| zvj6}f07*naRJLplGa5gWhb9>T^eg{Xc`IQ~c&}W(!iK~n!^5n;uLng0NR(PZqFPN{ zr31_@;HZ<%C1?dH<+j3!65qRyj+8TxHR4PiC{%E4yMn)5e}I43Glq0m5|_di6zygo zLB!nNfqTt)3gU$)K!ivgNcqbxj4IbyC!IeG4wQRe*M+2G7o9mPcA3t2ru(K**M2(? zE3f>9k*IbllQ*j)<<2nO%HuMagmf-~j(QC=$Z_~*i+j`MElgpi`Dhsvl7d=tvqb;XVLIh|_RL=hR6QY7&VOVmYg|+kR}y%(?@LJn9XGA=^%efSO1PHt9e8dyi-|-Ychb=vCc14$ zpF)O%6xOpn5#nvV(pJ@|IEOdSt1*N`QwS6V8WMpe#88q8e+Babm-fz_dCVbnS`r5) zCsF_Le5^*7iN7~}}zKmBPk9#SP>s@3z0hbp>6tLB6>AN32daPRh zX>fu`@b)`@{cSw`^fUZAwtiyn(=ygpRy7yY0?fUk4M7c zh6{~Qxq>q#1MjRYp_0wuiv#00o2XzOl^wcF5+ig(Z9jCO>cv6&(d9ZMzUt2x&q-N4 zxCOBHS{KSM9tY8d)PE;k{4)RS#c}%W2j)bzlOv@gIC_TZS0fdqMJ6{dbJ6|GkOdkQ zRaY+)RmoTjTOs7uQaJfy2j*^XV)ZuAH(fxe*vbBT^#G=b?f;Wwu{|pZ@bcVpD<0?B zf3L_B44f5Mp5gwSAboa%WrU1cE{8|=m`v#+wprzA_;aGFNK|;o%7T(9YUw87z^Hva z4FdtVQU<>#C6@F(NtvBGp=cFK?f=P89Gz-G_4w#Au${+Tt^=#-92*VObLd<~Y|^>@ z*e-`~ZMy@LDjE3v&=xlHVXPHGdxSn!17t(rIMWj9qjO#_kz#(-=sLb}x*S-DljRE3 zikt#C>4`;r+TTsScT_M^&%Jf~HuHZ(6wfIuicZwUL`^pk9dCa!imx5r!hgJw+VOqc z#j$C$Pvcck4nd#X!jN8FWK!CjW%TJ_)%PwOZkRyP{eR*7XZ+gNUVnon4R5_;h;~#S+UTwdw1{Q-t0YoFFGEwBGEZ*CQt5Ri*IG$Ll1)!<(0VB zQ!bYPC;_yQFltav6wwf9{uJN4AY8k?LK&xXz<1Z?@eevj5bEi~CsCD9`@}ysn6{5q zWE|Xy?|yQi^u$%PpZs1Y2$YN!KlASWs`$uwm1d862$NVb>4KY*VC@?xYI=J5o2`1( zw36BBuFbM4(Uno_Wqfin^%}a|sQbZ@(xFl5cJLE0)4zYYpc0#vBzi~V=sCWO3vXr6 zb$kgiqnG{n>O$@GnFLp=_aVCt_H~Lx11X);xh0~t3?eRF*n=jd6UQ4wTuUd)VAO&p zXPUGnVQPd#NrI$X;}~{(IR$a*$h6wc<5k@o&*QKH2odi|ONV$njBu&RQ-T_yGKEYT z|LWX0{)fkAkt}XwGQNe?)U;Da5BZeH2$Q>;OQ2{b@#5$<>l@9aBW+Be;GjIsnC@DG zHdJHn;S~hN;s*1h>Ire`T}E5#e8h=2#+EjQ=kv-o3bU+|Rw7ap-^RY&KRt`5pLqsTQ%9=g@do3C47q>w)(=_N z>4_(vbObjy)i@zu9!VEe?6M~r2RHV;gYA2lW<~ugSFbR6JZaAhI}&8|x{3=?V-ZeU zSa&}-QS`a)#MRw3=Czf8E(n&0D0=BeRXI_XG4c-GC-u3@i;J8@b$53;Cd-YQe2(Q! zOlB*1XYoFMZDbOcRq`|wHtTY;bTeQ^$n27K)kATAI8b`x>Qy1}+RAb1@s;j%oujrN z94MXIW0kuzzFaMLycgRT;a1aD7JBXGK<(f}ojP^uo6-f>O3kntPLzB>`aB_z?^fwt zS2^8Fj+73Kim+Eu-74A7Z$wZ`r!et!9@ow;B00W*c(MzjLUMchXQ&rz?Hm+z9jQR+h4O_K<X<>bx(J$Jf_w-#eAi5OJKWb9{a8_*_?b zywShK_l}aI;lV*iNxrU$G$$VxsaT{JyiBXx&55FU(#^qXw(Cyjc}WW7*xmX^782F9 zgA+y9oX%OfRAi1>jns<|2dblN;*pGrH&-7ZrRJ5R>Kc6%DI*<1!}y@@OA;=KnqPcv zHwQ{5kL!qQGaO|vVbpdbYF_bHN^)ZJqQ}>uU3{`o(y2C**tU}c<;jVXjNhxfpdB13 zdLEVT=!=Oo`)*yKWwMiu-%W~ZCr3(zz63gy&cRlW+bo8$Js-z`<0-5?DB!`xB07$& zvHu<_p*r4s;AEsD)xm`6)m8PHsLda!*S$yoRVuE4?jfKOU|+iP1SU4^YY>DJWjJ_` zp}noi{(%uG?{Rq}TqT_|no(v^!UX#PcH8H%I{E2HRE2FWmiW0_se?#`6S%NCjMpb; zFc2}(9jaii)Lo;U!u%vxd9P#|Dv?Se8HwVRu}v6i{=1(IH;Fz~yYEEdcsEoly5><4 zE`{lY0X;alg*b_5E`gR3F(UTU`RjJ+;q2(rQ`cc_eSx-j^`& z8z=Ml51&TuuE|&piFGeHP_kIFO56DwA-;OAm*?HSeMf!o!#H{Blu91EIZ+RVw8ffp z-mCXJC8zKF@)um5d*OvIFnUbC7xFlj@PsQy=akSBui<9u=#%pjvuB_u@p+Bdz8Vnoqhq zXs#?a>|LS#gM|u?WGeXgSI**}9z22d&NwciM38+;oFzf&-H4i7kEtCTDB9|Yt2Afr zMtNM$y?eaw1qVt>kHXKA(xYEjT_bN^v1*dIEj+JwaiH9)0^zZ-v2Tjwwq7D@R_M+z zqjTE-ZA}NMU$!Ho4Vv+{`u?(-rSqb@xVJLF>lrK!U6Mjbb|x@%W)mO$;5Pb>uOkuf zRUfX`c|61${ESgqNDw*SqtiyNu311qmyWHS2Ps{60Wd zJwiICU(@7BgMo}!`+EDdj=z<6-NS!w- zRVA9|@xx0dw#^vx*4WO%?npA~AP?KNfFu#{NrW_rZjzf5rT<;mi4rcA*LZCQ2TIBi z0_6(_C&=r$Yn11}1RgzehD(>UNU17(R3#@WA_-zA;8db}^ZVb&^UuG)Wk2q6)yU)X z^K<-s^1T}y8?Whp)X^um?;R2TZ``=ai-;+ecqQ#}VzcrUaP+U#{bMh@OfjWx11Cxn zS6N&MkHt?WqS>t^1d@#CWnrBYMJ@@e>fWW-k!L6^9CV#1PsCEa&truU-d>$YNX>6A zPfp`pyn-bk^|!%l)Je8+Yvl}qW7k*InlvQ{}#l3~&Xu7}{X+T|x1sz}4TGk&knX$C5ly0VlW zy)xO|a>xp41Nqes9DXW^rF&^CT{qEtJcm$$Nayv1^60q8e~)fFBB{pMo+Ip#%T1m8 zWEgERQ*-M?(c22KT&yLmj-dLSC_$v$36Ui7Gyvx2=6H2Eq$Wd$$m_C*akwH|X?Cg~ z7#v_^i$X)v7B8h2oZsxg%xX?0Lq(h(+CZw1MYa&eCOWKSlP6@u36?c-5EYAbKAH;Q ziz8b|=R#PiLprZ^I+{+9YS%-?q?Jf%c0H~DCqkUBAIszac`s*mBz1Sy738Ebl+I)@ zJA0oK2zQrGy$SL_k|Yj_4kt?gyXZvy(PxPo#79W1mgsA(&|)hSv;=WCRiM%9r3A3B zuz<-!hcP`p&6;AK#M%1s_;RdjW1WZ2x>+v90# zR7)NYG5U1p_H8`4|A2rHwTS5DbG2I`RpPagiFC*giZvXy7CBK82;GTmJ9MQQEtqMa z<~>67=vt6o7M)`%JyRk|zsqc=eHWyIw(s4yRxRJVQdbh^qb3SjJcTiOk() z-t1P87NKqE2u>poR5Qqq$bjhMb+@HST^G`eJiglsk|ccezQR${IeI$M)$I9k>&&rE zl-`x1lj2&@jnMfBbfN^o(aETL(M2aoju+{?8IF{=LQCmU$ZhTDO7xVFFPX?MC(u2Z zK;MZKod014oyQjt5BI?+MH@iThI1nlcSX7~9C%&K=$hm{`EBd!MA52{CJ6gx=Ii0Z zi2@AIJyD@uUt8sCK3lF+!0mLjmRDh)?{=e4ezFI($fCJp)t{;q z@$;)${I}2KaeK29>2latp`0dyB^7|^kf~i>;QXKn&{&62!->-W?s(^YmT;9P%QbD` zH6_+25h$-xMv&L@#7z@=G=^ixkK^#+!?y2TedTcq&~(rL=&iSKc{?Iq~Ju8UKxRqjtM5NuWS&dVMztM=E3s zT{22Us~B~G>v6x@shd&UiXy*}#KEVFn7O=y^jrjeQ)*xoQV#0lrz=He2d{gi20?$jRSplc?$o$am@1b^qm3= z^9%7Er64+o88s0QzixbNoJAnLCbUNTK{!!fI#K!x-K}&U{O2rfW2MU`+jeuzG#8;Z#)~ z7wLim9*~;;-5G~G9<>Ed+m%4MN#}wTi_-yj^!ae2+~-plaFjsUPUNZHRu;^3z0aOK z%Oa!n!-nkI7Z4;$Kkr>-6Q?sKzP~z$r21Y52Z!)sq=f7q>Nx59dVCe#!$wNy`tRM% zSzZXvUhT_x6*&Qko$l^_KMs`WLQ1oT<+NcmM3maG&s7DnAG1+wUCyKtCrW@JT~$B; zCPybq&!F8}DWaEB&)Y~xaCBGbhv8)-7hB-RMu?iOt09AvjaBzh8Qrr6t%CISLL7sK z6X=>+#Pwg4kUFx0xY5i0d%l9@rsa>qWLmXLo^eroatwqtwZMt;^3J2*@ruZXns?e( z?EC=IZ3;!gT>hXgnz+_^SFu;}F&n9{xKNx|?cN_y+1CQ9_XYi2V0L>UWtDsp&njfZ@#^?CqAC#H&qntpd8$QnDmC9-%4Ag1 zh}hnNRNi$9amsn+Btj*vWaUC__FkQLK@p*#oG8E7>q3k2o%EHp7q>jVeOsBWm_wL%&tB&uT5el_Eaq=Ra(?W%iu81Abb<(*P5+xiHHwR}wWh-dA zq~?nU4<6vusZ-XmsKpoE_uR#*@!WJy)Zv1OBbhS3H*+2TV0;=YsVJ_6%Fg0vKb5+5 zrE}eC$S*#5A+Gi0b@tK=Pc*UI@zsw5rRzfK@wMHEQ;>Kq$&XNtbTrfN^^H^oe7*Dh zlvusEQej&ZQV<-;Fx%;^7nCFAg{bKyRyXTkcsM$Fyj9(-w&-lBNjbZszEi#fLua<| z*)Q*_glgF)ohNpA{BBG>afDm5k5jV?$O`HIo^BD;-V4{<^n%zj9eBvJGr|GjJKhft}h z-YmW_v4GrW8FzBsFv6B)2}>dPkj@tiA>2tP@YG-l$2&8a-HIT;ul{>xjZraa2+?`$ z>+53zxjf!p7{Du|>-hTVGXC%r>op`@K$b#7DhVaAMk$eaO}u--iSl|s;k<~_xjtUq zQ~}}O(7h+9Pmtra1o*;yPm%8(aiGZTJ4gaW2+`X={V85}@kJb*IB3gxRLSGi4Ms?C z|G)qz_tXvNMxbiQQSKGIo8!7) zTRK)Mce2LT#6*p8v}Flmm1l*^Lr7HICXfGka9YWL+qEwjTF>}(Qk+-maWB30n(FGv8ptjsG4W^;EBCW_ zaJh)isZB&HJvQmwbnI9JF_9F65C|&Gkis~1y9uFgPdQO8ohZ5w=zPj*Mf7e=`}ioq zq5wj#>qw=1(3Y}=M5)(r^YtlVcx1#u+zg*mS1l4{?m(jShlNT-adD{&UpqRFWHEzq z*}#g~Sw*D;ZMD7bOuIx}ApgBg2L_W7yfm_fd_g5w`SAXwQT8~b5)vhRgM&j=83e=b z&Q#AEiG?uQv5hYu&f`CQTEwDS#UDC+*qO-vkc7SBMAdsgH|bnQ$V9-A$=5a+H3)}F zg!}H_e}L(uM{(rHG|OdJU3B&P{AnTb;fEiv3&6{-yvmD3ojlIIcSVbMJ2`oX(bOs` zSyid8mWr+MO_B(NJpJldzrxVq0F&8C7&mS&P)rX!r&baq1lSJ=8fcTwS?QcL;EIlZ zo37!bcPa0Nb?jF>truTq@l$WSdU59VE1r7lHrn^GS7aK5ly&~j0nk!e&ht{-3IOO)@#?kaHRxMlN(k#4RqbAz4F>? zNmrvxO6PH;dg2&*WF6o6zb|3pxh#^gUYLcbO>zy{_AEO&Q`UEkvdXtZ?ww_W+XcF(<%;D}z7H6g>uvsv7D37-q;9BKG`R&WXO{6dM zxkewaLEeu`Quai7`jJPtOD<+735~`9B}w1?&Uf&{6Hnmyi4zWIO333R=155f$!Uy_ zPcW)wEoeecxy-ch%NpOibQ-sA+~f|_qeqU|%HvkDMbaMK>Ux&#IcqnG6awx;Bc1CU zHN%C1xEGrH$$`3m|31$(M^zFm@yE@1k@<&eLcR4(zz@o#Brh-&)EIk_d?WUyb5Pda)=;Zb^Ez5^NFr>E(nyUpbIeMhwyoF zqWm~K0-H*PtY^m$GouXD1!tcyL7)Wg_0rYY3peUkI8w4-Oox$MOXBpaotVG1iPf19 z`|pKIT}+U!2Ov?)KM}7pnXF~P>yXZy=SVf;MENO}>*RjYyrI8!b#|hjg;g$_!`#9= zl4|8YHa5muFxY`O>^$BeoG8D?N6RUsLNRp5DtKgQ6;U;~X1CQ~3dd^#Atg^CSH~fB zzmXKe;m!)48`{D~HjMRRXwMKRDjyZp04EL&Y2>hX*beVCi|kJK`Nc&w8FWwL|M==Q z{?3VYmGH#d=1sR-PL$Wa-*^=l_aLul+mGcHmEery*s&9=KpuoVPGz=Bmo9OK+*e+E z4Snhy3v{!*yvWEOcl)TZH8wHM9*(*%A{|CZ#5hgUQ66XCyL(zyg|Dencf%xU+Q0`S$VSGhz=D(||0tser^U#?&zUBVw; z{S5zP=rE$ao%lFhLO%4jH$Lgej!;n8Xx*0A*^QF?JUmUv0USeSNFzRW!5jm4QmODL19Sc}bse2CAf>2cTT#^_LVY>@YF;@nJ;slrP{O%il|1=`pefQqNUHtChQ&>rcakDed z^Z|K(t8uAboNC8bx*mn>EQpB2*P!py%J*tVLL#;^viQ-*Yr8#o-P>041zl%O(0!V3 zsBBN@zAPfV&Yxph(})wLv+L=C3PDrgMbWI#v(epT#CuWGm5WPTf#)O%)JbuzDzWY* z0w-OMOr+h2VtdIzDcgauCv&*=@f?x|m)L*L$fxQ;^};iuU?LVP#J@0_(2;6}6U76G zI!gHSHds-d$>XqEyU9d3Y~P@=!lh$cT3*48n>R5ragY&?r5h>}m%32k^}2p5@L%A>Y@}AWZhA`{0B3@x?E`%zl9| zs^oE!-ymaQ@)R5z9>K`Sa1{xuK?y~=Kql-m78e(Bo5;|yC?>|oIf*i1ddg7|5*3&6 zWmt1z$~N0B*oktpoTnh1DB=A@?Z8JR(9HHWwmD&pcyiR*&3V$zpQ(G2#y_Ema{cPP zzEkZ#Q4Zr)%F1$L)J3 z-Lm?4t*3PUFppoXigZ;0N~Cl>D_NNNe*b!$DCzzY^0;(B$O#hef{?Ss&cI7I;$d*4 zbhJsJVOiDcO04o7b+_={b_uj2)0VbS9UA5K*bIpj?ST@kVZj^d{dW1zi?b#Z8mkwp>p~>_uFfu}gvCcm6Pw!hNAq}PvV`-C zA*2hfb>+326D3><8Lv{x@KZY1ML}sx-EpM2PQ0g6r%&6;)uD#>HOUgZ|Epi|zh8Xu zB}?)^{hN{q%lB^4p3}mNJ`sxKb^D3xxJ4ef+MzF9x{QxM`nWF9Yybct07*naRG7)* zahr2t=|91fJYJJTnSvyfkZp|LlS;VFa-M>4qC^)^0wD)OwLr2PfOl}z-10T;+EOD7 zl~GAGpGf*aI7Nre5Kd%G{O{*K#P3d?K&~r^%b_w#T9>vUC3--A*qkW0ypA+yNx+tp zHf@9GGVS-i9G4znbv~n4eAP>P5A(Ps7U<-0T~&bQ9l8!u-V<#rFV%s%oG7`tBF#>3 z;_k|D>oU2$jUHCUsUtX&VY-FN%Zp_TPKw+cz-q z=q8e}KF5Er9+5xrYd5clW%=pa6smE|QC&!oT8Q#(5e6&d3aocr_(iM)n9u99}@BwJDm*woZv+q2MQ zWo-$ZjvR|^59EbJSwSeuo_B_gMz*tb2iIrnnp?U~l%dza4# zB~ZG~oL_v3tNkY{5&UTGE_>j;HgyzNk_HwH(^Hp8*FAK5#6Ao}M0fU(>W&u>Am`rc zbk-2HhsA-Ch6BH555M^8SFzg9^RKH4h~}0g+WPb5Z@P!BE)eV}$b0ETNo`h=3b!kC zBi#r=rP`5swt`^MkB;DoQmG$;B;QStD>(=Ir5B}drSwP_PGH@7T(5FAg3NLP)6aHd zab^=sH-O$_Nfa z9~=H8>g94ApX*)6NNO8z-;SXYiSH`Uc89O$w_t~a0hO$?Exc9Ag)r%aE~{?EzL6}`yL?#>EOf!Cz>SK+6aN7?z*>r_$H>Nj^NCh$CyVZ z*$ym*UDCGv z8!a?H&ZV0O|DLuX+dHr5;|15szL3Z1-lF%_8x!RDC6z>#Z6$d(iQgU2>v3M{nLm@v z10_*J9v30cx+Pz={}`e;m?`1Im3e%1;t1|_#V~_%Al)Zjmr2TdUI@xwaiDa>Rktb% z5)b9P>&DMA=j-w&^uMJNaybE9#@GT$|nXFxYFaje{+v;_cWHEW%u++wd zQ>T09kw+Mn?q=@YW7259jT|_{S^HWF=cS{glRs~-I8n~A8AestCjjZ3l+LNQ@Cn<0 z@6L7y!3K^Lf}iLk`|qje9`C8(>47vB(h;OJ(m5R`EnEn}NW|lHb-d_&6NiM7RzmC? z1O}EeHhnzv-QZ7(8IBnkOK#z%@hrZ3E$oQT%A#VgI8p9q59z3D^m)=jL*ILNWR&%r zsDn)xbG5i%I}<5-{f+C_aPh(gy!^^57#<#RNaaEv&)U3>(E|rCI5gxSpl;=HCt(g* zb0u|=k#qt5o{+;h>ns_y_v;QWyJZGU?`M_w!n_cnd!DRg#0yTI??$3p;Xu*%iP=04 z`ku51DwoQh&!;4ccJu{?TfeDMK=<3yIV0%;YLYmh&b51<^g@KX)v$V8jh{cieFc3T z9XK>FgtO5K(k<#T)rbLm1oU<*m-}&CTlI()^0T`{wijF?iLY+ms%GP%o1-QPcq`{2 z=)OB~6*+@u@((%h!t>I(V9be)Pn85x9a%s)oa3|@(=qPsQ^q! zNX)*;{Wwu{sz`f^5-&nPtmMjc&?eoy)LOaZn9NQbDB?ZHHFMX{buBWv`J3lNCF*jb z#Q0c}%b>n@rhOlLyplqvVfpX9Vf*j(8fDCux@(EI9;9=ULb#nxA`*(>)$ugK>bbL- zFbikW`KAPlwY+>Tlxf0gk{|>ueG8wxO*G3#HYd*2M=#HN_$>;@j*C$)Dh1i(akilGdA@L>oQ06bJTK^i&QbG1 zGWF|Aa|%y`9DBc+)*=(qd60QaqBYv{=uV2cO-B%RCc-wccaTB^ROFHYbS!E zb6j=v+E#U+B)&>}zL)1@J2+5+HcCT5GZm6X-hsL;Og-+dg@00rmP4hd1@CINCFAHrzn{ExmLHrk)rpYNm1&y!O2^elPF9 zRO~&kjh+TgjD__WO8Epv9!ulw+jr5W5~)PIhyC~JPV5GlluJp-`r0}ZzhwaF zNECh6#`+q|C6v_fLoQ-d6Z%l9DkIsgja(ocZOHfXf zkWqz$<3&cT=b2_OvYolYV1>YDp|o;HXlhx z5LZW#gL0zWw-0ys(fmt^BLxAKuu&62BLvIgMEU3d1`X)CcOj9-X&jPuOE|#$Ce^qn z>4G;O%z&`*XD1Hfg37;F4YO^Ckx)?Fh*~?iPdei2$HCc+_npL7shre{ugz`+!SSn* zG?NE-#aErAt;bhExOVHM>$arR$>Y1_jERvlbFfdIJo!yg?9}Dk+sXOSp;EUlQ>z>) z9l_z2?j|zKW|hu$83%oZ-fD)glgHhjLhU^MayE?2QUV7b@4)hG2J@Fo=sTXZmCi$T zb)`s^n+VEWu2VsVCl{N;LGgHHWre>7wIP%7tpV>Oif&xuKau_u!S;HquDhh^V=Ge$zR1vL}B=nWGIn( zre_1ai7b9_zKpd3JUK6|a-#n9a+gyol!ghv_j7x9(ikD+f;{gC!R+nrt4&I4zE73k zMxXQPr=MV(Y(HN85_j0iL&)R2B8KIA$NV!7*)(W~oY*25K2ULNP0)BBvP$#qCz@(Tz%Jq-2vvM6NP}BsAf1Xl1Pc~ z9hnAG@*m{=4jN&c%$oRjSI*(Lh9(j2@4{z>I;K7Fy7MBPyLFkG+3Io~I^wz)oM4Hs z@|lwKxD%dM5S&I8lHKM9Zqm7Eg83bm|#@ zGa05JI8s;M4^JV1@nnJ!HQ#33r*&6o`nT>Wv{%Qi*5=48M$j{u#K5UlTzo5suH*BF zMS9gN8S~{xS@)O0HZc@{$$w8g$Os7`5zMacE;cFU?mUkqN_3y7+$6k*W><*PomYk6 z&FW`0$%&%QL7hk%7=6<8h;$;lp3@N`)ftN5(n=3rJ+y=u#um|0$m4Qmz~<{%Nt;0A zH0BmnASa}a)R^z*V^}Buy^#z?VwV4&=?Irr8110zFgP$^b#xiQ#XG4yOWz}6BTIe| z#5=2_c%gp@Uq4;KAAVA80hfDT#%eQ2RDU9bZ=B5GFK_hMAg)2WwyZ?UO5{$RI*o&q zlj`5`x*RXrQpxBCZ+;&q)$5Kaqz5W~+G?xUo}$yX<*al0dm zdzI3j>p1y!ku~#v^zcJm_bN`we5uDs`OIeDPm(`+KV9gymHc2g@l~HEn$?9AYL5Uz z%_3UOoUgD7Zr^N2Mjv!5H>$ga9z-`n;5iW#l$&P1y^Z|3QW`0v3aeja7j~=s+sull zuo*^vgOtt-xOaUG8+SwKQGqX1=yVVYzloJr$El8#RqCadd$sx&a=9aM;7X#l)7!Xn z_b$fO%Co~(TyFM!>pD?vhU!{#>n6MYoG6n6A@R2KBrY)e#Ol+v&*z}Yfu*L+5!be= zPc4X_)AwNQ9o_TKRSTl;LqzkT_%_~{&f=4MQLN{yewlup7dIzLCyx(w z#_{XN(#(kxC-fl7tu?z1i1o_>TrMYI(&9MQ`N z^Mv%SR%`8GT?b0y8X-_2du|mCA0YwzJ%2ZxD6e=Rh%g;1+1!x)1o_^1=?1#@)sh2` z6%72z%}aQ#a}dMBL--_8LB_1?tCyN|Vo5-EmnNIx;56Iiw;QJqouekmug*oT7fQQ(V1+ZY)gWtDmC(m5uR+2&-TUc~>;bL05g(n*Zb`QbrHn z)n__ggpID7K3?hbmX?+!~g zQf!CUT{GTyQYnxQKIy8f=kY2n^jxM@uhkW<_uBi;{XR5z(J_c6iy+B<3-AOtG+5(- z;;Y_a-wFq+RV8tWuOhaq$5+4jP2Z88#~teSJmp2XX|&(!mUW`sD}w#?L*tUP62iL-|yQ&w9qMOWu1ak4s(rVS5J^H)1GdQW$?KkINrCKH@qJR%YO{;Gyb9qP^Dv7seYGDXargXrk$s;-he z5H-5bugz~_HF5w?9f;vnm*u~gH+S#9NA2u2{3s6yVkS@gs7>@GGI;a63jB!I<-F*e zD3LW0lky~THN^6ID?0k#o10tc9~i*X&pd;JhYr<}$Ll~aGk5Oby?5Wii(mXA#>Xd| zCy{gkk;e%wr38kO*TKOdr)#pN>C+*PS8Uy;isgHE`xbZck!BQ^c|wL80By)oBIJp> zQt65dN6C%k>qt~M9MSIgYB{fLpZ^*UJNrq}yu+mtl8q3{oPgeWyX8d5B9V-iDX0>zrJ@9UC}sBkB#AcOfAL?w2kxR*EQD&5t3v=y2#v0=ek^n zE|9#R-ms10YeX}YcE?v82+$Fn{fPgK;;WlwN`a8{16lO zz936<6ImQ99x9C1P~&P22O zHAs}{YJazRTXL*U8E;%%WGusJtW3LP08K`ENRPd7%e78=2C9ofd|uEMU9C@N9$ zN=-jVk3{fa-Fyt&+`mZtuSH4tooJ{Tsi*WlxwE>PEt^+BoPx?~nvT)Hh$!}ns} zyId9*E?mUhZ~v5&jFI7CMxjDRV@j63Pv0%QonZob*tU<5@|gQPSoeRee1}_CN(jCQ zo@=7cTq$Ki;hj0w6wM$|c2e)wmD2qQ-H4OEPdqe25GmQD`JravrUEq0^P-6-yp<^< ziYGI`|Hs^W1zB=k*!(eb!!kt#7>h2K|>~M<_o!NN*T5s)qQ!DCeCZJ6NE(&%^!$ z!62UlZAXSA%J+18z6Upm`;FA80%wg2gRs8x>*Ty0XZ`Qwy1fD^AZnOfyw+F#cPZ4{ ztLt`=Fx@+^opNi^94VPYN5l_g2jn)d0OW(@X6+^1CduPrb*qv@0K-J!931T~TLWvT zK$A~w(5wI9IvsvyoALvL)~L$6G5~&DDZa;DYq8qg*mOzYc5q{;9dpwukM`Q(Mdd_! z>qHqX>c@%`<&-PiwghRHuoTuiPxePFSPC95+uR1V0D5tvJdV5&Gh(-v9;1Q5Av#(x z=@}-5R$EjSi`D-CFRO$UiwX>FmDjYhA46XtiFX50CHAk$jo%?PRIZ zL2hrK5T_4Bq4-gS9r~Tqb^7LIYN;5L5*9~_S^D(xZTjx*v6e+VjAFS;%PS&pL8*tc z{ZETxen5_lmBqjF?QhXXKJpRuJ|zp_2xqRXtkA;zoI+Cutc8O4PZ=kDij9GaTbuhA z+^wx`x_R?`T3lG5Q;$5N0+y5z&J2q{N%A<%he6Wzn+GKlB{weQ=tMC(+7Ok_(qRB3 zV883}wL9_=UXz?C%pYF!J-<%+-eIBh%5dQNPM7O6W2WiVxqFnh?&qZwr|EisissGc z2X20s^O39~!!On-ox9Tu4pf-+LtkGZStHliD9#?eKKGJw!1~&WZdE5k zYw;PGvwDZQpEF{#p7WqADzCPjB0!stp(^=A?j3QW%>73xoZ0ev!|-6cL`S0b-fpUZ zk<)^l#$*)3^dgZtoEolRWaW1RMEvuAUK^)h&QHo zl#$U9XVGe1(3b02`r+CUqTCSu(aB9Z(O2&Xky3(xjd~!<`2U+dLO)$RM?(XB^w(c0 z)3HLm1vx?Wj%|HH?)dexdeRXnY%u1nKxJ%nj4oVwl8ziXVq37Z380kk-Nkq4`t|Gd zwLkt7nw~!FN{KW2#F86jD}XInf%MGr6N*y?nE(>irwC}2_LGrP{Gr>oZqs|$uBkwU z123gKZUk4c>E}SGcbJo+5bFNDz%T%j(~&5@&u==53R0_(KTyF{aM5C%DJgo3zfi_D2Yg#|hX9sj-0o>-wTp0I+|-8wDzouH`N=IR znl-w=n~fbv?GxhkfH3Zs_k=jVe0EpK7)Yl8?&Fh%2EA~+MBjdY*d4E!uyiB}!kPRf zSFc{74}bVMB^96)!~=A!aK3H@NUy%~Bbu2xPESAmw9A>=w1U>T*;yrBpwNPXEnT2e zULFBL)AhY0gEp+bf4!YTc&F#>B2y?C^J}HI4In&B7*dI~Q?I?G&M~3sx>Z3+tV!r@CFLn31J|8p zQ*ouL+tvc~;R?Nfaf$Lr7O2oSNJh0^)1k4CJgF-sbD{WKRtn5z+gw!;%;P8tvx>Az z?`m6fw`vFzmtjjFG@1=pFJzC?MZVs7fk6}_i5e1OIuad>qOb-Qe}BP|Q(zed7IqvP z9T6tY`+qo)y1JU8rKN4_byM`>BXd;SG3kC~kW$&a3Zl4*&PGd&eW=uCBVz?OgLH1V zP8Wu@XrYv$-DWCQAjS7-2ZDw#gs~^YS)!LOS(^kS@0LRIGn&ZkDq{Ixy`9>p^D>g( zQ!KYD?`qbc5X7+s_jDnFatGIJb-Q}byWXfI8O*JO=uGjmVBqvHJr0Y6S7@s^p^RwWpJ4WmD zfA<>C!`AqGx@yoj@7|yhtM8mSG(~Tw>a?CB7a2(lo?y3hpyG0TF~>t*2i70DE>pL4 z|KglueTBRZ$m3GR0jOHk^}pNq;iU@+ClSo^uDG`M9>@atMx83LCV4IgmUM-ddRX?vm~+Xbx`0?WIZ{F1dnkRyz>fCbms`u;!fp2vmxZ4F22L*yyfGKw1C*AOJ~3K~$cekRbS zxpR-XzG>|s6Xuq^_KTk@wCdx}Kd*RWkZf>$@0`>Y2SEb^{hlc*Q=(6N{nnVheCaa1 z{m$D;#MHLA*}HZ_^q(L^$DZ6PRH@dK^0*8LqH;rhIZ=+rSlvm%sI-hoUrUZ!CYQAf zE}FU`zv0P-3gSf79qSUb89Nm`eE3iaXEM?n1`#@AWaw@PzX-J;j`KPpSvwe=DK$v7Fj(Y>n7(ZD5HV(6+u2^7qGrUfHf(l^Q1E* zQnyNX_P`qJm9c8~`Ej{WUj1DumPbXHk~m5PN4i1>DX{`hjiSUF*Lx?(Ymbkp6hO6- zu1G8OU-XFI>p}P8i2L#zSgiw}N#|CeRqUh5r#9)0AKa#qv+LBCAGJna-d#XigD6ui zCX7PyV#1YBEKtbz%T-)KIdQKePfk!QcabPETS{<^R4alaz4KgyVdic)X^@VQC}+pR zC|kw}mYB%QKLd&zmiMg&RDsjRrg{yFNAmmUDp|T&D$wD4njRV1p$|>W(P3kgE|sSC zOuHLRwZM5@`$|1W^R*#*W~4+X3%hi`l%;w^DTEdwPCv-SI>|MxU16$0FCN*VcOKMf zt=#lfESDtKvHl$W?wL*c>x+FV_+j5WUVyWbJRSh?%+1Zx_g{XQo`3!mbn@gQ&hy?Q zkI&D~sbFGgXqb*1Ickr)eN}D3_l|>8>)JRNxOMZEO1*O6)u)PC3|nB85#v>FHD9d%zDf3!?nxeEI%%?B%K3M3**h3)X_zv zq99D2A|wc&01ZnQ_aM@=Op$qc8}%Xw4c#j65yI$Jx%x#;X{MYYda1*q53Dd%kF_0x z$}0o($g};lcz=f$Z!~H2Y?)HZf6q=~p%`FS`GD;zAwdL<97ypqX74k5hn@C)UV)q_ z1p}E5*%h)2`|Hhh?>xgX|7AjW(g@qPN zR(p)AMN%pa@qfLuK0y6Oj)rm#IyZi{go1-tCDbc@w*A9e^6!&zZ^s@G% zQKhe3DARZEOw%LE_in^S>e`TY7;$;)t+$kP!Amc_Wc8gPH<(k>1)Cd+JkG&7^P@&a zhRN`fA5i_sPHoxf*)F|*;|Bfor$42s$q5=&X4sh)<#BR(TlRvU_RwXjyZxPoGxP4a z?qq&cV>BZ;QPhgKR%=yPyUefoOkq_76KQILsI}unaX-I$^(q}dew;>CUr)82pN?9e z`gqx-|NHty`h&5flpPKx7kBx89c&0{ocC!1F*7upi89qXshFzW2bQIrNE`qsBtIdMqN3js+4=&Y|5T}=S z9#Yw(d4vAoi5mTL=_xnGWdtE!){%W0U;f8`q{q&mr^laoLZL#6Jif86kg3J_dG*&v{bZJqLMc5i)LR?qE(7kH0yqt$Dt9)M_s| zZv8k!JieZ4X6Wcno!(ksqA$&yqC3S5JusS)I7pK7A{X>-ah_y`L>1at-wT>U6hvvy z^RbnJBCE7}#c>VFka(S=&4H*%3Q8|HP$J;pi&h?%t+-}SNYJYT^4}*XCsi7S5gShL`K5@Z5Gx}W zsQiNll@Eo(*Em9oeL% zQigUKsUS*>h^b6vb__%X{e)2w$?^H;wL|oY@n!nG#~bt)zp2ylk&KH(DIr(u{@Hwb z`tV_T?Ccr(%=8ldc=eRaS%8S6E`-DZ&-H89l*GV`pZ~n=d*`HZmzS3md0c5BS50&!gM4<{59)n@LFUPI1^;9KA|Kavk z8ny0WW@4P)N?UVI2f9o;=cOB7sW<|`k>0Fv5iQK~I-=Gs4wUZA+KID=uFKSIM9qsl z9(R2O$RY!9FYmxkI8gFjrSq%-qL8S*zP=Wgdr}-Jlqd27hPDGYRHu3ri1?wr>Sb1# z1V;*yJ%0~!vr*f}>s-&F%ZNX*T&)wh@)4%TQCzV-bI|oPZO`Xu;zS<}pI)S&{QHM= z;Y)c+HHwOm9>g(F8ZlN-#OGW}&T6^XHR-PhXO4vu?dq|Viz;EOY?1vSlq&6`D22_DJVVZ_+uN-Q2Ho%DF(Fp4y~LvrZ4o;iM2akWpfs*!(ccl1lGO zo$d*7Ht6-cCcSv3L4Wy{q4-B^{`>gjPblT_;l4b5YT`be7^_~0-Gz4nT zW6@T)=8cHj=xHf1fm9X4(n@@94J|wRdNb$!nRLP6&==BDS(~y z`ij6+=|t%fzbrHDgd+v@aUeKS$v7!pB&7Jl>PAG-tO6ydQ7OrZ;z~mv;C!82f!B11mfJ-s*ov~ZsUd0a^sG-zqb_Pt~DM)}^c+(-=N@v`H42YVr;#$^>*r<_rc z($%Jo7nMwA-}L~A3ggx1i>QI;rFdz!y%Vmd;cgVtikHQ~SHr2!lSLYG{_nHC=vgyE ze}DfL6|HN2>hLjo*XrhLWG3cqCzZ}6r!*bQosJB zIIcg)ZFeTdq|YxNm&c+($X>=KYqe)A4iN&X(O$zsRgOOzt2f2 z1|w2Z4-2I8E6XGF<&*a)TP~5&G-xwDFOcr%V#zFDNAnyQ9nsa_r;Orbz- z^Xi&zkgTr5y8fyo(@`84u!Bv9Sk8SPsa*Z~XRJPWzD)FgTzQMWcH|T_hX&|!xhVvxn%`jEUNzIoMQ9}?Lwu&q)$2Exzi6629uma!NN%f(gA(7mtq^j!M zA!<5TEG!2~Zg$XTT6CiDpo6}!U4#iDF~1iJkwkEUbd2KUD1&n7QFWPQZWiW;Nh3IZ z=cr17FHoF_9|#Uok9d|z=t}vXTl2&2a+U^$a&+j4D*fbd@6qF5;DKW8j@7`5`6fdNb(AiG0+#iW5v`3;^jrdwnDcj8Q4(OSwBzGD4{MNK~qirVA-LJ+w)mp0?VnwoBJ4Q;M_HbV$&Cr1OPZ zp4RF`dTxB1rgIhLzt?mkHgqP>+$VjEumI}K_irkc zlYQ^{;CtuAp=)D{vqv5uaLMBsANqnW(S@)G42olzoIW%>qEI&O@0_yCJ9CgSrv^_c zA}7l498w7A!yMrA-v+I5C=oDJ=SiI?)t{~Ff2NtHpDa8i(+c*!c;YnO=u6Xl%Ita- zmtI9Cd0y=hEjb?b3`vw!T3m!g78hX-kjB?Za$LLR9oQ~o)oy)-_7kW*-CAGuctL5N zIR$7KuU^&h?Z&IDdUOlLymX=@p$?>TT_3}fr7p_!6L%s_ee$B zI66{s&%JW!fZ2oEK@Kbgu0c8<-S9-J?^rwZ?S6XV#UWa}Q>MGWEzyaOTK!-nPtAHT zhk!}u9DFQWLCgL7_uYG!I#EDClHf!IdFAoFC;?5Y4{#bWo5}1Gr^NH%@7iJY=9{gnl2ftBpUdR>l!D?N)U*vEWwvmoid0Zi2qrx?wm^mzz|EG6MA<%ABH$S}SL0!>QZ`UrD|N)p@QEr&yO6A^Od4eytY$-#cT{(SZ&6 z;nJzS%17sQtw@wDmvHIQC6&Va!WX_sW8>p)8?3LbD#;A)znls@Vg*lQqoWRb<)J*@ zwE0_@Zy3?!&*fC%xFep4EO1y3QLFNJ#&uHgg8cO=GFR8DjYpR(Dq&^w@reoRdM9l3 zd(YIA3Q9U5r;xf}PLx(<7vfx{DLM7Lx~lvdhpiyaaH{&ik*W)wDBS;)k)|igM1OPh z3jNN|6pcvVMcUMBeeI^M7Wz$7$k6CjpML8rk4>3+l+Vlc&I@9>V^PDT zp+{&)A@Kvom*{N%Ug#kC=|)IhCa;_}-=9=X52IVvi-;c`RcfW^_bCS!svZwY>DR1V z6VpPLMvwN<(99P7>bnbc?sL}k-RPrQ$=J6;(|3dzlvl1?QRo!kQ%exlO(e?M>2pu&v_D#WWbZkdS`f8(LOp|jdi510iusK7UPfG$jm_o;EzHlUw&#Ap za|xqQN^H*~)uxljS-RlPo!j)@d+({B%Zof7hC}3~JTBYNZ@$vUtG+|m$174XgG0m0 z_J;eoJ231?}Z-%cykj^C%#n=9Xk);zmb^67^ zefk&2PSgBQo^G0TH}LDVmz}<0c4Zv2c9-OF_}*b5JSeX_Jw=89+^;Gvh~wG|Z(DsM zpd)GsPTFNi+O4liD7y!p;~I6+x#XyMt*_Vs!;&tvcb?Q`(oE>9#nCu?wXc-LqbMVXQ$<3~tkW$r`^6!&65Jiu>HImoHsX?fC4o z&#JcK`}*9(J?r^2tsv?|3x`T_qQ3EZT_IQOd&ljD2goT?PA4%c!qNp(Q-^G61CcUB z1*Pfw-eH_KtbVefeD8P+OpcE$^u{n+tJ>Om-!+_tNmm~Cnt=VzL1M+Y1b0d&qpE6L z7NNDSmG70)m8wq!Tp$O=JWp{um8>ygc7Q;!gar%FGDoaf98lvCyK!z{zP7aEzh^I$ zM5E~pJ=4h0x9`4B!&bXIIyp@jb4^ zQUM63R8XqTfe)hsQ-=;k<^<^Hm^2xI;ebc=PcQC|AD&=1r1Mmkt}Kt!7f#-%zVa63 zt?OJ(kGcYy@ZXbs5~T%Yz3)zCfcljG-YRkSW?;{3oDK)tb%!g35Q?`Ab^fNcj!~X55$9Jb83%TzLV8bU0Kd z$s9mI|0fOtRk7}q+pXx>6Y2kMqX`X_O3gZaos(9dI9E&2|9<&R`fq0*rQN|kx|*`d z;|D!IdTsdSf-e2nu+a=t=AHy15=Hk3$OzJV2&8cBlH>Y8TA#d9WZ-tPdd+l|?>G9HyK-CnWQNJ8` z5?*_qp359M1T7J`dU*=3@7_h<nQP4wOoN zTjQVc8tg{pA`tf|7j$r5m^?lV^7zoOy(tJm(qe(p`}gjuwo)9J7zh+!i%J6;q|$ea z=i&3Uw$X8&CU$Fdy4c+aJ%Q#@2&^dE{?a{)C@>7nM5g0U0 zWR;4S(s{QKkT@JET{#=qCmpzZofD55aYNGtL^teS;^>0(`uZEYeBF6E@x&l4->=g9 zuW!+bj~Z0j%qmM6zvrcFLqe{MW01JHuTM8ip-T*0t!EBSxjxJN0MH8!O+As?( zs_N-fY9CZnHdBgpez-qHA0OYO?TSHb!hcWs;Bf)K%rScPl~+{YGi(I|UPx5KT7=(u z`zo36D=U-gtnj@v$kWNk+`CJD&)vIsl=?Uq?sMM&so3;s zAJYSsQWces?_DOFa~CWxZe=IuSTMNHaNpryJFS!og+47VET}+{(|D$7#zLT~)rtzv zIbDpbLA#&vYJ-mNHtD--v-G9@aT*yPqkE|aZ5VW*8{;sD59Uc}!y|oHKZx_Ye*IFH zOBNd?q5ITrL{MK}b?#QLIZ$DBp!D?>ea27MGBhVjp3Cw?2odrZNN*!A-H1*i-XwPb zl7qus8}PYwU8W?x_L4f6okU4Zb=x%!N#XSdSF5T#-oy80lC$cntrbNH^yIDH_ z5_i}FRkz4nhe~+ofjrNPO4{L_#NkA#KxK7Rk&ihLu!SAHKZk=TRvm}^3{qjx3(`rf zopL-dkU71`-<6T1^N>pCOgbM(W$4Q4I6XJDN}oS^i_*I$-EK~*;FHn8hJ%tA9=y%3f>joxpRkZS>HP~IjPXP z6w-cSyx@#I>4Kfou0mTlotAewRLOC6kjmqGW9fp!hmW|a4cnr_2!zO3y?xEzUq4chSjg+b zTr{q?QIeb~uN@)EiRHkmY*^2@R-{KiS)hkEwrTNtjb=WSq4HWr?a<}t@^g|pQJex9 z=pRr45r1AGU)ZN)9)v`3`i{{DuHaH>79VmtADJgJKR>U~4#nSMsGYBgHxAbG;4y%T z&L}!+VZ120uQGbDDoN*2mCmHh)~A69{ziq zjg0c&J2Tjzr-!#_v6P{$nyG@Qek&N@=g8bBPPwsB@c-~)(fS;d{`|EXUAcUjUi{qW zlxU=_6V;?oj^ClbekW_&CRyKo`0!zxumYi!VeGe9+2?y#rPm7TN{y>ROZ8n6^A*OUy}`*T=>iTi`FfFpZ#0}VuxAi!Dxy5|#5jEi zowuk66yGQJcMdc`sBZT&Xa(1g?>6ZlS7vD-ouT97lk`TeLEFMZ5y6NqyV5N$yC_F& zG1yU!g}oYxSFQmYUU8y)qzC zu1=J-u=e-$t3Y6Nb;Z_+NoN9)s9LS6h|IjWj61qSegTx}AeDU0j8>VBFd;9gg^wP|I z%2&2%)Toga8t(b;ng0HJ_o_{N#~%OyAOJ~3K~()#+ve%hhc>O}Ql~rXbrnR}UV?R{ zZN%~pum0i^{od1Q`m2jY`q;-mZli>X3~ROd_Bws}#2o$AI|W5nK4}GC%nu5qJkHPI z^5si(?dnw;cLHD2nTXY*Vm)_5^{a*_0;QkZ9&$D@9pv#OJnt}GK^|vb8&@E5p+de; zK#86DUfEaFeLAUWpifM;U$>4FQwOTd9)G)Kg+AGWuI;H;C#y|5S!&RCZ@))hJ9?H@ z`Z9DQW2*M@t0D`l%hZb_%Kwoe(K)V?_8=GZUUHtij;PYb`YNlG^?6=aeR>tM^pXQ5 zmB%?q2g1wO@5M!y87r^#wbvXd2@HWVrx#~Qy-WnT7_&N+!>`d?Za*UtgwU&se*zycKwDW?fFyKAkA1S_?rY6K`t{?CtJ61roJw?Z`Pj z#_zK&SNsDgUNrc%eEn=O!rUE25VqbkbK->JW-+mx7eh`3@@sI9QqQXs&W9W?*a)!w zjqAUc%e(xcR-Gfek`3i-Kv?eV=4{e=Ax$TTcj(E{c{-6^r;9sN*5_q~6oTRFzc*VQ zq{oUS`t4$!CW-~Bna;Seo)15R|LM6!`qZB;(?>q}S@$#GdzY?k(3j8b(%;{oR>5Z~ zo!VE;Pp)*qUQn{UyhOKe-&Xg|)qr{Q0aTGW6PasW(rmWqx9Dp0cpvnfB)70r1Qr1l z_tW8#Q58Tbx>Z5CQh#+5FD?nN5A{P!`3-! zQQEVU`}7-F?cU!kXQ;eVpyN*u(CTcBuK#kK9(mr{eeL9_x?6XVC^z*ZI6#m;VBat1 z;vjhE|8cOfyt1smi&H9G(UoQ-Af56Ipjftm+nZA`jJB|#CckH7bj;Q+nw(MuVbGt^ z$2pj))oY5oA}5HXIX3*?EQNr{Hw6n4F{ssf%5YLey3+Xo^-+#S@(p@qc!lz19vf-e z&cJ`K=Ig&#VbZx3h;gv>-<&N`*;;s4toK5Q^Y@NDq<{TF!LH8ZDn^Gq&IsV36-WI3 zxo!H{#$$VWPb~qIDWnTh%BSwe_3QM@U;dIN#>V!@;~L@u4?_@fRlgR(s9uN^2O1nG zlOv+n>GMGVrL^X(XU{>lt~~Aq{n*}tHmb;#id;FjY4u+_#Tr$4+^~J`N;@=QZ4xl= zwhOxs)tdBJ$)smQ>bxBmtQ>PqPJwwv&^ChAt1vbj6XaKf}Z)>n*I&}-T$op-9kCEE|{E97%~W=LAy&?8XV2j)cG>~)4#h*7rtl(JefS@X)m2; z(0&UK!$IyCk>GSl-Qno*e{+CiSAM0`qR#0sRc0?%a<05%w1eM2J~r;ADmVb(MR8(k zlE$oskx>QRL(Wi&(zd2mE}x^FostU`>k9KpRPAv4a#i7;W?Rnnk5lMVD%HZA@=`iy z()qQuaeCqCEPZ_H0rgiabfb32m87tr8||wgQ@dp=z-jhP({tlHbSPJ)yW1J6TG#UY z$Sl3^zb(-Cp<^^ZXZzmOmG50Yoji7gUYK5>@6R3eR34WWDU77tx_MJo-<>{n%1-+k zMxgRGP+C{tNvQkloTw(|AxCJpQ^XZww~Rg=I&^5i@_4`xTiiT+a9>s6Np!3s5Vdxp zkV2}RA{nJTp2@WRUJktWEs>oF{qzSfeDzwNs_@ULa}`!I6P$6a>o;QS(zePr_Rl=aMrgojt-R z?R%}SQqRlfL;=C!PQ?v`9AR7?BtXA@EcYZiQhMqUka%3(BTNuTtp(-KJFPOnWGn|3 z7Rfk>T@pF;s5yOoURtadIB(G#C7(gOSMy|Y6nK9r|yW5iw5{kY&=N_X9{P2OCOLiu;ZgNEyoFWDlt`eU9Xk&h7Lb-|ypN3q(6*nyn0xnJw6) z^LoQsMD{|~CaRtKN9cBCkY@TD^x@GBTHVdibJl14)jzLOesEM-iEv*$di1E`1ofv) z`ponk{lE&MOo5z%|AdMdCXU~CeD5a4$0-LHl~6iJ4HXQd&)e$uFjd||q?Ads6L9J! z@L>@sXi2HvbdJg6lS;b4Q+eE{9ByG@j@DLIY0V0xpde2YQM1bv#eMES))jetoB9fQ zyRyhI+H#*p8YVqnYSQ;s9?~Bb4^wVrklxBPsbt3Qml*GuYjj78B#*G*(5V7(5DU3s zmYmWc$BHC4IDQ=0s7L}&UPx=M6%r$MjI-l6~E@F{vP-=tesfZI%< zUt*q@2zXe|OPF&nj%z1Q0ZAchVb>Q~{*U!FiS^HmqlOe&(j3>Y&K^;oFV-ko^(keN zI?bTS42dLP5N}oS}{_B!F-j0J4^<1wa!-DR`a*q;0%Lo&dcVRd zUl<~z+SiJ>kcPPMVyA-Bf=Yc=t2H%&ffL1x2LGK=qmkhe^*29=i-QPGVc|2|AyW2) zpHZn54mQAdkfircb);lDF$`&02vps(BL&f-D>#C!;G|V96ju`iG$v8H}cgSRj#M%s@k>ppW@y5FGZDiT|+ve8Um;t30SmUwPA99h4#8aUgu$Qeyr8bs83j$lold%5%v(3tUM zR)BX_i4^6u()xESsv!Z>h&(JOU)c`3iGG)_&wJ(6s#)}@&}9)%j54vz!dh!N z;xD9;&30j8#a})G4pk{4h~8VB|3#@t9D=V4XI=R)L^RLYi3R^{Fh1|1Rm|rr0?wU$ zZC<_CUnt10nM`+(_@R}kHRt+*bs`6LQ7=b#v)S1g*sV#6Gt@+}>hl$W5|d>3>l$#V zo%`{09z&J5gvML*dE2$V?-L(Xji)fz0BV!PC_m#cI0h?K0M|1akYADv3VhAWM1_M9 zB)#eWdj&CcwuPVM?=<%Xz51M{4gk4$9N&3~rTW_+h#;C?B}Mzee|M%Iee|UX8H9E- z=T0JPRlQNAo}7Dxf`GHWQ$tpg0AMaKsv}zoQgH?+QH3D}Y?+LfX2dVi7 zP2+w1U9JyQl51m?5N(G(-1t;cE^1y?ISt!-##uCfZ!aQ}sQvt4boT0T;vh#L_*@*; zA|b7G=Xg2Ops`p9t+4XWoTAMuJ6WbG>+nVKfML|xw_1Up@*;@XU*@vgt5zty&2mb0 zJH6`lNWrx|u{L8`L;U{RN-eE;2GiSip9&bcR{BrB<7n@vOfJRC$AYB-3s!U@5Vc^u zJ6;3?dE0-pFVA0{G>RWZ+Y>=TJ$Xtzd0h2!!##;aHPbH8fe~2=a$T4M8Nc47TqZXw%Hv)d59VsntXBT1D9 zoZc(u^g=4JP>HuFx6QLtURC4Z40~C=Mov%2rZ^}yiE@!F0OO~%hra;Tw3d2fWn#!! zBQ^_i@vJrIjbkI9%Ob{Q!g0iUeE{T`hvQ?wa#Vd8hp!VQ|J+y&JXMzWyVrlpT1a+@ zmeyMFxng*&%i=8CI42byohMrx4_&+5(_N%wfd6&*o71-Rk`)i`upHemJV^E)&I&f$&aV*E#e!X8>NB`9ta&*hjV;83Y#x-L+{g zOux2-O(X`5ZWSI!=ij=F7#y~Q=`Y-9*#F&`=l>{_bB{ix#K}5wD1^M)F+Ru!l#Lmu zAD3`6`5w>eSK{DfyNS(#xfYH5$UjN>id zQ)U@Sb)-1k;!g><)P+jepA;7W+LwueTgGEnrXNUb z^o2>Wmn@UgKX<~CB6ZJXswI0EtEwMu3}2M?6>8moIw`V{YT+moZ~NY8w2W$m4@kb( z6@sgZ(%B0jdo|O|&2x)`4@|VQXo}Ws_VraMY1|=c8Jw zZJJj)b*c9h3krBbcvFcCe8*Pc8_0XsYKK3q{&~QAT%oS=dYCuPnxA_3;kyb`e?r4~9o#U(t^-y3&H|F?B-xTlqrTXJQURI8gy*BctR=np{3qBDogmtfjZL>8zo*zSAvz?HZ7f)iCUjF zNm&^=d0fnAku@aW^p7!S%A9GH|IXA`+gk7f7 zwIo$wcV`_+k@5}3?W+EzEA)8OIIM~MH!;p3x`nM;@@nxf;#&GSI)9CJoJxszyHoKp z;hQZzZr9w1yErrd3*KRn$OcX)c&}vfvt|w-E`Cby2MzMH2tTm;r()jC$KMvsd49#V z4$ayUJpS}2vDol_?23FAYgVYza7t3a}#X>>Zw^)ad066h0gjmf2+0AWE_Ank405f?d@7+=TR*c(7_(1S1|5Z zb0tJ&)Fy}*y42Lv1cLUo;Ud~cB0BB9d0f@?_W=eaRG=6S4EEw685?!^D= z>YTCj2h3WcF1TgAz--gCaYu`?-jL zXL1bZ=ne&qy~biQ2*A0HyC8$-WFn|AwapI>WZVlDbHk|#9Fxhij|6cX*X}q{%fm&B z#EIh?l^Ganm`4Is6f$BD{c;a*m9AFiZUEyBhcL4t>^iL_7c2p;d^(<9+$t>9H?B(>8)F&$k6-5OPUr071+67#W&nzSx|UJ`?(8! zN@br5{d2&Lh`Or&s#QGxIhUs0+;;Z3d|R$M_B*xm{NSCahEe|gK!pYnUZdiB&u!M> z8T}6~1<|g%J?ayG{3rZnZyY)I#^G)(izlQYr97+;+z30twjaeiC39b<%o#W9>qVvJ z4v`S#7HC1v^)?5`9jIQPYCEhw_0@?OGTfcrF-~OcUmk80dx2I8Ce$7CeRpIgIfG*` zbuGosL)YnRpoWnHG9vAUEy2 z<}GipL6HTo%dOrslqCb&>5vZvOJ=hB>*IxW^DRI0&3UF9Uc&cQ1DzVr=oN~~YNVl} z>qTV2pLG|{)~v}-X`Dj)5K0QruSPY>2yq?q^BPrzO}T*i%GJ?mJGpn~*Y9bfhX2qe z6805#hhmGqLdqp_xu|0|3$`AQ04r~7k^A?am(g^&MS9l1m<{;ttqMLgnPnblD4Fp) zD~1?l1C;d*+q9iUbecbxOayLT9_{^ZRikaGd4H%n7Dd_*v|RX76fS{8&%Kvl^v2A+ zVEkz+VqkA~rVjdZ&!F9xbh08IHOL8B!ah7Vrg4c z`U=0)CiPys8k9TqbsE&oe!&Ivh-g_7F*R~bZQ+`_2Z<`Z;X+@nLJ&80Sy{6=um@aO z@+=z0(v0nQ`hW>l4wU^fpT_uH&5+AlSrtp|)aHnoh=%)gG4>TbJh4|iEvHcLg5FL^ z^#vwYOIo+rG2ekKBfw7fn*;C_`&F;Ln80k~kCd{rEi5Y0CS`btNpa{LXNIuiLO0f^ zEXYRZUlzDoZ^Y)hV2ih1cN3z5SZ+RD!?+yZ{?I350rIwQ`z! zKk^zEQI;ku2}Gxw*@^qOM8OsVyu50ga&hm_%!l|X8wzR8B2zU+-&x$ahBV7j3mksY z^d#aF7Au?1GqM0|?P0TQ#+-=?@D*Wdvz3+F+juo9_yd-ugAFEjSFw|(7|h<^uR0HO zb*-$V@r~>PH4-X(q{=Ew&tdl);W?L?ePw%!t5E6+2`y<5YKpghz;;Jm_8%Il>k_(9 z-LiOIMFs2$+v&jLNrQt z=t3*XTK3Kle&~xg*sR?1>NKqzH?bwFRxI9e@2Z^nR%EahrQo83(=*qxG)8atBP0(8 zvaOCPdI}kA8+y@mO`8VbBp;$_<4G5;?Sb;KYmemut`L*JGi!g*=kKJxOt$cIGvm;IHhIvLS0Zn$|Sp_Q;>`YASvs*Q@y@= z8S?LYoH|3QB(5J%s|b;@fmNGkria*ZVl|_js-T0`jL$ONM*-VRKCh~WU4B^HIBI|m z0fu#nAEtwth~#-0z2^f)Letv8=HOBDBc7(hb>w~tVxj3e_-ue;f*Hhv0@PY{I3SeQ zkIF|3(MkI-b2q4s_h<7=Vpb)t|JFDd1%N|^7GA~I8=S-p-ZwW`sow1Gk5EBN@%oK$ zGV(kdE@m-#XIeJ8ERq}Cm5dE68!or|1X?&hLGd#`^mJ_>EoU%h_2+KGGu#igc@0$& z8t!zKnXbF*(o-xk7ij`)cwr@iJ7}$i^Bp_Ur=ET%i-PT*_d+z1pNyXCInqg=n77MM zNj-HgA-oHRUEGT@R^qLTM)v?0^Is3X@LWcA_-d|AOmULM>2)U1FJSTTA8HNEU~;0< z;GglEIRiJwyO$tkQj`*kH`VJ%1JOmlOo;A?ze?N|S^rtTuUe8*#uSEOIzruHV`c)# z`N!oo;;R#*yN!73H<+n~cal@bedf{0z+R@%wu6>M-mFO^YN!6t;<>26h3%IDNsJzFallEzO@%I^N&-Y$FC+Ve#7 zD^M#|D-O-D3Jxf_n3t^02*w=o_p|wZwZ>GYaaozs57HsLHO3~3BOPG*yXpOj?jx4x z)2f6h3fX7+*nWfFg%~Jd`S$Ib$5nkj=P@AlT+H{cplY&{a-m&#(z!48xA)G<$|%>e zgu*4_UQ_H9ZUS@n&$vEW|Q6^oY`QY5wFsmnC^j+uoxWesMX>Q$`o5w=O6% zJle;+vT!k}31|nmFDT4Uxn{{}sa60wjFrvzzJT0oyPI=MR~95ipO7-&x?wV$EwPG| z`W#1pPq1_#8DzcEsj3}fjj*QTghVj?_6>F`+&UToMbGv!uRxKZ^;&whrg&@ znX+$^(K;jva&^x8SML|2+ouq~4=yul=bt3meKjt4)H%GFhhuE&y?Ir^vzP0k3frar z_emS;0fnH$U$zx6H64SUmmKb+cUl#V>wfBBe2)~;`WC*M888nsE^hALKE6wx6x)zS zRw&s@<7+0PENps7WKz$#BC3^_P|*C2DX^hEQ=dlh;k=8t{&O(uu2!mO#{h0qocWHX z%HFBTj;id&Tmb^u0D_Nz3MI_iyQF$1t%?sOfBF+>k!2e{)Vyvp&8Qla4!e~S)#;^+ zl@ZHy)l(+s#tn}*9>!Dq;?x}sP33{^71E+OPxQ)20OG-fHTNROElwwG^4+TlLJ=L- zY?lftR!{|L36qX0l`N)CJ0mEB%&X{iYU&Hoyr5;E@S|xVy+QW|o)T*^XZG_qLA%&G zv?(df$*!)>AT75O#kal<#Jnvv!bOTgy3UD_Jv~JoAOiV<>M4+u2G)>o&gEh+#$B!) zzgNxs**A{NgDXG7xQCno5yJ-nu>LR}GsxUFvzZQ^Hu?f;$YEVf8HH-bj>dgtwGTQ% z%`9Fox;(+1QSfT0`w0dmiJR%|o!A1)eCA}st5Fmq63oHRTq&y6!hLqvTMzan>5+-3 z;E7N<`Rp~@#w<5vxud4VppF*+HtDebeQ*>1*V|rfKZ!^gs}@EL=JE*p>>XFF8hdez zYuXc;vg#fTs1!l$2s(MJQWg}`anD`(zN$FcL*Kc_9x1b^;p9qWxcVw)INs(}vs|RDR6zuZBty(&UUM6wHGj%h$`O^WmVW>O9!e ze=}a*A6w@hm4%RNr!^@AEIIVRjcRwVI@1O2;7w5P@+2l|`8i7XGwGOj`K}Vtq!<+p zSGs~?sNSuAbam$3vb%=8D1Mxu>hkTt4hq>}Ag_k!=Zea^+T=7Uj0C`uxUE?f#t@)H z%24R~`;Bwieo@LgcjD86TWsnH5nN4xyavgyojWRu9+{~AI#tl|-G*Vw8$FxvYw}m6 z3JXlbTjhX+cY<)2pap(|ySv5bo1+)5@tR~(_P3FK&vaUKfl7P$T=L=H<0{{^E0H{( z(X-LfOO|%C*>8Ba8t75>nsxJ~qZDjkC-#=udm&y6QI7T{u}>$xLTM!X;1y1h%Ya=+ z{G->Ndgw2T%F9#TL~P9(lrVzKid>%Z`&=i6Dwn6Xx5inR2+YnNSChTu!chYp^tRGg zjp1vkDF?mx_|1l0j{}phjNR8ie>PN@fia{k&U6nc{HTCwdx9b_O|qwakWREfF8dcZ z>8CFo-wk$7u5rl>e_QHcA@eXA6PpAhUweqw4Hy7Bq++a=a#8GpiG|t1D1K-68fMYp zMPxYlsjuhNN(!qPQH1n_e$MF4F*SU(^y#?Yx^X6}*om^rZ2TB0WSN)Ifvks6JOXeD zaffxaTdCV+0?4yXr?))Zy#C`G>KHs3C9J%a;@JUk-UBDyY#g#Me;w^j-9WEN)0R$b z;!jmY)QIeGPVz`=d?%iuATUzA4iErX!Ns(=`x(dCNKP)(8$Q@~K9`8Qx&DmcoXSY0 z&G0^VEQT)Tn;}?Osh z##$T>m$Avu4d}rWfoMW+5I%y+nko$JOz-SG5-K?dUUW-PE-GiClAo1E382H;P|xf8 zt&`=&W!?C|!Lvv`a)(L8-WnScq`cNPoIP}aky@StDVNI=)zOR_C&rTBpYW=>c_3zQ z44OnbnSu;GInA7zQ&m=M5#Qb_DWi-TTQ?_b;5|}x^TpQYktMQ!s7fMQsa$pAA z>Kh5L%8Zr)g2Sw4E}m_2+7;zb;2Y0Fo+>{| zBVWXQ^T3?AJj(^MYnsza?iu44Da_~$CZfb`7;uJ0cpYbSCW@~ZyY8jdJ;Jl8Kp&&I zm{c4!&xCGRp}gee%8IfE)3Ko~aB7e3_+(9S1EXuw5evU3v>o1RmF02HZa%&->9U+1 zZu{OeOklz^poCmzNW!??2p#Cb#{olp;*0Sow@OQu5#MIpaFp<%o{DtjNK@#|`6Oc* zSqn@==YDvrXV{no!u|woj+)JMR7nMya@4^&&s+J;vro<3$La<9hwtc$KaG3ub6$ej z$(~9{b!h7hIOB2*yp*3%u3_G!rdiiLBMp5GQ42n#nA1z7lblkyq`346bYEZV%6w?V zNyc@^zsGMtmVL;Hr_RD4)spaX);8@Ta=vEMpAWSbr$KZbygntDp&PUVeW++-iFlqu$zNza8Elu z_H;7k!p&>-VLUZqnh>3M1X|ZlrL1H=Gtu%sRxc`di=~ zb=<8Yq-aZu<0Y?R-V(jC_{;hex_4)%K^K69*mDt!*(AKb2f(0c|5V~euMf#yE_f1L ze^+T%oM)*~px;0RWq|M+^j`4?r|PE8VQ4#2F9ybX?O2cmsFP;40uadAHVmVl?Ynu@p^^qv$rFjEJHO z{RcKILn++VPdis+3(fIfmvZFofvArvVou-=7ge>e^g@z{R_JzQubUzK41pVAr>ET=A?6`%@Vsn4AV~OUx0i<$?H~&B{A>08ZKs~OV8xLE)l;v;^O2} zqvUC3Q&8xz6R#jOeeM!cIa0TxAVcM6U|5yUGXf%jOU{9B}#IUmz~#&<*MuPjk{>RyuYuMa< zJi&=ne-;Hr8C($4e*bO}8d9&iYt@07MraD?UoaaNHAjS0SPs|`?It4c6^Cz?+%aA{ z)|DeHGbf4P7H<`Ckzw$v+#Esk=?d&I4TvT)QiEny`(wqW4xIbSd^m*L6>mb`DwauR z7xs+f&)lVi@4vp!nA`!ql-yNKOiFB%aa*VUG&z?oK=3lT6}v6UFBIv{eXDrbJrw%& zUL7DZ>YSbe@0&`T0hl#Fo`P2H?wz{-f^x-tCpX?TVZX}au_$HB|CCnrsc<>hT4zJw zSi?Qvk@4NDVj1hathTsvgC^&9;=m^p2*SU1WOwiPqEO=TFJ#A!%e0}Ul%_BrLBQA2 z{@r93$QS`zvd(F=7l~V4E!*hd!6?!TCT$tB28jd@|Jfm*3r;@C@>lY7FFLwd-Dz+9 zWt!z3{m-tL{NnD#J1W$9l5v~SbWb}mejt4goKzWcMAPW?tYelx1L&;=+wxQ|L{X(C z^>E@F0PTl8NIRe7v^SeSoy^gJFX1p1_;oq7AH(J5AGBb)^@iif-{x6K+27vgkTS&G z#Wn1u5L(xQ>!arEIGft#^_0uB>LU$bw2lnwWnQrhEZ&f%DpgRF}2-REV!m_&3bm%NwA<@#eNf z4xC61g68khDX6kZPSyIV>+(>%NhMLr5Xf;08;@~7VIgz>8su>o!^@!0y0KmkS~Pcu z+Uyhak?}>Z60rP%PO{h$rlZr})Pp%-KCW|wMxgu*8(-D z2TnJ1P~HjUMY8i&dgpB0S}I11u7eUXtj*p^Y^}p2eey^E`3_}%Stw-Er{tQ>-9Y1m zG$v#v>DEn!S7zw^dr8)>g%o#~)FatK@mCFPSsdSAqT30e@VjJ=isO?Vv@EX$KQ<-Q zVHwb%=noE}B||-DccVvKoZE6EA`!9M^+aK@Q|$uvg3s1)!7tB)%!hczl6et2riK3R z8$=jpeF2uT78w1)^8a$Ve&*6jyb*^SY%y5~SE_2Ky}A1QkY^#hC^dc|y^c2th$C!W zdvB@aw(v%)RHQdzPgu9s`d%i~pzd<+y=7cdkX2&WMIzh*cIxDKeG-B078M<3@8zWr zj^L2>#FvjthG=fSPf$BxVcf|atpag8J0%|+9L!`T4RfK$olRxwX1aZZ9lc;bq@W}W z!>+)kt^1g+r!y4yXbJ!&oKny}4ws{z%P*=l=RaOp1ICxaUXX{cnj07S3LETMXab5` z?$z5h2`B^y{geaBXzc82r|f3M2)8nmAzyak?>l|edT?q_|8||Aqce3aTK!0D+4JN6Snj^%BcXhra5h-*GRnQw~x2gH=IYsPupX zE8e6##6?pXtHhVe&GHdtK%FpePhrDbmQ}io?%VC&NudL97SFrNVXL`<(ZOdD|Nbye ztS%N@bzl?ZSL#-pe5~@SWzE@qmg%Fa3eM4pbOvA8qm;#Jwy5I7wJ`aHrZ}o}^~p&n zSViiNH1OEckX`DxLJ7KeHGsKt?L}-QE_2-Cp8V}v!Nj}qj-CCQ?K6o@A+mE@Aj5ZF z!=IoQPR?Y{CR_Wp4s10F0c0TO%e^YOXbv%5s4zdl;#D~#272un27s9{Y(TTrmbna5 zRNW(*mICc$$4_CWQ2s=CZk(m2rtU=+)GIqU91;M%#W=gdH=3^mN_G{cS6%7?v!Q=KbpZkJvXo zMm8J6lUf6IE)T@y4-6IUtv&N-F55%t}#J3CH_yvvI~^M}e0WQwu$o zm$4!z~htW6U z$SeCn#1Xb=SqKFm<1T5S?l(5yaQ^5~J+4ZPux z`v2$tD*6Mqz+WN{+EGr~DFp?$ht*`KAx(1+)j-gia+1^Uvr4A*U`UpWMYlff&1lMB z7@cQ{3uA7?vEFYc5zpW6_fRQxnvClzNboLfw;UPc^xB_>XbMIosHK@&I!-`5e_?mMHg ztZHa#Y69o&E!}6x0}>;YK}AUk0+}>eAJhYc?(}u`GU()^3P#+#pskFlot3y9KVwzJ zf>t$bMX2-Ymsu27|4MidjEyfLXY_%5IC0@}$3H$&B|I1UI|MCWV3lZcp3U#RXjfg^ zQHd(vnjm*38M)l&Wz8wibPwsc9@+7#>XxW*Qp0j+DVMIQz~@JmclQefX%EK}RwW zRtRFFDY)z#?NG%R$aBj?V(XHOjJ^mFM%6y;Z0-(5;h9s0;-z;{R|)O?aZc}QxlH*F z#AU51I3sYPT@eu5`ua=|AzA0Cn!YV<*=faqxw#mdM5-$)9=z?R@eQNI)08EQw8e}W z{W!9mB@z=A|GNLuyYe7Hl}{25hr77#rc|UJIGL`nRo6WT|NBVBz%mkgzS)XiuoqDk z{mguZ*RMJc?K;G-N)wrNhHUIzQZo_Tl?U#Kd z1bJpqQ^$-1MWNv>I83Muk-1~b!Z*^BIT^}0qlLfH9%+Rp8i<(A=ff@eyuWpWN_Y2x zu{8Mw8?3qqiLbLCyJS;Z+4>eRgu?y^rV?SNUU1@X=SJM2T8B56d(ge{Imjv>KOkcgvO{znJqW51f|&t<*lIHf(ku960G~e#_!!*8OE(cXC<&$uAiII=_MvLwH>_%(;9Y zugw2r!^UNQR~$!J^rNE6aE@>r)Y1*`+&%AfK#rE4d%?KH@@{`&E5C{Fj;6hGDa?9= z$CHREuwz?&-uYGNQFsKN31P5H)k06?U~KuA`CAsCopoe-Ox+@odSwcx&Dumt|UkVxh~?VbjKQ#HYL{ zILJ?7pwy5YEWArCCI3b<= zXkDESNV{-J3W!st=Yp5Qv_0M9;X1^EE`WzQ6dyjPaUvllPk>Ql#tp6u$avXGeMBc1 zO`C!71@&mm#J}2J{^U3jR%y_1+a~;0jZVSQAwwxN% z9$5tA4+>8+(Kzk1U(*=^5vT&2d4m|>hNqbAS4McF|~xE9>EW$%U#Cf&{b)oaTBT7Bp_l1^Fg znORH`KTbb*fBmvIhh&R9G)MmDl7F)bp=QdYsjzph&DE>f0_pkQ;e+8yrDtTY^Y(Ob z{_+>ytcsNYG#a+kWt#Mk6fHpo{i3HJ=MOlCl%MUfrtrW}3gqyyXTU4zwncoM?GO6lpOE8*jxCacKB zKEHmwS0;`_@5mG-4c(xW)&S>R{;pM7GY?d@plJ>|S)CB5Sj50A%jHgQd~+uIv&0ud zu^EuE1y=eQKFBE|f`j6ab}`9!WpG7wlg%m9T>Ju?#n1^NypqVe=Ph{nnFAKKWc*fC zlD?t5rdYKF*AXKr%o`cABx?~0=xN)^8!x`Qqx)y-13DIy+Ux2fpZ9rVu|?>G}r|PuS^hI%1DMSd^zcK;CT<6-H%H zHYFuQ*`V4O?3{vq&zkwP`fe@1_^LN&p6jr2lf8&9Nza#;nwFNfG&PkNC9f&3e8CW?Wac{mW2`vmsOAY5rL?^rEP{ zmU>Gt_BJY{tx^pfB^m=b|XS;S>?4PtP<1OQ*v=*Sx0m*ilVN- zhO~Cu_>?3(J7+F{D}=T9)5ArnMN%s@g3lupv93}mpHJ~oGP<5Z)g;^lnG3k#Bbk|c z8)~`nnS8E-U*7Y1B##1s?1PdHRIH3@>f2TKRv+$qX{185+gYwx$V zVq;b01AOZ39udEGUp;Ojq>9V(0!D*gOpD<(UEfK8J(jq;6is_ospowK~BB!-BBDxRVScRFlcE z;mQ#F4UCv!G~ulB;H9^RdO%kXgfJFY`$c_B@f6$bqskRq#ZDy1Y%;esKYX7@<`L(S z`aLFQiLKPRY-Pajf3PdZ^Rc(108wE=rLXl&rx!^Fr8njop4-!*iuOrSs~Xe9sl68$*$kf zvAVUA%)2EU!rCe?;|_H|`lNA4tX^P(dT3P!uHk6B*aGWVEcHCPP9O7nkxM z8-<11qg(z}A%GeIB#zokel`VJj>)Ans zUZkm%bHdDSuBGV3wvI{rQh~2Uhtkp`d}MrnDT+ATYw&t)3`!1c(y9=z*peLZ$RWi# zpyY~D?%`M6!LVcr*hau$Fk7sQM!WM#fI>(`J=fO@NOTe9S78@qJ26*a z4^#iHp(dpn3H3^;2*Avun!lrQXpFixN%$5PeM-p!qPL!4b!{rq(^ z5bXuSx_L%q(Ra*6@^&_ZG_bh)5}he`m!y3IJq`U;rwv#&t(`R&)gaPH4o?1D(@=$_ zwN1a=yOb+86;TI1+f$X_*#TS;>^PkFvcm3K;0||xoPjofLU`Z?uT;Tsqx_L?y5rfS zi1XN2u%o(3{@nSZjeYq<{Fh7DjBV9o92fUqC!O+M1(1=9Zl>xJv(bR5$V!>I8XleE zMz#EGaaC74>c$k8E69A6Kd#i<+qO}-0Sd0p4)12S)0LD`h1 z{UpjO-**FT^&PCm1O0=p9VPM42?v_wM5y4kf&E2v|0M^-!gJw@q}({lx0|%kB&xdy zv}!Hbjyy6|LYN5m_b_rSCWGyTq7UkC=V_I*^l1J~JX(o=8&J_7hu6wZ>$9@0?hlq2 zo$8YqL207$jNCp1U)p07C#5m|k|Y$UHfee_%}!X13>S!B9BGOa(Cdu7)KPgAb2jQ}JMDL5D+uMTD>md9o2MlbgvC|EkE%nGFF#~H%1x$ghYgjI zg??;7MJb8jZ{O{gyol|JNXW!|7x3oX;nU`qJei=&o^BfG}X6nw@ITcFNz=Tji^rYqPb+PVYcZ(yIp6VROhlk#8;9BM=`~t5N@j|0jG9MaMqN(iZ#NXRz zQ6yANK_}R9x2pv8Co4%RbzG8Au`9EH4S;Bd<`ZpsO<+<;Vj&Z|Ld+)L> zA#6#Ei;I=dj4aYqmxuI-`*LPJThb(_Zl+I7kV@o-D#%m*_5>@E4$s?bzABqDb8MH4 zSfbjaO_M75I9JKV@$7V?k8opomp|JQq^+J;YxH8y#kl17&@4Fc{I7b6ik+&)-Pi#I z67``~a(Xmw|I!@RfV-vQVGf1c&2B9?J?uk3JjpXY3r0sidpL=$!9;^ql27l8W4%%( z&HKhJM2lDvw=Nz9C|e`@<4b^GHRY^kDN6H)Sv#D9$xs`7R99EGOly9Z5PK7{r#K7< z5EhTyuI)wLN|W~*EeSHgi=3NU-}qT1{;hLB)9LyYYiDn?31vlHN4v7rUDqulbg^5-R0_ z_9x^^W9`@KfO%qw$Z`QMpotlzP2#Q)#at^+r2CKkG%dzNSj1tO8;L|db$7TDByF|N z-haS8!9gQ>_FS@`ja`y!-}zv}d!+f0JqHTa_cuIOoMgQY$X)SvNPklXIN4P)x=jTd zHg`64NTq%Jv#2_n6J3Rx3meX0`M8f`udcp3q_Vz=Bau0KE_up`{qq@rdKbZ`>5YM- z{TW$a-C#uJ#c(h|3r@2)mc9zieg`n-#^}HztqYgfBXPl`Fe4@b9s5$v1X>VvXI4j z@+Ep~+r64gyn1pDjftP6Nml`ptHz*1E%fp93gXBKwt3@R^Y7Lv7}|Orm)Tb`E4sqj zZ}j4vG>YOtWc>yvmOS*!d2q9x8^FPBInwh9A7zS&dr%K#$!C2YMml(#3bxt*XJ=XG zKm=D@;-tZ16j6z@xb#lDF+0}5@0#<-yIiei-8mD09gDOqi0fGKMRWNSHX8&9v#*mmSYP zsQcV7$)~t3kV$CGld>-8q;oB#ZdIpwdW`FRLHC-H_rt%y)f-`ucGYs3EQ5T5I9@DY zh+8(GW_V+aIABQivUAbr&;4+B`Cyz1Mb02iXL6+>>9EC^;d&J;w)bV;fKZ?cr+XT~kG0kbGfquej*P z6Y*xYVB;=ZXk3kUH#I||Y~+ImAI68Fs0JHPQ`?1N&LB3?%>Ayt>u*sQEMi#Y-5Uq; zXNlGQs_!xxi2>Kvo{{Tc#pSc*l4ld^XQI>Uh1J;2kg7;)b2}qK2|{#sCfPrC%<(Qu zka7}2IB}B*tt5@1w++r6`y_bLWrI&vE4(~)y1X`bFvk`=-Q@Gv`8r3 zpdcwBIU32)DBUnZ*hVNJ-5?FpF&NS?7)Y0d)Bx!k31e1?D6XA z(TLrUG5V}5kmWLpo>;ld;tdT>+yfnTkP~>PL)ee90&Om?3xqlMn>Ve!oI{v+Mf5zm z)f5m|tM~R9u+ZHeBd)nbx_?Y=9Y1=_9^CyxluRP{8;{U$tjUqyZ)s<7aU`rfEOy!q zyh~3nID9=_k{Sni@NXPe!WUmzvy+Pi^EYNo1jZ3MdoqR#2s!m&A2NI#jm}tn94`S} zL40OVPZ3FcbT;UTWg{KBrJkNTs`2FZT5Xhi#|IRJbBbH&RMikKOUwjxRbdjLt3e(T zw=xhh-Y}|fG@ARr|FN(_SA$54$-t|T9Hy_8=d~mP+zWmm3aF=Bv|<)?`gUa{qL*^O zZ7q}G^2NgSt5KdX6L5lhZ}Ji2S?WQ%GUw1M3UC{qRyI)BoJ(qQIsV>3l4{a1o{L5(}rJV~(B%a!GwaA=3>Vq=z)rfLT^VftzO? zr-q3nbo5mUvH(3Q}^*F_Td&*_t*e|i_hPCyeXKKWU`dbgrW zIOG0AQ}jafs5vquITiVCJQ1_%JQcdF?7^ykz9-BewW#UmhkaBc z`dot?r7ww*@RH_@n%wv~sQ;ekn6;uD5i_nj`)KVaL^$6B9qVQ=d!^D{gV1QSx@wTw zYhCAv$+PJCmDe6JhZOs7ti@>eZB;`5IfIF*)C0Q^Z5eP`3hX2Fg-(T4{078Q+o2fO zpow2LoqOtY)Qp4s{?>TBjJhIa+FcAq;sgB3zelLmjDNR?fQ1UYp-dO|@}4k8Zzc)T zHu=)w3BcMd8fG&!3p3DZnSl_mafLyqP6)fV2TQ1oa?yXdbk(O!KtI+!&AR{l!UtR2 zx#T4mxjt7lSIJ{5ppq}8s&nXgO-C0V-;gDiy<8;9T>w6joI#JcoE&|ofg-2S zv3~uwyRZU*I#njD32%;1hit69B}@0e>+@%-%Bf_@Ur4_6j(T_LdPRHM-mR_M`QDw5 zE9la-S|pa8986=gQC`F#u1vl;T(wQN-824KRq9%-zXqQxBx!=FK3zss>o1+752A)A z?zt>Z)Ci3sH8svmw4!)Z?@<)@ys@`W(|e|N8R-Bq=gQ&b4*g0E>d6ycI#_Oc_k)CT zy$qH`xT9eDH@fkez_*!ke4nU1C$ue*NNe0bX;;d1(xzGtWdND0BxLV-6HlGS}SX2(kw?8~<&S+!d2ITo{Ngr`w8-kI{h3>PgT3 zTNN<#cfL<)eedMpG&n1%>7BmXaQ0zplsMyamJY<8G<_I_PrdIqBd+#cMQF$5=aTdD z7F$jy509`Ei;n#H{l)t|PIabTF}_P$o#nqQ7dF(`l_cG}FIw&`NSXFGRcH5F?~3LZ zSJPKF!akZJM0>Ai{-n}NCf;Lt$N_gP*)8RtI84}iGtb+ijU*DdUnFk+Ku2ScQR(J(pZb!j@WWC<7^flJATwmsLB$>%lAoiWm(~#y;Hq z<$h~5(}O4*{jTu-a9(Kzv`Lp;CBa2qm{gL&_?yK8ohN9}J7J~_N=}T5d233KHvC_* zRJFLE&tgn{Gna~YzY%KRL8geYZY}u>g7Ba7);fyu*x`BRkHP03t(HUn7=ag~yZpgi z;3yEg(o2Zz?K^kw$Oyd_k%-LCUlnoJ&n}@2JhI*c%!?mW6z^kdtouFwel<1B*;-m+ zLNxNLExi9N|G3-BKnlLYCxddO)k>*o*01c~{F7?dOXzB24(6M*L)z%pHi9kQh)FG4 z&>z;CTiPZ#)^&(Z>g-qJdQTOMEvpgd3OS+y08$y)+sw^vY{H|id5lA+DTAZPG7<^} zFR<4=gDs-LtV*P$sY&I*i1zr0a)TsEjnWlkLMRqo4@7@AN;!V6TVoNf91PPg=aXP| z>?^twksJ* z)smRgiv2p2ony6Jc3NAU=q{qY!?P0XXx|G}yYyGh`e2fE+$VzNjy|`k1@B-&r8^AR zc!m_d5~YOFWc(}TvN9rVC%4A0`Bcy=kR@|-;NJ{#s|9U$emQCHFK$*ginD}5m-H=&)vcuu}&ho~1H)j@Sc!;v0PA%sNi~5a( zAFxkn6bSKfvLJ-czE2YpgMAxeCdhs{G}*LId3JlHg%!Jnk%5|S&P%Yhd3PAfV577g z`>mstZeT>pQ)cz1@ONH{eu4|ti%85x(24@^m0c+Z&Gj4 zSzJSAS@DIAnu?d5T_0yzvey$l5A*;X(Ecf{+Po`rj{EAD>+>JOe|*|vaTN-Ev9EwO zcgA{7(O@27DcvHpRpK^b>$Gw8%77ceiWq2q=qWv9ZLVrvU8(z(_^(;K8DT)9&|OhK z*C4UhD!vn)`Nk!O15sb6c?O;ha`+yC`e>^qIFz zp;k(0v&xT>ZX1eGHvfKNad|5NMAusFN%41Dax%SR6LW0XQt{2ovl?efrz*B~ z*q_QKdpdpWa~vXu2#+0xc1I{xtJVA}9+HnV7Y&<1F!>aFsaj2YVPhAFxJ6j9Fi2u= z3qh-WHO`L#fUmfGzkDKzkRWwdwn;4;KDFXJC~(;HqKXhMVRC2)di_7L0@ zx1V!lydu9L4P?>l8<)AqCe9${tmkM2^S(Ih&ZcC$2;^3tnON{V%8kLX{6l9!6rWle zHyOOxnviVR;m8BYcYPK%BtIIg(c8O=pEN7}EfL17Dvq&bJ}F>2t8w_;6bP zt6hnAR{@I{BHqgj?F!jEO~8oU`E&$R)9>}oqQ#Ru9=RN4Sw9Ua&?lK1oA9wv;f|PC z99p{>=BQZcv8@JOUn@>cHK^a}Qig05eX)2~`ky&Sb3~A3Wy0ckgKq*NVyhB7&_A`T zXN?q5ZOL`SsL#zYYe3B;br<@lj#)gXiQ;m8CaB!ybXc^0TN=nE_Mx={l`EUwR4c}7 zo1ifkjS8Qz@Ig*x;-u#EA}lQ`9{l$3+cw`dU^Mpnw*7%3z=}zNwEs&UXAEQbanh;E z(%pZJ-fvy@JANXtISTegox0Wq+KprJ$6B5i-sW*d5(j12eia4Jt&QyX3#o^x8&x~0 z;l`fw16eP3$maap8=Ag+{zaF4Gkte{SnR{U0Qz@rGJA^yU5~T5@ERPYUlGUKM$=9P zF7x#d3k%`j7cWQMuX`<5jNAnS=OzO}au;?%@vDudWJt(27(&D)$GGQTE>r&l)WxfM zBrS+|iGykVQY@)ZxhU81X-S8RtovHVR&Sz7cZTU|`dpyJJYoqhFua>ah}}-E2WR2s zJpH`kBY*)$A0)P}L(P#H*u|;_gOAzbCHqB?=vUIprG_kxz@^a0ZV}HDn?oF=yZ&x; zHQB_F9iDgDZ#FZAtEl1UVV+voFZKS-`NQfjS5mU}!8P)~Gczwy1knmmKPI(e*tCscd zqizmQ)&Wo+2g@iV>Sjbt_&%Iky%F8p`=R0UC_GOhq&5_IjfFy5GVj^zSOjBVbvk4L`#j6K^>)0rlA{ z^V1qQV{5-aVE(rLCRjB#-RZ9>YU}DjX}~r;3=RCeUp(caSd4(n=tXH@5X17?@uxgK zh&7yOOPlZa4PA;n6aY#~PXMI}$;NS@5 zgB*Q|iy9Lv^&#dXtmF)mF9cZb!xlN>WmQwZIr6c}NBS2}=MYDYo3~G}h(ndPIa=3_ zQw`!BvDVlGtp7>edg-!EcnH~})gSwp@0yo_?oi+b(<;seCbiek$AXxa_Z|8NlQ|*R z7ks(!Q{x3_|DQm?cJxv(UOVuB@OS*+Mp)|jr|?;6-o+FT#k6772k-VT|L~{PHRa>M zWUjws#U!J-Fq3I{l()tvER0{ul`f}_GGL|d-MIV#eAoWq05Em}@PBgG1wp zXgN-ZTS>S|Z=8-iIkOdhuNtNPTTKainzX>7_f{2lduJfx|`*Y z_S)a*ZqMbXtE~K_?5B16Kik31Hc~W=4Eb1 zPH#&cc6?cO1-zLyHmhYI`=;gZ)5UQy{0;SZ*q z$#^@DAhA&dc?3Vf)Q>nhRx5%u%F#t2$7(a@lWP%8&W8a(#f;70Ii(d?T6!BVEoXH` zF$>0O#~v7lkg<=? zwRByd)h%DRE*x&k_W!}Nd#7Lz$$SsG%THN2Nbnj+OAvqhyf#dxg?AD z6M(x5=?4&2)jg3|Wb#dRahHD*KIU`?F2^ZLqUA&dB#=S?k+OijfIxpNL5*csHII`K ze7d)OlbN~?)-mTBrmUO7Ci3}4-tC!&CZG&lxEyh=$%fUcX>#92NeWq%Q4oB}EVW52 zRQ8022P~<_P!!y)6K1iQF3c1YGH6k0ee?fZfK){=r<0k?0l!09)0)`7^T4aYb<55@ zyzy1Idmv?+fcX(UB`;Ho=QlShzM!6(bU zWrhH?5O2p5o5gza;fjl|fr#c|)^2a{r<>#5 zY{W@EVh-ldRd@z*C?+{j(kJ%JVi2+M(!bY|f*U_yr84Wq8{@Pf8b>dGr8fh`fe)a1 zlYf{&={tH`Y~LM+i0l~lqM7LL{`f~IW?^dHCBM2k2qOJ=GaMAmqz|#!xui}T=tp3E{yOgUXjp@I8t4YjXq(Mu`=Ioz(M z<{aGF+{43l%@&i#?~Pk?S?U_VlDF67lW339jhrcqie;E9J;-?lC~x1D#hx- zjW;VyO7PeVDFRo)n82RMsFA2QC+CbIC|2sZdDGCnFaWsxO2~-#mMx|VB=6z$Ia>Y| z|M}hYT+P%c;mfhSb^Z}#99t&X89Uz7IaqtyxbZCUYNW6JN3GIu`p*5(yn81c^z- zU`F%$^~PjF7=3B~9ub!1s<5}eh(6ALxAXVjlc@m4Hv!MGL}U3%;RunvJj7~HuGIYl z?v>Sm2ZzV|hAvmJ%RfNR;g6R6@zXz1Ee{M5Urn>Y?e7QVItaUl80b5St9}4w@d!z> z!lp~h)iUUrCzmO9M(e`AEsU?v{x1>Iv04?dT_N>LKo8LfI}$M8c+S3^_g|-G>P|?+ zROoU9cT=U4?CWKpYr#l!B#&ykDlFNLl>4WtOGmbvl{tAxw6tc8Y8N!KX_H26$e1!D z9TWxIU${{o_Z_v5-%2#Au-hK7*Gpx2>|Bsj zuU@xCbX;wI@IU>LlYX$cC{>eTX$AUY*06(4elZ8h&8~bFd zIqh1@pV!WTn9@Ia2m7rDZUcmTYeo2GALwrQv5KchX1-Xqz9blf3@jDronmFRk1Ky9 zjo(h{PAclp+-OsQrz*XvEQkWQ$7|v(&*}=pG6Bzlf;!qhi0jv-k7gYi0V@qSgLwS{ z4B{L8+-_X$W89LLCTD8M>j!vN0;UqqnAta)zy(H;#}uW2fu3eATCfV4vRgB_K4wzg z*AN&JQ#A1VgW@bvsF11wF_tLD?MNsSuY{z-N-(=9hZ-B|%*8y%BUcl7!GF)b@;f8i z=XbZCqvM9{IbRAllJ>_jc5m-5p5@$(JardbbNDdmcT*j7z3X>6XMfmG9Z;1|6d(7= zOAl)|$JN74TA=L4mBSsm(tHLt9)TK54BF>|KPjP~g?-vR#Z^2Lh%Z!}nqA`~2`J~= z>af`1Lx3l3RLmHnjk!ZPB!-rhD+?x=QLl?mD_QQ${Z?Ugw1G`qCs`Y!>%7?wMJ2wD z<{?9pZDefb5b;{~5ibYq6NlDEP~Q^w1c9+b>3=zj*}m>VJ`04i_4M;0@J|)H;s|FD z{H3^5u<3K-AES5ZJubWd_(6VCSoB-1oL2|n5wjwqGYJQ*{gStVqK8^;w2mwr6nH?< z2{|Oxic`3*&9flN)~>Flvi=O=lNcm?7Gc1;5wN1!mBrAELielrBvtCPZKeO&rWTg( zKr**hHM=9#qTeRO|4{lYHXP=r$YgEKyfAfV?A}^xZz4wPZg{LWFo#bhe?Mz^YNz3NICm}vnCA6dLG3mm_srI}s_>*})oxv;qx1%HoUbAh^mJ240eBEIsNQ~d| zPLHk!KSG67Q_EyguUF?i_iKrVG2-hPq6)r1*m~D zSAo9h2!de4`!wuZ%^xJ5?ZTlX)hBCfkrvC!V*6P=<5iOm=1q;^ivv?saS;OBP_LMD zEnPy|FFtI{{ErsWmhTw8K0vcI;_G>*7%jx*`UOZR@qwp0v;Rqz^Df-?8i%nPwl@_>*h~|p(f@}_vpfX3L&-%0|ZGnDWT3r^TXHe>C<^zEB<=!o!lbxMn zhk+~a5YMsgx5SB?DTdbabOZZkMU#%Ml8JFS8-htQF?u*x)sb9-u@m@tM@zd=t&k@T zl@_(}G=*=C{}duLvMP?(uBz&Z2FQZW6#RG8ExU#VJ7VJG$sZutvs?Ub<=R?#57V?6 zTE3+_D0sx!t-if16Vko>CiV`&?XBa7r+U`I46T2bTJod<8OWH#$Ek?o1})B+kRT+> zNxd~A#P&kHU4wXTr0aU}a_Qb2Z=R+Ze1zgw6mD=}NS^Zc(zZ|T-MtraygqlzH*F^b ze}){}thEh3id<4KFr36mD;_JK8Tu5go!Y4*czb)*q~8k=@10xYT-kgqY|hJu7fM|B zGb!UqzUmh>OhX^8bG2-b(2ClLFg=d`m2wkUUOP+##>Lu*$aZ-TH0zW>-~M4sZhs0? zS^>Q!kQ>#4hPObNjJwfwAyQfm#9tL>Fn%U?01KDy$BsmD@8wpl&4~rYhA6N)&@uf$ zhzNe;7T}fcxIX>;^y$;LKFH8Hb=O%a_&GRo?-DILuo zG-!$lMrbsJ&+$f^I8@h%d{cQHUt>auprI5IhP){oRt#6KxDm5zSBD#b=z*P?3$A5X zGy1zy_GiLh6E?6;d!80`i?ZT=@o3TlxNb@*IS6E@5)7-up)|Z{y1mKjG7mV+2VTNc zZ_iG-q)0kJN75!V#TLD}BI?splO!4#rxez^r}MRPNEC0qYRONo&*25RNAMt&KDJf0utmb6dG7|?Ao!)=UzFIsU*pr}%nFa}FD8PsYP z=)36(eT6yboEC3IpaSQV7L^i}vJV%=0>5Yn5n9iDOa%k|eHflEw9}WuO*~2hS(9E$ zNJIjzoT)EsBaZxdXQ~dA?3XFpFB>TR_Jsct1^w;m=(U7n^+?kYqqlXecbaRf!k2m% zi?TJ~sUxlIPHSBjtf>hNu|Src4%_yN2U6O)jrvTSN&L~$U3;k%uO6lQNLMzWW-7L1 z!}Sx;nKO4N#_*4&Nrb!-D8w<6#%OM!Z#h>@{kX4_tqx5-Q?>nu?pw4hep%s$HLfBQ zqu~UmBovJ?JTt|vR4dUtv_MLxBzfcZha;)F3#KVyX0y?Val^<|deq>$FI{3fGNfFB zn}`)!uZ77=g-0e4X%qEvqt%B@{{JADmFmsi89$IEwm}l9>Cx-yWyq6; z`k}u%>l54C+sxcmxvAlU_hO;e8AB0XGSW&V@GB%MO-qC>xSOr@J$<5QlG=cDCAEBJ zM2{%`X%j6S|L6D}wd1w_*`(Cw2Hrv%2hIL2z?(2}Dryy%ro5HO+e=0B zIQoLa5w4Q~qaWOgM#89G;Z=kx_HKPGq0KlsQ^idtCe~+j@>!znJ{uM*8JJ#lCBFTb@ydJGQ0kRXuwI(r<-p`Z z>c_n{>;HuHk^#LqvFN_z;SHK{nmBtFLDD1QQ0ZlH@>tq^)GWJ(TVAZ;OhxD)plV%h z=BNQ5RW|3V7qRcaSS65hr%us+_gn|O2R6Rs_UMdb;C8~nu>RuBJyospN|O<*AogX! zNc8=Y=XRBTf7%XoE}|Px)%qJe{#_F=wro8~^2QD9k9C$+Li*Ucbtx4M<3a;0U`vob zoO&YYhmhXKRjuHazcL96TNRlCW%Hi_=7)wRdGtv76F&H-nz>T{pd>7vXi0aUke>24 z$QZ~*tKy})XJPd2G?om?sjszFkY*zz#8N~dVK9~a(>@ETFiLdpsLDDX?AwNz{ftNx zSjU;siMh|mh)G%6)Y|Q@-5kaTF~q~Qre`{?O@m&c#wSB|1cT@T2+Ie%YUP+YcmF#< z1aMH;^Gc7%lj9S&!wb=_(hRy>RJ}mDTPS z*~gl1YwdhV#9$}4byXSZhg{QBM!UTc6aF&g$P8ow-=C4whFeMt#@j#a>eu9LN$r2* z#7!(iT^}_3S-O34%Ux&wct?9()7>9P?~I9!H4bQ;GVcG8D|El{>owfZwUQpJU0>Mf zP>rFssfM@hFS3yGj|@!bBPLX$^*$+}tmhTUshu_U769_0I( z|7KhMhaCWrkpuvljFYLtjg<|984ddkog{wjCe0WG7L-pC;?Nn^MPb3K|Mz2OE7_}? zn|gv+(CT&7ztfXR@t~VF%VPT+3Z!4$*ycw*ei&vEjQ`!|{n*dzo7oY*#6?^jI0sVt zj<`l=O?-8fH63LjXFxwNvN--ipXEZtfQRA(9jo_3($WOTFpV!p)n~Cg-s*66-RHd! z&sT937coN#Div>a@4g-hq*j(B%OW(Q5`ab4aVOE4eo>*E=bHtp;>TkZ{dY|sPAof2 ztxS*AH{UVda?%%+k(L+RdH<_Udp?>o`W1SKYtx2j0*BszHiyuL?NNBfQ<94+2)2JG z%9=Lurm54Nh(~O=>3*5Pf`e*8-|V{18ajk$8n|06ftf7T#4V?-3hMKeL7?O@f{%gA ztZevFqA?#o5SmjippkvD73BKo(h*Y+7I28&&*8pIQhk$hkT$fCZ3%(Lx8%xFbbclB z6Mlgd_+xNtH}Xb-!h7S!NxnzJoOFU`r#16H@v|{EA7SJLd|H?-HuFF8Yq)VDsPD>IDp#)t{XC+yy1+Xfl+y_3L7l;>Ug1t#f`SJg~B(&rkM7g0{ud z<~_(HzZZ{xamKT^nWT5?6e}c9$fW|%{T949bjOQ-DQY=t^oDpQ_Gck_%yh-B?NavN zewQYkJ=nTJ%cTe{^m5!MW2&Q0%^2jdHebAZPH9LZK+XU#UYW&_K3Oh*QoV_err0Rx z?W$wb#g1B%h7}cK*jdGv{2EsHKl=De%EgG9 zXIBf|G3%K9EMFe6pHB<}ZRzaseKRrov7p%5Vivx8DPU00lBm)Wr+ivlx0y23z)_Z2 zsT1Lxf==p|hi@vU-|d8Sey*LiO^SF{%#h?^b}T=maeEdxdmc%~W@B`YL56-p)5!La z1t7id`4`Uu4Qt~>mS6YgbQVPV`|g3Fu9#t$wUq`I&V}OCq7n{WI}0y-j^Im+o38Om z>q^aH{G7~VL^+AXmZ}wM&$<$i0^O8&PpKtWUAe`hm9oo5)?I3HC9prJ`w_mE3^ND0 z3Ly7;o6d|+Wq(Dss8?x1(Vl$g3L3vWM#XloX8?B6)7|VeyNF}38>mKYyILG# zo`$RES zgt)@A@&sYL$Dq#p4o-Bd4-F>A=4VOF9=sHp*Vk7sH*uL{=W;Avv{KSJurA4Zhl$vM0y+=fQL2Md zq!d#9XqW+oJWhH58uCst(8nzUB%KX`0R|L6-_I<3|0XD%44lY2SO(Lw+!|LknWpxo z@4U5lQqqg=B^~>G#3E01s2so~%geXoiGDT!{go9hn$-HX*Ec6-XgRH#>Xq!KtEjop ziAy#JbDy1fKDfoX_lp-WQz_xGHRjg<%}hmC>M)S!{XAIol?;L%o47>*v^iZ-l!ib* z$0dh-^eK-m>sg?&5{F(2)H63Y&ND~^V%E|@Q9ePyNQrCfoDQu~C*N+hD9%wD8)Q3H z1yhex&lbl$lVh7lh;XXG(kb}Am$O)hj%rFfo3l_p0L5o-1l#JRQqbhv=UA5rF#U*2wxbB8;Cs+PQ0t+f{_|zG244gM;!gLw+u&7soKchLY z#F`;1q3Gq%PhwGpG+&xCm!4DQ+XtW_SdB!TAeAK+tuC5qc^pDSHV&Wt;1VZ&ezdk<$O@0UMo`}khlp1ERH=O}!ZspKS_}zrZ4czqB zL)kVGCBj97GJwjQM90ghGi=?yi!w-BcPa$;KA#6Nj@(uhRkd@@HR%lISX5$%@^^{i zVk(n!Iirr(fad>BQCe7Eq{mZZp@8?v3ckf-1#q0>XmU|gqVuTP#PLR0*<)I@+&k0z zB=(~Pah4dYN0EgNndpqaD^&pvZRaZbodLezF|~H1xlgH$Ee%wC;XMMK_>(%C_49Ra zPBrp$r-%UznEeo>P>a=`1!o@9u`Cxwgo0Y7*TGUZ;*yLIDP6|S$S9)1IMk?mLjS?q zfSDLTTulbW8b8%e_$*zCx5Xr~tx73vD%#6&lEuHoTm_8ya zm|AAipMYu61GVx~X0y&u`y;)QPStEi0d28on5#Gv(&z0Fe2S^ZayInWla}TjY_QZx z3b+JmW->q2rS<@lfm*(v?k~b4w1S7oQDr6(L;0;MZR3EYfcObdMLqiLq=Jek3}jF| zdu7fd?o_$o`qQ^{=tJwz{M~E`I&z)|BO>8%VOMPgx#@5KpLorelx|Mwn_%@GEqsk# z))8F0u@Y-6pia&u!F#&WfJoGhhTbw;9w>eN3TFnc64J$Wl^9ZJ~p@z&p+)>DY@kQNg{;A65S_Mwdo7;)=4RzuIJ3C~2wYNwpi$trslvy+Prl!`#@g-k8T<=JR8FMPZPs5mz2kdT6 z7HDJjEHQVP6u{-Zx8@b}s)PZ>-^C6Tb#l9^;lkZE6~z%zS`BH+Bm1YoGjBElBu2t3 zhA71I0vTU>q^!JMTdFgA#k`@(&+oZ)w4Kun?H*EKacay?8|kH4h$r0>Xaqb>0#<+0 zB9{8}0S$A;o)H!wxzD_o{165|KsV)<#wA!NDaXrJ zMDeK{ifJ=414L5;8{ihQXhn`MMp%GUJ+~K#*x7Oj{xxz_UE*H4hfQ--3$bcHcmobj zX(h)aSw^kNWvj>5bBc?NiF*;3Sy_;DI$w5<+$~cb1xO77Ll(zx6C^rXpdeOe?aICiWUhRF9_0WI0jZ(QJtt2kCTGg=szV>xb~IrZq^! zP&;V~FT287=2^m8n4<4J+RNx)*_Wtq6tvp15))uN__3y6{vlfeEIpI?5OV$RmjyJa z=#?tEeP5!uYrI)NxC`uSNEfn}CGggv0isdhk>7 z?6M^%C^z+PLfQTyB76{u#br+8ci%a&#_33S2Z9Rh&Gyc&&7|DHAj$#`R!Tg}1J0=K z1i~y;KAFK+4|Vk8Ch9l&QAf*)_XPEan@xC(b}KfgvviNxiqM{NGt@=LxGEY68QZ5q=<`*n8lpw`CPkNwH cFqwa3L`M&b>`1-W{{tSXN?M9Y`S-#92U=;tUH||9 literal 0 HcmV?d00001 diff --git a/src/ifcopenshell-python/docs/ifcopenshell-python/installation.rst b/src/ifcopenshell-python/docs/ifcopenshell-python/installation.rst index f7ea78d3c6..9b8bbe02d6 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. @@ -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. From 78c748df5db7eaab6e180ed8b0d4a570c44e89f6 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 6 Oct 2023 15:25:51 +1100 Subject: [PATCH 032/220] New placement panel to consolidate placement data in geometry tab --- .../bim/module/geometry/__init__.py | 5 +- .../blenderbim/bim/module/geometry/data.py | 26 ++++- .../blenderbim/bim/module/geometry/ui.py | 95 ++++++++++++++----- src/blenderbim/blenderbim/bim/ui.py | 15 +++ 4 files changed, 110 insertions(+), 31 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/geometry/__init__.py b/src/blenderbim/blenderbim/bim/module/geometry/__init__.py index 1b64ef180e..5766368c50 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/__init__.py @@ -49,10 +49,11 @@ classes = ( operator.UpdateRepresentation, prop.BIMObjectGeometryProperties, prop.BIMGeometryProperties, - ui.BIM_PT_derived_placements, + ui.BIM_PT_placement, ui.BIM_PT_representations, 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, @@ -72,7 +73,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) @@ -117,7 +117,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..b5536fa53a 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/data.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/data.py @@ -23,7 +23,8 @@ from mathutils import Vector def refresh(): - DerivedPlacementsData.is_loaded = False + PlacementData.is_loaded = False + DerivedCoordinatesData.is_loaded = False RepresentationsData.is_loaded = False ConnectionsData.is_loaded = False @@ -184,7 +185,7 @@ class ConnectionsData: return results -class DerivedPlacementsData: +class DerivedCoordinatesData: data = {} is_loaded = False @@ -263,6 +264,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/ui.py b/src/blenderbim/blenderbim/bim/module/geometry/ui.py index a91cf340ee..c52a98c064 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/ui.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/ui.py @@ -21,7 +21,12 @@ import blenderbim.tool as tool from bpy.types import Panel, Menu 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, + ConnectionsData, + PlacementData, + DerivedCoordinatesData, +) def object_menu(self, context): @@ -251,49 +256,89 @@ class BIM_PT_mesh(Panel): 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") - - -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): diff --git a/src/blenderbim/blenderbim/bim/ui.py b/src/blenderbim/blenderbim/bim/ui.py index 8a5a324fff..b773f81a49 100644 --- a/src/blenderbim/blenderbim/bim/ui.py +++ b/src/blenderbim/blenderbim/bim/ui.py @@ -552,6 +552,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" From d092fd45ba1d081acbbe08b3faf2e8b8693c6861 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 6 Oct 2023 16:51:50 +1100 Subject: [PATCH 033/220] You can now select coloured objects in a colourscheme. --- .../blenderbim/bim/module/search/__init__.py | 1 + .../blenderbim/bim/module/search/operator.py | 34 ++++++++++++++++++- .../blenderbim/bim/module/search/prop.py | 2 +- .../blenderbim/bim/module/search/ui.py | 5 ++- 4 files changed, 39 insertions(+), 3 deletions(-) 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 78b5887751..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): 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): From 33536957d8bb752587d4d6ea49772c0442e199c4 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 29 Sep 2023 16:22:27 +0500 Subject: [PATCH 034/220] Moving some code to tool.Geometry --- .../bim/module/geometry/operator.py | 12 +------- .../blenderbim/bim/module/model/door.py | 10 ++----- .../blenderbim/bim/module/model/window.py | 10 ++----- src/blenderbim/blenderbim/tool/geometry.py | 28 +++++++++++++++++-- src/blenderbim/blenderbim/tool/type.py | 5 +--- 5 files changed, 31 insertions(+), 34 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/geometry/operator.py b/src/blenderbim/blenderbim/bim/module/geometry/operator.py index ef8c3e865c..2ff9d34678 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/operator.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/operator.py @@ -465,7 +465,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 +482,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" diff --git a/src/blenderbim/blenderbim/bim/module/model/door.py b/src/blenderbim/blenderbim/bim/module/model/door.py index d51ba058a1..06411761e9 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, diff --git a/src/blenderbim/blenderbim/bim/module/model/window.py b/src/blenderbim/blenderbim/bim/module/model/window.py index 2aa33b5309..43e0da7128 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, diff --git a/src/blenderbim/blenderbim/tool/geometry.py b/src/blenderbim/blenderbim/tool/geometry.py index ce33fbcd7d..1e44c98c31 100644 --- a/src/blenderbim/blenderbim/tool/geometry.py +++ b/src/blenderbim/blenderbim/tool/geometry.py @@ -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 old_data.is_editmode: + 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() @@ -297,6 +301,24 @@ 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_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 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): From b9a9abd30d55b228fb5d5d89c3a77cfbabef3405 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 6 Oct 2023 15:08:48 +0500 Subject: [PATCH 035/220] Fixed adding opening to meshes of all occurences for non material based representations Mentioned in #3817 --- .../blenderbim/bim/module/model/opening.py | 5 +++- src/blenderbim/blenderbim/core/geometry.py | 30 ++++++++++++------- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/opening.py b/src/blenderbim/blenderbim/bim/module/model/opening.py index 32f42340e9..ce57371569 100644 --- a/src/blenderbim/blenderbim/bim/module/model/opening.py +++ b/src/blenderbim/blenderbim/bim/module/model/opening.py @@ -160,7 +160,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, diff --git a/src/blenderbim/blenderbim/core/geometry.py b/src/blenderbim/blenderbim/core/geometry.py index b055a65d6c..ce6d9b8e85 100644 --- a/src/blenderbim/blenderbim/core/geometry.py +++ b/src/blenderbim/blenderbim/core/geometry.py @@ -103,24 +103,32 @@ 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) - 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) + # 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 + has_openings = apply_openings and entity.HasOpenings + if not has_openings: + representation = geometry.resolve_mapped_representation(representation) + + 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: - data = existing_data + new_repr_data = old_repr_data - geometry.change_object_data(obj, data, is_global=is_global) + 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: + 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): From baa08b3221b5a020b83882ed27e2ddade4918443 Mon Sep 17 00:00:00 2001 From: Hilko <65367721+hilko-o@users.noreply.github.com> Date: Fri, 6 Oct 2023 11:58:06 +0200 Subject: [PATCH 036/220] Update build-deps.cmd --- win/build-deps.cmd | 1 - 1 file changed, 1 deletion(-) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index 238d3df0d1..923d8cc066 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -226,7 +226,6 @@ IF NOT %ERRORLEVEL%==0 GOTO :Error call :InstallCMakeProject "%DEPENDENCY_DIR%\%BUILD_DIR%" %BUILD_CFG% IF NOT %ERRORLEVEL%==0 GOTO :Error -goto :Successful :mpir set DEPENDENCY_NAME=mpir From 1b81fa5aa1344e19d5f1379e41783e6c72afe5e5 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 6 Oct 2023 15:24:44 +0500 Subject: [PATCH 037/220] Minor fix after 78c748df5 RuntimeError: Error: Registering panel class: parent 'BIM_PT_tab_placement' for 'BIM_PT_placement' not found --- src/blenderbim/blenderbim/bim/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/blenderbim/blenderbim/bim/__init__.py b/src/blenderbim/blenderbim/bim/__init__.py index 8e90e72cc1..9cc36d3668 100644 --- a/src/blenderbim/blenderbim/bim/__init__.py +++ b/src/blenderbim/blenderbim/bim/__init__.py @@ -136,6 +136,7 @@ classes = [ 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, From 2c18c89807318b52bac798ada164bb63aec19687 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 6 Oct 2023 16:01:46 +0500 Subject: [PATCH 038/220] revert flow directions icons to arrows --- src/blenderbim/blenderbim/bim/module/system/ui.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/system/ui.py b/src/blenderbim/blenderbim/bim/module/system/ui.py index 6e20514bac..c70438292f 100644 --- a/src/blenderbim/blenderbim/bim/module/system/ui.py +++ b/src/blenderbim/blenderbim/bim/module/system/ui.py @@ -24,8 +24,8 @@ from blenderbim.bim.module.system.data import SystemData, ObjectSystemData, Port FLOW_DIRECTION_TO_ICON = { - "SOURCE": "REMOVE", - "SINK": "ADD", + "SOURCE": "FORWARD", + "SINK": "BACK", "SOURCEANDSINK": "ARROW_LEFTRIGHT", "NOTDEFINED": "CHECKBOX_DEHLT", } From 1abf80c31075288374de699682a3d4f77b0ddb74 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 6 Oct 2023 16:03:40 +0500 Subject: [PATCH 039/220] Minor fix after b9a9abd30 --- src/blenderbim/blenderbim/core/geometry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/core/geometry.py b/src/blenderbim/blenderbim/core/geometry.py index ce6d9b8e85..54dbeeb49d 100644 --- a/src/blenderbim/blenderbim/core/geometry.py +++ b/src/blenderbim/blenderbim/core/geometry.py @@ -107,7 +107,7 @@ def switch_representation( # 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 - has_openings = apply_openings and entity.HasOpenings + has_openings = apply_openings and getattr(entity, "HasOpenings", None) if not has_openings: representation = geometry.resolve_mapped_representation(representation) From 3929f02e94263e6981fc5d11ccaab1330fb088dd Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 6 Oct 2023 22:43:38 +1100 Subject: [PATCH 040/220] Fix #3843. Regression where IfcMaterialList UI didn't show list of materials. --- src/blenderbim/blenderbim/bim/module/material/data.py | 6 +++++- .../blenderbim/bim/module/material/operator.py | 10 ++++------ src/blenderbim/blenderbim/bim/module/material/ui.py | 8 +++++--- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/material/data.py b/src/blenderbim/blenderbim/bim/module/material/data.py index 9e1d4154b9..7d96782ff3 100644 --- a/src/blenderbim/blenderbim/bim/module/material/data.py +++ b/src/blenderbim/blenderbim/bim/module/material/data.py @@ -173,6 +173,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 +193,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..fc591ef171 100644 --- a/src/blenderbim/blenderbim/bim/module/material/operator.py +++ b/src/blenderbim/blenderbim/bim/module/material/operator.py @@ -174,7 +174,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 +185,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 +350,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)), ) diff --git a/src/blenderbim/blenderbim/bim/module/material/ui.py b/src/blenderbim/blenderbim/bim/module/material/ui.py index dc50a8db14..fcdc30b75c 100644 --- a/src/blenderbim/blenderbim/bim/module/material/ui.py +++ b/src/blenderbim/blenderbim/bim/module/material/ui.py @@ -284,9 +284,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") From 2fe3f0a9dfd20fa39c0d1565817b2d88926b1d6f Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 6 Oct 2023 16:25:31 +0500 Subject: [PATCH 041/220] system decorations - indicate both directions flow --- src/blenderbim/blenderbim/tool/system.py | 52 +++++++++++++++++------- 1 file changed, 37 insertions(+), 15 deletions(-) diff --git a/src/blenderbim/blenderbim/tool/system.py b/src/blenderbim/blenderbim/tool/system.py index 6a0cd8b080..da810e9ef7 100644 --- a/src/blenderbim/blenderbim/tool/system.py +++ b/src/blenderbim/blenderbim/tool/system.py @@ -26,6 +26,7 @@ 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): @@ -217,6 +218,12 @@ class System(blenderbim.core.tool.System): 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: @@ -248,20 +255,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 +307,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) From 9c5970e75700bc90ba785e65779029d6fbfc781b Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 6 Oct 2023 17:29:40 +0500 Subject: [PATCH 042/220] fixed issue with placing end port for a bend --- src/blenderbim/blenderbim/bim/module/model/mep.py | 12 +++++++----- src/blenderbim/blenderbim/tool/system.py | 12 ++++++++---- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/mep.py b/src/blenderbim/blenderbim/bim/module/model/mep.py index 6306e30544..dfe709eaf6 100644 --- a/src/blenderbim/blenderbim/bim/module/model/mep.py +++ b/src/blenderbim/blenderbim/bim/module/model/mep.py @@ -767,7 +767,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() @@ -857,7 +858,7 @@ class MEPAddTransition(bpy.types.Operator, tool.Ifc.Operator): pset=pset, properties={"Data": 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 @@ -1022,6 +1023,7 @@ 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) + 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 +1037,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: @@ -1077,6 +1077,8 @@ class MEPAddBend(bpy.types.Operator, tool.Ifc.Operator): 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) + second_object_offset = radial_offset + V(0, 0, self.start_length) + second_object_offset += z_axis_end_object_local * (self.end_length * -end_segment_sign) def get_segments_extend(): segments_intersection = segments_intersection_ws - start_point @@ -1200,7 +1202,7 @@ class MEPAddBend(bpy.types.Operator, tool.Ifc.Operator): pset=pset, properties={"Data": 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=second_object_offset) # NOTE: at this point we loose current blender objects selection # create transition element diff --git a/src/blenderbim/blenderbim/tool/system.py b/src/blenderbim/blenderbim/tool/system.py index da810e9ef7..2b75dd8c3f 100644 --- a/src/blenderbim/blenderbim/tool/system.py +++ b/src/blenderbim/blenderbim/tool/system.py @@ -31,7 +31,7 @@ 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" @@ -52,9 +52,13 @@ class System(blenderbim.core.tool.System): if add_start_port: ports.append(add_port(mep_element, obj.matrix_world @ Matrix())) 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 + 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 From 7229f7271cd0b870a4fc5ea878cafcd05856de4e Mon Sep 17 00:00:00 2001 From: Bruno Postle Date: Fri, 6 Oct 2023 22:34:43 +0100 Subject: [PATCH 043/220] BlenderBIM make fca90e9 optional setup_viewport_camera() does a 'zoom extents' on IFC import. Create a should_setup_viewport_camera option (default True) --- src/blenderbim/blenderbim/bim/import_ifc.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/bim/import_ifc.py b/src/blenderbim/blenderbim/bim/import_ifc.py index 762a482382..5d19e45045 100644 --- a/src/blenderbim/blenderbim/bim/import_ifc.py +++ b/src/blenderbim/blenderbim/bim/import_ifc.py @@ -311,7 +311,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() @@ -1967,6 +1968,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" From 72cd82f4508cfeae8b818b8cfcb424c5de9e3e50 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 7 Oct 2023 10:25:22 -0500 Subject: [PATCH 044/220] fixed error when creating new walltype in IFC2x3 --- src/blenderbim/blenderbim/bim/module/model/product.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/product.py b/src/blenderbim/blenderbim/bim/module/model/product.py index 8d67810409..fcc4f9f3fb 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" From bea1e61739f2d043cb70256aeb6eabe25f14e5db Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sun, 8 Oct 2023 09:24:18 -0500 Subject: [PATCH 045/220] Adding "Manually Save Representation" and bim.get_representation_ifc_parameters back to Representation Utilities panel from: https://github.com/IfcOpenShell/IfcOpenShell/commit/3a812a9ec156818061c01bd5b2ac2c2bee09faf1#r123820129 --- .../blenderbim/bim/module/geometry/ui.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/bim/module/geometry/ui.py b/src/blenderbim/blenderbim/bim/module/geometry/ui.py index c52a98c064..6be3897dca 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/ui.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/ui.py @@ -232,6 +232,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") @@ -255,7 +258,16 @@ class BIM_PT_mesh(Panel): op = row.operator("bim.update_representation", text="Convert To Arbitrary Extrusion With Voids") op.ifc_representation_class = "IfcExtrudedAreaSolid/IfcArbitraryProfileDefWithVoids" - + 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_placement(Panel): bl_label = "Placement" From 0e1939a871659be678856d7637ea084cb54d830c Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Sun, 8 Oct 2023 21:32:04 +0500 Subject: [PATCH 046/220] Minor fix #3862 --- src/blenderbim/blenderbim/tool/geometry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/tool/geometry.py b/src/blenderbim/blenderbim/tool/geometry.py index 1e44c98c31..d4d8fa7509 100644 --- a/src/blenderbim/blenderbim/tool/geometry.py +++ b/src/blenderbim/blenderbim/tool/geometry.py @@ -43,7 +43,7 @@ class Geometry(blenderbim.core.tool.Geometry): @classmethod def replace_object_data_globally(cls, old_data, new_data): - if old_data.is_editmode: + 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) From 36ed618adf22a041aa165aa0d8d37b8d14983137 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Mon, 9 Oct 2023 17:26:27 +1100 Subject: [PATCH 047/220] You can now federate FM spreadsheets using the Blender UI --- .../blenderbim/bim/module/fm/__init__.py | 4 +- .../blenderbim/bim/module/fm/operator.py | 60 +++++++++++++++++-- .../blenderbim/bim/module/fm/prop.py | 1 + src/blenderbim/blenderbim/bim/module/fm/ui.py | 9 ++- 4 files changed, 68 insertions(+), 6 deletions(-) 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 a59fe1dc9a..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 @@ -49,7 +50,6 @@ class SelectFMIfcFile(bpy.types.Operator): return {"RUNNING_MODAL"} - class ExecuteIfcFM(bpy.types.Operator): bl_idname = "bim.execute_ifcfm" bl_label = "Execute IfcFM" @@ -70,8 +70,6 @@ class ExecuteIfcFM(bpy.types.Operator): return {"RUNNING_MODAL"} def execute(self, context): - import ifcfm - props = context.scene.BIMFMProperties ifc_file = tool.Ifc.get() filepaths = [] @@ -97,9 +95,63 @@ class ExecuteIfcFM(bpy.types.Operator): writer = ifcfm.Writer(parser) writer.write() if props.format == "csv": - writer.write_csv('tmp/') + 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.federate([f.name for f in props.spreadsheet_files]) + writer = ifcfm.Writer(parser) + writer.write() + if props.format == "ods": + writer.write_ods(self.filepath) + elif props.format == "xlsx": + writer.write_xlsx(self.filepath) + return {"FINISHED"} diff --git a/src/blenderbim/blenderbim/bim/module/fm/prop.py b/src/blenderbim/blenderbim/bim/module/fm/prop.py index c75ac52518..696c27a084 100644 --- a/src/blenderbim/blenderbim/bim/module/fm/prop.py +++ b/src/blenderbim/blenderbim/bim/module/fm/prop.py @@ -34,6 +34,7 @@ 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 e838d72a0f..502e463e19 100644 --- a/src/blenderbim/blenderbim/bim/module/fm/ui.py +++ b/src/blenderbim/blenderbim/bim/module/fm/ui.py @@ -42,7 +42,7 @@ class BIM_PT_fm(Panel): if not IfcStore.get_file() or not props.should_load_from_memory: row = layout.row(align=True) - if props.ifc_files: + if len(props.ifc_files) > 1: row.label(text=f"{len(props.ifc_files)} Files Selected") else: row.prop(props, "ifc_file") @@ -55,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") From 49b733f66096c8887997e81bffac9d6d0ae0ec39 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Mon, 9 Oct 2023 23:21:09 +1100 Subject: [PATCH 048/220] See #3817. WARNING: fundamental change. Standardise prioritisation of all context permutations when loading occurrences and types. --- src/blenderbim/blenderbim/bim/import_ifc.py | 202 ++++++++++-------- .../ifcopenshell/util/representation.py | 5 + 2 files changed, 116 insertions(+), 91 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/import_ifc.py b/src/blenderbim/blenderbim/bim/import_ifc.py index 5d19e45045..6fc2c986c3 100644 --- a/src/blenderbim/blenderbim/bim/import_ifc.py +++ b/src/blenderbim/blenderbim/bim/import_ifc.py @@ -214,20 +214,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 = {} @@ -336,34 +324,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 @@ -591,13 +628,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]) @@ -669,7 +702,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) @@ -688,7 +721,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: @@ -708,27 +741,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) @@ -777,21 +804,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 @@ -849,9 +880,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 @@ -888,16 +916,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") @@ -925,10 +945,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): @@ -1259,7 +1279,7 @@ class IfcImporter: 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) + geometry = self.create_generic_shape(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)] @@ -1288,7 +1308,7 @@ class IfcImporter: 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) + geometry = self.create_generic_shape(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)] diff --git a/src/ifcopenshell-python/ifcopenshell/util/representation.py b/src/ifcopenshell-python/ifcopenshell/util/representation.py index e293aa226f..2d5d252e72 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/representation.py +++ b/src/ifcopenshell-python/ifcopenshell/util/representation.py @@ -16,6 +16,8 @@ # You should have received a copy of the GNU Lesser General Public License # along with IfcOpenShell. If not, see . +import ifcopenshell + def get_context(ifc_file, context, subcontext=None, target_view=None): if subcontext or target_view: @@ -33,6 +35,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") From e4f5b0e3d83b0a13514ec966fbff2aedf14fd072 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 10 Oct 2023 10:56:28 +1100 Subject: [PATCH 049/220] Write documentation for placement utility --- .../ifcopenshell/util/placement.py | 121 ++++++++++++++++-- 1 file changed, 107 insertions(+), 14 deletions(-) diff --git a/src/ifcopenshell-python/ifcopenshell/util/placement.py b/src/ifcopenshell-python/ifcopenshell/util/placement.py index 7219cd6856..218f58e2f7 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,33 +44,79 @@ 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.)) @@ -92,11 +152,32 @@ def get_cartesiantransformationoperator3d(inst): def get_mappeditem_transformation(item): + """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 = ifcopenshell.util.placement.get_axis2placement(item.MappingSource.MappingOrigin) return get_cartesiantransformationoperator(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 +185,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) From 05f6f4efab4f4de3ce141e709cbccf3c81502a89 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 10 Oct 2023 17:33:00 +1100 Subject: [PATCH 050/220] Manual booleans are now tracked via a Pset instead of arbitrary class conventions which should fix a bunch of issues. --- .../bim/module/geometry/operator.py | 44 ++++++++-------- .../blenderbim/bim/module/model/data.py | 2 + .../blenderbim/bim/module/model/opening.py | 50 ++++++++++++++++--- .../blenderbim/bim/module/void/ui.py | 3 +- src/blenderbim/blenderbim/tool/model.py | 17 ++++--- .../ifcopenshell/api/geometry/add_boolean.py | 18 +++++-- .../test/util/test_selector.py | 4 +- 7 files changed, 93 insertions(+), 45 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/geometry/operator.py b/src/blenderbim/blenderbim/bim/module/geometry/operator.py index 2ff9d34678..723cd2f4b7 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/operator.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/operator.py @@ -1201,20 +1201,20 @@ class RefreshAggregate(bpy.types.Operator): "instance_of": [part.GlobalId], } data = [data_children] - + pset = ifcopenshell.api.run( - "pset.add_pset", tool.Ifc.get(), product=part, name="BBIM_Aggregate_Data" - ) + "pset.add_pset", tool.Ifc.get(), product=part, name="BBIM_Aggregate_Data" + ) ifcopenshell.api.run( "pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Parent": instance_entity.GlobalId, "Data": json.dumps(data)}, ) - + part_obj = tool.Ifc.get_object(part) new_part = duplicate_objects(part_obj) - + blenderbim.core.aggregate.assign_object( tool.Ifc, tool.Aggregate, @@ -1223,34 +1223,34 @@ class RefreshAggregate(bpy.types.Operator): related_obj=tool.Ifc.get_object(new_part), ) duplicate_children(new_part) - + for part in parts: pset = ifcopenshell.util.element.get_pset(part, "BBIM_Aggregate_Data") if part.is_a("IfcElementAssembly"): pass - + else: if not pset: pset = ifcopenshell.api.run( - "pset.add_pset", tool.Ifc.get(), product=part, name="BBIM_Aggregate_Data" - ) + "pset.add_pset", tool.Ifc.get(), product=part, name="BBIM_Aggregate_Data" + ) else: pset = ifcopenshell.util.element.get_pset(part, "BBIM_Aggregate_Data") pset = tool.Ifc.get().by_id(pset["id"]) - + data_children = { "children": [], "instance_of": [], } data = [data_children] - + ifcopenshell.api.run( "pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Parent": instance_entity.GlobalId, "Data": json.dumps(data)}, ) - + part_obj = tool.Ifc.get_object(part) new_part = duplicate_objects(part_obj) blenderbim.core.aggregate.assign_object( @@ -1271,7 +1271,7 @@ class RefreshAggregate(bpy.types.Operator): collection.objects.link(new_obj) obj.select_set(False) new_obj.select_set(True) - + # This is needed to make sure the new object gets unlink from # the old object assembly collection new_obj.BIMObjectProperties.collection = None @@ -1283,15 +1283,15 @@ class RefreshAggregate(bpy.types.Operator): if new_entity: tool.Model.handle_array_on_copied_element(new_entity) - + if not new_entity.is_a("IfcElementAssembly"): blenderbim.core.aggregate.unassign_object( - tool.Ifc, - tool.Aggregate, - tool.Collector, - relating_obj=obj, - related_obj=tool.Ifc.get_object(new_entity), - ) + tool.Ifc, + tool.Aggregate, + tool.Collector, + relating_obj=obj, + related_obj=tool.Ifc.get_object(new_entity), + ) old_to_new[tool.Ifc.get_entity(obj)] = [new_entity] @@ -1314,7 +1314,6 @@ class RefreshAggregate(bpy.types.Operator): self.report({"INFO"}, "Object is not part of a IfcElementAssembly.") return {"FINISHED"} - pset = ifcopenshell.util.element.get_pset(selected_root_entity, "BBIM_Aggregate_Data") if not pset: self.report({"INFO"}, "Object is not part of an assembly aggregate.") @@ -1337,7 +1336,6 @@ class RefreshAggregate(bpy.types.Operator): for parent in parents: duplicate_children(parent) - # Remove connections with old objects for new in old_to_new.values(): for connection in new[0].ConnectedTo: @@ -1355,7 +1353,7 @@ class RefreshAggregate(bpy.types.Operator): new_obj = tool.Ifc.get_object(new[0]) - matrix_diff = Matrix.inverted(original_matrix) @ new_obj.matrix_world + matrix_diff = Matrix.inverted(original_matrix) @ new_obj.matrix_world new_matrix = selected_matrix @ matrix_diff new_obj.matrix_world = new_matrix diff --git a/src/blenderbim/blenderbim/bim/module/model/data.py b/src/blenderbim/blenderbim/bim/module/model/data.py index c9fde070e8..b97b16c614 100644 --- a/src/blenderbim/blenderbim/bim/module/model/data.py +++ b/src/blenderbim/blenderbim/bim/module/model/data.py @@ -251,6 +251,8 @@ class AuthoringData: @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)) predefined_type = relating_type.PredefinedType return predefined_type diff --git a/src/blenderbim/blenderbim/bim/module/model/opening.py b/src/blenderbim/blenderbim/bim/module/model/opening.py index ce57371569..9cb00d0169 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 @@ -523,10 +524,21 @@ 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 ) + pset = ifcopenshell.util.element.get_pset(element1, "BBIM_Boolean") + if pset: + pset = tool.Ifc.get().by_id(pset["id"]) + data = json.loads(pset["Data"]) + data.extend([b.id() for b in booleans]) + data = list(set(data)) + else: + pset = ifcopenshell.api.run("pset.add_pset", tool.Ifc.get(), product=element1, name="BBIM_Boolean") + data = [b.id() for b in booleans] + ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": json.dumps(data)}) + tool.Model.clear_scene_openings() blenderbim.core.geometry.switch_representation( @@ -647,6 +659,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 @@ -655,13 +668,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_id = None + for inverse in tool.Ifc.get().get_inverse(item): + if inverse.is_a("IfcBooleanResult"): + boolean_id = inverse.id() + 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_id) body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") if body: blenderbim.core.geometry.switch_representation( @@ -674,7 +695,20 @@ class RemoveBooleans(Operator, tool.Ifc.Operator, AddObjectHelper): should_sync_changes_first=False, ) bpy.data.objects.remove(obj) - + + for element, boolean_ids in bbim_boolean_updates.items(): + pset = ifcopenshell.util.element.get_pset(element, "BBIM_Boolean") + if not pset: + continue + data = set(json.loads(pset["Data"])) + data -= set(boolean_ids) + data = list(data) + pset = tool.Ifc.get().by_id(pset["id"]) + if data: + ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": json.dumps(data)}) + else: + ifcopenshell.api.run("pset.remove_pset", tool.Ifc.get(), pset=pset) + tool.Blender.set_active_object(upstream_obj) return {"FINISHED"} @@ -782,6 +816,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" @@ -805,12 +840,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 diff --git a/src/blenderbim/blenderbim/bim/module/void/ui.py b/src/blenderbim/blenderbim/bim/module/void/ui.py index de0b978650..dd199ef5d0 100644 --- a/src/blenderbim/blenderbim/bim/module/void/ui.py +++ b/src/blenderbim/blenderbim/bim/module/void/ui.py @@ -123,9 +123,8 @@ class BIM_PT_booleans(Panel): 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/tool/model.py b/src/blenderbim/blenderbim/tool/model.py index 47ae276c3a..b296bb5501 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 @@ -29,9 +32,6 @@ from mathutils import Matrix, Vector 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 class Model(blenderbim.core.tool.Model): @@ -483,6 +483,10 @@ class Model(blenderbim.core.tool.Model): @classmethod def get_manual_booleans(cls, element): + pset = ifcopenshell.util.element.get_pset(element, "BBIM_Boolean") + if not pset: + return [] + boolean_ids = json.loads(pset["Data"]) body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") if not body: return [] @@ -490,10 +494,9 @@ class Model(blenderbim.core.tool.Model): items = list(body.Items) while items: item = items.pop() - if item.is_a() == "IfcBooleanResult": - booleans.append(item) - items.append(item.FirstOperand) - elif item.is_a("IfcBooleanClippingResult"): + if item.is_a("IfcBooleanResult"): + if item.id() in boolean_ids: + booleans.append(item) items.append(item.FirstOperand) return booleans diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_boolean.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_boolean.py index c477d0cfe6..3973b0a27f 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_boolean.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_boolean.py @@ -47,13 +47,21 @@ class Usecase: result = self.create_blender_mesh() 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)) + 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)) + else: + items.append(self.file.createIfcBooleanResult(self.settings["operator"], item, result)) self.settings["representation"].RepresentationType = "CSG" self.settings["representation"].Items = items + return items def create_half_space_solid(self): clipping = np.array(self.settings["matrix"])[:3] 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") From 5bff837a61b71a2edeb9cbd8f877334f5d079dbf Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 10 Oct 2023 22:21:32 +1100 Subject: [PATCH 051/220] Minor fix --- src/blenderbim/blenderbim/bim/module/project/operator.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/blenderbim/blenderbim/bim/module/project/operator.py b/src/blenderbim/blenderbim/bim/module/project/operator.py index 0cd756882e..d21c8c985c 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) From 9fef920a6f20dd021f0fe249586c85e74940dff7 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Tue, 10 Oct 2023 13:43:56 -0500 Subject: [PATCH 052/220] Further clarify the bim.link_ifc command --- src/blenderbim/blenderbim/bim/module/project/operator.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/project/operator.py b/src/blenderbim/blenderbim/bim/module/project/operator.py index d21c8c985c..0ccde5099d 100644 --- a/src/blenderbim/blenderbim/bim/module/project/operator.py +++ b/src/blenderbim/blenderbim/bim/module/project/operator.py @@ -809,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") From 171251b27d1ee995363f2f8be8b3eb90560b0aab Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 11 Oct 2023 08:53:40 +1100 Subject: [PATCH 053/220] See #1619. Fix issue where copying non-templated properties didn't work. --- src/blenderbim/blenderbim/bim/module/pset/operator.py | 2 ++ src/blenderbim/blenderbim/core/pset.py | 6 ++---- 2 files changed, 4 insertions(+), 4 deletions(-) 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/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) From 418444a196492044bd9133976ca9c217f181b80c Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 11 Oct 2023 09:12:00 +1100 Subject: [PATCH 054/220] Fix #3873. Regression due to new importing logic. --- src/blenderbim/blenderbim/tool/model.py | 14 +++----------- src/blenderbim/blenderbim/tool/system.py | 13 ++++--------- 2 files changed, 7 insertions(+), 20 deletions(-) diff --git a/src/blenderbim/blenderbim/tool/model.py b/src/blenderbim/blenderbim/tool/model.py index b296bb5501..5b3ec23be9 100644 --- a/src/blenderbim/blenderbim/tool/model.py +++ b/src/blenderbim/blenderbim/tool/model.py @@ -438,17 +438,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 diff --git a/src/blenderbim/blenderbim/tool/system.py b/src/blenderbim/blenderbim/tool/system.py index 2b75dd8c3f..be09c808d5 100644 --- a/src/blenderbim/blenderbim/tool/system.py +++ b/src/blenderbim/blenderbim/tool/system.py @@ -149,16 +149,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): From 3de99153897a49f79d3fbfebcaf6858103901105 Mon Sep 17 00:00:00 2001 From: Massimo Fabbro <79401028+maxfb87@users.noreply.github.com> Date: Wed, 11 Oct 2023 00:15:36 +0200 Subject: [PATCH 055/220] Add generate flooring from cursor and regen (#3874) --- .../bim/module/covering/workspace.py | 25 ++++++- .../blenderbim/bim/module/model/__init__.py | 2 + .../blenderbim/bim/module/model/covering.py | 54 ++++++++++++++ .../blenderbim/bim/module/model/space.py | 5 -- src/blenderbim/blenderbim/core/covering.py | 72 +++++++++++++++++++ src/blenderbim/blenderbim/core/spatial.py | 2 +- src/blenderbim/blenderbim/tool/spatial.py | 2 - 7 files changed, 153 insertions(+), 9 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/covering/workspace.py b/src/blenderbim/blenderbim/bim/module/covering/workspace.py index e41145d959..88d43b639b 100644 --- a/src/blenderbim/blenderbim/bim/module/covering/workspace.py +++ b/src/blenderbim/blenderbim/bim/module/covering/workspace.py @@ -45,6 +45,7 @@ class CoveringTool(WorkSpaceTool): 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 @@ -93,6 +94,8 @@ class CoveringToolUI: row.label(text="", icon="EVENT_A") active_obj = bpy.context.active_object element = tool.Ifc.get_entity(active_obj) + 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"): @@ -100,13 +103,15 @@ class CoveringToolUI: # 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"): + elif tool.Ifc.get_entity(collection_obj): + op = row.operator("bim.add_instance_flooring_covering_from_cursor") else: -# op = row.operator("bim.add_instance_flooring_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) + # elif AuthoringData.data["predefined_type"] == "CEILING": # row = cls.layout.row(align=True) # row.prop(data=cls.props, property="ceiling_height", text="ceiling height") @@ -126,6 +131,12 @@ class CoveringToolUI: if cls.props.relating_type_id.isnumeric(): op.relating_type_id = int(cls.props.relating_type_id) + if element and bpy.context.selected_objects and element.is_a("IfcCovering") and AuthoringData.data["predefined_type"] == "FLOORING": + row = cls.layout.row(align=True) + row.label(text="", icon="EVENT_SHIFT") + row.label(text="", icon="EVENT_G") + op = row.operator("bim.regen_selected_flooring_object") + @classmethod def draw_type_selection_interface(cls): # shared by both sidebar and header @@ -184,11 +195,23 @@ class Hotkey(bpy.types.Operator, Operator): def hotkey_S_A(self): active_obj = bpy.context.active_object element = tool.Ifc.get_entity(active_obj) + 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() 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 AuthoringData.data["predefined_type"] == "FLOORING": + if element and bpy.context.selected_objects and element.is_a("IfcCovering"): + bpy.ops.bim.regen_selected_flooring_object() diff --git a/src/blenderbim/blenderbim/bim/module/model/__init__.py b/src/blenderbim/blenderbim/bim/module/model/__init__.py index 7786a0d8e5..ee8f23eca5 100644 --- a/src/blenderbim/blenderbim/bim/module/model/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/model/__init__.py @@ -108,6 +108,8 @@ classes = ( space.GenerateSpace, space.GenerateSpacesFromWalls, covering.AddInstanceFlooringCoveringsFromWalls, + covering.AddInstanceFlooringCoveringFromCursor, + covering.RegenSelectedFlooringObject, space.ToggleSpaceVisibility, mep.FitFlowSegments, mep.RegenerateDistributionElement, diff --git a/src/blenderbim/blenderbim/bim/module/model/covering.py b/src/blenderbim/blenderbim/bim/module/model/covering.py index a5d954aea0..e0591677ff 100644 --- a/src/blenderbim/blenderbim/bim/module/model/covering.py +++ b/src/blenderbim/blenderbim/bim/module/model/covering.py @@ -22,6 +22,60 @@ 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 RegenSelectedFlooringObject(bpy.types.Operator, tool.Ifc.Operator): + bl_idname = "bim.regen_selected_flooring_object" + bl_label = "Regen Flooring" + bl_options = {"REGISTER"} + bl_description = "Regen selected flooring object" + + @classmethod + def poll(cls, context): + active_obj = bpy.context.active_object + element = tool.Ifc.get_entity(active_obj) + return 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_flooring_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" diff --git a/src/blenderbim/blenderbim/bim/module/model/space.py b/src/blenderbim/blenderbim/bim/module/model/space.py index 4dc348be99..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): diff --git a/src/blenderbim/blenderbim/core/covering.py b/src/blenderbim/blenderbim/core/covering.py index 61aadfcd7a..17098bc6a5 100644 --- a/src/blenderbim/blenderbim/core/covering.py +++ b/src/blenderbim/blenderbim/core/covering.py @@ -16,6 +16,78 @@ # 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) + + +# spatial.edit_active_space_obj_from_mesh(mesh) +# else: +# if relating_type: +# name = model.generate_occurrence_name(relating_type, "IfcCovering") +# else: + + 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_flooring_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) + 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) + def add_instance_flooring_coverings_from_walls(ifc, spatial, collector, geometry): z = spatial.get_active_obj_z() diff --git a/src/blenderbim/blenderbim/core/spatial.py b/src/blenderbim/blenderbim/core/spatial.py index d7c2fc6496..3f3b5cdb42 100644 --- a/src/blenderbim/blenderbim/core/spatial.py +++ b/src/blenderbim/blenderbim/core/spatial.py @@ -196,7 +196,7 @@ def generate_spaces_from_walls(ifc, spatial, collector): spatial.assign_ifcspace_class_to_obj(obj) spatial.assign_container_to_obj(obj) - + def toggle_space_visibility(ifc, spatial): model = ifc.get() diff --git a/src/blenderbim/blenderbim/tool/spatial.py b/src/blenderbim/blenderbim/tool/spatial.py index d52d772f0f..d7e51404c8 100644 --- a/src/blenderbim/blenderbim/tool/spatial.py +++ b/src/blenderbim/blenderbim/tool/spatial.py @@ -299,8 +299,6 @@ class Spatial(blenderbim.core.tool.Spatial): boundary_lines = [] for obj in bpy.context.visible_objects: - - visible_element = tool.Ifc.get_entity(obj) if ( From da7f5b015bd43c95bf5fa93bc70fafdd6d96ba1d Mon Sep 17 00:00:00 2001 From: Vukas Pajic Date: Wed, 11 Oct 2023 10:06:54 +0200 Subject: [PATCH 056/220] add missing attributes in ids.parse --- src/ifctester/ifctester/ids.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ifctester/ifctester/ids.py b/src/ifctester/ifctester/ids.py index e57eca7048..76a756107e 100644 --- a/src/ifctester/ifctester/ids.py +++ b/src/ifctester/ifctester/ids.py @@ -90,7 +90,7 @@ class Ids: return ids_dict def parse(self, data): - for attribute in ["title", "copyright", "version", "description", "author"]: + for attribute in ["title", "copyright", "version", "description", "author", "date", "purpose", "milestone"]: value = data["info"].get(attribute) if value: self.info[attribute] = value From bf43efe509bbf8c1fec73f70ec57b097c307d641 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 11 Oct 2023 23:26:05 +1100 Subject: [PATCH 057/220] Begin drafting out a new representation items panel for managing styles and layers properly --- .../bim/module/geometry/__init__.py | 5 ++ .../blenderbim/bim/module/geometry/data.py | 29 +++++++++++ .../bim/module/geometry/operator.py | 50 ++++++++++++++++++ .../blenderbim/bim/module/geometry/prop.py | 9 ++++ .../blenderbim/bim/module/geometry/ui.py | 52 +++++++++++++++++-- 5 files changed, 142 insertions(+), 3 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/geometry/__init__.py b/src/blenderbim/blenderbim/bim/module/geometry/__init__.py index 5766368c50..d8c7b4b8ee 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/__init__.py @@ -22,7 +22,9 @@ from . import ui, prop, operator classes = ( operator.AddRepresentation, operator.CopyRepresentation, + operator.DisableEditingRepresentationItems, operator.EditObjectPlacement, + operator.EnableEditingRepresentationItems, operator.FlipObject, operator.GetRepresentationIfcParameters, operator.OverrideDelete, @@ -47,16 +49,19 @@ classes = ( operator.SwitchRepresentation, operator.UpdateParametricRepresentation, operator.UpdateRepresentation, + prop.RepresentationItem, prop.BIMObjectGeometryProperties, prop.BIMGeometryProperties, 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_UL_representation_items, ) diff --git a/src/blenderbim/blenderbim/bim/module/geometry/data.py b/src/blenderbim/blenderbim/bim/module/geometry/data.py index b5536fa53a..bdf7e53a09 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/data.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/data.py @@ -26,6 +26,7 @@ def refresh(): PlacementData.is_loaded = False DerivedCoordinatesData.is_loaded = False RepresentationsData.is_loaded = False + RepresentationItemsData.is_loaded = False ConnectionsData.is_loaded = False @@ -92,6 +93,34 @@ class RepresentationsData: return results +class RepresentationItemsData: + data = {} + is_loaded = False + + @classmethod + def load(cls): + cls.data = {"total_items": cls.total_items()} + 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 + + class ConnectionsData: data = {} is_loaded = False diff --git a/src/blenderbim/blenderbim/bim/module/geometry/operator.py b/src/blenderbim/blenderbim/bim/module/geometry/operator.py index 723cd2f4b7..caf7c54dd8 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/operator.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/operator.py @@ -1727,3 +1727,53 @@ class FlipObject(bpy.types.Operator): 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" + break + + +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..ae16daa751 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/prop.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/prop.py @@ -38,8 +38,17 @@ def get_contexts(self, context): return RepresentationsData.data["contexts"] +class RepresentationItem(PropertyGroup): + name: StringProperty(name="Name") + surface_style: StringProperty(name="Surface Style") + 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 6be3897dca..a824dcf895 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/ui.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/ui.py @@ -18,11 +18,12 @@ import bpy 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, + RepresentationItemsData, ConnectionsData, PlacementData, DerivedCoordinatesData, @@ -129,6 +130,41 @@ 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") + + class BIM_PT_connections(Panel): bl_label = "Connections" bl_idname = "BIM_PT_connections" @@ -267,7 +303,7 @@ class BIM_PT_mesh(Panel): 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_placement(Panel): bl_label = "Placement" @@ -327,7 +363,7 @@ class BIM_PT_derived_coordinates(Panel): row.label(text="XYZ Dimensions") row = self.layout.row(align=True) - row.enabled=False + 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) @@ -379,3 +415,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.surface_style: + row.label(text=item.surface_style) From a99529cb1e5cc8070a60bd8e1d52b71306fae8fb Mon Sep 17 00:00:00 2001 From: Massimo Fabbro Date: Wed, 11 Oct 2023 21:51:15 +0200 Subject: [PATCH 058/220] fix generate space and covering where objects weren't created in the right location --- src/blenderbim/blenderbim/core/spatial.py | 2 +- src/blenderbim/blenderbim/tool/spatial.py | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/blenderbim/blenderbim/core/spatial.py b/src/blenderbim/blenderbim/core/spatial.py index 3f3b5cdb42..41307096c3 100644 --- a/src/blenderbim/blenderbim/core/spatial.py +++ b/src/blenderbim/blenderbim/core/spatial.py @@ -164,7 +164,7 @@ def generate_space(ifc, spatial, model, Type): else: name = "Space" - obj = spatial.get_named_obj_from_mesh(name, mesh) ##mat + 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) diff --git a/src/blenderbim/blenderbim/tool/spatial.py b/src/blenderbim/blenderbim/tool/spatial.py index d7e51404c8..95ee9bffbc 100644 --- a/src/blenderbim/blenderbim/tool/spatial.py +++ b/src/blenderbim/blenderbim/tool/spatial.py @@ -525,9 +525,6 @@ class Spatial(blenderbim.core.tool.Spatial): @classmethod def get_named_obj_from_mesh(cls, name, mesh): obj = bpy.data.objects.new(name, mesh) - if bpy.context.active_object: - mat = bpy.context.active_object.matrix_world - obj.matrix_world = mat return obj @classmethod @@ -566,7 +563,6 @@ class Spatial(blenderbim.core.tool.Spatial): 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 From 55e61b55d888eac22d965ccf8742bd27987bc991 Mon Sep 17 00:00:00 2001 From: Massimo Fabbro Date: Wed, 11 Oct 2023 23:08:56 +0200 Subject: [PATCH 059/220] better UI for covering tool --- .../bim/module/covering/workspace.py | 51 ++++++++++++++----- 1 file changed, 38 insertions(+), 13 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/covering/workspace.py b/src/blenderbim/blenderbim/bim/module/covering/workspace.py index 88d43b639b..81fce1601d 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 @@ -63,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") @@ -88,22 +90,27 @@ class CoveringToolUI: @classmethod def draw_default_interface(cls): + row = cls.layout.row(align=True) + row.prop(data=cls.props, property="rl3", text="RL") 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) 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"): - op = row.operator("bim.add_instance_flooring_coverings_from_walls") + 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() + + if (AuthoringData.data["predefined_type"] == "FLOORING" and + 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") # 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"): - elif tool.Ifc.get_entity(collection_obj): + if tool.Ifc.get_entity(collection_obj): op = row.operator("bim.add_instance_flooring_covering_from_cursor") else: op = row.operator("bim.add_constr_type_instance", text="Add") @@ -111,6 +118,27 @@ class CoveringToolUI: 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 (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_flooring_object") + + # elif AuthoringData.data["predefined_type"] == "CEILING": # row = cls.layout.row(align=True) @@ -126,17 +154,14 @@ class CoveringToolUI: # 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(): op.relating_type_id = int(cls.props.relating_type_id) - if element and bpy.context.selected_objects and element.is_a("IfcCovering") and AuthoringData.data["predefined_type"] == "FLOORING": - row = cls.layout.row(align=True) - row.label(text="", icon="EVENT_SHIFT") - row.label(text="", icon="EVENT_G") - op = row.operator("bim.regen_selected_flooring_object") - @classmethod def draw_type_selection_interface(cls): # shared by both sidebar and header From 81b4e42ca23759480b71306b73f4073d964ed5f2 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Thu, 12 Oct 2023 10:37:44 +0200 Subject: [PATCH 060/220] Use schema_identifier for schema and express rule validation. See #3126 --- src/ifcopenshell-python/ifcopenshell/entity_instance.py | 3 +++ .../ifcopenshell/express/rule_executor.py | 6 +++--- src/ifcopenshell-python/ifcopenshell/validate.py | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) 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/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) From ca2ae36d41cd2f5b3bc7e4b99a7cf9f27fb9f3cb Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 12 Oct 2023 22:39:53 +1100 Subject: [PATCH 061/220] Modernize zone and type table mappings for COBie 2.4 with Emma Hooper --- src/ifcfm/ifcfm/cobie24.py | 213 +++++++----------- src/ifcfm/ifcfm/cobie24legacy.py | 4 +- src/ifcopenshell-python/docs/introduction.rst | 6 +- 3 files changed, 81 insertions(+), 142 deletions(-) diff --git a/src/ifcfm/ifcfm/cobie24.py b/src/ifcfm/ifcfm/cobie24.py index 7134d8b72e..4d27c5d70a 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 @@ -443,21 +427,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): @@ -480,136 +449,106 @@ 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_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, } diff --git a/src/ifcfm/ifcfm/cobie24legacy.py b/src/ifcfm/ifcfm/cobie24legacy.py index 83c9f85d9c..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"}, 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." From 55a7a72e61ca4abc516e2fbd7e79ae5a07a15880 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 12 Oct 2023 22:40:54 +1100 Subject: [PATCH 062/220] Minor bug fixes with error message when selecting objects in layers without objects --- src/blenderbim/blenderbim/bim/module/geometry/operator.py | 3 ++- src/blenderbim/blenderbim/bim/module/layer/operator.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/geometry/operator.py b/src/blenderbim/blenderbim/bim/module/geometry/operator.py index caf7c54dd8..bad584b4da 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/operator.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/operator.py @@ -1766,7 +1766,8 @@ class EnableEditingRepresentationItems(bpy.types.Operator, Operator): for style in styles: if style.is_a("IfcSurfaceStyle"): new.surface_style = style.Name or "Unnamed" - break + elif inverse.is_a("IfcPresentationLayerAssignment"): + new.layer = inverse.Name or "Unnamed" class DisableEditingRepresentationItems(bpy.types.Operator, Operator): 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"} From c930050da6697b524bd7addbc878612c3a991af4 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 12 Oct 2023 22:41:45 +1100 Subject: [PATCH 063/220] Accommodate bug in Revit where mapped representations were missing... well, a representation map. --- src/blenderbim/blenderbim/bim/import_ifc.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/bim/import_ifc.py b/src/blenderbim/blenderbim/bim/import_ifc.py index 6fc2c986c3..1c56c29581 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 From dd70b09fb1b85a4d1651abfeb96d2e32c2e414d2 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 12 Oct 2023 22:56:21 +1100 Subject: [PATCH 064/220] Representation items panel now shows styles and layers --- .../blenderbim/bim/module/geometry/data.py | 18 +++++++++++++++++- .../blenderbim/bim/module/geometry/prop.py | 1 + .../blenderbim/bim/module/geometry/ui.py | 16 ++++++++++++++-- .../ifcopenshell/util/element.py | 2 +- 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/geometry/data.py b/src/blenderbim/blenderbim/bim/module/geometry/data.py index bdf7e53a09..d1e3b7fa1e 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/data.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/data.py @@ -99,7 +99,11 @@ class RepresentationItemsData: @classmethod def load(cls): - cls.data = {"total_items": cls.total_items()} + cls.data = { + "total_items": cls.total_items(), + "active_surface_style": cls.active_surface_style(), + "active_layer": cls.active_layer(), + } cls.is_loaded = True @classmethod @@ -120,6 +124,18 @@ class RepresentationItemsData: 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 = {} diff --git a/src/blenderbim/blenderbim/bim/module/geometry/prop.py b/src/blenderbim/blenderbim/bim/module/geometry/prop.py index ae16daa751..f874172d28 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/prop.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/prop.py @@ -41,6 +41,7 @@ def get_contexts(self, context): 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") diff --git a/src/blenderbim/blenderbim/bim/module/geometry/ui.py b/src/blenderbim/blenderbim/bim/module/geometry/ui.py index a824dcf895..c0f5ad5e49 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/ui.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/ui.py @@ -164,6 +164,18 @@ class BIM_PT_representation_items(Panel): 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" @@ -423,5 +435,5 @@ class BIM_UL_representation_items(UIList): icon = "MATERIAL" if item.surface_style else "MESH_UVSPHERE" row = layout.row(align=True) row.label(text=item.name, icon=icon) - if item.surface_style: - row.label(text=item.surface_style) + if item.layer: + row.label(text="", icon="STICKY_UVS_LOC") diff --git a/src/ifcopenshell-python/ifcopenshell/util/element.py b/src/ifcopenshell-python/ifcopenshell/util/element.py index 4852ff067c..7f02dc609b 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/element.py +++ b/src/ifcopenshell-python/ifcopenshell/util/element.py @@ -577,7 +577,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"): From 8f4bc0ea000a1f34b86061621d1316a5b8c54c8a Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 13 Oct 2023 17:37:24 +1100 Subject: [PATCH 065/220] Material manager panel now moved to geometry tab --- src/blenderbim/blenderbim/bim/module/material/ui.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/material/ui.py b/src/blenderbim/blenderbim/bim/module/material/ui.py index fcdc30b75c..7124ff840d 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 From a47c57c22c2d89e23fef0f45e91705533de25c9e Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 13 Oct 2023 17:38:55 +1100 Subject: [PATCH 066/220] First draft of style manager panel --- .../blenderbim/bim/module/style/__init__.py | 27 ++-- .../blenderbim/bim/module/style/operator.py | 143 +++++++++++++++++- .../blenderbim/bim/module/style/prop.py | 31 +++- .../blenderbim/bim/module/style/ui.py | 109 +++++++++++-- src/blenderbim/blenderbim/tool/style.py | 10 +- 5 files changed, 289 insertions(+), 31 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/style/__init__.py b/src/blenderbim/blenderbim/bim/module/style/__init__.py index 8d37b57ee1..7aa30f52f4 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.DisableAddPresentationStyle, + operator.DisableEditingExternalStyle, + operator.DisableEditingStyle, + operator.DisableEditingStyles, + operator.EditExternalStyle, + operator.EditStyle, + operator.EditSurfaceStyle, + operator.EnableAddPresentationStyle, + 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/operator.py b/src/blenderbim/blenderbim/bim/module/style/operator.py index 3fbfde90c1..dff00b5081 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,122 @@ class ClearTextureMapPath(bpy.types.Operator): props = context.material.BIMStyleProperties setattr(props, self.texture_map_prop, "") return {"FINISHED"} + + +class EnableAddPresentationStyle(bpy.types.Operator, tool.Ifc.Operator): + bl_idname = "bim.enable_add_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 DisableAddPresentationStyle(bpy.types.Operator, tool.Ifc.Operator): + bl_idname = "bim.disable_add_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" + 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) + + surface_style = None + for style2 in style.Styles: + if style2.is_a() == self.ifc_class: + surface_style = style2 + break + + if surface_style: + color_to_tuple = lambda x: (x.Red, x.Green, x.Blue) + if self.ifc_class == "IfcSurfaceStyleShading": + props.surface_colour = color_to_tuple(surface_style.SurfaceColour) + props.transparency = surface_style.Transparency or 0. + elif self.ifc_class == "IfcSurfaceStyleRendering": + props.surface_colour = color_to_tuple(surface_style.SurfaceColour) + props.transparency = surface_style.Transparency or 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 + 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 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): + if self.surface_style.is_a() == "IfcSurfaceStyleShading": + self.surface_style.SurfaceColour.Red = self.props.surface_colour[0] + self.surface_style.SurfaceColour.Green = self.props.surface_colour[1] + self.surface_style.SurfaceColour.Blue = self.props.surface_colour[2] + self.surface_style.Transparency = self.props.transparency or None + + def add_new_style(self): + pass diff --git a/src/blenderbim/blenderbim/bim/module/style/prop.py b/src/blenderbim/blenderbim/bim/module/style/prop.py index 111b36a5fd..88ffdf47fd 100644 --- a/src/blenderbim/blenderbim/bim/module/style/prop.py +++ b/src/blenderbim/blenderbim/bim/module/style/prop.py @@ -44,6 +44,11 @@ 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 + ) STYLE_TYPES = [ @@ -60,8 +65,32 @@ 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) 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..348550e779 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,97 @@ 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_add_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_add_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(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 +214,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 +284,26 @@ 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() + row.enabled = False + row.prop(item, "surface_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 +356,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/tool/style.py b/src/blenderbim/blenderbim/tool/style.py index 3b52333d42..344999276e 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 @@ -430,6 +430,14 @@ 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", []): + new2 = new.style_classes.add() + new2.name = surface_style.is_a() + if surface_style.is_a("IfcSurfaceStyleShading"): + color_to_tuple = lambda x: (x.Red, x.Green, x.Blue) + new.has_surface_colour = True + new.surface_colour = color_to_tuple(surface_style.SurfaceColour) new.total_elements = len(ifcopenshell.util.element.get_elements_by_style(tool.Ifc.get(), style)) @classmethod From 94db9ec522fdcc31e319ff9af0df3cfde661663e Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Fri, 13 Oct 2023 11:50:55 +0200 Subject: [PATCH 067/220] Add IFC4X3_ADD2 schema --- cmake/CMakeLists.txt | 4 +- src/ifcgeom_schema_agnostic/Kernel.cpp | 5 + src/ifcparse/Ifc4x3_add2-definitions.h | 4096 ++ src/ifcparse/Ifc4x3_add2-schema.cpp | 17085 ++++++++ src/ifcparse/Ifc4x3_add2.cpp | 23484 +++++++++++ src/ifcparse/Ifc4x3_add2.h | 49990 +++++++++++++++++++++++ src/ifcparse/IfcHierarchyHelper.cpp | 38 + src/ifcparse/IfcHierarchyHelper.h | 32 + src/ifcparse/IfcSIPrefix.cpp | 9 + src/ifcparse/IfcSchema.cpp | 9 + src/ifcwrap/IfcGeomWrapper.i | 7 +- src/ifcwrap/IfcPython.i | 7 + 12 files changed, 94762 insertions(+), 4 deletions(-) create mode 100644 src/ifcparse/Ifc4x3_add2-definitions.h create mode 100644 src/ifcparse/Ifc4x3_add2-schema.cpp create mode 100644 src/ifcparse/Ifc4x3_add2.cpp create mode 100644 src/ifcparse/Ifc4x3_add2.h diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 32f3debde2..79dac08cad 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -739,7 +739,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() @@ -935,8 +935,6 @@ 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}") - message(STATUS "WITH_PROJ ${WITH_PROJ}") - if (WITH_PROJ) target_compile_definitions(Serializers PRIVATE "WITH_PROJ") if (PROJ_STATIC) 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/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 items; items.reserve(3); + items.push_back("CARTESIAN"); + items.push_back("PARAMETER"); + items.push_back("UNSPECIFIED"); + IFC4X3_ADD2_IfcTrimmingPreference_type = new enumeration_type("IfcTrimmingPreference", 1235, items); + } + { + std::vector items; items.reserve(3); + items.push_back("FINNED"); + items.push_back("NOTDEFINED"); + items.push_back("USERDEFINED"); + IFC4X3_ADD2_IfcTubeBundleTypeEnum_type = new enumeration_type("IfcTubeBundleTypeEnum", 1240, items); + } + IFC4X3_ADD2_IfcURIReference_type = new type_declaration("IfcURIReference", 1254, new simple_type(simple_type::string_type)); + { + std::vector items; items.reserve(30); + items.push_back("ABSORBEDDOSEUNIT"); + items.push_back("AMOUNTOFSUBSTANCEUNIT"); + items.push_back("AREAUNIT"); + items.push_back("DOSEEQUIVALENTUNIT"); + items.push_back("ELECTRICCAPACITANCEUNIT"); + items.push_back("ELECTRICCHARGEUNIT"); + items.push_back("ELECTRICCONDUCTANCEUNIT"); + items.push_back("ELECTRICCURRENTUNIT"); + items.push_back("ELECTRICRESISTANCEUNIT"); + items.push_back("ELECTRICVOLTAGEUNIT"); + items.push_back("ENERGYUNIT"); + items.push_back("FORCEUNIT"); + items.push_back("FREQUENCYUNIT"); + items.push_back("ILLUMINANCEUNIT"); + items.push_back("INDUCTANCEUNIT"); + items.push_back("LENGTHUNIT"); + items.push_back("LUMINOUSFLUXUNIT"); + items.push_back("LUMINOUSINTENSITYUNIT"); + items.push_back("MAGNETICFLUXDENSITYUNIT"); + items.push_back("MAGNETICFLUXUNIT"); + items.push_back("MASSUNIT"); + items.push_back("PLANEANGLEUNIT"); + items.push_back("POWERUNIT"); + items.push_back("PRESSUREUNIT"); + items.push_back("RADIOACTIVITYUNIT"); + items.push_back("SOLIDANGLEUNIT"); + items.push_back("THERMODYNAMICTEMPERATUREUNIT"); + items.push_back("TIMEUNIT"); + items.push_back("USERDEFINED"); + items.push_back("VOLUMEUNIT"); + IFC4X3_ADD2_IfcUnitEnum_type = new enumeration_type("IfcUnitEnum", 1253, items); + } + { + std::vector items; items.reserve(12); + items.push_back("ALARMPANEL"); + items.push_back("BASESTATIONCONTROLLER"); + items.push_back("COMBINED"); + items.push_back("CONTROLPANEL"); + items.push_back("GASDETECTIONPANEL"); + items.push_back("HUMIDISTAT"); + items.push_back("INDICATORPANEL"); + items.push_back("MIMICPANEL"); + items.push_back("NOTDEFINED"); + items.push_back("THERMOSTAT"); + items.push_back("USERDEFINED"); + items.push_back("WEATHERSTATION"); + IFC4X3_ADD2_IfcUnitaryControlElementTypeEnum_type = new enumeration_type("IfcUnitaryControlElementTypeEnum", 1248, items); + } + { + std::vector items; items.reserve(7); + items.push_back("AIRCONDITIONINGUNIT"); + items.push_back("AIRHANDLER"); + items.push_back("DEHUMIDIFIER"); + items.push_back("NOTDEFINED"); + items.push_back("ROOFTOPUNIT"); + items.push_back("SPLITSYSTEM"); + items.push_back("USERDEFINED"); + IFC4X3_ADD2_IfcUnitaryEquipmentTypeEnum_type = new enumeration_type("IfcUnitaryEquipmentTypeEnum", 1251, items); + } + { + std::vector items; items.reserve(23); + items.push_back("AIRRELEASE"); + items.push_back("ANTIVACUUM"); + items.push_back("CHANGEOVER"); + items.push_back("CHECK"); + items.push_back("COMMISSIONING"); + items.push_back("DIVERTING"); + items.push_back("DOUBLECHECK"); + items.push_back("DOUBLEREGULATING"); + items.push_back("DRAWOFFCOCK"); + items.push_back("FAUCET"); + items.push_back("FLUSHING"); + items.push_back("GASCOCK"); + items.push_back("GASTAP"); + items.push_back("ISOLATING"); + items.push_back("MIXING"); + items.push_back("NOTDEFINED"); + items.push_back("PRESSUREREDUCING"); + items.push_back("PRESSURERELIEF"); + items.push_back("REGULATING"); + items.push_back("SAFETYCUTOFF"); + items.push_back("STEAMTRAP"); + items.push_back("STOPCOCK"); + items.push_back("USERDEFINED"); + IFC4X3_ADD2_IfcValveTypeEnum_type = new enumeration_type("IfcValveTypeEnum", 1259, items); + } + IFC4X3_ADD2_IfcVaporPermeabilityMeasure_type = new type_declaration("IfcVaporPermeabilityMeasure", 1260, new simple_type(simple_type::real_type)); + { + std::vector items; items.reserve(9); + items.push_back("CARGO"); + items.push_back("NOTDEFINED"); + items.push_back("ROLLINGSTOCK"); + items.push_back("USERDEFINED"); + items.push_back("VEHICLE"); + items.push_back("VEHICLEAIR"); + items.push_back("VEHICLEMARINE"); + items.push_back("VEHICLETRACKED"); + items.push_back("VEHICLEWHEELED"); + IFC4X3_ADD2_IfcVehicleTypeEnum_type = new enumeration_type("IfcVehicleTypeEnum", 1265, items); + } + { + std::vector items; items.reserve(8); + items.push_back("AXIAL_YIELD"); + items.push_back("BENDING_YIELD"); + items.push_back("FRICTION"); + items.push_back("NOTDEFINED"); + items.push_back("RUBBER"); + items.push_back("SHEAR_YIELD"); + items.push_back("USERDEFINED"); + items.push_back("VISCOUS"); + IFC4X3_ADD2_IfcVibrationDamperTypeEnum_type = new enumeration_type("IfcVibrationDamperTypeEnum", 1271, items); + } + { + std::vector items; items.reserve(5); + items.push_back("BASE"); + items.push_back("COMPRESSION"); + items.push_back("NOTDEFINED"); + items.push_back("SPRING"); + items.push_back("USERDEFINED"); + IFC4X3_ADD2_IfcVibrationIsolatorTypeEnum_type = new enumeration_type("IfcVibrationIsolatorTypeEnum", 1274, items); + } + { + std::vector items; items.reserve(5); + items.push_back("BOUNDARY"); + items.push_back("CLEARANCE"); + items.push_back("NOTDEFINED"); + items.push_back("PROVISIONFORVOID"); + items.push_back("USERDEFINED"); + IFC4X3_ADD2_IfcVirtualElementTypeEnum_type = new enumeration_type("IfcVirtualElementTypeEnum", 1276, items); + } + { + std::vector items; items.reserve(8); + items.push_back("CHAMFER"); + items.push_back("CUTOUT"); + items.push_back("EDGE"); + items.push_back("HOLE"); + items.push_back("MITER"); + items.push_back("NOTCH"); + items.push_back("NOTDEFINED"); + items.push_back("USERDEFINED"); + IFC4X3_ADD2_IfcVoidingFeatureTypeEnum_type = new enumeration_type("IfcVoidingFeatureTypeEnum", 1279, items); + } + IFC4X3_ADD2_IfcVolumeMeasure_type = new type_declaration("IfcVolumeMeasure", 1280, new simple_type(simple_type::real_type)); + IFC4X3_ADD2_IfcVolumetricFlowRateMeasure_type = new type_declaration("IfcVolumetricFlowRateMeasure", 1281, new simple_type(simple_type::real_type)); + { + std::vector items; items.reserve(13); + items.push_back("ELEMENTEDWALL"); + items.push_back("MOVABLE"); + items.push_back("NOTDEFINED"); + items.push_back("PARAPET"); + items.push_back("PARTITIONING"); + items.push_back("PLUMBINGWALL"); + items.push_back("POLYGONAL"); + items.push_back("RETAININGWALL"); + items.push_back("SHEAR"); + items.push_back("SOLIDWALL"); + items.push_back("STANDARD"); + items.push_back("USERDEFINED"); + items.push_back("WAVEWALL"); + IFC4X3_ADD2_IfcWallTypeEnum_type = new enumeration_type("IfcWallTypeEnum", 1285, items); + } + IFC4X3_ADD2_IfcWarpingConstantMeasure_type = new type_declaration("IfcWarpingConstantMeasure", 1286, new simple_type(simple_type::real_type)); + IFC4X3_ADD2_IfcWarpingMomentMeasure_type = new type_declaration("IfcWarpingMomentMeasure", 1287, 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_IfcWarpingMomentMeasure_type); + IFC4X3_ADD2_IfcWarpingStiffnessSelect_type = new select_type("IfcWarpingStiffnessSelect", 1288, items); + } + { + std::vector items; items.reserve(9); + items.push_back("FLOORTRAP"); + items.push_back("FLOORWASTE"); + items.push_back("GULLYSUMP"); + items.push_back("GULLYTRAP"); + items.push_back("NOTDEFINED"); + items.push_back("ROOFDRAIN"); + items.push_back("USERDEFINED"); + items.push_back("WASTEDISPOSALUNIT"); + items.push_back("WASTETRAP"); + IFC4X3_ADD2_IfcWasteTerminalTypeEnum_type = new enumeration_type("IfcWasteTerminalTypeEnum", 1291, items); + } + IFC4X3_ADD2_IfcWellKnownTextLiteral_type = new type_declaration("IfcWellKnownTextLiteral", 1293, new simple_type(simple_type::string_type)); + { + std::vector items; items.reserve(14); + items.push_back("BOTTOMHUNG"); + items.push_back("FIXEDCASEMENT"); + items.push_back("NOTDEFINED"); + items.push_back("OTHEROPERATION"); + items.push_back("PIVOTHORIZONTAL"); + items.push_back("PIVOTVERTICAL"); + items.push_back("REMOVABLECASEMENT"); + items.push_back("SIDEHUNGLEFTHAND"); + items.push_back("SIDEHUNGRIGHTHAND"); + items.push_back("SLIDINGHORIZONTAL"); + items.push_back("SLIDINGVERTICAL"); + items.push_back("TILTANDTURNLEFTHAND"); + items.push_back("TILTANDTURNRIGHTHAND"); + items.push_back("TOPHUNG"); + IFC4X3_ADD2_IfcWindowPanelOperationEnum_type = new enumeration_type("IfcWindowPanelOperationEnum", 1296, items); + } + { + std::vector items; items.reserve(6); + items.push_back("BOTTOM"); + items.push_back("LEFT"); + items.push_back("MIDDLE"); + items.push_back("NOTDEFINED"); + items.push_back("RIGHT"); + items.push_back("TOP"); + IFC4X3_ADD2_IfcWindowPanelPositionEnum_type = new enumeration_type("IfcWindowPanelPositionEnum", 1297, items); + } + { + std::vector items; items.reserve(5); + items.push_back("LIGHTDOME"); + items.push_back("NOTDEFINED"); + items.push_back("SKYLIGHT"); + items.push_back("USERDEFINED"); + items.push_back("WINDOW"); + IFC4X3_ADD2_IfcWindowTypeEnum_type = new enumeration_type("IfcWindowTypeEnum", 1300, items); + } + { + std::vector items; items.reserve(11); + items.push_back("DOUBLE_PANEL_HORIZONTAL"); + items.push_back("DOUBLE_PANEL_VERTICAL"); + items.push_back("NOTDEFINED"); + items.push_back("SINGLE_PANEL"); + items.push_back("TRIPLE_PANEL_BOTTOM"); + items.push_back("TRIPLE_PANEL_HORIZONTAL"); + items.push_back("TRIPLE_PANEL_LEFT"); + items.push_back("TRIPLE_PANEL_RIGHT"); + items.push_back("TRIPLE_PANEL_TOP"); + items.push_back("TRIPLE_PANEL_VERTICAL"); + items.push_back("USERDEFINED"); + IFC4X3_ADD2_IfcWindowTypePartitioningEnum_type = new enumeration_type("IfcWindowTypePartitioningEnum", 1301, items); + } + { + std::vector items; items.reserve(5); + items.push_back("FIRSTSHIFT"); + items.push_back("NOTDEFINED"); + items.push_back("SECONDSHIFT"); + items.push_back("THIRDSHIFT"); + items.push_back("USERDEFINED"); + IFC4X3_ADD2_IfcWorkCalendarTypeEnum_type = new enumeration_type("IfcWorkCalendarTypeEnum", 1303, items); + } + { + std::vector items; items.reserve(5); + items.push_back("ACTUAL"); + items.push_back("BASELINE"); + items.push_back("NOTDEFINED"); + items.push_back("PLANNED"); + items.push_back("USERDEFINED"); + IFC4X3_ADD2_IfcWorkPlanTypeEnum_type = new enumeration_type("IfcWorkPlanTypeEnum", 1306, items); + } + { + std::vector items; items.reserve(5); + items.push_back("ACTUAL"); + items.push_back("BASELINE"); + items.push_back("NOTDEFINED"); + items.push_back("PLANNED"); + items.push_back("USERDEFINED"); + IFC4X3_ADD2_IfcWorkScheduleTypeEnum_type = new enumeration_type("IfcWorkScheduleTypeEnum", 1308, items); + } + IFC4X3_ADD2_IfcActorRole_type = new entity("IfcActorRole", false, 7, 0); + IFC4X3_ADD2_IfcAddress_type = new entity("IfcAddress", true, 12, 0); + IFC4X3_ADD2_IfcAlignmentParameterSegment_type = new entity("IfcAlignmentParameterSegment", true, 36, 0); + IFC4X3_ADD2_IfcAlignmentVerticalSegment_type = new entity("IfcAlignmentVerticalSegment", false, 40, IFC4X3_ADD2_IfcAlignmentParameterSegment_type); + IFC4X3_ADD2_IfcApplication_type = new entity("IfcApplication", false, 49, 0); + IFC4X3_ADD2_IfcAppliedValue_type = new entity("IfcAppliedValue", false, 50, 0); + IFC4X3_ADD2_IfcApproval_type = new entity("IfcApproval", false, 52, 0); + IFC4X3_ADD2_IfcBoundaryCondition_type = new entity("IfcBoundaryCondition", true, 92, 0); + IFC4X3_ADD2_IfcBoundaryEdgeCondition_type = new entity("IfcBoundaryEdgeCondition", false, 94, IFC4X3_ADD2_IfcBoundaryCondition_type); + IFC4X3_ADD2_IfcBoundaryFaceCondition_type = new entity("IfcBoundaryFaceCondition", false, 95, IFC4X3_ADD2_IfcBoundaryCondition_type); + IFC4X3_ADD2_IfcBoundaryNodeCondition_type = new entity("IfcBoundaryNodeCondition", false, 96, IFC4X3_ADD2_IfcBoundaryCondition_type); + IFC4X3_ADD2_IfcBoundaryNodeConditionWarping_type = new entity("IfcBoundaryNodeConditionWarping", false, 97, IFC4X3_ADD2_IfcBoundaryNodeCondition_type); + IFC4X3_ADD2_IfcConnectionGeometry_type = new entity("IfcConnectionGeometry", true, 206, 0); + IFC4X3_ADD2_IfcConnectionPointGeometry_type = new entity("IfcConnectionPointGeometry", false, 208, IFC4X3_ADD2_IfcConnectionGeometry_type); + IFC4X3_ADD2_IfcConnectionSurfaceGeometry_type = new entity("IfcConnectionSurfaceGeometry", false, 209, IFC4X3_ADD2_IfcConnectionGeometry_type); + IFC4X3_ADD2_IfcConnectionVolumeGeometry_type = new entity("IfcConnectionVolumeGeometry", false, 211, IFC4X3_ADD2_IfcConnectionGeometry_type); + IFC4X3_ADD2_IfcConstraint_type = new entity("IfcConstraint", true, 212, 0); + IFC4X3_ADD2_IfcCoordinateOperation_type = new entity("IfcCoordinateOperation", true, 243, 0); + IFC4X3_ADD2_IfcCoordinateReferenceSystem_type = new entity("IfcCoordinateReferenceSystem", true, 244, 0); + IFC4X3_ADD2_IfcCostValue_type = new entity("IfcCostValue", false, 251, IFC4X3_ADD2_IfcAppliedValue_type); + IFC4X3_ADD2_IfcDerivedUnit_type = new entity("IfcDerivedUnit", false, 299, 0); + IFC4X3_ADD2_IfcDerivedUnitElement_type = new entity("IfcDerivedUnitElement", false, 300, 0); + IFC4X3_ADD2_IfcDimensionalExponents_type = new entity("IfcDimensionalExponents", false, 303, 0); + IFC4X3_ADD2_IfcExternalInformation_type = new entity("IfcExternalInformation", true, 422, 0); + IFC4X3_ADD2_IfcExternalReference_type = new entity("IfcExternalReference", true, 426, 0); + IFC4X3_ADD2_IfcExternallyDefinedHatchStyle_type = new entity("IfcExternallyDefinedHatchStyle", false, 423, IFC4X3_ADD2_IfcExternalReference_type); + IFC4X3_ADD2_IfcExternallyDefinedSurfaceStyle_type = new entity("IfcExternallyDefinedSurfaceStyle", false, 424, IFC4X3_ADD2_IfcExternalReference_type); + IFC4X3_ADD2_IfcExternallyDefinedTextFont_type = new entity("IfcExternallyDefinedTextFont", false, 425, IFC4X3_ADD2_IfcExternalReference_type); + IFC4X3_ADD2_IfcGeographicCRS_type = new entity("IfcGeographicCRS", false, 500, IFC4X3_ADD2_IfcCoordinateReferenceSystem_type); + IFC4X3_ADD2_IfcGridAxis_type = new entity("IfcGridAxis", false, 521, 0); + IFC4X3_ADD2_IfcIrregularTimeSeriesValue_type = new entity("IfcIrregularTimeSeriesValue", false, 562, 0); + IFC4X3_ADD2_IfcLibraryInformation_type = new entity("IfcLibraryInformation", false, 585, IFC4X3_ADD2_IfcExternalInformation_type); + IFC4X3_ADD2_IfcLibraryReference_type = new entity("IfcLibraryReference", false, 586, IFC4X3_ADD2_IfcExternalReference_type); + IFC4X3_ADD2_IfcLightDistributionData_type = new entity("IfcLightDistributionData", false, 589, 0); + IFC4X3_ADD2_IfcLightIntensityDistribution_type = new entity("IfcLightIntensityDistribution", false, 595, 0); + IFC4X3_ADD2_IfcMapConversion_type = new entity("IfcMapConversion", false, 626, IFC4X3_ADD2_IfcCoordinateOperation_type); + IFC4X3_ADD2_IfcMapConversionScaled_type = new entity("IfcMapConversionScaled", false, 627, IFC4X3_ADD2_IfcMapConversion_type); + IFC4X3_ADD2_IfcMaterialClassificationRelationship_type = new entity("IfcMaterialClassificationRelationship", false, 638, 0); + IFC4X3_ADD2_IfcMaterialDefinition_type = new entity("IfcMaterialDefinition", true, 641, 0); + IFC4X3_ADD2_IfcMaterialLayer_type = new entity("IfcMaterialLayer", false, 643, IFC4X3_ADD2_IfcMaterialDefinition_type); + IFC4X3_ADD2_IfcMaterialLayerSet_type = new entity("IfcMaterialLayerSet", false, 644, IFC4X3_ADD2_IfcMaterialDefinition_type); + IFC4X3_ADD2_IfcMaterialLayerWithOffsets_type = new entity("IfcMaterialLayerWithOffsets", false, 646, IFC4X3_ADD2_IfcMaterialLayer_type); + IFC4X3_ADD2_IfcMaterialList_type = new entity("IfcMaterialList", false, 647, 0); + IFC4X3_ADD2_IfcMaterialProfile_type = new entity("IfcMaterialProfile", false, 648, IFC4X3_ADD2_IfcMaterialDefinition_type); + IFC4X3_ADD2_IfcMaterialProfileSet_type = new entity("IfcMaterialProfileSet", false, 649, IFC4X3_ADD2_IfcMaterialDefinition_type); + IFC4X3_ADD2_IfcMaterialProfileWithOffsets_type = new entity("IfcMaterialProfileWithOffsets", false, 652, IFC4X3_ADD2_IfcMaterialProfile_type); + IFC4X3_ADD2_IfcMaterialUsageDefinition_type = new entity("IfcMaterialUsageDefinition", true, 656, 0); + IFC4X3_ADD2_IfcMeasureWithUnit_type = new entity("IfcMeasureWithUnit", false, 658, 0); + IFC4X3_ADD2_IfcMetric_type = new entity("IfcMetric", false, 668, IFC4X3_ADD2_IfcConstraint_type); + IFC4X3_ADD2_IfcMonetaryUnit_type = new entity("IfcMonetaryUnit", false, 685, 0); + IFC4X3_ADD2_IfcNamedUnit_type = new entity("IfcNamedUnit", true, 693, 0); + IFC4X3_ADD2_IfcObjectPlacement_type = new entity("IfcObjectPlacement", true, 704, 0); + IFC4X3_ADD2_IfcObjective_type = new entity("IfcObjective", false, 702, IFC4X3_ADD2_IfcConstraint_type); + IFC4X3_ADD2_IfcOrganization_type = new entity("IfcOrganization", false, 716, 0); + IFC4X3_ADD2_IfcOwnerHistory_type = new entity("IfcOwnerHistory", false, 723, 0); + IFC4X3_ADD2_IfcPerson_type = new entity("IfcPerson", false, 737, 0); + IFC4X3_ADD2_IfcPersonAndOrganization_type = new entity("IfcPersonAndOrganization", false, 738, 0); + IFC4X3_ADD2_IfcPhysicalQuantity_type = new entity("IfcPhysicalQuantity", true, 742, 0); + IFC4X3_ADD2_IfcPhysicalSimpleQuantity_type = new entity("IfcPhysicalSimpleQuantity", true, 743, IFC4X3_ADD2_IfcPhysicalQuantity_type); + IFC4X3_ADD2_IfcPostalAddress_type = new entity("IfcPostalAddress", false, 780, IFC4X3_ADD2_IfcAddress_type); + IFC4X3_ADD2_IfcPresentationItem_type = new entity("IfcPresentationItem", true, 790, 0); + IFC4X3_ADD2_IfcPresentationLayerAssignment_type = new entity("IfcPresentationLayerAssignment", false, 791, 0); + IFC4X3_ADD2_IfcPresentationLayerWithStyle_type = new entity("IfcPresentationLayerWithStyle", false, 792, IFC4X3_ADD2_IfcPresentationLayerAssignment_type); + IFC4X3_ADD2_IfcPresentationStyle_type = new entity("IfcPresentationStyle", true, 793, 0); + IFC4X3_ADD2_IfcProductRepresentation_type = new entity("IfcProductRepresentation", true, 802, 0); + IFC4X3_ADD2_IfcProfileDef_type = new entity("IfcProfileDef", false, 805, 0); + IFC4X3_ADD2_IfcProjectedCRS_type = new entity("IfcProjectedCRS", false, 809, IFC4X3_ADD2_IfcCoordinateReferenceSystem_type); + IFC4X3_ADD2_IfcPropertyAbstraction_type = new entity("IfcPropertyAbstraction", true, 817, 0); + IFC4X3_ADD2_IfcPropertyEnumeration_type = new entity("IfcPropertyEnumeration", false, 822, IFC4X3_ADD2_IfcPropertyAbstraction_type); + IFC4X3_ADD2_IfcQuantityArea_type = new entity("IfcQuantityArea", false, 844, IFC4X3_ADD2_IfcPhysicalSimpleQuantity_type); + IFC4X3_ADD2_IfcQuantityCount_type = new entity("IfcQuantityCount", false, 845, IFC4X3_ADD2_IfcPhysicalSimpleQuantity_type); + IFC4X3_ADD2_IfcQuantityLength_type = new entity("IfcQuantityLength", false, 846, IFC4X3_ADD2_IfcPhysicalSimpleQuantity_type); + IFC4X3_ADD2_IfcQuantityNumber_type = new entity("IfcQuantityNumber", false, 847, IFC4X3_ADD2_IfcPhysicalSimpleQuantity_type); + IFC4X3_ADD2_IfcQuantityTime_type = new entity("IfcQuantityTime", false, 849, IFC4X3_ADD2_IfcPhysicalSimpleQuantity_type); + IFC4X3_ADD2_IfcQuantityVolume_type = new entity("IfcQuantityVolume", false, 850, IFC4X3_ADD2_IfcPhysicalSimpleQuantity_type); + IFC4X3_ADD2_IfcQuantityWeight_type = new entity("IfcQuantityWeight", false, 851, IFC4X3_ADD2_IfcPhysicalSimpleQuantity_type); + IFC4X3_ADD2_IfcRecurrencePattern_type = new entity("IfcRecurrencePattern", false, 877, 0); + IFC4X3_ADD2_IfcReference_type = new entity("IfcReference", false, 879, 0); + IFC4X3_ADD2_IfcRepresentation_type = new entity("IfcRepresentation", true, 950, 0); + IFC4X3_ADD2_IfcRepresentationContext_type = new entity("IfcRepresentationContext", true, 951, 0); + IFC4X3_ADD2_IfcRepresentationItem_type = new entity("IfcRepresentationItem", true, 952, 0); + IFC4X3_ADD2_IfcRepresentationMap_type = new entity("IfcRepresentationMap", false, 953, 0); + IFC4X3_ADD2_IfcResourceLevelRelationship_type = new entity("IfcResourceLevelRelationship", true, 957, 0); + IFC4X3_ADD2_IfcRigidOperation_type = new entity("IfcRigidOperation", false, 965, IFC4X3_ADD2_IfcCoordinateOperation_type); + IFC4X3_ADD2_IfcRoot_type = new entity("IfcRoot", true, 974, 0); + IFC4X3_ADD2_IfcSIUnit_type = new entity("IfcSIUnit", false, 1025, IFC4X3_ADD2_IfcNamedUnit_type); + IFC4X3_ADD2_IfcSchedulingTime_type = new entity("IfcSchedulingTime", true, 983, 0); + IFC4X3_ADD2_IfcShapeAspect_type = new entity("IfcShapeAspect", false, 1006, 0); + IFC4X3_ADD2_IfcShapeModel_type = new entity("IfcShapeModel", true, 1007, IFC4X3_ADD2_IfcRepresentation_type); + IFC4X3_ADD2_IfcShapeRepresentation_type = new entity("IfcShapeRepresentation", false, 1008, IFC4X3_ADD2_IfcShapeModel_type); + IFC4X3_ADD2_IfcStructuralConnectionCondition_type = new entity("IfcStructuralConnectionCondition", true, 1080, 0); + IFC4X3_ADD2_IfcStructuralLoad_type = new entity("IfcStructuralLoad", true, 1090, 0); + IFC4X3_ADD2_IfcStructuralLoadConfiguration_type = new entity("IfcStructuralLoadConfiguration", false, 1092, IFC4X3_ADD2_IfcStructuralLoad_type); + IFC4X3_ADD2_IfcStructuralLoadOrResult_type = new entity("IfcStructuralLoadOrResult", true, 1095, IFC4X3_ADD2_IfcStructuralLoad_type); + IFC4X3_ADD2_IfcStructuralLoadStatic_type = new entity("IfcStructuralLoadStatic", true, 1101, IFC4X3_ADD2_IfcStructuralLoadOrResult_type); + IFC4X3_ADD2_IfcStructuralLoadTemperature_type = new entity("IfcStructuralLoadTemperature", false, 1102, IFC4X3_ADD2_IfcStructuralLoadStatic_type); + IFC4X3_ADD2_IfcStyleModel_type = new entity("IfcStyleModel", true, 1119, IFC4X3_ADD2_IfcRepresentation_type); + IFC4X3_ADD2_IfcStyledItem_type = new entity("IfcStyledItem", false, 1117, IFC4X3_ADD2_IfcRepresentationItem_type); + IFC4X3_ADD2_IfcStyledRepresentation_type = new entity("IfcStyledRepresentation", false, 1118, IFC4X3_ADD2_IfcStyleModel_type); + IFC4X3_ADD2_IfcSurfaceReinforcementArea_type = new entity("IfcSurfaceReinforcementArea", false, 1132, IFC4X3_ADD2_IfcStructuralLoadOrResult_type); + IFC4X3_ADD2_IfcSurfaceStyle_type = new entity("IfcSurfaceStyle", false, 1134, IFC4X3_ADD2_IfcPresentationStyle_type); + IFC4X3_ADD2_IfcSurfaceStyleLighting_type = new entity("IfcSurfaceStyleLighting", false, 1136, IFC4X3_ADD2_IfcPresentationItem_type); + IFC4X3_ADD2_IfcSurfaceStyleRefraction_type = new entity("IfcSurfaceStyleRefraction", false, 1137, IFC4X3_ADD2_IfcPresentationItem_type); + IFC4X3_ADD2_IfcSurfaceStyleShading_type = new entity("IfcSurfaceStyleShading", false, 1139, IFC4X3_ADD2_IfcPresentationItem_type); + IFC4X3_ADD2_IfcSurfaceStyleWithTextures_type = new entity("IfcSurfaceStyleWithTextures", false, 1140, IFC4X3_ADD2_IfcPresentationItem_type); + IFC4X3_ADD2_IfcSurfaceTexture_type = new entity("IfcSurfaceTexture", true, 1141, IFC4X3_ADD2_IfcPresentationItem_type); + IFC4X3_ADD2_IfcTable_type = new entity("IfcTable", false, 1153, 0); + IFC4X3_ADD2_IfcTableColumn_type = new entity("IfcTableColumn", false, 1154, 0); + IFC4X3_ADD2_IfcTableRow_type = new entity("IfcTableRow", false, 1155, 0); + IFC4X3_ADD2_IfcTaskTime_type = new entity("IfcTaskTime", false, 1161, IFC4X3_ADD2_IfcSchedulingTime_type); + IFC4X3_ADD2_IfcTaskTimeRecurring_type = new entity("IfcTaskTimeRecurring", false, 1162, IFC4X3_ADD2_IfcTaskTime_type); + IFC4X3_ADD2_IfcTelecomAddress_type = new entity("IfcTelecomAddress", false, 1165, IFC4X3_ADD2_IfcAddress_type); + IFC4X3_ADD2_IfcTextStyle_type = new entity("IfcTextStyle", false, 1187, IFC4X3_ADD2_IfcPresentationStyle_type); + IFC4X3_ADD2_IfcTextStyleForDefinedFont_type = new entity("IfcTextStyleForDefinedFont", false, 1189, IFC4X3_ADD2_IfcPresentationItem_type); + IFC4X3_ADD2_IfcTextStyleTextModel_type = new entity("IfcTextStyleTextModel", false, 1190, IFC4X3_ADD2_IfcPresentationItem_type); + IFC4X3_ADD2_IfcTextureCoordinate_type = new entity("IfcTextureCoordinate", true, 1192, IFC4X3_ADD2_IfcPresentationItem_type); + IFC4X3_ADD2_IfcTextureCoordinateGenerator_type = new entity("IfcTextureCoordinateGenerator", false, 1193, IFC4X3_ADD2_IfcTextureCoordinate_type); + IFC4X3_ADD2_IfcTextureCoordinateIndices_type = new entity("IfcTextureCoordinateIndices", false, 1194, 0); + IFC4X3_ADD2_IfcTextureCoordinateIndicesWithVoids_type = new entity("IfcTextureCoordinateIndicesWithVoids", false, 1195, IFC4X3_ADD2_IfcTextureCoordinateIndices_type); + IFC4X3_ADD2_IfcTextureMap_type = new entity("IfcTextureMap", false, 1196, IFC4X3_ADD2_IfcTextureCoordinate_type); + IFC4X3_ADD2_IfcTextureVertex_type = new entity("IfcTextureVertex", false, 1197, IFC4X3_ADD2_IfcPresentationItem_type); + IFC4X3_ADD2_IfcTextureVertexList_type = new entity("IfcTextureVertexList", false, 1198, IFC4X3_ADD2_IfcPresentationItem_type); + IFC4X3_ADD2_IfcTimePeriod_type = new entity("IfcTimePeriod", false, 1209, 0); + IFC4X3_ADD2_IfcTimeSeries_type = new entity("IfcTimeSeries", true, 1210, 0); + IFC4X3_ADD2_IfcTimeSeriesValue_type = new entity("IfcTimeSeriesValue", false, 1212, 0); + IFC4X3_ADD2_IfcTopologicalRepresentationItem_type = new entity("IfcTopologicalRepresentationItem", true, 1214, IFC4X3_ADD2_IfcRepresentationItem_type); + IFC4X3_ADD2_IfcTopologyRepresentation_type = new entity("IfcTopologyRepresentation", false, 1215, IFC4X3_ADD2_IfcShapeModel_type); + IFC4X3_ADD2_IfcUnitAssignment_type = new entity("IfcUnitAssignment", false, 1252, 0); + IFC4X3_ADD2_IfcVertex_type = new entity("IfcVertex", false, 1266, IFC4X3_ADD2_IfcTopologicalRepresentationItem_type); + IFC4X3_ADD2_IfcVertexPoint_type = new entity("IfcVertexPoint", false, 1268, IFC4X3_ADD2_IfcVertex_type); + IFC4X3_ADD2_IfcVirtualGridIntersection_type = new entity("IfcVirtualGridIntersection", false, 1277, 0); + IFC4X3_ADD2_IfcWellKnownText_type = new entity("IfcWellKnownText", false, 1292, 0); + IFC4X3_ADD2_IfcWorkTime_type = new entity("IfcWorkTime", false, 1309, IFC4X3_ADD2_IfcSchedulingTime_type); + { + std::vector items; items.reserve(3); + items.push_back(IFC4X3_ADD2_IfcOrganization_type); + items.push_back(IFC4X3_ADD2_IfcPerson_type); + items.push_back(IFC4X3_ADD2_IfcPersonAndOrganization_type); + IFC4X3_ADD2_IfcActorSelect_type = new select_type("IfcActorSelect", 8, items); + } + IFC4X3_ADD2_IfcArcIndex_type = new type_declaration("IfcArcIndex", 57, new aggregation_type(aggregation_type::list_type, 3, 3, new named_type(IFC4X3_ADD2_IfcPositiveInteger_type))); + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcLengthMeasure_type); + items.push_back(IFC4X3_ADD2_IfcPlaneAngleMeasure_type); + IFC4X3_ADD2_IfcBendingParameterSelect_type = new select_type("IfcBendingParameterSelect", 79, items); + } + IFC4X3_ADD2_IfcBoxAlignment_type = new type_declaration("IfcBoxAlignment", 101, new named_type(IFC4X3_ADD2_IfcLabel_type)); + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcLengthMeasure_type); + items.push_back(IFC4X3_ADD2_IfcParameterValue_type); + IFC4X3_ADD2_IfcCurveMeasureSelect_type = new select_type("IfcCurveMeasureSelect", 276, items); + } + { + std::vector items; items.reserve(71); + items.push_back(IFC4X3_ADD2_IfcAbsorbedDoseMeasure_type); + items.push_back(IFC4X3_ADD2_IfcAccelerationMeasure_type); + items.push_back(IFC4X3_ADD2_IfcAngularVelocityMeasure_type); + items.push_back(IFC4X3_ADD2_IfcAreaDensityMeasure_type); + items.push_back(IFC4X3_ADD2_IfcCompoundPlaneAngleMeasure_type); + items.push_back(IFC4X3_ADD2_IfcCurvatureMeasure_type); + items.push_back(IFC4X3_ADD2_IfcDoseEquivalentMeasure_type); + items.push_back(IFC4X3_ADD2_IfcDynamicViscosityMeasure_type); + items.push_back(IFC4X3_ADD2_IfcElectricCapacitanceMeasure_type); + items.push_back(IFC4X3_ADD2_IfcElectricChargeMeasure_type); + items.push_back(IFC4X3_ADD2_IfcElectricConductanceMeasure_type); + items.push_back(IFC4X3_ADD2_IfcElectricResistanceMeasure_type); + items.push_back(IFC4X3_ADD2_IfcElectricVoltageMeasure_type); + items.push_back(IFC4X3_ADD2_IfcEnergyMeasure_type); + items.push_back(IFC4X3_ADD2_IfcForceMeasure_type); + items.push_back(IFC4X3_ADD2_IfcFrequencyMeasure_type); + items.push_back(IFC4X3_ADD2_IfcHeatFluxDensityMeasure_type); + items.push_back(IFC4X3_ADD2_IfcHeatingValueMeasure_type); + items.push_back(IFC4X3_ADD2_IfcIlluminanceMeasure_type); + items.push_back(IFC4X3_ADD2_IfcInductanceMeasure_type); + items.push_back(IFC4X3_ADD2_IfcIntegerCountRateMeasure_type); + items.push_back(IFC4X3_ADD2_IfcIonConcentrationMeasure_type); + items.push_back(IFC4X3_ADD2_IfcIsothermalMoistureCapacityMeasure_type); + items.push_back(IFC4X3_ADD2_IfcKinematicViscosityMeasure_type); + items.push_back(IFC4X3_ADD2_IfcLinearForceMeasure_type); + items.push_back(IFC4X3_ADD2_IfcLinearMomentMeasure_type); + items.push_back(IFC4X3_ADD2_IfcLinearStiffnessMeasure_type); + items.push_back(IFC4X3_ADD2_IfcLinearVelocityMeasure_type); + items.push_back(IFC4X3_ADD2_IfcLuminousFluxMeasure_type); + items.push_back(IFC4X3_ADD2_IfcLuminousIntensityDistributionMeasure_type); + items.push_back(IFC4X3_ADD2_IfcMagneticFluxDensityMeasure_type); + items.push_back(IFC4X3_ADD2_IfcMagneticFluxMeasure_type); + items.push_back(IFC4X3_ADD2_IfcMassDensityMeasure_type); + items.push_back(IFC4X3_ADD2_IfcMassFlowRateMeasure_type); + items.push_back(IFC4X3_ADD2_IfcMassPerLengthMeasure_type); + items.push_back(IFC4X3_ADD2_IfcModulusOfElasticityMeasure_type); + items.push_back(IFC4X3_ADD2_IfcModulusOfLinearSubgradeReactionMeasure_type); + items.push_back(IFC4X3_ADD2_IfcModulusOfRotationalSubgradeReactionMeasure_type); + items.push_back(IFC4X3_ADD2_IfcModulusOfSubgradeReactionMeasure_type); + items.push_back(IFC4X3_ADD2_IfcMoistureDiffusivityMeasure_type); + items.push_back(IFC4X3_ADD2_IfcMolecularWeightMeasure_type); + items.push_back(IFC4X3_ADD2_IfcMomentOfInertiaMeasure_type); + items.push_back(IFC4X3_ADD2_IfcMonetaryMeasure_type); + items.push_back(IFC4X3_ADD2_IfcPHMeasure_type); + items.push_back(IFC4X3_ADD2_IfcPlanarForceMeasure_type); + items.push_back(IFC4X3_ADD2_IfcPowerMeasure_type); + items.push_back(IFC4X3_ADD2_IfcPressureMeasure_type); + items.push_back(IFC4X3_ADD2_IfcRadioActivityMeasure_type); + items.push_back(IFC4X3_ADD2_IfcRotationalFrequencyMeasure_type); + items.push_back(IFC4X3_ADD2_IfcRotationalMassMeasure_type); + items.push_back(IFC4X3_ADD2_IfcRotationalStiffnessMeasure_type); + items.push_back(IFC4X3_ADD2_IfcSectionModulusMeasure_type); + items.push_back(IFC4X3_ADD2_IfcSectionalAreaIntegralMeasure_type); + items.push_back(IFC4X3_ADD2_IfcShearModulusMeasure_type); + items.push_back(IFC4X3_ADD2_IfcSoundPowerLevelMeasure_type); + items.push_back(IFC4X3_ADD2_IfcSoundPowerMeasure_type); + items.push_back(IFC4X3_ADD2_IfcSoundPressureLevelMeasure_type); + items.push_back(IFC4X3_ADD2_IfcSoundPressureMeasure_type); + items.push_back(IFC4X3_ADD2_IfcSpecificHeatCapacityMeasure_type); + items.push_back(IFC4X3_ADD2_IfcTemperatureGradientMeasure_type); + items.push_back(IFC4X3_ADD2_IfcTemperatureRateOfChangeMeasure_type); + items.push_back(IFC4X3_ADD2_IfcThermalAdmittanceMeasure_type); + items.push_back(IFC4X3_ADD2_IfcThermalConductivityMeasure_type); + items.push_back(IFC4X3_ADD2_IfcThermalExpansionCoefficientMeasure_type); + items.push_back(IFC4X3_ADD2_IfcThermalResistanceMeasure_type); + items.push_back(IFC4X3_ADD2_IfcThermalTransmittanceMeasure_type); + items.push_back(IFC4X3_ADD2_IfcTorqueMeasure_type); + items.push_back(IFC4X3_ADD2_IfcVaporPermeabilityMeasure_type); + items.push_back(IFC4X3_ADD2_IfcVolumetricFlowRateMeasure_type); + items.push_back(IFC4X3_ADD2_IfcWarpingConstantMeasure_type); + items.push_back(IFC4X3_ADD2_IfcWarpingMomentMeasure_type); + IFC4X3_ADD2_IfcDerivedMeasureValue_type = new select_type("IfcDerivedMeasureValue", 297, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcRepresentation_type); + items.push_back(IFC4X3_ADD2_IfcRepresentationItem_type); + IFC4X3_ADD2_IfcLayeredItem_type = new select_type("IfcLayeredItem", 582, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcLibraryInformation_type); + items.push_back(IFC4X3_ADD2_IfcLibraryReference_type); + IFC4X3_ADD2_IfcLibrarySelect_type = new select_type("IfcLibrarySelect", 587, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcExternalReference_type); + items.push_back(IFC4X3_ADD2_IfcLightIntensityDistribution_type); + IFC4X3_ADD2_IfcLightDistributionDataSourceSelect_type = new select_type("IfcLightDistributionDataSourceSelect", 590, items); + } + IFC4X3_ADD2_IfcLineIndex_type = new type_declaration("IfcLineIndex", 610, new aggregation_type(aggregation_type::list_type, 2, -1, new named_type(IFC4X3_ADD2_IfcPositiveInteger_type))); + { + std::vector items; items.reserve(3); + items.push_back(IFC4X3_ADD2_IfcMaterialDefinition_type); + items.push_back(IFC4X3_ADD2_IfcMaterialList_type); + items.push_back(IFC4X3_ADD2_IfcMaterialUsageDefinition_type); + IFC4X3_ADD2_IfcMaterialSelect_type = new select_type("IfcMaterialSelect", 655, items); + } + IFC4X3_ADD2_IfcNormalisedRatioMeasure_type = new type_declaration("IfcNormalisedRatioMeasure", 698, new named_type(IFC4X3_ADD2_IfcRatioMeasure_type)); + { + std::vector items; items.reserve(9); + items.push_back(IFC4X3_ADD2_IfcAddress_type); + items.push_back(IFC4X3_ADD2_IfcAppliedValue_type); + items.push_back(IFC4X3_ADD2_IfcExternalReference_type); + items.push_back(IFC4X3_ADD2_IfcMaterialDefinition_type); + items.push_back(IFC4X3_ADD2_IfcOrganization_type); + items.push_back(IFC4X3_ADD2_IfcPerson_type); + items.push_back(IFC4X3_ADD2_IfcPersonAndOrganization_type); + items.push_back(IFC4X3_ADD2_IfcTable_type); + items.push_back(IFC4X3_ADD2_IfcTimeSeries_type); + IFC4X3_ADD2_IfcObjectReferenceSelect_type = new select_type("IfcObjectReferenceSelect", 705, items); + } + IFC4X3_ADD2_IfcPositiveRatioMeasure_type = new type_declaration("IfcPositiveRatioMeasure", 779, new named_type(IFC4X3_ADD2_IfcRatioMeasure_type)); + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcArcIndex_type); + items.push_back(IFC4X3_ADD2_IfcLineIndex_type); + IFC4X3_ADD2_IfcSegmentIndexSelect_type = new select_type("IfcSegmentIndexSelect", 997, items); + } + { + std::vector items; items.reserve(15); + items.push_back(IFC4X3_ADD2_IfcBinary_type); + items.push_back(IFC4X3_ADD2_IfcBoolean_type); + items.push_back(IFC4X3_ADD2_IfcDate_type); + items.push_back(IFC4X3_ADD2_IfcDateTime_type); + items.push_back(IFC4X3_ADD2_IfcDuration_type); + items.push_back(IFC4X3_ADD2_IfcIdentifier_type); + items.push_back(IFC4X3_ADD2_IfcInteger_type); + items.push_back(IFC4X3_ADD2_IfcLabel_type); + items.push_back(IFC4X3_ADD2_IfcLogical_type); + items.push_back(IFC4X3_ADD2_IfcPositiveInteger_type); + items.push_back(IFC4X3_ADD2_IfcReal_type); + items.push_back(IFC4X3_ADD2_IfcText_type); + items.push_back(IFC4X3_ADD2_IfcTime_type); + items.push_back(IFC4X3_ADD2_IfcTimeStamp_type); + items.push_back(IFC4X3_ADD2_IfcURIReference_type); + IFC4X3_ADD2_IfcSimpleValue_type = new select_type("IfcSimpleValue", 1021, items); + } + { + std::vector items; items.reserve(6); + items.push_back(IFC4X3_ADD2_IfcDescriptiveMeasure_type); + items.push_back(IFC4X3_ADD2_IfcLengthMeasure_type); + items.push_back(IFC4X3_ADD2_IfcNormalisedRatioMeasure_type); + items.push_back(IFC4X3_ADD2_IfcPositiveLengthMeasure_type); + items.push_back(IFC4X3_ADD2_IfcPositiveRatioMeasure_type); + items.push_back(IFC4X3_ADD2_IfcRatioMeasure_type); + IFC4X3_ADD2_IfcSizeSelect_type = new select_type("IfcSizeSelect", 1027, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcSpecularExponent_type); + items.push_back(IFC4X3_ADD2_IfcSpecularRoughness_type); + IFC4X3_ADD2_IfcSpecularHighlightSelect_type = new select_type("IfcSpecularHighlightSelect", 1059, items); + } + { + std::vector items; items.reserve(5); + items.push_back(IFC4X3_ADD2_IfcExternallyDefinedSurfaceStyle_type); + items.push_back(IFC4X3_ADD2_IfcSurfaceStyleLighting_type); + items.push_back(IFC4X3_ADD2_IfcSurfaceStyleRefraction_type); + items.push_back(IFC4X3_ADD2_IfcSurfaceStyleShading_type); + items.push_back(IFC4X3_ADD2_IfcSurfaceStyleWithTextures_type); + IFC4X3_ADD2_IfcSurfaceStyleElementSelect_type = new select_type("IfcSurfaceStyleElementSelect", 1135, items); + } + { + std::vector items; items.reserve(3); + items.push_back(IFC4X3_ADD2_IfcDerivedUnit_type); + items.push_back(IFC4X3_ADD2_IfcMonetaryUnit_type); + items.push_back(IFC4X3_ADD2_IfcNamedUnit_type); + IFC4X3_ADD2_IfcUnit_type = new select_type("IfcUnit", 1245, items); + } + IFC4X3_ADD2_IfcAlignmentCantSegment_type = new entity("IfcAlignmentCantSegment", false, 31, IFC4X3_ADD2_IfcAlignmentParameterSegment_type); + IFC4X3_ADD2_IfcAlignmentHorizontalSegment_type = new entity("IfcAlignmentHorizontalSegment", false, 34, IFC4X3_ADD2_IfcAlignmentParameterSegment_type); + IFC4X3_ADD2_IfcApprovalRelationship_type = new entity("IfcApprovalRelationship", false, 53, IFC4X3_ADD2_IfcResourceLevelRelationship_type); + IFC4X3_ADD2_IfcArbitraryClosedProfileDef_type = new entity("IfcArbitraryClosedProfileDef", false, 54, IFC4X3_ADD2_IfcProfileDef_type); + IFC4X3_ADD2_IfcArbitraryOpenProfileDef_type = new entity("IfcArbitraryOpenProfileDef", false, 55, IFC4X3_ADD2_IfcProfileDef_type); + IFC4X3_ADD2_IfcArbitraryProfileDefWithVoids_type = new entity("IfcArbitraryProfileDefWithVoids", false, 56, IFC4X3_ADD2_IfcArbitraryClosedProfileDef_type); + IFC4X3_ADD2_IfcBlobTexture_type = new entity("IfcBlobTexture", false, 81, IFC4X3_ADD2_IfcSurfaceTexture_type); + IFC4X3_ADD2_IfcCenterLineProfileDef_type = new entity("IfcCenterLineProfileDef", false, 155, IFC4X3_ADD2_IfcArbitraryOpenProfileDef_type); + IFC4X3_ADD2_IfcClassification_type = new entity("IfcClassification", false, 168, IFC4X3_ADD2_IfcExternalInformation_type); + IFC4X3_ADD2_IfcClassificationReference_type = new entity("IfcClassificationReference", false, 169, IFC4X3_ADD2_IfcExternalReference_type); + IFC4X3_ADD2_IfcColourRgbList_type = new entity("IfcColourRgbList", false, 180, IFC4X3_ADD2_IfcPresentationItem_type); + IFC4X3_ADD2_IfcColourSpecification_type = new entity("IfcColourSpecification", true, 181, IFC4X3_ADD2_IfcPresentationItem_type); + IFC4X3_ADD2_IfcCompositeProfileDef_type = new entity("IfcCompositeProfileDef", false, 195, IFC4X3_ADD2_IfcProfileDef_type); + IFC4X3_ADD2_IfcConnectedFaceSet_type = new entity("IfcConnectedFaceSet", false, 204, IFC4X3_ADD2_IfcTopologicalRepresentationItem_type); + IFC4X3_ADD2_IfcConnectionCurveGeometry_type = new entity("IfcConnectionCurveGeometry", false, 205, IFC4X3_ADD2_IfcConnectionGeometry_type); + IFC4X3_ADD2_IfcConnectionPointEccentricity_type = new entity("IfcConnectionPointEccentricity", false, 207, IFC4X3_ADD2_IfcConnectionPointGeometry_type); + IFC4X3_ADD2_IfcContextDependentUnit_type = new entity("IfcContextDependentUnit", false, 227, IFC4X3_ADD2_IfcNamedUnit_type); + IFC4X3_ADD2_IfcConversionBasedUnit_type = new entity("IfcConversionBasedUnit", false, 232, IFC4X3_ADD2_IfcNamedUnit_type); + IFC4X3_ADD2_IfcConversionBasedUnitWithOffset_type = new entity("IfcConversionBasedUnitWithOffset", false, 233, IFC4X3_ADD2_IfcConversionBasedUnit_type); + IFC4X3_ADD2_IfcCurrencyRelationship_type = new entity("IfcCurrencyRelationship", false, 266, IFC4X3_ADD2_IfcResourceLevelRelationship_type); + IFC4X3_ADD2_IfcCurveStyle_type = new entity("IfcCurveStyle", false, 280, IFC4X3_ADD2_IfcPresentationStyle_type); + IFC4X3_ADD2_IfcCurveStyleFont_type = new entity("IfcCurveStyleFont", false, 281, IFC4X3_ADD2_IfcPresentationItem_type); + IFC4X3_ADD2_IfcCurveStyleFontAndScaling_type = new entity("IfcCurveStyleFontAndScaling", false, 282, IFC4X3_ADD2_IfcPresentationItem_type); + IFC4X3_ADD2_IfcCurveStyleFontPattern_type = new entity("IfcCurveStyleFontPattern", false, 283, IFC4X3_ADD2_IfcPresentationItem_type); + IFC4X3_ADD2_IfcDerivedProfileDef_type = new entity("IfcDerivedProfileDef", false, 298, IFC4X3_ADD2_IfcProfileDef_type); + IFC4X3_ADD2_IfcDocumentInformation_type = new entity("IfcDocumentInformation", false, 330, IFC4X3_ADD2_IfcExternalInformation_type); + IFC4X3_ADD2_IfcDocumentInformationRelationship_type = new entity("IfcDocumentInformationRelationship", false, 331, IFC4X3_ADD2_IfcResourceLevelRelationship_type); + IFC4X3_ADD2_IfcDocumentReference_type = new entity("IfcDocumentReference", false, 332, IFC4X3_ADD2_IfcExternalReference_type); + IFC4X3_ADD2_IfcEdge_type = new entity("IfcEdge", false, 362, IFC4X3_ADD2_IfcTopologicalRepresentationItem_type); + IFC4X3_ADD2_IfcEdgeCurve_type = new entity("IfcEdgeCurve", false, 363, IFC4X3_ADD2_IfcEdge_type); + IFC4X3_ADD2_IfcEventTime_type = new entity("IfcEventTime", false, 417, IFC4X3_ADD2_IfcSchedulingTime_type); + IFC4X3_ADD2_IfcExtendedProperties_type = new entity("IfcExtendedProperties", true, 421, IFC4X3_ADD2_IfcPropertyAbstraction_type); + IFC4X3_ADD2_IfcExternalReferenceRelationship_type = new entity("IfcExternalReferenceRelationship", false, 427, IFC4X3_ADD2_IfcResourceLevelRelationship_type); + IFC4X3_ADD2_IfcFace_type = new entity("IfcFace", false, 433, IFC4X3_ADD2_IfcTopologicalRepresentationItem_type); + IFC4X3_ADD2_IfcFaceBound_type = new entity("IfcFaceBound", false, 435, IFC4X3_ADD2_IfcTopologicalRepresentationItem_type); + IFC4X3_ADD2_IfcFaceOuterBound_type = new entity("IfcFaceOuterBound", false, 436, IFC4X3_ADD2_IfcFaceBound_type); + IFC4X3_ADD2_IfcFaceSurface_type = new entity("IfcFaceSurface", false, 437, IFC4X3_ADD2_IfcFace_type); + IFC4X3_ADD2_IfcFailureConnectionCondition_type = new entity("IfcFailureConnectionCondition", false, 445, IFC4X3_ADD2_IfcStructuralConnectionCondition_type); + IFC4X3_ADD2_IfcFillAreaStyle_type = new entity("IfcFillAreaStyle", false, 455, IFC4X3_ADD2_IfcPresentationStyle_type); + IFC4X3_ADD2_IfcGeometricRepresentationContext_type = new entity("IfcGeometricRepresentationContext", false, 506, IFC4X3_ADD2_IfcRepresentationContext_type); + IFC4X3_ADD2_IfcGeometricRepresentationItem_type = new entity("IfcGeometricRepresentationItem", true, 507, IFC4X3_ADD2_IfcRepresentationItem_type); + IFC4X3_ADD2_IfcGeometricRepresentationSubContext_type = new entity("IfcGeometricRepresentationSubContext", false, 508, IFC4X3_ADD2_IfcGeometricRepresentationContext_type); + IFC4X3_ADD2_IfcGeometricSet_type = new entity("IfcGeometricSet", false, 509, IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + IFC4X3_ADD2_IfcGridPlacement_type = new entity("IfcGridPlacement", false, 522, IFC4X3_ADD2_IfcObjectPlacement_type); + IFC4X3_ADD2_IfcHalfSpaceSolid_type = new entity("IfcHalfSpaceSolid", false, 526, IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + IFC4X3_ADD2_IfcImageTexture_type = new entity("IfcImageTexture", false, 538, IFC4X3_ADD2_IfcSurfaceTexture_type); + IFC4X3_ADD2_IfcIndexedColourMap_type = new entity("IfcIndexedColourMap", false, 542, IFC4X3_ADD2_IfcPresentationItem_type); + IFC4X3_ADD2_IfcIndexedTextureMap_type = new entity("IfcIndexedTextureMap", true, 547, IFC4X3_ADD2_IfcTextureCoordinate_type); + IFC4X3_ADD2_IfcIndexedTriangleTextureMap_type = new entity("IfcIndexedTriangleTextureMap", false, 548, IFC4X3_ADD2_IfcIndexedTextureMap_type); + IFC4X3_ADD2_IfcIrregularTimeSeries_type = new entity("IfcIrregularTimeSeries", false, 561, IFC4X3_ADD2_IfcTimeSeries_type); + IFC4X3_ADD2_IfcLagTime_type = new entity("IfcLagTime", false, 577, IFC4X3_ADD2_IfcSchedulingTime_type); + IFC4X3_ADD2_IfcLightSource_type = new entity("IfcLightSource", true, 596, IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + IFC4X3_ADD2_IfcLightSourceAmbient_type = new entity("IfcLightSourceAmbient", false, 597, IFC4X3_ADD2_IfcLightSource_type); + IFC4X3_ADD2_IfcLightSourceDirectional_type = new entity("IfcLightSourceDirectional", false, 598, IFC4X3_ADD2_IfcLightSource_type); + IFC4X3_ADD2_IfcLightSourceGoniometric_type = new entity("IfcLightSourceGoniometric", false, 599, IFC4X3_ADD2_IfcLightSource_type); + IFC4X3_ADD2_IfcLightSourcePositional_type = new entity("IfcLightSourcePositional", false, 600, IFC4X3_ADD2_IfcLightSource_type); + IFC4X3_ADD2_IfcLightSourceSpot_type = new entity("IfcLightSourceSpot", false, 601, IFC4X3_ADD2_IfcLightSourcePositional_type); + IFC4X3_ADD2_IfcLinearPlacement_type = new entity("IfcLinearPlacement", false, 606, IFC4X3_ADD2_IfcObjectPlacement_type); + IFC4X3_ADD2_IfcLocalPlacement_type = new entity("IfcLocalPlacement", false, 615, IFC4X3_ADD2_IfcObjectPlacement_type); + IFC4X3_ADD2_IfcLoop_type = new entity("IfcLoop", false, 618, IFC4X3_ADD2_IfcTopologicalRepresentationItem_type); + IFC4X3_ADD2_IfcMappedItem_type = new entity("IfcMappedItem", false, 628, IFC4X3_ADD2_IfcRepresentationItem_type); + IFC4X3_ADD2_IfcMaterial_type = new entity("IfcMaterial", false, 637, IFC4X3_ADD2_IfcMaterialDefinition_type); + IFC4X3_ADD2_IfcMaterialConstituent_type = new entity("IfcMaterialConstituent", false, 639, IFC4X3_ADD2_IfcMaterialDefinition_type); + IFC4X3_ADD2_IfcMaterialConstituentSet_type = new entity("IfcMaterialConstituentSet", false, 640, IFC4X3_ADD2_IfcMaterialDefinition_type); + IFC4X3_ADD2_IfcMaterialDefinitionRepresentation_type = new entity("IfcMaterialDefinitionRepresentation", false, 642, IFC4X3_ADD2_IfcProductRepresentation_type); + IFC4X3_ADD2_IfcMaterialLayerSetUsage_type = new entity("IfcMaterialLayerSetUsage", false, 645, IFC4X3_ADD2_IfcMaterialUsageDefinition_type); + IFC4X3_ADD2_IfcMaterialProfileSetUsage_type = new entity("IfcMaterialProfileSetUsage", false, 650, IFC4X3_ADD2_IfcMaterialUsageDefinition_type); + IFC4X3_ADD2_IfcMaterialProfileSetUsageTapering_type = new entity("IfcMaterialProfileSetUsageTapering", false, 651, IFC4X3_ADD2_IfcMaterialProfileSetUsage_type); + IFC4X3_ADD2_IfcMaterialProperties_type = new entity("IfcMaterialProperties", false, 653, IFC4X3_ADD2_IfcExtendedProperties_type); + IFC4X3_ADD2_IfcMaterialRelationship_type = new entity("IfcMaterialRelationship", false, 654, IFC4X3_ADD2_IfcResourceLevelRelationship_type); + IFC4X3_ADD2_IfcMirroredProfileDef_type = new entity("IfcMirroredProfileDef", false, 670, IFC4X3_ADD2_IfcDerivedProfileDef_type); + IFC4X3_ADD2_IfcObjectDefinition_type = new entity("IfcObjectDefinition", true, 701, IFC4X3_ADD2_IfcRoot_type); + IFC4X3_ADD2_IfcOpenCrossProfileDef_type = new entity("IfcOpenCrossProfileDef", false, 712, IFC4X3_ADD2_IfcProfileDef_type); + IFC4X3_ADD2_IfcOpenShell_type = new entity("IfcOpenShell", false, 715, IFC4X3_ADD2_IfcConnectedFaceSet_type); + IFC4X3_ADD2_IfcOrganizationRelationship_type = new entity("IfcOrganizationRelationship", false, 717, IFC4X3_ADD2_IfcResourceLevelRelationship_type); + IFC4X3_ADD2_IfcOrientedEdge_type = new entity("IfcOrientedEdge", false, 718, IFC4X3_ADD2_IfcEdge_type); + IFC4X3_ADD2_IfcParameterizedProfileDef_type = new entity("IfcParameterizedProfileDef", true, 724, IFC4X3_ADD2_IfcProfileDef_type); + IFC4X3_ADD2_IfcPath_type = new entity("IfcPath", false, 726, IFC4X3_ADD2_IfcTopologicalRepresentationItem_type); + IFC4X3_ADD2_IfcPhysicalComplexQuantity_type = new entity("IfcPhysicalComplexQuantity", false, 740, IFC4X3_ADD2_IfcPhysicalQuantity_type); + IFC4X3_ADD2_IfcPixelTexture_type = new entity("IfcPixelTexture", false, 754, IFC4X3_ADD2_IfcSurfaceTexture_type); + IFC4X3_ADD2_IfcPlacement_type = new entity("IfcPlacement", true, 755, IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + IFC4X3_ADD2_IfcPlanarExtent_type = new entity("IfcPlanarExtent", false, 757, IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + IFC4X3_ADD2_IfcPoint_type = new entity("IfcPoint", true, 764, IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + IFC4X3_ADD2_IfcPointByDistanceExpression_type = new entity("IfcPointByDistanceExpression", false, 765, IFC4X3_ADD2_IfcPoint_type); + IFC4X3_ADD2_IfcPointOnCurve_type = new entity("IfcPointOnCurve", false, 766, IFC4X3_ADD2_IfcPoint_type); + IFC4X3_ADD2_IfcPointOnSurface_type = new entity("IfcPointOnSurface", false, 767, IFC4X3_ADD2_IfcPoint_type); + IFC4X3_ADD2_IfcPolyLoop_type = new entity("IfcPolyLoop", false, 772, IFC4X3_ADD2_IfcLoop_type); + IFC4X3_ADD2_IfcPolygonalBoundedHalfSpace_type = new entity("IfcPolygonalBoundedHalfSpace", false, 769, IFC4X3_ADD2_IfcHalfSpaceSolid_type); + IFC4X3_ADD2_IfcPreDefinedItem_type = new entity("IfcPreDefinedItem", true, 784, IFC4X3_ADD2_IfcPresentationItem_type); + IFC4X3_ADD2_IfcPreDefinedProperties_type = new entity("IfcPreDefinedProperties", true, 785, IFC4X3_ADD2_IfcPropertyAbstraction_type); + IFC4X3_ADD2_IfcPreDefinedTextFont_type = new entity("IfcPreDefinedTextFont", true, 787, IFC4X3_ADD2_IfcPreDefinedItem_type); + IFC4X3_ADD2_IfcProductDefinitionShape_type = new entity("IfcProductDefinitionShape", false, 801, IFC4X3_ADD2_IfcProductRepresentation_type); + IFC4X3_ADD2_IfcProfileProperties_type = new entity("IfcProfileProperties", false, 806, IFC4X3_ADD2_IfcExtendedProperties_type); + IFC4X3_ADD2_IfcProperty_type = new entity("IfcProperty", true, 816, IFC4X3_ADD2_IfcPropertyAbstraction_type); + IFC4X3_ADD2_IfcPropertyDefinition_type = new entity("IfcPropertyDefinition", true, 819, IFC4X3_ADD2_IfcRoot_type); + IFC4X3_ADD2_IfcPropertyDependencyRelationship_type = new entity("IfcPropertyDependencyRelationship", false, 820, IFC4X3_ADD2_IfcResourceLevelRelationship_type); + IFC4X3_ADD2_IfcPropertySetDefinition_type = new entity("IfcPropertySetDefinition", true, 826, IFC4X3_ADD2_IfcPropertyDefinition_type); + IFC4X3_ADD2_IfcPropertyTemplateDefinition_type = new entity("IfcPropertyTemplateDefinition", true, 834, IFC4X3_ADD2_IfcPropertyDefinition_type); + IFC4X3_ADD2_IfcQuantitySet_type = new entity("IfcQuantitySet", true, 848, IFC4X3_ADD2_IfcPropertySetDefinition_type); + IFC4X3_ADD2_IfcRectangleProfileDef_type = new entity("IfcRectangleProfileDef", false, 874, IFC4X3_ADD2_IfcParameterizedProfileDef_type); + IFC4X3_ADD2_IfcRegularTimeSeries_type = new entity("IfcRegularTimeSeries", false, 883, IFC4X3_ADD2_IfcTimeSeries_type); + IFC4X3_ADD2_IfcReinforcementBarProperties_type = new entity("IfcReinforcementBarProperties", false, 886, IFC4X3_ADD2_IfcPreDefinedProperties_type); + IFC4X3_ADD2_IfcRelationship_type = new entity("IfcRelationship", true, 916, IFC4X3_ADD2_IfcRoot_type); + IFC4X3_ADD2_IfcResourceApprovalRelationship_type = new entity("IfcResourceApprovalRelationship", false, 955, IFC4X3_ADD2_IfcResourceLevelRelationship_type); + IFC4X3_ADD2_IfcResourceConstraintRelationship_type = new entity("IfcResourceConstraintRelationship", false, 956, IFC4X3_ADD2_IfcResourceLevelRelationship_type); + IFC4X3_ADD2_IfcResourceTime_type = new entity("IfcResourceTime", false, 960, IFC4X3_ADD2_IfcSchedulingTime_type); + IFC4X3_ADD2_IfcRoundedRectangleProfileDef_type = new entity("IfcRoundedRectangleProfileDef", false, 979, IFC4X3_ADD2_IfcRectangleProfileDef_type); + IFC4X3_ADD2_IfcSectionProperties_type = new entity("IfcSectionProperties", false, 992, IFC4X3_ADD2_IfcPreDefinedProperties_type); + IFC4X3_ADD2_IfcSectionReinforcementProperties_type = new entity("IfcSectionReinforcementProperties", false, 993, IFC4X3_ADD2_IfcPreDefinedProperties_type); + IFC4X3_ADD2_IfcSectionedSpine_type = new entity("IfcSectionedSpine", false, 989, IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + IFC4X3_ADD2_IfcSegment_type = new entity("IfcSegment", true, 995, IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + IFC4X3_ADD2_IfcShellBasedSurfaceModel_type = new entity("IfcShellBasedSurfaceModel", false, 1011, IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + IFC4X3_ADD2_IfcSimpleProperty_type = new entity("IfcSimpleProperty", true, 1018, IFC4X3_ADD2_IfcProperty_type); + IFC4X3_ADD2_IfcSlippageConnectionCondition_type = new entity("IfcSlippageConnectionCondition", false, 1031, IFC4X3_ADD2_IfcStructuralConnectionCondition_type); + IFC4X3_ADD2_IfcSolidModel_type = new entity("IfcSolidModel", true, 1036, IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + IFC4X3_ADD2_IfcStructuralLoadLinearForce_type = new entity("IfcStructuralLoadLinearForce", false, 1094, IFC4X3_ADD2_IfcStructuralLoadStatic_type); + IFC4X3_ADD2_IfcStructuralLoadPlanarForce_type = new entity("IfcStructuralLoadPlanarForce", false, 1096, IFC4X3_ADD2_IfcStructuralLoadStatic_type); + IFC4X3_ADD2_IfcStructuralLoadSingleDisplacement_type = new entity("IfcStructuralLoadSingleDisplacement", false, 1097, IFC4X3_ADD2_IfcStructuralLoadStatic_type); + IFC4X3_ADD2_IfcStructuralLoadSingleDisplacementDistortion_type = new entity("IfcStructuralLoadSingleDisplacementDistortion", false, 1098, IFC4X3_ADD2_IfcStructuralLoadSingleDisplacement_type); + IFC4X3_ADD2_IfcStructuralLoadSingleForce_type = new entity("IfcStructuralLoadSingleForce", false, 1099, IFC4X3_ADD2_IfcStructuralLoadStatic_type); + IFC4X3_ADD2_IfcStructuralLoadSingleForceWarping_type = new entity("IfcStructuralLoadSingleForceWarping", false, 1100, IFC4X3_ADD2_IfcStructuralLoadSingleForce_type); + IFC4X3_ADD2_IfcSubedge_type = new entity("IfcSubedge", false, 1123, IFC4X3_ADD2_IfcEdge_type); + IFC4X3_ADD2_IfcSurface_type = new entity("IfcSurface", true, 1124, IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + IFC4X3_ADD2_IfcSurfaceStyleRendering_type = new entity("IfcSurfaceStyleRendering", false, 1138, IFC4X3_ADD2_IfcSurfaceStyleShading_type); + IFC4X3_ADD2_IfcSweptAreaSolid_type = new entity("IfcSweptAreaSolid", true, 1142, IFC4X3_ADD2_IfcSolidModel_type); + IFC4X3_ADD2_IfcSweptDiskSolid_type = new entity("IfcSweptDiskSolid", false, 1143, IFC4X3_ADD2_IfcSolidModel_type); + IFC4X3_ADD2_IfcSweptDiskSolidPolygonal_type = new entity("IfcSweptDiskSolidPolygonal", false, 1144, IFC4X3_ADD2_IfcSweptDiskSolid_type); + IFC4X3_ADD2_IfcSweptSurface_type = new entity("IfcSweptSurface", true, 1145, IFC4X3_ADD2_IfcSurface_type); + IFC4X3_ADD2_IfcTShapeProfileDef_type = new entity("IfcTShapeProfileDef", false, 1237, IFC4X3_ADD2_IfcParameterizedProfileDef_type); + IFC4X3_ADD2_IfcTessellatedItem_type = new entity("IfcTessellatedItem", true, 1178, IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + IFC4X3_ADD2_IfcTextLiteral_type = new entity("IfcTextLiteral", false, 1184, IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + IFC4X3_ADD2_IfcTextLiteralWithExtent_type = new entity("IfcTextLiteralWithExtent", false, 1185, IFC4X3_ADD2_IfcTextLiteral_type); + IFC4X3_ADD2_IfcTextStyleFontModel_type = new entity("IfcTextStyleFontModel", false, 1188, IFC4X3_ADD2_IfcPreDefinedTextFont_type); + IFC4X3_ADD2_IfcTrapeziumProfileDef_type = new entity("IfcTrapeziumProfileDef", false, 1231, IFC4X3_ADD2_IfcParameterizedProfileDef_type); + IFC4X3_ADD2_IfcTypeObject_type = new entity("IfcTypeObject", false, 1241, IFC4X3_ADD2_IfcObjectDefinition_type); + IFC4X3_ADD2_IfcTypeProcess_type = new entity("IfcTypeProcess", true, 1242, IFC4X3_ADD2_IfcTypeObject_type); + IFC4X3_ADD2_IfcTypeProduct_type = new entity("IfcTypeProduct", false, 1243, IFC4X3_ADD2_IfcTypeObject_type); + IFC4X3_ADD2_IfcTypeResource_type = new entity("IfcTypeResource", true, 1244, IFC4X3_ADD2_IfcTypeObject_type); + IFC4X3_ADD2_IfcUShapeProfileDef_type = new entity("IfcUShapeProfileDef", false, 1255, IFC4X3_ADD2_IfcParameterizedProfileDef_type); + IFC4X3_ADD2_IfcVector_type = new entity("IfcVector", false, 1261, IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + IFC4X3_ADD2_IfcVertexLoop_type = new entity("IfcVertexLoop", false, 1267, IFC4X3_ADD2_IfcLoop_type); + IFC4X3_ADD2_IfcZShapeProfileDef_type = new entity("IfcZShapeProfileDef", false, 1311, IFC4X3_ADD2_IfcParameterizedProfileDef_type); + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcClassification_type); + items.push_back(IFC4X3_ADD2_IfcClassificationReference_type); + IFC4X3_ADD2_IfcClassificationReferenceSelect_type = new select_type("IfcClassificationReferenceSelect", 170, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcClassification_type); + items.push_back(IFC4X3_ADD2_IfcClassificationReference_type); + IFC4X3_ADD2_IfcClassificationSelect_type = new select_type("IfcClassificationSelect", 171, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcCoordinateReferenceSystem_type); + items.push_back(IFC4X3_ADD2_IfcGeometricRepresentationContext_type); + IFC4X3_ADD2_IfcCoordinateReferenceSystemSelect_type = new select_type("IfcCoordinateReferenceSystemSelect", 245, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcObjectDefinition_type); + items.push_back(IFC4X3_ADD2_IfcPropertyDefinition_type); + IFC4X3_ADD2_IfcDefinitionSelect_type = new select_type("IfcDefinitionSelect", 296, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcDocumentInformation_type); + items.push_back(IFC4X3_ADD2_IfcDocumentReference_type); + IFC4X3_ADD2_IfcDocumentSelect_type = new select_type("IfcDocumentSelect", 333, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcPositiveLengthMeasure_type); + items.push_back(IFC4X3_ADD2_IfcVector_type); + IFC4X3_ADD2_IfcHatchLineDistanceSelect_type = new select_type("IfcHatchLineDistanceSelect", 527, items); + } + { + std::vector items; items.reserve(23); + items.push_back(IFC4X3_ADD2_IfcAmountOfSubstanceMeasure_type); + items.push_back(IFC4X3_ADD2_IfcAreaMeasure_type); + items.push_back(IFC4X3_ADD2_IfcComplexNumber_type); + items.push_back(IFC4X3_ADD2_IfcContextDependentMeasure_type); + items.push_back(IFC4X3_ADD2_IfcCountMeasure_type); + items.push_back(IFC4X3_ADD2_IfcDescriptiveMeasure_type); + items.push_back(IFC4X3_ADD2_IfcElectricCurrentMeasure_type); + items.push_back(IFC4X3_ADD2_IfcLengthMeasure_type); + items.push_back(IFC4X3_ADD2_IfcLuminousIntensityMeasure_type); + items.push_back(IFC4X3_ADD2_IfcMassMeasure_type); + items.push_back(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type); + items.push_back(IFC4X3_ADD2_IfcNormalisedRatioMeasure_type); + items.push_back(IFC4X3_ADD2_IfcNumericMeasure_type); + items.push_back(IFC4X3_ADD2_IfcParameterValue_type); + items.push_back(IFC4X3_ADD2_IfcPlaneAngleMeasure_type); + items.push_back(IFC4X3_ADD2_IfcPositiveLengthMeasure_type); + items.push_back(IFC4X3_ADD2_IfcPositivePlaneAngleMeasure_type); + items.push_back(IFC4X3_ADD2_IfcPositiveRatioMeasure_type); + items.push_back(IFC4X3_ADD2_IfcRatioMeasure_type); + items.push_back(IFC4X3_ADD2_IfcSolidAngleMeasure_type); + items.push_back(IFC4X3_ADD2_IfcThermodynamicTemperatureMeasure_type); + items.push_back(IFC4X3_ADD2_IfcTimeMeasure_type); + items.push_back(IFC4X3_ADD2_IfcVolumeMeasure_type); + IFC4X3_ADD2_IfcMeasureValue_type = new select_type("IfcMeasureValue", 657, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcPoint_type); + items.push_back(IFC4X3_ADD2_IfcVertexPoint_type); + IFC4X3_ADD2_IfcPointOrVertexPoint_type = new select_type("IfcPointOrVertexPoint", 768, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcProductDefinitionShape_type); + items.push_back(IFC4X3_ADD2_IfcRepresentationMap_type); + IFC4X3_ADD2_IfcProductRepresentationSelect_type = new select_type("IfcProductRepresentationSelect", 803, items); + } + IFC4X3_ADD2_IfcPropertySetDefinitionSet_type = new type_declaration("IfcPropertySetDefinitionSet", 828, new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcPropertySetDefinition_type))); + { + std::vector items; items.reserve(17); + items.push_back(IFC4X3_ADD2_IfcActorRole_type); + items.push_back(IFC4X3_ADD2_IfcAppliedValue_type); + items.push_back(IFC4X3_ADD2_IfcApproval_type); + items.push_back(IFC4X3_ADD2_IfcConstraint_type); + items.push_back(IFC4X3_ADD2_IfcContextDependentUnit_type); + items.push_back(IFC4X3_ADD2_IfcConversionBasedUnit_type); + items.push_back(IFC4X3_ADD2_IfcExternalInformation_type); + items.push_back(IFC4X3_ADD2_IfcExternalReference_type); + items.push_back(IFC4X3_ADD2_IfcMaterialDefinition_type); + items.push_back(IFC4X3_ADD2_IfcOrganization_type); + items.push_back(IFC4X3_ADD2_IfcPerson_type); + items.push_back(IFC4X3_ADD2_IfcPersonAndOrganization_type); + items.push_back(IFC4X3_ADD2_IfcPhysicalQuantity_type); + items.push_back(IFC4X3_ADD2_IfcProfileDef_type); + items.push_back(IFC4X3_ADD2_IfcPropertyAbstraction_type); + items.push_back(IFC4X3_ADD2_IfcShapeAspect_type); + items.push_back(IFC4X3_ADD2_IfcTimeSeries_type); + IFC4X3_ADD2_IfcResourceObjectSelect_type = new select_type("IfcResourceObjectSelect", 958, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcExternallyDefinedTextFont_type); + items.push_back(IFC4X3_ADD2_IfcPreDefinedTextFont_type); + IFC4X3_ADD2_IfcTextFontSelect_type = new select_type("IfcTextFontSelect", 1183, items); + } + { + std::vector items; items.reserve(3); + items.push_back(IFC4X3_ADD2_IfcDerivedMeasureValue_type); + items.push_back(IFC4X3_ADD2_IfcMeasureValue_type); + items.push_back(IFC4X3_ADD2_IfcSimpleValue_type); + IFC4X3_ADD2_IfcValue_type = new select_type("IfcValue", 1256, items); + } + IFC4X3_ADD2_IfcAdvancedFace_type = new entity("IfcAdvancedFace", false, 16, IFC4X3_ADD2_IfcFaceSurface_type); + IFC4X3_ADD2_IfcAnnotationFillArea_type = new entity("IfcAnnotationFillArea", false, 47, IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + IFC4X3_ADD2_IfcAsymmetricIShapeProfileDef_type = new entity("IfcAsymmetricIShapeProfileDef", false, 63, IFC4X3_ADD2_IfcParameterizedProfileDef_type); + IFC4X3_ADD2_IfcAxis1Placement_type = new entity("IfcAxis1Placement", false, 67, IFC4X3_ADD2_IfcPlacement_type); + IFC4X3_ADD2_IfcAxis2Placement2D_type = new entity("IfcAxis2Placement2D", false, 69, IFC4X3_ADD2_IfcPlacement_type); + IFC4X3_ADD2_IfcAxis2Placement3D_type = new entity("IfcAxis2Placement3D", false, 70, IFC4X3_ADD2_IfcPlacement_type); + IFC4X3_ADD2_IfcAxis2PlacementLinear_type = new entity("IfcAxis2PlacementLinear", false, 71, IFC4X3_ADD2_IfcPlacement_type); + IFC4X3_ADD2_IfcBooleanResult_type = new entity("IfcBooleanResult", false, 90, IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + IFC4X3_ADD2_IfcBoundedSurface_type = new entity("IfcBoundedSurface", true, 99, IFC4X3_ADD2_IfcSurface_type); + IFC4X3_ADD2_IfcBoundingBox_type = new entity("IfcBoundingBox", false, 100, IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + IFC4X3_ADD2_IfcBoxedHalfSpace_type = new entity("IfcBoxedHalfSpace", false, 102, IFC4X3_ADD2_IfcHalfSpaceSolid_type); + IFC4X3_ADD2_IfcCShapeProfileDef_type = new entity("IfcCShapeProfileDef", false, 265, IFC4X3_ADD2_IfcParameterizedProfileDef_type); + IFC4X3_ADD2_IfcCartesianPoint_type = new entity("IfcCartesianPoint", false, 146, IFC4X3_ADD2_IfcPoint_type); + IFC4X3_ADD2_IfcCartesianPointList_type = new entity("IfcCartesianPointList", true, 147, IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + IFC4X3_ADD2_IfcCartesianPointList2D_type = new entity("IfcCartesianPointList2D", false, 148, IFC4X3_ADD2_IfcCartesianPointList_type); + IFC4X3_ADD2_IfcCartesianPointList3D_type = new entity("IfcCartesianPointList3D", false, 149, IFC4X3_ADD2_IfcCartesianPointList_type); + IFC4X3_ADD2_IfcCartesianTransformationOperator_type = new entity("IfcCartesianTransformationOperator", true, 150, IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + IFC4X3_ADD2_IfcCartesianTransformationOperator2D_type = new entity("IfcCartesianTransformationOperator2D", false, 151, IFC4X3_ADD2_IfcCartesianTransformationOperator_type); + IFC4X3_ADD2_IfcCartesianTransformationOperator2DnonUniform_type = new entity("IfcCartesianTransformationOperator2DnonUniform", false, 152, IFC4X3_ADD2_IfcCartesianTransformationOperator2D_type); + IFC4X3_ADD2_IfcCartesianTransformationOperator3D_type = new entity("IfcCartesianTransformationOperator3D", false, 153, IFC4X3_ADD2_IfcCartesianTransformationOperator_type); + IFC4X3_ADD2_IfcCartesianTransformationOperator3DnonUniform_type = new entity("IfcCartesianTransformationOperator3DnonUniform", false, 154, IFC4X3_ADD2_IfcCartesianTransformationOperator3D_type); + IFC4X3_ADD2_IfcCircleProfileDef_type = new entity("IfcCircleProfileDef", false, 165, IFC4X3_ADD2_IfcParameterizedProfileDef_type); + IFC4X3_ADD2_IfcClosedShell_type = new entity("IfcClosedShell", false, 172, IFC4X3_ADD2_IfcConnectedFaceSet_type); + IFC4X3_ADD2_IfcColourRgb_type = new entity("IfcColourRgb", false, 179, IFC4X3_ADD2_IfcColourSpecification_type); + IFC4X3_ADD2_IfcComplexProperty_type = new entity("IfcComplexProperty", false, 189, IFC4X3_ADD2_IfcProperty_type); + IFC4X3_ADD2_IfcCompositeCurveSegment_type = new entity("IfcCompositeCurveSegment", false, 194, IFC4X3_ADD2_IfcSegment_type); + IFC4X3_ADD2_IfcConstructionResourceType_type = new entity("IfcConstructionResourceType", true, 224, IFC4X3_ADD2_IfcTypeResource_type); + IFC4X3_ADD2_IfcContext_type = new entity("IfcContext", true, 225, IFC4X3_ADD2_IfcObjectDefinition_type); + IFC4X3_ADD2_IfcCrewResourceType_type = new entity("IfcCrewResourceType", false, 260, IFC4X3_ADD2_IfcConstructionResourceType_type); + IFC4X3_ADD2_IfcCsgPrimitive3D_type = new entity("IfcCsgPrimitive3D", true, 262, IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + IFC4X3_ADD2_IfcCsgSolid_type = new entity("IfcCsgSolid", false, 264, IFC4X3_ADD2_IfcSolidModel_type); + IFC4X3_ADD2_IfcCurve_type = new entity("IfcCurve", true, 271, IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + IFC4X3_ADD2_IfcCurveBoundedPlane_type = new entity("IfcCurveBoundedPlane", false, 272, IFC4X3_ADD2_IfcBoundedSurface_type); + IFC4X3_ADD2_IfcCurveBoundedSurface_type = new entity("IfcCurveBoundedSurface", false, 273, IFC4X3_ADD2_IfcBoundedSurface_type); + IFC4X3_ADD2_IfcCurveSegment_type = new entity("IfcCurveSegment", false, 279, IFC4X3_ADD2_IfcSegment_type); + IFC4X3_ADD2_IfcDirection_type = new entity("IfcDirection", false, 305, IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + IFC4X3_ADD2_IfcDirectrixCurveSweptAreaSolid_type = new entity("IfcDirectrixCurveSweptAreaSolid", true, 307, IFC4X3_ADD2_IfcSweptAreaSolid_type); + IFC4X3_ADD2_IfcEdgeLoop_type = new entity("IfcEdgeLoop", false, 364, IFC4X3_ADD2_IfcLoop_type); + IFC4X3_ADD2_IfcElementQuantity_type = new entity("IfcElementQuantity", false, 400, IFC4X3_ADD2_IfcQuantitySet_type); + IFC4X3_ADD2_IfcElementType_type = new entity("IfcElementType", true, 401, IFC4X3_ADD2_IfcTypeProduct_type); + IFC4X3_ADD2_IfcElementarySurface_type = new entity("IfcElementarySurface", true, 393, IFC4X3_ADD2_IfcSurface_type); + IFC4X3_ADD2_IfcEllipseProfileDef_type = new entity("IfcEllipseProfileDef", false, 403, IFC4X3_ADD2_IfcParameterizedProfileDef_type); + IFC4X3_ADD2_IfcEventType_type = new entity("IfcEventType", false, 419, IFC4X3_ADD2_IfcTypeProcess_type); + IFC4X3_ADD2_IfcExtrudedAreaSolid_type = new entity("IfcExtrudedAreaSolid", false, 431, IFC4X3_ADD2_IfcSweptAreaSolid_type); + IFC4X3_ADD2_IfcExtrudedAreaSolidTapered_type = new entity("IfcExtrudedAreaSolidTapered", false, 432, IFC4X3_ADD2_IfcExtrudedAreaSolid_type); + IFC4X3_ADD2_IfcFaceBasedSurfaceModel_type = new entity("IfcFaceBasedSurfaceModel", false, 434, IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + IFC4X3_ADD2_IfcFillAreaStyleHatching_type = new entity("IfcFillAreaStyleHatching", false, 456, IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + IFC4X3_ADD2_IfcFillAreaStyleTiles_type = new entity("IfcFillAreaStyleTiles", false, 457, IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + IFC4X3_ADD2_IfcFixedReferenceSweptAreaSolid_type = new entity("IfcFixedReferenceSweptAreaSolid", false, 465, IFC4X3_ADD2_IfcDirectrixCurveSweptAreaSolid_type); + IFC4X3_ADD2_IfcFurnishingElementType_type = new entity("IfcFurnishingElementType", false, 496, IFC4X3_ADD2_IfcElementType_type); + IFC4X3_ADD2_IfcFurnitureType_type = new entity("IfcFurnitureType", false, 498, IFC4X3_ADD2_IfcFurnishingElementType_type); + IFC4X3_ADD2_IfcGeographicElementType_type = new entity("IfcGeographicElementType", false, 502, IFC4X3_ADD2_IfcElementType_type); + IFC4X3_ADD2_IfcGeometricCurveSet_type = new entity("IfcGeometricCurveSet", false, 504, IFC4X3_ADD2_IfcGeometricSet_type); + IFC4X3_ADD2_IfcIShapeProfileDef_type = new entity("IfcIShapeProfileDef", false, 563, IFC4X3_ADD2_IfcParameterizedProfileDef_type); + IFC4X3_ADD2_IfcIndexedPolygonalFace_type = new entity("IfcIndexedPolygonalFace", false, 544, IFC4X3_ADD2_IfcTessellatedItem_type); + IFC4X3_ADD2_IfcIndexedPolygonalFaceWithVoids_type = new entity("IfcIndexedPolygonalFaceWithVoids", false, 545, IFC4X3_ADD2_IfcIndexedPolygonalFace_type); + IFC4X3_ADD2_IfcIndexedPolygonalTextureMap_type = new entity("IfcIndexedPolygonalTextureMap", false, 546, IFC4X3_ADD2_IfcIndexedTextureMap_type); + IFC4X3_ADD2_IfcLShapeProfileDef_type = new entity("IfcLShapeProfileDef", false, 619, IFC4X3_ADD2_IfcParameterizedProfileDef_type); + IFC4X3_ADD2_IfcLaborResourceType_type = new entity("IfcLaborResourceType", false, 575, IFC4X3_ADD2_IfcConstructionResourceType_type); + IFC4X3_ADD2_IfcLine_type = new entity("IfcLine", false, 602, IFC4X3_ADD2_IfcCurve_type); + IFC4X3_ADD2_IfcManifoldSolidBrep_type = new entity("IfcManifoldSolidBrep", true, 625, IFC4X3_ADD2_IfcSolidModel_type); + IFC4X3_ADD2_IfcObject_type = new entity("IfcObject", true, 700, IFC4X3_ADD2_IfcObjectDefinition_type); + IFC4X3_ADD2_IfcOffsetCurve_type = new entity("IfcOffsetCurve", true, 708, IFC4X3_ADD2_IfcCurve_type); + IFC4X3_ADD2_IfcOffsetCurve2D_type = new entity("IfcOffsetCurve2D", false, 709, IFC4X3_ADD2_IfcOffsetCurve_type); + IFC4X3_ADD2_IfcOffsetCurve3D_type = new entity("IfcOffsetCurve3D", false, 710, IFC4X3_ADD2_IfcOffsetCurve_type); + IFC4X3_ADD2_IfcOffsetCurveByDistances_type = new entity("IfcOffsetCurveByDistances", false, 711, IFC4X3_ADD2_IfcOffsetCurve_type); + IFC4X3_ADD2_IfcPcurve_type = new entity("IfcPcurve", false, 730, IFC4X3_ADD2_IfcCurve_type); + IFC4X3_ADD2_IfcPlanarBox_type = new entity("IfcPlanarBox", false, 756, IFC4X3_ADD2_IfcPlanarExtent_type); + IFC4X3_ADD2_IfcPlane_type = new entity("IfcPlane", false, 759, IFC4X3_ADD2_IfcElementarySurface_type); + IFC4X3_ADD2_IfcPolynomialCurve_type = new entity("IfcPolynomialCurve", false, 773, IFC4X3_ADD2_IfcCurve_type); + IFC4X3_ADD2_IfcPreDefinedColour_type = new entity("IfcPreDefinedColour", true, 782, IFC4X3_ADD2_IfcPreDefinedItem_type); + IFC4X3_ADD2_IfcPreDefinedCurveFont_type = new entity("IfcPreDefinedCurveFont", true, 783, IFC4X3_ADD2_IfcPreDefinedItem_type); + IFC4X3_ADD2_IfcPreDefinedPropertySet_type = new entity("IfcPreDefinedPropertySet", true, 786, IFC4X3_ADD2_IfcPropertySetDefinition_type); + IFC4X3_ADD2_IfcProcedureType_type = new entity("IfcProcedureType", false, 796, IFC4X3_ADD2_IfcTypeProcess_type); + IFC4X3_ADD2_IfcProcess_type = new entity("IfcProcess", true, 798, IFC4X3_ADD2_IfcObject_type); + IFC4X3_ADD2_IfcProduct_type = new entity("IfcProduct", true, 800, IFC4X3_ADD2_IfcObject_type); + IFC4X3_ADD2_IfcProject_type = new entity("IfcProject", false, 808, IFC4X3_ADD2_IfcContext_type); + IFC4X3_ADD2_IfcProjectLibrary_type = new entity("IfcProjectLibrary", false, 813, IFC4X3_ADD2_IfcContext_type); + IFC4X3_ADD2_IfcPropertyBoundedValue_type = new entity("IfcPropertyBoundedValue", false, 818, IFC4X3_ADD2_IfcSimpleProperty_type); + IFC4X3_ADD2_IfcPropertyEnumeratedValue_type = new entity("IfcPropertyEnumeratedValue", false, 821, IFC4X3_ADD2_IfcSimpleProperty_type); + IFC4X3_ADD2_IfcPropertyListValue_type = new entity("IfcPropertyListValue", false, 823, IFC4X3_ADD2_IfcSimpleProperty_type); + IFC4X3_ADD2_IfcPropertyReferenceValue_type = new entity("IfcPropertyReferenceValue", false, 824, IFC4X3_ADD2_IfcSimpleProperty_type); + IFC4X3_ADD2_IfcPropertySet_type = new entity("IfcPropertySet", false, 825, IFC4X3_ADD2_IfcPropertySetDefinition_type); + IFC4X3_ADD2_IfcPropertySetTemplate_type = new entity("IfcPropertySetTemplate", false, 829, IFC4X3_ADD2_IfcPropertyTemplateDefinition_type); + IFC4X3_ADD2_IfcPropertySingleValue_type = new entity("IfcPropertySingleValue", false, 831, IFC4X3_ADD2_IfcSimpleProperty_type); + IFC4X3_ADD2_IfcPropertyTableValue_type = new entity("IfcPropertyTableValue", false, 832, IFC4X3_ADD2_IfcSimpleProperty_type); + IFC4X3_ADD2_IfcPropertyTemplate_type = new entity("IfcPropertyTemplate", true, 833, IFC4X3_ADD2_IfcPropertyTemplateDefinition_type); + IFC4X3_ADD2_IfcRectangleHollowProfileDef_type = new entity("IfcRectangleHollowProfileDef", false, 873, IFC4X3_ADD2_IfcRectangleProfileDef_type); + IFC4X3_ADD2_IfcRectangularPyramid_type = new entity("IfcRectangularPyramid", false, 875, IFC4X3_ADD2_IfcCsgPrimitive3D_type); + IFC4X3_ADD2_IfcRectangularTrimmedSurface_type = new entity("IfcRectangularTrimmedSurface", false, 876, IFC4X3_ADD2_IfcBoundedSurface_type); + IFC4X3_ADD2_IfcReinforcementDefinitionProperties_type = new entity("IfcReinforcementDefinitionProperties", false, 887, IFC4X3_ADD2_IfcPreDefinedPropertySet_type); + IFC4X3_ADD2_IfcRelAssigns_type = new entity("IfcRelAssigns", true, 900, IFC4X3_ADD2_IfcRelationship_type); + IFC4X3_ADD2_IfcRelAssignsToActor_type = new entity("IfcRelAssignsToActor", false, 901, IFC4X3_ADD2_IfcRelAssigns_type); + IFC4X3_ADD2_IfcRelAssignsToControl_type = new entity("IfcRelAssignsToControl", false, 902, IFC4X3_ADD2_IfcRelAssigns_type); + IFC4X3_ADD2_IfcRelAssignsToGroup_type = new entity("IfcRelAssignsToGroup", false, 903, IFC4X3_ADD2_IfcRelAssigns_type); + IFC4X3_ADD2_IfcRelAssignsToGroupByFactor_type = new entity("IfcRelAssignsToGroupByFactor", false, 904, IFC4X3_ADD2_IfcRelAssignsToGroup_type); + IFC4X3_ADD2_IfcRelAssignsToProcess_type = new entity("IfcRelAssignsToProcess", false, 905, IFC4X3_ADD2_IfcRelAssigns_type); + IFC4X3_ADD2_IfcRelAssignsToProduct_type = new entity("IfcRelAssignsToProduct", false, 906, IFC4X3_ADD2_IfcRelAssigns_type); + IFC4X3_ADD2_IfcRelAssignsToResource_type = new entity("IfcRelAssignsToResource", false, 907, IFC4X3_ADD2_IfcRelAssigns_type); + IFC4X3_ADD2_IfcRelAssociates_type = new entity("IfcRelAssociates", true, 908, IFC4X3_ADD2_IfcRelationship_type); + IFC4X3_ADD2_IfcRelAssociatesApproval_type = new entity("IfcRelAssociatesApproval", false, 909, IFC4X3_ADD2_IfcRelAssociates_type); + IFC4X3_ADD2_IfcRelAssociatesClassification_type = new entity("IfcRelAssociatesClassification", false, 910, IFC4X3_ADD2_IfcRelAssociates_type); + IFC4X3_ADD2_IfcRelAssociatesConstraint_type = new entity("IfcRelAssociatesConstraint", false, 911, IFC4X3_ADD2_IfcRelAssociates_type); + IFC4X3_ADD2_IfcRelAssociatesDocument_type = new entity("IfcRelAssociatesDocument", false, 912, IFC4X3_ADD2_IfcRelAssociates_type); + IFC4X3_ADD2_IfcRelAssociatesLibrary_type = new entity("IfcRelAssociatesLibrary", false, 913, IFC4X3_ADD2_IfcRelAssociates_type); + IFC4X3_ADD2_IfcRelAssociatesMaterial_type = new entity("IfcRelAssociatesMaterial", false, 914, IFC4X3_ADD2_IfcRelAssociates_type); + IFC4X3_ADD2_IfcRelAssociatesProfileDef_type = new entity("IfcRelAssociatesProfileDef", false, 915, IFC4X3_ADD2_IfcRelAssociates_type); + IFC4X3_ADD2_IfcRelConnects_type = new entity("IfcRelConnects", true, 917, IFC4X3_ADD2_IfcRelationship_type); + IFC4X3_ADD2_IfcRelConnectsElements_type = new entity("IfcRelConnectsElements", false, 918, IFC4X3_ADD2_IfcRelConnects_type); + IFC4X3_ADD2_IfcRelConnectsPathElements_type = new entity("IfcRelConnectsPathElements", false, 919, IFC4X3_ADD2_IfcRelConnectsElements_type); + IFC4X3_ADD2_IfcRelConnectsPortToElement_type = new entity("IfcRelConnectsPortToElement", false, 921, IFC4X3_ADD2_IfcRelConnects_type); + IFC4X3_ADD2_IfcRelConnectsPorts_type = new entity("IfcRelConnectsPorts", false, 920, IFC4X3_ADD2_IfcRelConnects_type); + IFC4X3_ADD2_IfcRelConnectsStructuralActivity_type = new entity("IfcRelConnectsStructuralActivity", false, 922, IFC4X3_ADD2_IfcRelConnects_type); + IFC4X3_ADD2_IfcRelConnectsStructuralMember_type = new entity("IfcRelConnectsStructuralMember", false, 923, IFC4X3_ADD2_IfcRelConnects_type); + IFC4X3_ADD2_IfcRelConnectsWithEccentricity_type = new entity("IfcRelConnectsWithEccentricity", false, 924, IFC4X3_ADD2_IfcRelConnectsStructuralMember_type); + IFC4X3_ADD2_IfcRelConnectsWithRealizingElements_type = new entity("IfcRelConnectsWithRealizingElements", false, 925, IFC4X3_ADD2_IfcRelConnectsElements_type); + IFC4X3_ADD2_IfcRelContainedInSpatialStructure_type = new entity("IfcRelContainedInSpatialStructure", false, 926, IFC4X3_ADD2_IfcRelConnects_type); + IFC4X3_ADD2_IfcRelCoversBldgElements_type = new entity("IfcRelCoversBldgElements", false, 927, IFC4X3_ADD2_IfcRelConnects_type); + IFC4X3_ADD2_IfcRelCoversSpaces_type = new entity("IfcRelCoversSpaces", false, 928, IFC4X3_ADD2_IfcRelConnects_type); + IFC4X3_ADD2_IfcRelDeclares_type = new entity("IfcRelDeclares", false, 929, IFC4X3_ADD2_IfcRelationship_type); + IFC4X3_ADD2_IfcRelDecomposes_type = new entity("IfcRelDecomposes", true, 930, IFC4X3_ADD2_IfcRelationship_type); + IFC4X3_ADD2_IfcRelDefines_type = new entity("IfcRelDefines", true, 931, IFC4X3_ADD2_IfcRelationship_type); + IFC4X3_ADD2_IfcRelDefinesByObject_type = new entity("IfcRelDefinesByObject", false, 932, IFC4X3_ADD2_IfcRelDefines_type); + IFC4X3_ADD2_IfcRelDefinesByProperties_type = new entity("IfcRelDefinesByProperties", false, 933, IFC4X3_ADD2_IfcRelDefines_type); + IFC4X3_ADD2_IfcRelDefinesByTemplate_type = new entity("IfcRelDefinesByTemplate", false, 934, IFC4X3_ADD2_IfcRelDefines_type); + IFC4X3_ADD2_IfcRelDefinesByType_type = new entity("IfcRelDefinesByType", false, 935, IFC4X3_ADD2_IfcRelDefines_type); + IFC4X3_ADD2_IfcRelFillsElement_type = new entity("IfcRelFillsElement", false, 936, IFC4X3_ADD2_IfcRelConnects_type); + IFC4X3_ADD2_IfcRelFlowControlElements_type = new entity("IfcRelFlowControlElements", false, 937, IFC4X3_ADD2_IfcRelConnects_type); + IFC4X3_ADD2_IfcRelInterferesElements_type = new entity("IfcRelInterferesElements", false, 938, IFC4X3_ADD2_IfcRelConnects_type); + IFC4X3_ADD2_IfcRelNests_type = new entity("IfcRelNests", false, 939, IFC4X3_ADD2_IfcRelDecomposes_type); + IFC4X3_ADD2_IfcRelPositions_type = new entity("IfcRelPositions", false, 940, IFC4X3_ADD2_IfcRelConnects_type); + IFC4X3_ADD2_IfcRelProjectsElement_type = new entity("IfcRelProjectsElement", false, 941, IFC4X3_ADD2_IfcRelDecomposes_type); + IFC4X3_ADD2_IfcRelReferencedInSpatialStructure_type = new entity("IfcRelReferencedInSpatialStructure", false, 942, IFC4X3_ADD2_IfcRelConnects_type); + IFC4X3_ADD2_IfcRelSequence_type = new entity("IfcRelSequence", false, 943, IFC4X3_ADD2_IfcRelConnects_type); + IFC4X3_ADD2_IfcRelServicesBuildings_type = new entity("IfcRelServicesBuildings", false, 944, IFC4X3_ADD2_IfcRelConnects_type); + IFC4X3_ADD2_IfcRelSpaceBoundary_type = new entity("IfcRelSpaceBoundary", false, 945, IFC4X3_ADD2_IfcRelConnects_type); + IFC4X3_ADD2_IfcRelSpaceBoundary1stLevel_type = new entity("IfcRelSpaceBoundary1stLevel", false, 946, IFC4X3_ADD2_IfcRelSpaceBoundary_type); + IFC4X3_ADD2_IfcRelSpaceBoundary2ndLevel_type = new entity("IfcRelSpaceBoundary2ndLevel", false, 947, IFC4X3_ADD2_IfcRelSpaceBoundary1stLevel_type); + IFC4X3_ADD2_IfcRelVoidsElement_type = new entity("IfcRelVoidsElement", false, 948, IFC4X3_ADD2_IfcRelDecomposes_type); + IFC4X3_ADD2_IfcReparametrisedCompositeCurveSegment_type = new entity("IfcReparametrisedCompositeCurveSegment", false, 949, IFC4X3_ADD2_IfcCompositeCurveSegment_type); + IFC4X3_ADD2_IfcResource_type = new entity("IfcResource", true, 954, IFC4X3_ADD2_IfcObject_type); + IFC4X3_ADD2_IfcRevolvedAreaSolid_type = new entity("IfcRevolvedAreaSolid", false, 961, IFC4X3_ADD2_IfcSweptAreaSolid_type); + IFC4X3_ADD2_IfcRevolvedAreaSolidTapered_type = new entity("IfcRevolvedAreaSolidTapered", false, 962, IFC4X3_ADD2_IfcRevolvedAreaSolid_type); + IFC4X3_ADD2_IfcRightCircularCone_type = new entity("IfcRightCircularCone", false, 963, IFC4X3_ADD2_IfcCsgPrimitive3D_type); + IFC4X3_ADD2_IfcRightCircularCylinder_type = new entity("IfcRightCircularCylinder", false, 964, IFC4X3_ADD2_IfcCsgPrimitive3D_type); + IFC4X3_ADD2_IfcSectionedSolid_type = new entity("IfcSectionedSolid", true, 987, IFC4X3_ADD2_IfcSolidModel_type); + IFC4X3_ADD2_IfcSectionedSolidHorizontal_type = new entity("IfcSectionedSolidHorizontal", false, 988, IFC4X3_ADD2_IfcSectionedSolid_type); + IFC4X3_ADD2_IfcSectionedSurface_type = new entity("IfcSectionedSurface", false, 990, IFC4X3_ADD2_IfcSurface_type); + IFC4X3_ADD2_IfcSimplePropertyTemplate_type = new entity("IfcSimplePropertyTemplate", false, 1019, IFC4X3_ADD2_IfcPropertyTemplate_type); + IFC4X3_ADD2_IfcSpatialElement_type = new entity("IfcSpatialElement", true, 1049, IFC4X3_ADD2_IfcProduct_type); + IFC4X3_ADD2_IfcSpatialElementType_type = new entity("IfcSpatialElementType", true, 1050, IFC4X3_ADD2_IfcTypeProduct_type); + IFC4X3_ADD2_IfcSpatialStructureElement_type = new entity("IfcSpatialStructureElement", true, 1052, IFC4X3_ADD2_IfcSpatialElement_type); + IFC4X3_ADD2_IfcSpatialStructureElementType_type = new entity("IfcSpatialStructureElementType", true, 1053, IFC4X3_ADD2_IfcSpatialElementType_type); + IFC4X3_ADD2_IfcSpatialZone_type = new entity("IfcSpatialZone", false, 1054, IFC4X3_ADD2_IfcSpatialElement_type); + IFC4X3_ADD2_IfcSpatialZoneType_type = new entity("IfcSpatialZoneType", false, 1055, IFC4X3_ADD2_IfcSpatialElementType_type); + IFC4X3_ADD2_IfcSphere_type = new entity("IfcSphere", false, 1061, IFC4X3_ADD2_IfcCsgPrimitive3D_type); + IFC4X3_ADD2_IfcSphericalSurface_type = new entity("IfcSphericalSurface", false, 1062, IFC4X3_ADD2_IfcElementarySurface_type); + IFC4X3_ADD2_IfcSpiral_type = new entity("IfcSpiral", true, 1063, IFC4X3_ADD2_IfcCurve_type); + IFC4X3_ADD2_IfcStructuralActivity_type = new entity("IfcStructuralActivity", true, 1076, IFC4X3_ADD2_IfcProduct_type); + IFC4X3_ADD2_IfcStructuralItem_type = new entity("IfcStructuralItem", true, 1088, IFC4X3_ADD2_IfcProduct_type); + IFC4X3_ADD2_IfcStructuralMember_type = new entity("IfcStructuralMember", true, 1103, IFC4X3_ADD2_IfcStructuralItem_type); + IFC4X3_ADD2_IfcStructuralReaction_type = new entity("IfcStructuralReaction", true, 1108, IFC4X3_ADD2_IfcStructuralActivity_type); + IFC4X3_ADD2_IfcStructuralSurfaceMember_type = new entity("IfcStructuralSurfaceMember", false, 1113, IFC4X3_ADD2_IfcStructuralMember_type); + IFC4X3_ADD2_IfcStructuralSurfaceMemberVarying_type = new entity("IfcStructuralSurfaceMemberVarying", false, 1115, IFC4X3_ADD2_IfcStructuralSurfaceMember_type); + IFC4X3_ADD2_IfcStructuralSurfaceReaction_type = new entity("IfcStructuralSurfaceReaction", false, 1116, IFC4X3_ADD2_IfcStructuralReaction_type); + IFC4X3_ADD2_IfcSubContractResourceType_type = new entity("IfcSubContractResourceType", false, 1121, IFC4X3_ADD2_IfcConstructionResourceType_type); + IFC4X3_ADD2_IfcSurfaceCurve_type = new entity("IfcSurfaceCurve", false, 1125, IFC4X3_ADD2_IfcCurve_type); + IFC4X3_ADD2_IfcSurfaceCurveSweptAreaSolid_type = new entity("IfcSurfaceCurveSweptAreaSolid", false, 1126, IFC4X3_ADD2_IfcDirectrixCurveSweptAreaSolid_type); + IFC4X3_ADD2_IfcSurfaceOfLinearExtrusion_type = new entity("IfcSurfaceOfLinearExtrusion", false, 1129, IFC4X3_ADD2_IfcSweptSurface_type); + IFC4X3_ADD2_IfcSurfaceOfRevolution_type = new entity("IfcSurfaceOfRevolution", false, 1130, IFC4X3_ADD2_IfcSweptSurface_type); + IFC4X3_ADD2_IfcSystemFurnitureElementType_type = new entity("IfcSystemFurnitureElementType", false, 1151, IFC4X3_ADD2_IfcFurnishingElementType_type); + IFC4X3_ADD2_IfcTask_type = new entity("IfcTask", false, 1159, IFC4X3_ADD2_IfcProcess_type); + IFC4X3_ADD2_IfcTaskType_type = new entity("IfcTaskType", false, 1163, IFC4X3_ADD2_IfcTypeProcess_type); + IFC4X3_ADD2_IfcTessellatedFaceSet_type = new entity("IfcTessellatedFaceSet", true, 1177, IFC4X3_ADD2_IfcTessellatedItem_type); + IFC4X3_ADD2_IfcThirdOrderPolynomialSpiral_type = new entity("IfcThirdOrderPolynomialSpiral", false, 1205, IFC4X3_ADD2_IfcSpiral_type); + IFC4X3_ADD2_IfcToroidalSurface_type = new entity("IfcToroidalSurface", false, 1216, IFC4X3_ADD2_IfcElementarySurface_type); + IFC4X3_ADD2_IfcTransportationDeviceType_type = new entity("IfcTransportationDeviceType", true, 1227, IFC4X3_ADD2_IfcElementType_type); + IFC4X3_ADD2_IfcTriangulatedFaceSet_type = new entity("IfcTriangulatedFaceSet", false, 1232, IFC4X3_ADD2_IfcTessellatedFaceSet_type); + IFC4X3_ADD2_IfcTriangulatedIrregularNetwork_type = new entity("IfcTriangulatedIrregularNetwork", false, 1233, IFC4X3_ADD2_IfcTriangulatedFaceSet_type); + IFC4X3_ADD2_IfcVehicleType_type = new entity("IfcVehicleType", false, 1264, IFC4X3_ADD2_IfcTransportationDeviceType_type); + IFC4X3_ADD2_IfcWindowLiningProperties_type = new entity("IfcWindowLiningProperties", false, 1295, IFC4X3_ADD2_IfcPreDefinedPropertySet_type); + IFC4X3_ADD2_IfcWindowPanelProperties_type = new entity("IfcWindowPanelProperties", false, 1298, IFC4X3_ADD2_IfcPreDefinedPropertySet_type); + { + std::vector items; items.reserve(3); + items.push_back(IFC4X3_ADD2_IfcMeasureWithUnit_type); + items.push_back(IFC4X3_ADD2_IfcReference_type); + items.push_back(IFC4X3_ADD2_IfcValue_type); + IFC4X3_ADD2_IfcAppliedValueSelect_type = new select_type("IfcAppliedValueSelect", 51, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcAxis2Placement2D_type); + items.push_back(IFC4X3_ADD2_IfcAxis2Placement3D_type); + IFC4X3_ADD2_IfcAxis2Placement_type = new select_type("IfcAxis2Placement", 68, items); + } + { + std::vector items; items.reserve(5); + items.push_back(IFC4X3_ADD2_IfcBooleanResult_type); + items.push_back(IFC4X3_ADD2_IfcCsgPrimitive3D_type); + items.push_back(IFC4X3_ADD2_IfcHalfSpaceSolid_type); + items.push_back(IFC4X3_ADD2_IfcSolidModel_type); + items.push_back(IFC4X3_ADD2_IfcTessellatedFaceSet_type); + IFC4X3_ADD2_IfcBooleanOperand_type = new select_type("IfcBooleanOperand", 88, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcColourSpecification_type); + items.push_back(IFC4X3_ADD2_IfcPreDefinedColour_type); + IFC4X3_ADD2_IfcColour_type = new select_type("IfcColour", 177, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcColourRgb_type); + items.push_back(IFC4X3_ADD2_IfcNormalisedRatioMeasure_type); + IFC4X3_ADD2_IfcColourOrFactor_type = new select_type("IfcColourOrFactor", 178, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcBooleanResult_type); + items.push_back(IFC4X3_ADD2_IfcCsgPrimitive3D_type); + IFC4X3_ADD2_IfcCsgSelect_type = new select_type("IfcCsgSelect", 263, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcCurveStyleFont_type); + items.push_back(IFC4X3_ADD2_IfcPreDefinedCurveFont_type); + IFC4X3_ADD2_IfcCurveStyleFontSelect_type = new select_type("IfcCurveStyleFontSelect", 284, items); + } + { + std::vector items; items.reserve(4); + items.push_back(IFC4X3_ADD2_IfcColour_type); + items.push_back(IFC4X3_ADD2_IfcExternallyDefinedHatchStyle_type); + items.push_back(IFC4X3_ADD2_IfcFillAreaStyleHatching_type); + items.push_back(IFC4X3_ADD2_IfcFillAreaStyleTiles_type); + IFC4X3_ADD2_IfcFillStyleSelect_type = new select_type("IfcFillStyleSelect", 458, items); + } + { + std::vector items; items.reserve(3); + items.push_back(IFC4X3_ADD2_IfcCurve_type); + items.push_back(IFC4X3_ADD2_IfcPoint_type); + items.push_back(IFC4X3_ADD2_IfcSurface_type); + IFC4X3_ADD2_IfcGeometricSetSelect_type = new select_type("IfcGeometricSetSelect", 510, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcDirection_type); + items.push_back(IFC4X3_ADD2_IfcVirtualGridIntersection_type); + IFC4X3_ADD2_IfcGridPlacementDirectionSelect_type = new select_type("IfcGridPlacementDirectionSelect", 523, items); + } + { + std::vector items; items.reserve(6); + items.push_back(IFC4X3_ADD2_IfcAppliedValue_type); + items.push_back(IFC4X3_ADD2_IfcMeasureWithUnit_type); + items.push_back(IFC4X3_ADD2_IfcReference_type); + items.push_back(IFC4X3_ADD2_IfcTable_type); + items.push_back(IFC4X3_ADD2_IfcTimeSeries_type); + items.push_back(IFC4X3_ADD2_IfcValue_type); + IFC4X3_ADD2_IfcMetricValueSelect_type = new select_type("IfcMetricValueSelect", 669, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcProcess_type); + items.push_back(IFC4X3_ADD2_IfcTypeProcess_type); + IFC4X3_ADD2_IfcProcessSelect_type = new select_type("IfcProcessSelect", 799, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcProduct_type); + items.push_back(IFC4X3_ADD2_IfcTypeProduct_type); + IFC4X3_ADD2_IfcProductSelect_type = new select_type("IfcProductSelect", 804, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcPropertySetDefinition_type); + items.push_back(IFC4X3_ADD2_IfcPropertySetDefinitionSet_type); + IFC4X3_ADD2_IfcPropertySetDefinitionSelect_type = new select_type("IfcPropertySetDefinitionSelect", 827, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcResource_type); + items.push_back(IFC4X3_ADD2_IfcTypeResource_type); + IFC4X3_ADD2_IfcResourceSelect_type = new select_type("IfcResourceSelect", 959, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcClosedShell_type); + items.push_back(IFC4X3_ADD2_IfcOpenShell_type); + IFC4X3_ADD2_IfcShell_type = new select_type("IfcShell", 1010, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcClosedShell_type); + items.push_back(IFC4X3_ADD2_IfcSolidModel_type); + IFC4X3_ADD2_IfcSolidOrShell_type = new select_type("IfcSolidOrShell", 1037, items); + } + { + std::vector items; items.reserve(3); + items.push_back(IFC4X3_ADD2_IfcFaceBasedSurfaceModel_type); + items.push_back(IFC4X3_ADD2_IfcFaceSurface_type); + items.push_back(IFC4X3_ADD2_IfcSurface_type); + IFC4X3_ADD2_IfcSurfaceOrFaceSurface_type = new select_type("IfcSurfaceOrFaceSurface", 1131, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcCartesianPoint_type); + items.push_back(IFC4X3_ADD2_IfcParameterValue_type); + IFC4X3_ADD2_IfcTrimmingSelect_type = new select_type("IfcTrimmingSelect", 1236, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcDirection_type); + items.push_back(IFC4X3_ADD2_IfcVector_type); + IFC4X3_ADD2_IfcVectorOrDirection_type = new select_type("IfcVectorOrDirection", 1262, items); + } + IFC4X3_ADD2_IfcActor_type = new entity("IfcActor", false, 6, IFC4X3_ADD2_IfcObject_type); + IFC4X3_ADD2_IfcAdvancedBrep_type = new entity("IfcAdvancedBrep", false, 14, IFC4X3_ADD2_IfcManifoldSolidBrep_type); + IFC4X3_ADD2_IfcAdvancedBrepWithVoids_type = new entity("IfcAdvancedBrepWithVoids", false, 15, IFC4X3_ADD2_IfcAdvancedBrep_type); + IFC4X3_ADD2_IfcAnnotation_type = new entity("IfcAnnotation", false, 46, IFC4X3_ADD2_IfcProduct_type); + IFC4X3_ADD2_IfcBSplineSurface_type = new entity("IfcBSplineSurface", true, 110, IFC4X3_ADD2_IfcBoundedSurface_type); + IFC4X3_ADD2_IfcBSplineSurfaceWithKnots_type = new entity("IfcBSplineSurfaceWithKnots", false, 112, IFC4X3_ADD2_IfcBSplineSurface_type); + IFC4X3_ADD2_IfcBlock_type = new entity("IfcBlock", false, 82, IFC4X3_ADD2_IfcCsgPrimitive3D_type); + IFC4X3_ADD2_IfcBooleanClippingResult_type = new entity("IfcBooleanClippingResult", false, 87, IFC4X3_ADD2_IfcBooleanResult_type); + IFC4X3_ADD2_IfcBoundedCurve_type = new entity("IfcBoundedCurve", true, 98, IFC4X3_ADD2_IfcCurve_type); + IFC4X3_ADD2_IfcBuildingStorey_type = new entity("IfcBuildingStorey", false, 120, IFC4X3_ADD2_IfcSpatialStructureElement_type); + IFC4X3_ADD2_IfcBuiltElementType_type = new entity("IfcBuiltElementType", false, 124, IFC4X3_ADD2_IfcElementType_type); + IFC4X3_ADD2_IfcChimneyType_type = new entity("IfcChimneyType", false, 161, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcCircleHollowProfileDef_type = new entity("IfcCircleHollowProfileDef", false, 164, IFC4X3_ADD2_IfcCircleProfileDef_type); + IFC4X3_ADD2_IfcCivilElementType_type = new entity("IfcCivilElementType", false, 167, IFC4X3_ADD2_IfcElementType_type); + IFC4X3_ADD2_IfcClothoid_type = new entity("IfcClothoid", false, 173, IFC4X3_ADD2_IfcSpiral_type); + IFC4X3_ADD2_IfcColumnType_type = new entity("IfcColumnType", false, 183, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcComplexPropertyTemplate_type = new entity("IfcComplexPropertyTemplate", false, 190, IFC4X3_ADD2_IfcPropertyTemplate_type); + IFC4X3_ADD2_IfcCompositeCurve_type = new entity("IfcCompositeCurve", false, 192, IFC4X3_ADD2_IfcBoundedCurve_type); + IFC4X3_ADD2_IfcCompositeCurveOnSurface_type = new entity("IfcCompositeCurveOnSurface", false, 193, IFC4X3_ADD2_IfcCompositeCurve_type); + IFC4X3_ADD2_IfcConic_type = new entity("IfcConic", true, 203, IFC4X3_ADD2_IfcCurve_type); + IFC4X3_ADD2_IfcConstructionEquipmentResourceType_type = new entity("IfcConstructionEquipmentResourceType", false, 215, IFC4X3_ADD2_IfcConstructionResourceType_type); + IFC4X3_ADD2_IfcConstructionMaterialResourceType_type = new entity("IfcConstructionMaterialResourceType", false, 218, IFC4X3_ADD2_IfcConstructionResourceType_type); + IFC4X3_ADD2_IfcConstructionProductResourceType_type = new entity("IfcConstructionProductResourceType", false, 221, IFC4X3_ADD2_IfcConstructionResourceType_type); + IFC4X3_ADD2_IfcConstructionResource_type = new entity("IfcConstructionResource", true, 223, IFC4X3_ADD2_IfcResource_type); + IFC4X3_ADD2_IfcControl_type = new entity("IfcControl", true, 228, IFC4X3_ADD2_IfcObject_type); + IFC4X3_ADD2_IfcCosineSpiral_type = new entity("IfcCosineSpiral", false, 246, IFC4X3_ADD2_IfcSpiral_type); + IFC4X3_ADD2_IfcCostItem_type = new entity("IfcCostItem", false, 247, IFC4X3_ADD2_IfcControl_type); + IFC4X3_ADD2_IfcCostSchedule_type = new entity("IfcCostSchedule", false, 249, IFC4X3_ADD2_IfcControl_type); + IFC4X3_ADD2_IfcCourseType_type = new entity("IfcCourseType", false, 254, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcCoveringType_type = new entity("IfcCoveringType", false, 257, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcCrewResource_type = new entity("IfcCrewResource", false, 259, IFC4X3_ADD2_IfcConstructionResource_type); + IFC4X3_ADD2_IfcCurtainWallType_type = new entity("IfcCurtainWallType", false, 268, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcCylindricalSurface_type = new entity("IfcCylindricalSurface", false, 285, IFC4X3_ADD2_IfcElementarySurface_type); + IFC4X3_ADD2_IfcDeepFoundationType_type = new entity("IfcDeepFoundationType", false, 295, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcDirectrixDerivedReferenceSweptAreaSolid_type = new entity("IfcDirectrixDerivedReferenceSweptAreaSolid", false, 308, IFC4X3_ADD2_IfcFixedReferenceSweptAreaSolid_type); + IFC4X3_ADD2_IfcDistributionElementType_type = new entity("IfcDistributionElementType", false, 322, IFC4X3_ADD2_IfcElementType_type); + IFC4X3_ADD2_IfcDistributionFlowElementType_type = new entity("IfcDistributionFlowElementType", true, 324, IFC4X3_ADD2_IfcDistributionElementType_type); + IFC4X3_ADD2_IfcDoorLiningProperties_type = new entity("IfcDoorLiningProperties", false, 336, IFC4X3_ADD2_IfcPreDefinedPropertySet_type); + IFC4X3_ADD2_IfcDoorPanelProperties_type = new entity("IfcDoorPanelProperties", false, 339, IFC4X3_ADD2_IfcPreDefinedPropertySet_type); + IFC4X3_ADD2_IfcDoorType_type = new entity("IfcDoorType", false, 340, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcDraughtingPreDefinedColour_type = new entity("IfcDraughtingPreDefinedColour", false, 344, IFC4X3_ADD2_IfcPreDefinedColour_type); + IFC4X3_ADD2_IfcDraughtingPreDefinedCurveFont_type = new entity("IfcDraughtingPreDefinedCurveFont", false, 345, IFC4X3_ADD2_IfcPreDefinedCurveFont_type); + IFC4X3_ADD2_IfcElement_type = new entity("IfcElement", true, 392, IFC4X3_ADD2_IfcProduct_type); + IFC4X3_ADD2_IfcElementAssembly_type = new entity("IfcElementAssembly", false, 394, IFC4X3_ADD2_IfcElement_type); + IFC4X3_ADD2_IfcElementAssemblyType_type = new entity("IfcElementAssemblyType", false, 395, IFC4X3_ADD2_IfcElementType_type); + IFC4X3_ADD2_IfcElementComponent_type = new entity("IfcElementComponent", true, 397, IFC4X3_ADD2_IfcElement_type); + IFC4X3_ADD2_IfcElementComponentType_type = new entity("IfcElementComponentType", true, 398, IFC4X3_ADD2_IfcElementType_type); + IFC4X3_ADD2_IfcEllipse_type = new entity("IfcEllipse", false, 402, IFC4X3_ADD2_IfcConic_type); + IFC4X3_ADD2_IfcEnergyConversionDeviceType_type = new entity("IfcEnergyConversionDeviceType", true, 405, IFC4X3_ADD2_IfcDistributionFlowElementType_type); + IFC4X3_ADD2_IfcEngineType_type = new entity("IfcEngineType", false, 408, IFC4X3_ADD2_IfcEnergyConversionDeviceType_type); + IFC4X3_ADD2_IfcEvaporativeCoolerType_type = new entity("IfcEvaporativeCoolerType", false, 411, IFC4X3_ADD2_IfcEnergyConversionDeviceType_type); + IFC4X3_ADD2_IfcEvaporatorType_type = new entity("IfcEvaporatorType", false, 414, IFC4X3_ADD2_IfcEnergyConversionDeviceType_type); + IFC4X3_ADD2_IfcEvent_type = new entity("IfcEvent", false, 416, IFC4X3_ADD2_IfcProcess_type); + IFC4X3_ADD2_IfcExternalSpatialStructureElement_type = new entity("IfcExternalSpatialStructureElement", true, 430, IFC4X3_ADD2_IfcSpatialElement_type); + IFC4X3_ADD2_IfcFacetedBrep_type = new entity("IfcFacetedBrep", false, 438, IFC4X3_ADD2_IfcManifoldSolidBrep_type); + IFC4X3_ADD2_IfcFacetedBrepWithVoids_type = new entity("IfcFacetedBrepWithVoids", false, 439, IFC4X3_ADD2_IfcFacetedBrep_type); + IFC4X3_ADD2_IfcFacility_type = new entity("IfcFacility", false, 440, IFC4X3_ADD2_IfcSpatialStructureElement_type); + IFC4X3_ADD2_IfcFacilityPart_type = new entity("IfcFacilityPart", true, 441, IFC4X3_ADD2_IfcSpatialStructureElement_type); + IFC4X3_ADD2_IfcFacilityPartCommon_type = new entity("IfcFacilityPartCommon", false, 442, IFC4X3_ADD2_IfcFacilityPart_type); + IFC4X3_ADD2_IfcFastener_type = new entity("IfcFastener", false, 449, IFC4X3_ADD2_IfcElementComponent_type); + IFC4X3_ADD2_IfcFastenerType_type = new entity("IfcFastenerType", false, 450, IFC4X3_ADD2_IfcElementComponentType_type); + IFC4X3_ADD2_IfcFeatureElement_type = new entity("IfcFeatureElement", true, 452, IFC4X3_ADD2_IfcElement_type); + IFC4X3_ADD2_IfcFeatureElementAddition_type = new entity("IfcFeatureElementAddition", true, 453, IFC4X3_ADD2_IfcFeatureElement_type); + IFC4X3_ADD2_IfcFeatureElementSubtraction_type = new entity("IfcFeatureElementSubtraction", true, 454, IFC4X3_ADD2_IfcFeatureElement_type); + IFC4X3_ADD2_IfcFlowControllerType_type = new entity("IfcFlowControllerType", true, 467, IFC4X3_ADD2_IfcDistributionFlowElementType_type); + IFC4X3_ADD2_IfcFlowFittingType_type = new entity("IfcFlowFittingType", true, 470, IFC4X3_ADD2_IfcDistributionFlowElementType_type); + IFC4X3_ADD2_IfcFlowMeterType_type = new entity("IfcFlowMeterType", false, 475, IFC4X3_ADD2_IfcFlowControllerType_type); + IFC4X3_ADD2_IfcFlowMovingDeviceType_type = new entity("IfcFlowMovingDeviceType", true, 478, IFC4X3_ADD2_IfcDistributionFlowElementType_type); + IFC4X3_ADD2_IfcFlowSegmentType_type = new entity("IfcFlowSegmentType", true, 480, IFC4X3_ADD2_IfcDistributionFlowElementType_type); + IFC4X3_ADD2_IfcFlowStorageDeviceType_type = new entity("IfcFlowStorageDeviceType", true, 482, IFC4X3_ADD2_IfcDistributionFlowElementType_type); + IFC4X3_ADD2_IfcFlowTerminalType_type = new entity("IfcFlowTerminalType", true, 484, IFC4X3_ADD2_IfcDistributionFlowElementType_type); + IFC4X3_ADD2_IfcFlowTreatmentDeviceType_type = new entity("IfcFlowTreatmentDeviceType", true, 486, IFC4X3_ADD2_IfcDistributionFlowElementType_type); + IFC4X3_ADD2_IfcFootingType_type = new entity("IfcFootingType", false, 491, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcFurnishingElement_type = new entity("IfcFurnishingElement", false, 495, IFC4X3_ADD2_IfcElement_type); + IFC4X3_ADD2_IfcFurniture_type = new entity("IfcFurniture", false, 497, IFC4X3_ADD2_IfcFurnishingElement_type); + IFC4X3_ADD2_IfcGeographicElement_type = new entity("IfcGeographicElement", false, 501, IFC4X3_ADD2_IfcElement_type); + IFC4X3_ADD2_IfcGeotechnicalElement_type = new entity("IfcGeotechnicalElement", true, 514, IFC4X3_ADD2_IfcElement_type); + IFC4X3_ADD2_IfcGeotechnicalStratum_type = new entity("IfcGeotechnicalStratum", false, 515, IFC4X3_ADD2_IfcGeotechnicalElement_type); + IFC4X3_ADD2_IfcGradientCurve_type = new entity("IfcGradientCurve", false, 519, IFC4X3_ADD2_IfcCompositeCurve_type); + IFC4X3_ADD2_IfcGroup_type = new entity("IfcGroup", false, 525, IFC4X3_ADD2_IfcObject_type); + IFC4X3_ADD2_IfcHeatExchangerType_type = new entity("IfcHeatExchangerType", false, 529, IFC4X3_ADD2_IfcEnergyConversionDeviceType_type); + IFC4X3_ADD2_IfcHumidifierType_type = new entity("IfcHumidifierType", false, 534, IFC4X3_ADD2_IfcEnergyConversionDeviceType_type); + IFC4X3_ADD2_IfcImpactProtectionDevice_type = new entity("IfcImpactProtectionDevice", false, 539, IFC4X3_ADD2_IfcElementComponent_type); + IFC4X3_ADD2_IfcImpactProtectionDeviceType_type = new entity("IfcImpactProtectionDeviceType", false, 540, IFC4X3_ADD2_IfcElementComponentType_type); + IFC4X3_ADD2_IfcIndexedPolyCurve_type = new entity("IfcIndexedPolyCurve", false, 543, IFC4X3_ADD2_IfcBoundedCurve_type); + IFC4X3_ADD2_IfcInterceptorType_type = new entity("IfcInterceptorType", false, 553, IFC4X3_ADD2_IfcFlowTreatmentDeviceType_type); + IFC4X3_ADD2_IfcIntersectionCurve_type = new entity("IfcIntersectionCurve", false, 557, IFC4X3_ADD2_IfcSurfaceCurve_type); + IFC4X3_ADD2_IfcInventory_type = new entity("IfcInventory", false, 558, IFC4X3_ADD2_IfcGroup_type); + IFC4X3_ADD2_IfcJunctionBoxType_type = new entity("IfcJunctionBoxType", false, 566, IFC4X3_ADD2_IfcFlowFittingType_type); + IFC4X3_ADD2_IfcKerbType_type = new entity("IfcKerbType", false, 569, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcLaborResource_type = new entity("IfcLaborResource", false, 574, IFC4X3_ADD2_IfcConstructionResource_type); + IFC4X3_ADD2_IfcLampType_type = new entity("IfcLampType", false, 579, IFC4X3_ADD2_IfcFlowTerminalType_type); + IFC4X3_ADD2_IfcLightFixtureType_type = new entity("IfcLightFixtureType", false, 593, IFC4X3_ADD2_IfcFlowTerminalType_type); + IFC4X3_ADD2_IfcLinearElement_type = new entity("IfcLinearElement", false, 603, IFC4X3_ADD2_IfcProduct_type); + IFC4X3_ADD2_IfcLiquidTerminalType_type = new entity("IfcLiquidTerminalType", false, 612, IFC4X3_ADD2_IfcFlowTerminalType_type); + IFC4X3_ADD2_IfcMarineFacility_type = new entity("IfcMarineFacility", false, 629, IFC4X3_ADD2_IfcFacility_type); + IFC4X3_ADD2_IfcMarinePart_type = new entity("IfcMarinePart", false, 631, IFC4X3_ADD2_IfcFacilityPart_type); + IFC4X3_ADD2_IfcMechanicalFastener_type = new entity("IfcMechanicalFastener", false, 659, IFC4X3_ADD2_IfcElementComponent_type); + IFC4X3_ADD2_IfcMechanicalFastenerType_type = new entity("IfcMechanicalFastenerType", false, 660, IFC4X3_ADD2_IfcElementComponentType_type); + IFC4X3_ADD2_IfcMedicalDeviceType_type = new entity("IfcMedicalDeviceType", false, 663, IFC4X3_ADD2_IfcFlowTerminalType_type); + IFC4X3_ADD2_IfcMemberType_type = new entity("IfcMemberType", false, 666, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcMobileTelecommunicationsApplianceType_type = new entity("IfcMobileTelecommunicationsApplianceType", false, 672, IFC4X3_ADD2_IfcFlowTerminalType_type); + IFC4X3_ADD2_IfcMooringDeviceType_type = new entity("IfcMooringDeviceType", false, 688, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcMotorConnectionType_type = new entity("IfcMotorConnectionType", false, 691, IFC4X3_ADD2_IfcEnergyConversionDeviceType_type); + IFC4X3_ADD2_IfcNavigationElementType_type = new entity("IfcNavigationElementType", false, 695, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcOccupant_type = new entity("IfcOccupant", false, 706, IFC4X3_ADD2_IfcActor_type); + IFC4X3_ADD2_IfcOpeningElement_type = new entity("IfcOpeningElement", false, 713, IFC4X3_ADD2_IfcFeatureElementSubtraction_type); + IFC4X3_ADD2_IfcOutletType_type = new entity("IfcOutletType", false, 721, IFC4X3_ADD2_IfcFlowTerminalType_type); + IFC4X3_ADD2_IfcPavementType_type = new entity("IfcPavementType", false, 728, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcPerformanceHistory_type = new entity("IfcPerformanceHistory", false, 731, IFC4X3_ADD2_IfcControl_type); + IFC4X3_ADD2_IfcPermeableCoveringProperties_type = new entity("IfcPermeableCoveringProperties", false, 734, IFC4X3_ADD2_IfcPreDefinedPropertySet_type); + IFC4X3_ADD2_IfcPermit_type = new entity("IfcPermit", false, 735, IFC4X3_ADD2_IfcControl_type); + IFC4X3_ADD2_IfcPileType_type = new entity("IfcPileType", false, 746, IFC4X3_ADD2_IfcDeepFoundationType_type); + IFC4X3_ADD2_IfcPipeFittingType_type = new entity("IfcPipeFittingType", false, 749, IFC4X3_ADD2_IfcFlowFittingType_type); + IFC4X3_ADD2_IfcPipeSegmentType_type = new entity("IfcPipeSegmentType", false, 752, IFC4X3_ADD2_IfcFlowSegmentType_type); + IFC4X3_ADD2_IfcPlateType_type = new entity("IfcPlateType", false, 762, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcPolygonalFaceSet_type = new entity("IfcPolygonalFaceSet", false, 770, IFC4X3_ADD2_IfcTessellatedFaceSet_type); + IFC4X3_ADD2_IfcPolyline_type = new entity("IfcPolyline", false, 771, IFC4X3_ADD2_IfcBoundedCurve_type); + IFC4X3_ADD2_IfcPort_type = new entity("IfcPort", true, 774, IFC4X3_ADD2_IfcProduct_type); + IFC4X3_ADD2_IfcPositioningElement_type = new entity("IfcPositioningElement", true, 775, IFC4X3_ADD2_IfcProduct_type); + IFC4X3_ADD2_IfcProcedure_type = new entity("IfcProcedure", false, 795, IFC4X3_ADD2_IfcProcess_type); + IFC4X3_ADD2_IfcProjectOrder_type = new entity("IfcProjectOrder", false, 814, IFC4X3_ADD2_IfcControl_type); + IFC4X3_ADD2_IfcProjectionElement_type = new entity("IfcProjectionElement", false, 811, IFC4X3_ADD2_IfcFeatureElementAddition_type); + IFC4X3_ADD2_IfcProtectiveDeviceType_type = new entity("IfcProtectiveDeviceType", false, 839, IFC4X3_ADD2_IfcFlowControllerType_type); + IFC4X3_ADD2_IfcPumpType_type = new entity("IfcPumpType", false, 842, IFC4X3_ADD2_IfcFlowMovingDeviceType_type); + IFC4X3_ADD2_IfcRailType_type = new entity("IfcRailType", false, 857, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcRailingType_type = new entity("IfcRailingType", false, 855, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcRailway_type = new entity("IfcRailway", false, 859, IFC4X3_ADD2_IfcFacility_type); + IFC4X3_ADD2_IfcRailwayPart_type = new entity("IfcRailwayPart", false, 860, IFC4X3_ADD2_IfcFacilityPart_type); + IFC4X3_ADD2_IfcRampFlightType_type = new entity("IfcRampFlightType", false, 865, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcRampType_type = new entity("IfcRampType", false, 867, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcRationalBSplineSurfaceWithKnots_type = new entity("IfcRationalBSplineSurfaceWithKnots", false, 871, IFC4X3_ADD2_IfcBSplineSurfaceWithKnots_type); + IFC4X3_ADD2_IfcReferent_type = new entity("IfcReferent", false, 880, IFC4X3_ADD2_IfcPositioningElement_type); + IFC4X3_ADD2_IfcReinforcingElement_type = new entity("IfcReinforcingElement", true, 893, IFC4X3_ADD2_IfcElementComponent_type); + IFC4X3_ADD2_IfcReinforcingElementType_type = new entity("IfcReinforcingElementType", true, 894, IFC4X3_ADD2_IfcElementComponentType_type); + IFC4X3_ADD2_IfcReinforcingMesh_type = new entity("IfcReinforcingMesh", false, 895, IFC4X3_ADD2_IfcReinforcingElement_type); + IFC4X3_ADD2_IfcReinforcingMeshType_type = new entity("IfcReinforcingMeshType", false, 896, IFC4X3_ADD2_IfcReinforcingElementType_type); + IFC4X3_ADD2_IfcRelAdheresToElement_type = new entity("IfcRelAdheresToElement", false, 898, IFC4X3_ADD2_IfcRelDecomposes_type); + IFC4X3_ADD2_IfcRelAggregates_type = new entity("IfcRelAggregates", false, 899, IFC4X3_ADD2_IfcRelDecomposes_type); + IFC4X3_ADD2_IfcRoad_type = new entity("IfcRoad", false, 966, IFC4X3_ADD2_IfcFacility_type); + IFC4X3_ADD2_IfcRoadPart_type = new entity("IfcRoadPart", false, 967, IFC4X3_ADD2_IfcFacilityPart_type); + IFC4X3_ADD2_IfcRoofType_type = new entity("IfcRoofType", false, 972, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcSanitaryTerminalType_type = new entity("IfcSanitaryTerminalType", false, 981, IFC4X3_ADD2_IfcFlowTerminalType_type); + IFC4X3_ADD2_IfcSeamCurve_type = new entity("IfcSeamCurve", false, 984, IFC4X3_ADD2_IfcSurfaceCurve_type); + IFC4X3_ADD2_IfcSecondOrderPolynomialSpiral_type = new entity("IfcSecondOrderPolynomialSpiral", false, 985, IFC4X3_ADD2_IfcSpiral_type); + IFC4X3_ADD2_IfcSegmentedReferenceCurve_type = new entity("IfcSegmentedReferenceCurve", false, 996, IFC4X3_ADD2_IfcCompositeCurve_type); + IFC4X3_ADD2_IfcSeventhOrderPolynomialSpiral_type = new entity("IfcSeventhOrderPolynomialSpiral", false, 1002, IFC4X3_ADD2_IfcSpiral_type); + IFC4X3_ADD2_IfcShadingDeviceType_type = new entity("IfcShadingDeviceType", false, 1004, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcSign_type = new entity("IfcSign", false, 1012, IFC4X3_ADD2_IfcElementComponent_type); + IFC4X3_ADD2_IfcSignType_type = new entity("IfcSignType", false, 1016, IFC4X3_ADD2_IfcElementComponentType_type); + IFC4X3_ADD2_IfcSignalType_type = new entity("IfcSignalType", false, 1014, IFC4X3_ADD2_IfcFlowTerminalType_type); + IFC4X3_ADD2_IfcSineSpiral_type = new entity("IfcSineSpiral", false, 1022, IFC4X3_ADD2_IfcSpiral_type); + IFC4X3_ADD2_IfcSite_type = new entity("IfcSite", false, 1024, IFC4X3_ADD2_IfcSpatialStructureElement_type); + IFC4X3_ADD2_IfcSlabType_type = new entity("IfcSlabType", false, 1029, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcSolarDeviceType_type = new entity("IfcSolarDeviceType", false, 1033, IFC4X3_ADD2_IfcEnergyConversionDeviceType_type); + IFC4X3_ADD2_IfcSpace_type = new entity("IfcSpace", false, 1042, IFC4X3_ADD2_IfcSpatialStructureElement_type); + IFC4X3_ADD2_IfcSpaceHeaterType_type = new entity("IfcSpaceHeaterType", false, 1045, IFC4X3_ADD2_IfcFlowTerminalType_type); + IFC4X3_ADD2_IfcSpaceType_type = new entity("IfcSpaceType", false, 1047, IFC4X3_ADD2_IfcSpatialStructureElementType_type); + IFC4X3_ADD2_IfcStackTerminalType_type = new entity("IfcStackTerminalType", false, 1065, IFC4X3_ADD2_IfcFlowTerminalType_type); + IFC4X3_ADD2_IfcStairFlightType_type = new entity("IfcStairFlightType", false, 1069, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcStairType_type = new entity("IfcStairType", false, 1071, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcStructuralAction_type = new entity("IfcStructuralAction", true, 1075, IFC4X3_ADD2_IfcStructuralActivity_type); + IFC4X3_ADD2_IfcStructuralConnection_type = new entity("IfcStructuralConnection", true, 1079, IFC4X3_ADD2_IfcStructuralItem_type); + IFC4X3_ADD2_IfcStructuralCurveAction_type = new entity("IfcStructuralCurveAction", false, 1081, IFC4X3_ADD2_IfcStructuralAction_type); + IFC4X3_ADD2_IfcStructuralCurveConnection_type = new entity("IfcStructuralCurveConnection", false, 1083, IFC4X3_ADD2_IfcStructuralConnection_type); + IFC4X3_ADD2_IfcStructuralCurveMember_type = new entity("IfcStructuralCurveMember", false, 1084, IFC4X3_ADD2_IfcStructuralMember_type); + IFC4X3_ADD2_IfcStructuralCurveMemberVarying_type = new entity("IfcStructuralCurveMemberVarying", false, 1086, IFC4X3_ADD2_IfcStructuralCurveMember_type); + IFC4X3_ADD2_IfcStructuralCurveReaction_type = new entity("IfcStructuralCurveReaction", false, 1087, IFC4X3_ADD2_IfcStructuralReaction_type); + IFC4X3_ADD2_IfcStructuralLinearAction_type = new entity("IfcStructuralLinearAction", false, 1089, IFC4X3_ADD2_IfcStructuralCurveAction_type); + IFC4X3_ADD2_IfcStructuralLoadGroup_type = new entity("IfcStructuralLoadGroup", false, 1093, IFC4X3_ADD2_IfcGroup_type); + IFC4X3_ADD2_IfcStructuralPointAction_type = new entity("IfcStructuralPointAction", false, 1105, IFC4X3_ADD2_IfcStructuralAction_type); + IFC4X3_ADD2_IfcStructuralPointConnection_type = new entity("IfcStructuralPointConnection", false, 1106, IFC4X3_ADD2_IfcStructuralConnection_type); + IFC4X3_ADD2_IfcStructuralPointReaction_type = new entity("IfcStructuralPointReaction", false, 1107, IFC4X3_ADD2_IfcStructuralReaction_type); + IFC4X3_ADD2_IfcStructuralResultGroup_type = new entity("IfcStructuralResultGroup", false, 1109, IFC4X3_ADD2_IfcGroup_type); + IFC4X3_ADD2_IfcStructuralSurfaceAction_type = new entity("IfcStructuralSurfaceAction", false, 1110, IFC4X3_ADD2_IfcStructuralAction_type); + IFC4X3_ADD2_IfcStructuralSurfaceConnection_type = new entity("IfcStructuralSurfaceConnection", false, 1112, IFC4X3_ADD2_IfcStructuralConnection_type); + IFC4X3_ADD2_IfcSubContractResource_type = new entity("IfcSubContractResource", false, 1120, IFC4X3_ADD2_IfcConstructionResource_type); + IFC4X3_ADD2_IfcSurfaceFeature_type = new entity("IfcSurfaceFeature", false, 1127, IFC4X3_ADD2_IfcFeatureElement_type); + IFC4X3_ADD2_IfcSwitchingDeviceType_type = new entity("IfcSwitchingDeviceType", false, 1147, IFC4X3_ADD2_IfcFlowControllerType_type); + IFC4X3_ADD2_IfcSystem_type = new entity("IfcSystem", false, 1149, IFC4X3_ADD2_IfcGroup_type); + IFC4X3_ADD2_IfcSystemFurnitureElement_type = new entity("IfcSystemFurnitureElement", false, 1150, IFC4X3_ADD2_IfcFurnishingElement_type); + IFC4X3_ADD2_IfcTankType_type = new entity("IfcTankType", false, 1157, IFC4X3_ADD2_IfcFlowStorageDeviceType_type); + IFC4X3_ADD2_IfcTendon_type = new entity("IfcTendon", false, 1168, IFC4X3_ADD2_IfcReinforcingElement_type); + IFC4X3_ADD2_IfcTendonAnchor_type = new entity("IfcTendonAnchor", false, 1169, IFC4X3_ADD2_IfcReinforcingElement_type); + IFC4X3_ADD2_IfcTendonAnchorType_type = new entity("IfcTendonAnchorType", false, 1170, IFC4X3_ADD2_IfcReinforcingElementType_type); + IFC4X3_ADD2_IfcTendonConduit_type = new entity("IfcTendonConduit", false, 1172, IFC4X3_ADD2_IfcReinforcingElement_type); + IFC4X3_ADD2_IfcTendonConduitType_type = new entity("IfcTendonConduitType", false, 1173, IFC4X3_ADD2_IfcReinforcingElementType_type); + IFC4X3_ADD2_IfcTendonType_type = new entity("IfcTendonType", false, 1175, IFC4X3_ADD2_IfcReinforcingElementType_type); + IFC4X3_ADD2_IfcTrackElementType_type = new entity("IfcTrackElementType", false, 1219, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcTransformerType_type = new entity("IfcTransformerType", false, 1222, IFC4X3_ADD2_IfcEnergyConversionDeviceType_type); + IFC4X3_ADD2_IfcTransportElementType_type = new entity("IfcTransportElementType", false, 1229, IFC4X3_ADD2_IfcTransportationDeviceType_type); + IFC4X3_ADD2_IfcTransportationDevice_type = new entity("IfcTransportationDevice", true, 1226, IFC4X3_ADD2_IfcElement_type); + IFC4X3_ADD2_IfcTrimmedCurve_type = new entity("IfcTrimmedCurve", false, 1234, IFC4X3_ADD2_IfcBoundedCurve_type); + IFC4X3_ADD2_IfcTubeBundleType_type = new entity("IfcTubeBundleType", false, 1239, IFC4X3_ADD2_IfcEnergyConversionDeviceType_type); + IFC4X3_ADD2_IfcUnitaryEquipmentType_type = new entity("IfcUnitaryEquipmentType", false, 1250, IFC4X3_ADD2_IfcEnergyConversionDeviceType_type); + IFC4X3_ADD2_IfcValveType_type = new entity("IfcValveType", false, 1258, IFC4X3_ADD2_IfcFlowControllerType_type); + IFC4X3_ADD2_IfcVehicle_type = new entity("IfcVehicle", false, 1263, IFC4X3_ADD2_IfcTransportationDevice_type); + IFC4X3_ADD2_IfcVibrationDamper_type = new entity("IfcVibrationDamper", false, 1269, IFC4X3_ADD2_IfcElementComponent_type); + IFC4X3_ADD2_IfcVibrationDamperType_type = new entity("IfcVibrationDamperType", false, 1270, IFC4X3_ADD2_IfcElementComponentType_type); + IFC4X3_ADD2_IfcVibrationIsolator_type = new entity("IfcVibrationIsolator", false, 1272, IFC4X3_ADD2_IfcElementComponent_type); + IFC4X3_ADD2_IfcVibrationIsolatorType_type = new entity("IfcVibrationIsolatorType", false, 1273, IFC4X3_ADD2_IfcElementComponentType_type); + IFC4X3_ADD2_IfcVirtualElement_type = new entity("IfcVirtualElement", false, 1275, IFC4X3_ADD2_IfcElement_type); + IFC4X3_ADD2_IfcVoidingFeature_type = new entity("IfcVoidingFeature", false, 1278, IFC4X3_ADD2_IfcFeatureElementSubtraction_type); + IFC4X3_ADD2_IfcWallType_type = new entity("IfcWallType", false, 1284, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcWasteTerminalType_type = new entity("IfcWasteTerminalType", false, 1290, IFC4X3_ADD2_IfcFlowTerminalType_type); + IFC4X3_ADD2_IfcWindowType_type = new entity("IfcWindowType", false, 1299, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcWorkCalendar_type = new entity("IfcWorkCalendar", false, 1302, IFC4X3_ADD2_IfcControl_type); + IFC4X3_ADD2_IfcWorkControl_type = new entity("IfcWorkControl", true, 1304, IFC4X3_ADD2_IfcControl_type); + IFC4X3_ADD2_IfcWorkPlan_type = new entity("IfcWorkPlan", false, 1305, IFC4X3_ADD2_IfcWorkControl_type); + IFC4X3_ADD2_IfcWorkSchedule_type = new entity("IfcWorkSchedule", false, 1307, IFC4X3_ADD2_IfcWorkControl_type); + IFC4X3_ADD2_IfcZone_type = new entity("IfcZone", false, 1310, IFC4X3_ADD2_IfcSystem_type); + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcCurveStyleFontAndScaling_type); + items.push_back(IFC4X3_ADD2_IfcCurveStyleFontSelect_type); + IFC4X3_ADD2_IfcCurveFontOrScaledCurveFontSelect_type = new select_type("IfcCurveFontOrScaledCurveFontSelect", 274, items); + } + { + std::vector items; items.reserve(3); + items.push_back(IFC4X3_ADD2_IfcCompositeCurveOnSurface_type); + items.push_back(IFC4X3_ADD2_IfcPcurve_type); + items.push_back(IFC4X3_ADD2_IfcSurfaceCurve_type); + IFC4X3_ADD2_IfcCurveOnSurface_type = new select_type("IfcCurveOnSurface", 277, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcBoundedCurve_type); + items.push_back(IFC4X3_ADD2_IfcEdgeCurve_type); + IFC4X3_ADD2_IfcCurveOrEdgeCurve_type = new select_type("IfcCurveOrEdgeCurve", 278, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcElement_type); + items.push_back(IFC4X3_ADD2_IfcSpatialElement_type); + IFC4X3_ADD2_IfcInterferenceSelect_type = new select_type("IfcInterferenceSelect", 555, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcGroup_type); + items.push_back(IFC4X3_ADD2_IfcProduct_type); + IFC4X3_ADD2_IfcSpatialReferenceSelect_type = new select_type("IfcSpatialReferenceSelect", 1051, items); + } + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcElement_type); + items.push_back(IFC4X3_ADD2_IfcStructuralItem_type); + IFC4X3_ADD2_IfcStructuralActivityAssignmentSelect_type = new select_type("IfcStructuralActivityAssignmentSelect", 1077, items); + } + IFC4X3_ADD2_IfcActionRequest_type = new entity("IfcActionRequest", false, 2, IFC4X3_ADD2_IfcControl_type); + IFC4X3_ADD2_IfcAirTerminalBoxType_type = new entity("IfcAirTerminalBoxType", false, 19, IFC4X3_ADD2_IfcFlowControllerType_type); + IFC4X3_ADD2_IfcAirTerminalType_type = new entity("IfcAirTerminalType", false, 21, IFC4X3_ADD2_IfcFlowTerminalType_type); + IFC4X3_ADD2_IfcAirToAirHeatRecoveryType_type = new entity("IfcAirToAirHeatRecoveryType", false, 24, IFC4X3_ADD2_IfcEnergyConversionDeviceType_type); + IFC4X3_ADD2_IfcAlignmentCant_type = new entity("IfcAlignmentCant", false, 30, IFC4X3_ADD2_IfcLinearElement_type); + IFC4X3_ADD2_IfcAlignmentHorizontal_type = new entity("IfcAlignmentHorizontal", false, 33, IFC4X3_ADD2_IfcLinearElement_type); + IFC4X3_ADD2_IfcAlignmentSegment_type = new entity("IfcAlignmentSegment", false, 37, IFC4X3_ADD2_IfcLinearElement_type); + IFC4X3_ADD2_IfcAlignmentVertical_type = new entity("IfcAlignmentVertical", false, 39, IFC4X3_ADD2_IfcLinearElement_type); + IFC4X3_ADD2_IfcAsset_type = new entity("IfcAsset", false, 62, IFC4X3_ADD2_IfcGroup_type); + IFC4X3_ADD2_IfcAudioVisualApplianceType_type = new entity("IfcAudioVisualApplianceType", false, 65, IFC4X3_ADD2_IfcFlowTerminalType_type); + IFC4X3_ADD2_IfcBSplineCurve_type = new entity("IfcBSplineCurve", true, 107, IFC4X3_ADD2_IfcBoundedCurve_type); + IFC4X3_ADD2_IfcBSplineCurveWithKnots_type = new entity("IfcBSplineCurveWithKnots", false, 109, IFC4X3_ADD2_IfcBSplineCurve_type); + IFC4X3_ADD2_IfcBeamType_type = new entity("IfcBeamType", false, 73, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcBearingType_type = new entity("IfcBearingType", false, 76, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcBoilerType_type = new entity("IfcBoilerType", false, 84, IFC4X3_ADD2_IfcEnergyConversionDeviceType_type); + IFC4X3_ADD2_IfcBoundaryCurve_type = new entity("IfcBoundaryCurve", false, 93, IFC4X3_ADD2_IfcCompositeCurveOnSurface_type); + IFC4X3_ADD2_IfcBridge_type = new entity("IfcBridge", false, 103, IFC4X3_ADD2_IfcFacility_type); + IFC4X3_ADD2_IfcBridgePart_type = new entity("IfcBridgePart", false, 104, IFC4X3_ADD2_IfcFacilityPart_type); + IFC4X3_ADD2_IfcBuilding_type = new entity("IfcBuilding", false, 113, IFC4X3_ADD2_IfcFacility_type); + IFC4X3_ADD2_IfcBuildingElementPart_type = new entity("IfcBuildingElementPart", false, 114, IFC4X3_ADD2_IfcElementComponent_type); + IFC4X3_ADD2_IfcBuildingElementPartType_type = new entity("IfcBuildingElementPartType", false, 115, IFC4X3_ADD2_IfcElementComponentType_type); + IFC4X3_ADD2_IfcBuildingElementProxyType_type = new entity("IfcBuildingElementProxyType", false, 118, IFC4X3_ADD2_IfcBuiltElementType_type); + IFC4X3_ADD2_IfcBuildingSystem_type = new entity("IfcBuildingSystem", false, 121, IFC4X3_ADD2_IfcSystem_type); + IFC4X3_ADD2_IfcBuiltElement_type = new entity("IfcBuiltElement", false, 123, IFC4X3_ADD2_IfcElement_type); + IFC4X3_ADD2_IfcBuiltSystem_type = new entity("IfcBuiltSystem", false, 125, IFC4X3_ADD2_IfcSystem_type); + IFC4X3_ADD2_IfcBurnerType_type = new entity("IfcBurnerType", false, 128, IFC4X3_ADD2_IfcEnergyConversionDeviceType_type); + IFC4X3_ADD2_IfcCableCarrierFittingType_type = new entity("IfcCableCarrierFittingType", false, 131, IFC4X3_ADD2_IfcFlowFittingType_type); + IFC4X3_ADD2_IfcCableCarrierSegmentType_type = new entity("IfcCableCarrierSegmentType", false, 134, IFC4X3_ADD2_IfcFlowSegmentType_type); + IFC4X3_ADD2_IfcCableFittingType_type = new entity("IfcCableFittingType", false, 137, IFC4X3_ADD2_IfcFlowFittingType_type); + IFC4X3_ADD2_IfcCableSegmentType_type = new entity("IfcCableSegmentType", false, 140, IFC4X3_ADD2_IfcFlowSegmentType_type); + IFC4X3_ADD2_IfcCaissonFoundationType_type = new entity("IfcCaissonFoundationType", false, 143, IFC4X3_ADD2_IfcDeepFoundationType_type); + IFC4X3_ADD2_IfcChillerType_type = new entity("IfcChillerType", false, 158, IFC4X3_ADD2_IfcEnergyConversionDeviceType_type); + IFC4X3_ADD2_IfcChimney_type = new entity("IfcChimney", false, 160, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcCircle_type = new entity("IfcCircle", false, 163, IFC4X3_ADD2_IfcConic_type); + IFC4X3_ADD2_IfcCivilElement_type = new entity("IfcCivilElement", false, 166, IFC4X3_ADD2_IfcElement_type); + IFC4X3_ADD2_IfcCoilType_type = new entity("IfcCoilType", false, 175, IFC4X3_ADD2_IfcEnergyConversionDeviceType_type); + IFC4X3_ADD2_IfcColumn_type = new entity("IfcColumn", false, 182, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcCommunicationsApplianceType_type = new entity("IfcCommunicationsApplianceType", false, 186, IFC4X3_ADD2_IfcFlowTerminalType_type); + IFC4X3_ADD2_IfcCompressorType_type = new entity("IfcCompressorType", false, 198, IFC4X3_ADD2_IfcFlowMovingDeviceType_type); + IFC4X3_ADD2_IfcCondenserType_type = new entity("IfcCondenserType", false, 201, IFC4X3_ADD2_IfcEnergyConversionDeviceType_type); + IFC4X3_ADD2_IfcConstructionEquipmentResource_type = new entity("IfcConstructionEquipmentResource", false, 214, IFC4X3_ADD2_IfcConstructionResource_type); + IFC4X3_ADD2_IfcConstructionMaterialResource_type = new entity("IfcConstructionMaterialResource", false, 217, IFC4X3_ADD2_IfcConstructionResource_type); + IFC4X3_ADD2_IfcConstructionProductResource_type = new entity("IfcConstructionProductResource", false, 220, IFC4X3_ADD2_IfcConstructionResource_type); + IFC4X3_ADD2_IfcConveyorSegmentType_type = new entity("IfcConveyorSegmentType", false, 235, IFC4X3_ADD2_IfcFlowSegmentType_type); + IFC4X3_ADD2_IfcCooledBeamType_type = new entity("IfcCooledBeamType", false, 238, IFC4X3_ADD2_IfcEnergyConversionDeviceType_type); + IFC4X3_ADD2_IfcCoolingTowerType_type = new entity("IfcCoolingTowerType", false, 241, IFC4X3_ADD2_IfcEnergyConversionDeviceType_type); + IFC4X3_ADD2_IfcCourse_type = new entity("IfcCourse", false, 253, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcCovering_type = new entity("IfcCovering", false, 256, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcCurtainWall_type = new entity("IfcCurtainWall", false, 267, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcDamperType_type = new entity("IfcDamperType", false, 287, IFC4X3_ADD2_IfcFlowControllerType_type); + IFC4X3_ADD2_IfcDeepFoundation_type = new entity("IfcDeepFoundation", false, 294, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcDiscreteAccessory_type = new entity("IfcDiscreteAccessory", false, 309, IFC4X3_ADD2_IfcElementComponent_type); + IFC4X3_ADD2_IfcDiscreteAccessoryType_type = new entity("IfcDiscreteAccessoryType", false, 310, IFC4X3_ADD2_IfcElementComponentType_type); + IFC4X3_ADD2_IfcDistributionBoardType_type = new entity("IfcDistributionBoardType", false, 313, IFC4X3_ADD2_IfcFlowControllerType_type); + IFC4X3_ADD2_IfcDistributionChamberElementType_type = new entity("IfcDistributionChamberElementType", false, 316, IFC4X3_ADD2_IfcDistributionFlowElementType_type); + IFC4X3_ADD2_IfcDistributionControlElementType_type = new entity("IfcDistributionControlElementType", true, 320, IFC4X3_ADD2_IfcDistributionElementType_type); + IFC4X3_ADD2_IfcDistributionElement_type = new entity("IfcDistributionElement", false, 321, IFC4X3_ADD2_IfcElement_type); + IFC4X3_ADD2_IfcDistributionFlowElement_type = new entity("IfcDistributionFlowElement", false, 323, IFC4X3_ADD2_IfcDistributionElement_type); + IFC4X3_ADD2_IfcDistributionPort_type = new entity("IfcDistributionPort", false, 325, IFC4X3_ADD2_IfcPort_type); + IFC4X3_ADD2_IfcDistributionSystem_type = new entity("IfcDistributionSystem", false, 327, IFC4X3_ADD2_IfcSystem_type); + IFC4X3_ADD2_IfcDoor_type = new entity("IfcDoor", false, 335, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcDuctFittingType_type = new entity("IfcDuctFittingType", false, 347, IFC4X3_ADD2_IfcFlowFittingType_type); + IFC4X3_ADD2_IfcDuctSegmentType_type = new entity("IfcDuctSegmentType", false, 350, IFC4X3_ADD2_IfcFlowSegmentType_type); + IFC4X3_ADD2_IfcDuctSilencerType_type = new entity("IfcDuctSilencerType", false, 353, IFC4X3_ADD2_IfcFlowTreatmentDeviceType_type); + IFC4X3_ADD2_IfcEarthworksCut_type = new entity("IfcEarthworksCut", false, 357, IFC4X3_ADD2_IfcFeatureElementSubtraction_type); + IFC4X3_ADD2_IfcEarthworksElement_type = new entity("IfcEarthworksElement", false, 359, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcEarthworksFill_type = new entity("IfcEarthworksFill", false, 360, IFC4X3_ADD2_IfcEarthworksElement_type); + IFC4X3_ADD2_IfcElectricApplianceType_type = new entity("IfcElectricApplianceType", false, 366, IFC4X3_ADD2_IfcFlowTerminalType_type); + IFC4X3_ADD2_IfcElectricDistributionBoardType_type = new entity("IfcElectricDistributionBoardType", false, 373, IFC4X3_ADD2_IfcFlowControllerType_type); + IFC4X3_ADD2_IfcElectricFlowStorageDeviceType_type = new entity("IfcElectricFlowStorageDeviceType", false, 376, IFC4X3_ADD2_IfcFlowStorageDeviceType_type); + IFC4X3_ADD2_IfcElectricFlowTreatmentDeviceType_type = new entity("IfcElectricFlowTreatmentDeviceType", false, 379, IFC4X3_ADD2_IfcFlowTreatmentDeviceType_type); + IFC4X3_ADD2_IfcElectricGeneratorType_type = new entity("IfcElectricGeneratorType", false, 382, IFC4X3_ADD2_IfcEnergyConversionDeviceType_type); + IFC4X3_ADD2_IfcElectricMotorType_type = new entity("IfcElectricMotorType", false, 385, IFC4X3_ADD2_IfcEnergyConversionDeviceType_type); + IFC4X3_ADD2_IfcElectricTimeControlType_type = new entity("IfcElectricTimeControlType", false, 389, IFC4X3_ADD2_IfcFlowControllerType_type); + IFC4X3_ADD2_IfcEnergyConversionDevice_type = new entity("IfcEnergyConversionDevice", false, 404, IFC4X3_ADD2_IfcDistributionFlowElement_type); + IFC4X3_ADD2_IfcEngine_type = new entity("IfcEngine", false, 407, IFC4X3_ADD2_IfcEnergyConversionDevice_type); + IFC4X3_ADD2_IfcEvaporativeCooler_type = new entity("IfcEvaporativeCooler", false, 410, IFC4X3_ADD2_IfcEnergyConversionDevice_type); + IFC4X3_ADD2_IfcEvaporator_type = new entity("IfcEvaporator", false, 413, IFC4X3_ADD2_IfcEnergyConversionDevice_type); + IFC4X3_ADD2_IfcExternalSpatialElement_type = new entity("IfcExternalSpatialElement", false, 428, IFC4X3_ADD2_IfcExternalSpatialStructureElement_type); + IFC4X3_ADD2_IfcFanType_type = new entity("IfcFanType", false, 447, IFC4X3_ADD2_IfcFlowMovingDeviceType_type); + IFC4X3_ADD2_IfcFilterType_type = new entity("IfcFilterType", false, 460, IFC4X3_ADD2_IfcFlowTreatmentDeviceType_type); + IFC4X3_ADD2_IfcFireSuppressionTerminalType_type = new entity("IfcFireSuppressionTerminalType", false, 463, IFC4X3_ADD2_IfcFlowTerminalType_type); + IFC4X3_ADD2_IfcFlowController_type = new entity("IfcFlowController", false, 466, IFC4X3_ADD2_IfcDistributionFlowElement_type); + IFC4X3_ADD2_IfcFlowFitting_type = new entity("IfcFlowFitting", false, 469, IFC4X3_ADD2_IfcDistributionFlowElement_type); + IFC4X3_ADD2_IfcFlowInstrumentType_type = new entity("IfcFlowInstrumentType", false, 472, IFC4X3_ADD2_IfcDistributionControlElementType_type); + IFC4X3_ADD2_IfcFlowMeter_type = new entity("IfcFlowMeter", false, 474, IFC4X3_ADD2_IfcFlowController_type); + IFC4X3_ADD2_IfcFlowMovingDevice_type = new entity("IfcFlowMovingDevice", false, 477, IFC4X3_ADD2_IfcDistributionFlowElement_type); + IFC4X3_ADD2_IfcFlowSegment_type = new entity("IfcFlowSegment", false, 479, IFC4X3_ADD2_IfcDistributionFlowElement_type); + IFC4X3_ADD2_IfcFlowStorageDevice_type = new entity("IfcFlowStorageDevice", false, 481, IFC4X3_ADD2_IfcDistributionFlowElement_type); + IFC4X3_ADD2_IfcFlowTerminal_type = new entity("IfcFlowTerminal", false, 483, IFC4X3_ADD2_IfcDistributionFlowElement_type); + IFC4X3_ADD2_IfcFlowTreatmentDevice_type = new entity("IfcFlowTreatmentDevice", false, 485, IFC4X3_ADD2_IfcDistributionFlowElement_type); + IFC4X3_ADD2_IfcFooting_type = new entity("IfcFooting", false, 490, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcGeotechnicalAssembly_type = new entity("IfcGeotechnicalAssembly", true, 513, IFC4X3_ADD2_IfcGeotechnicalElement_type); + IFC4X3_ADD2_IfcGrid_type = new entity("IfcGrid", false, 520, IFC4X3_ADD2_IfcPositioningElement_type); + IFC4X3_ADD2_IfcHeatExchanger_type = new entity("IfcHeatExchanger", false, 528, IFC4X3_ADD2_IfcEnergyConversionDevice_type); + IFC4X3_ADD2_IfcHumidifier_type = new entity("IfcHumidifier", false, 533, IFC4X3_ADD2_IfcEnergyConversionDevice_type); + IFC4X3_ADD2_IfcInterceptor_type = new entity("IfcInterceptor", false, 552, IFC4X3_ADD2_IfcFlowTreatmentDevice_type); + IFC4X3_ADD2_IfcJunctionBox_type = new entity("IfcJunctionBox", false, 565, IFC4X3_ADD2_IfcFlowFitting_type); + IFC4X3_ADD2_IfcKerb_type = new entity("IfcKerb", false, 568, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcLamp_type = new entity("IfcLamp", false, 578, IFC4X3_ADD2_IfcFlowTerminal_type); + IFC4X3_ADD2_IfcLightFixture_type = new entity("IfcLightFixture", false, 592, IFC4X3_ADD2_IfcFlowTerminal_type); + IFC4X3_ADD2_IfcLinearPositioningElement_type = new entity("IfcLinearPositioningElement", false, 607, IFC4X3_ADD2_IfcPositioningElement_type); + IFC4X3_ADD2_IfcLiquidTerminal_type = new entity("IfcLiquidTerminal", false, 611, IFC4X3_ADD2_IfcFlowTerminal_type); + IFC4X3_ADD2_IfcMedicalDevice_type = new entity("IfcMedicalDevice", false, 662, IFC4X3_ADD2_IfcFlowTerminal_type); + IFC4X3_ADD2_IfcMember_type = new entity("IfcMember", false, 665, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcMobileTelecommunicationsAppliance_type = new entity("IfcMobileTelecommunicationsAppliance", false, 671, IFC4X3_ADD2_IfcFlowTerminal_type); + IFC4X3_ADD2_IfcMooringDevice_type = new entity("IfcMooringDevice", false, 687, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcMotorConnection_type = new entity("IfcMotorConnection", false, 690, IFC4X3_ADD2_IfcEnergyConversionDevice_type); + IFC4X3_ADD2_IfcNavigationElement_type = new entity("IfcNavigationElement", false, 694, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcOuterBoundaryCurve_type = new entity("IfcOuterBoundaryCurve", false, 719, IFC4X3_ADD2_IfcBoundaryCurve_type); + IFC4X3_ADD2_IfcOutlet_type = new entity("IfcOutlet", false, 720, IFC4X3_ADD2_IfcFlowTerminal_type); + IFC4X3_ADD2_IfcPavement_type = new entity("IfcPavement", false, 727, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcPile_type = new entity("IfcPile", false, 744, IFC4X3_ADD2_IfcDeepFoundation_type); + IFC4X3_ADD2_IfcPipeFitting_type = new entity("IfcPipeFitting", false, 748, IFC4X3_ADD2_IfcFlowFitting_type); + IFC4X3_ADD2_IfcPipeSegment_type = new entity("IfcPipeSegment", false, 751, IFC4X3_ADD2_IfcFlowSegment_type); + IFC4X3_ADD2_IfcPlate_type = new entity("IfcPlate", false, 761, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcProtectiveDevice_type = new entity("IfcProtectiveDevice", false, 835, IFC4X3_ADD2_IfcFlowController_type); + IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnitType_type = new entity("IfcProtectiveDeviceTrippingUnitType", false, 837, IFC4X3_ADD2_IfcDistributionControlElementType_type); + IFC4X3_ADD2_IfcPump_type = new entity("IfcPump", false, 841, IFC4X3_ADD2_IfcFlowMovingDevice_type); + IFC4X3_ADD2_IfcRail_type = new entity("IfcRail", false, 853, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcRailing_type = new entity("IfcRailing", false, 854, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcRamp_type = new entity("IfcRamp", false, 863, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcRampFlight_type = new entity("IfcRampFlight", false, 864, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcRationalBSplineCurveWithKnots_type = new entity("IfcRationalBSplineCurveWithKnots", false, 870, IFC4X3_ADD2_IfcBSplineCurveWithKnots_type); + IFC4X3_ADD2_IfcReinforcedSoil_type = new entity("IfcReinforcedSoil", false, 884, IFC4X3_ADD2_IfcEarthworksElement_type); + IFC4X3_ADD2_IfcReinforcingBar_type = new entity("IfcReinforcingBar", false, 888, IFC4X3_ADD2_IfcReinforcingElement_type); + IFC4X3_ADD2_IfcReinforcingBarType_type = new entity("IfcReinforcingBarType", false, 891, IFC4X3_ADD2_IfcReinforcingElementType_type); + IFC4X3_ADD2_IfcRoof_type = new entity("IfcRoof", false, 971, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcSanitaryTerminal_type = new entity("IfcSanitaryTerminal", false, 980, IFC4X3_ADD2_IfcFlowTerminal_type); + IFC4X3_ADD2_IfcSensorType_type = new entity("IfcSensorType", false, 999, IFC4X3_ADD2_IfcDistributionControlElementType_type); + IFC4X3_ADD2_IfcShadingDevice_type = new entity("IfcShadingDevice", false, 1003, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcSignal_type = new entity("IfcSignal", false, 1013, IFC4X3_ADD2_IfcFlowTerminal_type); + IFC4X3_ADD2_IfcSlab_type = new entity("IfcSlab", false, 1028, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcSolarDevice_type = new entity("IfcSolarDevice", false, 1032, IFC4X3_ADD2_IfcEnergyConversionDevice_type); + IFC4X3_ADD2_IfcSpaceHeater_type = new entity("IfcSpaceHeater", false, 1044, IFC4X3_ADD2_IfcFlowTerminal_type); + IFC4X3_ADD2_IfcStackTerminal_type = new entity("IfcStackTerminal", false, 1064, IFC4X3_ADD2_IfcFlowTerminal_type); + IFC4X3_ADD2_IfcStair_type = new entity("IfcStair", false, 1067, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcStairFlight_type = new entity("IfcStairFlight", false, 1068, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcStructuralAnalysisModel_type = new entity("IfcStructuralAnalysisModel", false, 1078, IFC4X3_ADD2_IfcSystem_type); + IFC4X3_ADD2_IfcStructuralLoadCase_type = new entity("IfcStructuralLoadCase", false, 1091, IFC4X3_ADD2_IfcStructuralLoadGroup_type); + IFC4X3_ADD2_IfcStructuralPlanarAction_type = new entity("IfcStructuralPlanarAction", false, 1104, IFC4X3_ADD2_IfcStructuralSurfaceAction_type); + IFC4X3_ADD2_IfcSwitchingDevice_type = new entity("IfcSwitchingDevice", false, 1146, IFC4X3_ADD2_IfcFlowController_type); + IFC4X3_ADD2_IfcTank_type = new entity("IfcTank", false, 1156, IFC4X3_ADD2_IfcFlowStorageDevice_type); + IFC4X3_ADD2_IfcTrackElement_type = new entity("IfcTrackElement", false, 1218, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcTransformer_type = new entity("IfcTransformer", false, 1221, IFC4X3_ADD2_IfcEnergyConversionDevice_type); + IFC4X3_ADD2_IfcTransportElement_type = new entity("IfcTransportElement", false, 1228, IFC4X3_ADD2_IfcTransportationDevice_type); + IFC4X3_ADD2_IfcTubeBundle_type = new entity("IfcTubeBundle", false, 1238, IFC4X3_ADD2_IfcEnergyConversionDevice_type); + IFC4X3_ADD2_IfcUnitaryControlElementType_type = new entity("IfcUnitaryControlElementType", false, 1247, IFC4X3_ADD2_IfcDistributionControlElementType_type); + IFC4X3_ADD2_IfcUnitaryEquipment_type = new entity("IfcUnitaryEquipment", false, 1249, IFC4X3_ADD2_IfcEnergyConversionDevice_type); + IFC4X3_ADD2_IfcValve_type = new entity("IfcValve", false, 1257, IFC4X3_ADD2_IfcFlowController_type); + IFC4X3_ADD2_IfcWall_type = new entity("IfcWall", false, 1282, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcWallStandardCase_type = new entity("IfcWallStandardCase", false, 1283, IFC4X3_ADD2_IfcWall_type); + IFC4X3_ADD2_IfcWasteTerminal_type = new entity("IfcWasteTerminal", false, 1289, IFC4X3_ADD2_IfcFlowTerminal_type); + IFC4X3_ADD2_IfcWindow_type = new entity("IfcWindow", false, 1294, IFC4X3_ADD2_IfcBuiltElement_type); + { + std::vector items; items.reserve(2); + items.push_back(IFC4X3_ADD2_IfcExternalSpatialElement_type); + items.push_back(IFC4X3_ADD2_IfcSpace_type); + IFC4X3_ADD2_IfcSpaceBoundarySelect_type = new select_type("IfcSpaceBoundarySelect", 1043, items); + } + IFC4X3_ADD2_IfcActuatorType_type = new entity("IfcActuatorType", false, 10, IFC4X3_ADD2_IfcDistributionControlElementType_type); + IFC4X3_ADD2_IfcAirTerminal_type = new entity("IfcAirTerminal", false, 17, IFC4X3_ADD2_IfcFlowTerminal_type); + IFC4X3_ADD2_IfcAirTerminalBox_type = new entity("IfcAirTerminalBox", false, 18, IFC4X3_ADD2_IfcFlowController_type); + IFC4X3_ADD2_IfcAirToAirHeatRecovery_type = new entity("IfcAirToAirHeatRecovery", false, 23, IFC4X3_ADD2_IfcEnergyConversionDevice_type); + IFC4X3_ADD2_IfcAlarmType_type = new entity("IfcAlarmType", false, 27, IFC4X3_ADD2_IfcDistributionControlElementType_type); + IFC4X3_ADD2_IfcAlignment_type = new entity("IfcAlignment", false, 29, IFC4X3_ADD2_IfcLinearPositioningElement_type); + IFC4X3_ADD2_IfcAudioVisualAppliance_type = new entity("IfcAudioVisualAppliance", false, 64, IFC4X3_ADD2_IfcFlowTerminal_type); + IFC4X3_ADD2_IfcBeam_type = new entity("IfcBeam", false, 72, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcBearing_type = new entity("IfcBearing", false, 75, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcBoiler_type = new entity("IfcBoiler", false, 83, IFC4X3_ADD2_IfcEnergyConversionDevice_type); + IFC4X3_ADD2_IfcBorehole_type = new entity("IfcBorehole", false, 91, IFC4X3_ADD2_IfcGeotechnicalAssembly_type); + IFC4X3_ADD2_IfcBuildingElementProxy_type = new entity("IfcBuildingElementProxy", false, 117, IFC4X3_ADD2_IfcBuiltElement_type); + IFC4X3_ADD2_IfcBurner_type = new entity("IfcBurner", false, 127, IFC4X3_ADD2_IfcEnergyConversionDevice_type); + IFC4X3_ADD2_IfcCableCarrierFitting_type = new entity("IfcCableCarrierFitting", false, 130, IFC4X3_ADD2_IfcFlowFitting_type); + IFC4X3_ADD2_IfcCableCarrierSegment_type = new entity("IfcCableCarrierSegment", false, 133, IFC4X3_ADD2_IfcFlowSegment_type); + IFC4X3_ADD2_IfcCableFitting_type = new entity("IfcCableFitting", false, 136, IFC4X3_ADD2_IfcFlowFitting_type); + IFC4X3_ADD2_IfcCableSegment_type = new entity("IfcCableSegment", false, 139, IFC4X3_ADD2_IfcFlowSegment_type); + IFC4X3_ADD2_IfcCaissonFoundation_type = new entity("IfcCaissonFoundation", false, 142, IFC4X3_ADD2_IfcDeepFoundation_type); + IFC4X3_ADD2_IfcChiller_type = new entity("IfcChiller", false, 157, IFC4X3_ADD2_IfcEnergyConversionDevice_type); + IFC4X3_ADD2_IfcCoil_type = new entity("IfcCoil", false, 174, IFC4X3_ADD2_IfcEnergyConversionDevice_type); + IFC4X3_ADD2_IfcCommunicationsAppliance_type = new entity("IfcCommunicationsAppliance", false, 185, IFC4X3_ADD2_IfcFlowTerminal_type); + IFC4X3_ADD2_IfcCompressor_type = new entity("IfcCompressor", false, 197, IFC4X3_ADD2_IfcFlowMovingDevice_type); + IFC4X3_ADD2_IfcCondenser_type = new entity("IfcCondenser", false, 200, IFC4X3_ADD2_IfcEnergyConversionDevice_type); + IFC4X3_ADD2_IfcControllerType_type = new entity("IfcControllerType", false, 230, IFC4X3_ADD2_IfcDistributionControlElementType_type); + IFC4X3_ADD2_IfcConveyorSegment_type = new entity("IfcConveyorSegment", false, 234, IFC4X3_ADD2_IfcFlowSegment_type); + IFC4X3_ADD2_IfcCooledBeam_type = new entity("IfcCooledBeam", false, 237, IFC4X3_ADD2_IfcEnergyConversionDevice_type); + IFC4X3_ADD2_IfcCoolingTower_type = new entity("IfcCoolingTower", false, 240, IFC4X3_ADD2_IfcEnergyConversionDevice_type); + IFC4X3_ADD2_IfcDamper_type = new entity("IfcDamper", false, 286, IFC4X3_ADD2_IfcFlowController_type); + IFC4X3_ADD2_IfcDistributionBoard_type = new entity("IfcDistributionBoard", false, 312, IFC4X3_ADD2_IfcFlowController_type); + IFC4X3_ADD2_IfcDistributionChamberElement_type = new entity("IfcDistributionChamberElement", false, 315, IFC4X3_ADD2_IfcDistributionFlowElement_type); + IFC4X3_ADD2_IfcDistributionCircuit_type = new entity("IfcDistributionCircuit", false, 318, IFC4X3_ADD2_IfcDistributionSystem_type); + IFC4X3_ADD2_IfcDistributionControlElement_type = new entity("IfcDistributionControlElement", false, 319, IFC4X3_ADD2_IfcDistributionElement_type); + IFC4X3_ADD2_IfcDuctFitting_type = new entity("IfcDuctFitting", false, 346, IFC4X3_ADD2_IfcFlowFitting_type); + IFC4X3_ADD2_IfcDuctSegment_type = new entity("IfcDuctSegment", false, 349, IFC4X3_ADD2_IfcFlowSegment_type); + IFC4X3_ADD2_IfcDuctSilencer_type = new entity("IfcDuctSilencer", false, 352, IFC4X3_ADD2_IfcFlowTreatmentDevice_type); + IFC4X3_ADD2_IfcElectricAppliance_type = new entity("IfcElectricAppliance", false, 365, IFC4X3_ADD2_IfcFlowTerminal_type); + IFC4X3_ADD2_IfcElectricDistributionBoard_type = new entity("IfcElectricDistributionBoard", false, 372, IFC4X3_ADD2_IfcFlowController_type); + IFC4X3_ADD2_IfcElectricFlowStorageDevice_type = new entity("IfcElectricFlowStorageDevice", false, 375, IFC4X3_ADD2_IfcFlowStorageDevice_type); + IFC4X3_ADD2_IfcElectricFlowTreatmentDevice_type = new entity("IfcElectricFlowTreatmentDevice", false, 378, IFC4X3_ADD2_IfcFlowTreatmentDevice_type); + IFC4X3_ADD2_IfcElectricGenerator_type = new entity("IfcElectricGenerator", false, 381, IFC4X3_ADD2_IfcEnergyConversionDevice_type); + IFC4X3_ADD2_IfcElectricMotor_type = new entity("IfcElectricMotor", false, 384, IFC4X3_ADD2_IfcEnergyConversionDevice_type); + IFC4X3_ADD2_IfcElectricTimeControl_type = new entity("IfcElectricTimeControl", false, 388, IFC4X3_ADD2_IfcFlowController_type); + IFC4X3_ADD2_IfcFan_type = new entity("IfcFan", false, 446, IFC4X3_ADD2_IfcFlowMovingDevice_type); + IFC4X3_ADD2_IfcFilter_type = new entity("IfcFilter", false, 459, IFC4X3_ADD2_IfcFlowTreatmentDevice_type); + IFC4X3_ADD2_IfcFireSuppressionTerminal_type = new entity("IfcFireSuppressionTerminal", false, 462, IFC4X3_ADD2_IfcFlowTerminal_type); + IFC4X3_ADD2_IfcFlowInstrument_type = new entity("IfcFlowInstrument", false, 471, IFC4X3_ADD2_IfcDistributionControlElement_type); + IFC4X3_ADD2_IfcGeomodel_type = new entity("IfcGeomodel", false, 511, IFC4X3_ADD2_IfcGeotechnicalAssembly_type); + IFC4X3_ADD2_IfcGeoslice_type = new entity("IfcGeoslice", false, 512, IFC4X3_ADD2_IfcGeotechnicalAssembly_type); + IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnit_type = new entity("IfcProtectiveDeviceTrippingUnit", false, 836, IFC4X3_ADD2_IfcDistributionControlElement_type); + IFC4X3_ADD2_IfcSensor_type = new entity("IfcSensor", false, 998, IFC4X3_ADD2_IfcDistributionControlElement_type); + IFC4X3_ADD2_IfcUnitaryControlElement_type = new entity("IfcUnitaryControlElement", false, 1246, IFC4X3_ADD2_IfcDistributionControlElement_type); + IFC4X3_ADD2_IfcActuator_type = new entity("IfcActuator", false, 9, IFC4X3_ADD2_IfcDistributionControlElement_type); + IFC4X3_ADD2_IfcAlarm_type = new entity("IfcAlarm", false, 26, IFC4X3_ADD2_IfcDistributionControlElement_type); + IFC4X3_ADD2_IfcController_type = new entity("IfcController", false, 229, IFC4X3_ADD2_IfcDistributionControlElement_type); + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcActionRequestTypeEnum_type), true)); + attributes.push_back(new attribute("Status", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("LongDescription", new named_type(IFC4X3_ADD2_IfcText_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcActionRequest_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("TheActor", new named_type(IFC4X3_ADD2_IfcActorSelect_type), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcActor_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Role", new named_type(IFC4X3_ADD2_IfcRoleEnum_type), false)); + attributes.push_back(new attribute("UserDefinedRole", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcActorRole_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcActuatorTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcActuator_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcActuatorTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcActuatorType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Purpose", new named_type(IFC4X3_ADD2_IfcAddressTypeEnum_type), true)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("UserDefinedPurpose", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAddress_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcAdvancedBrep_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Voids", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcClosedShell_type)), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAdvancedBrepWithVoids_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAdvancedFace_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcAirTerminalTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAirTerminal_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcAirTerminalBoxTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAirTerminalBox_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcAirTerminalBoxTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAirTerminalBoxType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcAirTerminalTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAirTerminalType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcAirToAirHeatRecoveryTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAirToAirHeatRecovery_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcAirToAirHeatRecoveryTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAirToAirHeatRecoveryType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcAlarmTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAlarm_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcAlarmTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAlarmType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcAlignmentTypeEnum_type), true)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAlignment_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("RailHeadDistance", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAlignmentCant_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(7); + attributes.push_back(new attribute("StartDistAlong", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + attributes.push_back(new attribute("HorizontalLength", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), false)); + attributes.push_back(new attribute("StartCantLeft", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + attributes.push_back(new attribute("EndCantLeft", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("StartCantRight", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + attributes.push_back(new attribute("EndCantRight", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcAlignmentCantSegmentTypeEnum_type), false)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAlignmentCantSegment_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAlignmentHorizontal_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(7); + attributes.push_back(new attribute("StartPoint", new named_type(IFC4X3_ADD2_IfcCartesianPoint_type), false)); + attributes.push_back(new attribute("StartDirection", new named_type(IFC4X3_ADD2_IfcPlaneAngleMeasure_type), false)); + attributes.push_back(new attribute("StartRadiusOfCurvature", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + attributes.push_back(new attribute("EndRadiusOfCurvature", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + attributes.push_back(new attribute("SegmentLength", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), false)); + attributes.push_back(new attribute("GravityCenterLineHeight", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcAlignmentHorizontalSegmentTypeEnum_type), false)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAlignmentHorizontalSegment_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("StartTag", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("EndTag", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAlignmentParameterSegment_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("DesignParameters", new named_type(IFC4X3_ADD2_IfcAlignmentParameterSegment_type), false)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAlignmentSegment_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAlignmentVertical_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(7); + attributes.push_back(new attribute("StartDistAlong", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + attributes.push_back(new attribute("HorizontalLength", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), false)); + attributes.push_back(new attribute("StartHeight", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + attributes.push_back(new attribute("StartGradient", new named_type(IFC4X3_ADD2_IfcRatioMeasure_type), false)); + attributes.push_back(new attribute("EndGradient", new named_type(IFC4X3_ADD2_IfcRatioMeasure_type), false)); + attributes.push_back(new attribute("RadiusOfCurvature", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcAlignmentVerticalSegmentTypeEnum_type), false)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAlignmentVerticalSegment_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcAnnotationTypeEnum_type), true)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAnnotation_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("OuterBoundary", new named_type(IFC4X3_ADD2_IfcCurve_type), false)); + attributes.push_back(new attribute("InnerBoundaries", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcCurve_type)), true)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAnnotationFillArea_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("ApplicationDeveloper", new named_type(IFC4X3_ADD2_IfcOrganization_type), false)); + attributes.push_back(new attribute("Version", new named_type(IFC4X3_ADD2_IfcLabel_type), false)); + attributes.push_back(new attribute("ApplicationFullName", new named_type(IFC4X3_ADD2_IfcLabel_type), false)); + attributes.push_back(new attribute("ApplicationIdentifier", new named_type(IFC4X3_ADD2_IfcIdentifier_type), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcApplication_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(10); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("AppliedValue", new named_type(IFC4X3_ADD2_IfcAppliedValueSelect_type), true)); + attributes.push_back(new attribute("UnitBasis", new named_type(IFC4X3_ADD2_IfcMeasureWithUnit_type), true)); + attributes.push_back(new attribute("ApplicableDate", new named_type(IFC4X3_ADD2_IfcDate_type), true)); + attributes.push_back(new attribute("FixedUntilDate", new named_type(IFC4X3_ADD2_IfcDate_type), true)); + attributes.push_back(new attribute("Category", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Condition", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("ArithmeticOperator", new named_type(IFC4X3_ADD2_IfcArithmeticOperatorEnum_type), true)); + attributes.push_back(new attribute("Components", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcAppliedValue_type)), true)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAppliedValue_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(9); + attributes.push_back(new attribute("Identifier", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("TimeOfApproval", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + attributes.push_back(new attribute("Status", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Level", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Qualifier", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("RequestingApproval", new named_type(IFC4X3_ADD2_IfcActorSelect_type), true)); + attributes.push_back(new attribute("GivingApproval", new named_type(IFC4X3_ADD2_IfcActorSelect_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcApproval_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatingApproval", new named_type(IFC4X3_ADD2_IfcApproval_type), false)); + attributes.push_back(new attribute("RelatedApprovals", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcApproval_type)), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcApprovalRelationship_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("OuterCurve", new named_type(IFC4X3_ADD2_IfcCurve_type), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcArbitraryClosedProfileDef_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Curve", new named_type(IFC4X3_ADD2_IfcBoundedCurve_type), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcArbitraryOpenProfileDef_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("InnerCurves", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcCurve_type)), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcArbitraryProfileDefWithVoids_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(9); + attributes.push_back(new attribute("Identification", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + attributes.push_back(new attribute("OriginalValue", new named_type(IFC4X3_ADD2_IfcCostValue_type), true)); + attributes.push_back(new attribute("CurrentValue", new named_type(IFC4X3_ADD2_IfcCostValue_type), true)); + attributes.push_back(new attribute("TotalReplacementCost", new named_type(IFC4X3_ADD2_IfcCostValue_type), true)); + attributes.push_back(new attribute("Owner", new named_type(IFC4X3_ADD2_IfcActorSelect_type), true)); + attributes.push_back(new attribute("User", new named_type(IFC4X3_ADD2_IfcActorSelect_type), true)); + attributes.push_back(new attribute("ResponsiblePerson", new named_type(IFC4X3_ADD2_IfcPerson_type), true)); + attributes.push_back(new attribute("IncorporationDate", new named_type(IFC4X3_ADD2_IfcDate_type), true)); + attributes.push_back(new attribute("DepreciatedValue", new named_type(IFC4X3_ADD2_IfcCostValue_type), true)); + std::vector derived; derived.reserve(14); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAsset_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(12); + attributes.push_back(new attribute("BottomFlangeWidth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("OverallDepth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("WebThickness", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("BottomFlangeThickness", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("BottomFlangeFilletRadius", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), true)); + attributes.push_back(new attribute("TopFlangeWidth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("TopFlangeThickness", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("TopFlangeFilletRadius", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), true)); + attributes.push_back(new attribute("BottomFlangeEdgeRadius", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), true)); + attributes.push_back(new attribute("BottomFlangeSlope", new named_type(IFC4X3_ADD2_IfcPlaneAngleMeasure_type), true)); + attributes.push_back(new attribute("TopFlangeEdgeRadius", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), true)); + attributes.push_back(new attribute("TopFlangeSlope", new named_type(IFC4X3_ADD2_IfcPlaneAngleMeasure_type), true)); + std::vector derived; derived.reserve(15); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAsymmetricIShapeProfileDef_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcAudioVisualApplianceTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAudioVisualAppliance_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcAudioVisualApplianceTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAudioVisualApplianceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Axis", new named_type(IFC4X3_ADD2_IfcDirection_type), true)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAxis1Placement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("RefDirection", new named_type(IFC4X3_ADD2_IfcDirection_type), true)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAxis2Placement2D_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Axis", new named_type(IFC4X3_ADD2_IfcDirection_type), true)); + attributes.push_back(new attribute("RefDirection", new named_type(IFC4X3_ADD2_IfcDirection_type), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAxis2Placement3D_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Axis", new named_type(IFC4X3_ADD2_IfcDirection_type), true)); + attributes.push_back(new attribute("RefDirection", new named_type(IFC4X3_ADD2_IfcDirection_type), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcAxis2PlacementLinear_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("Degree", new named_type(IFC4X3_ADD2_IfcInteger_type), false)); + attributes.push_back(new attribute("ControlPointsList", new aggregation_type(aggregation_type::list_type, 2, -1, new named_type(IFC4X3_ADD2_IfcCartesianPoint_type)), false)); + attributes.push_back(new attribute("CurveForm", new named_type(IFC4X3_ADD2_IfcBSplineCurveForm_type), false)); + attributes.push_back(new attribute("ClosedCurve", new named_type(IFC4X3_ADD2_IfcLogical_type), false)); + attributes.push_back(new attribute("SelfIntersect", new named_type(IFC4X3_ADD2_IfcLogical_type), false)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBSplineCurve_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("KnotMultiplicities", new aggregation_type(aggregation_type::list_type, 2, -1, new named_type(IFC4X3_ADD2_IfcInteger_type)), false)); + attributes.push_back(new attribute("Knots", new aggregation_type(aggregation_type::list_type, 2, -1, new named_type(IFC4X3_ADD2_IfcParameterValue_type)), false)); + attributes.push_back(new attribute("KnotSpec", new named_type(IFC4X3_ADD2_IfcKnotType_type), false)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBSplineCurveWithKnots_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(7); + attributes.push_back(new attribute("UDegree", new named_type(IFC4X3_ADD2_IfcInteger_type), false)); + attributes.push_back(new attribute("VDegree", new named_type(IFC4X3_ADD2_IfcInteger_type), false)); + attributes.push_back(new attribute("ControlPointsList", new aggregation_type(aggregation_type::list_type, 2, -1, new aggregation_type(aggregation_type::list_type, 2, -1, new named_type(IFC4X3_ADD2_IfcCartesianPoint_type))), false)); + attributes.push_back(new attribute("SurfaceForm", new named_type(IFC4X3_ADD2_IfcBSplineSurfaceForm_type), false)); + attributes.push_back(new attribute("UClosed", new named_type(IFC4X3_ADD2_IfcLogical_type), false)); + attributes.push_back(new attribute("VClosed", new named_type(IFC4X3_ADD2_IfcLogical_type), false)); + attributes.push_back(new attribute("SelfIntersect", new named_type(IFC4X3_ADD2_IfcLogical_type), false)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBSplineSurface_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("UMultiplicities", new aggregation_type(aggregation_type::list_type, 2, -1, new named_type(IFC4X3_ADD2_IfcInteger_type)), false)); + attributes.push_back(new attribute("VMultiplicities", new aggregation_type(aggregation_type::list_type, 2, -1, new named_type(IFC4X3_ADD2_IfcInteger_type)), false)); + attributes.push_back(new attribute("UKnots", new aggregation_type(aggregation_type::list_type, 2, -1, new named_type(IFC4X3_ADD2_IfcParameterValue_type)), false)); + attributes.push_back(new attribute("VKnots", new aggregation_type(aggregation_type::list_type, 2, -1, new named_type(IFC4X3_ADD2_IfcParameterValue_type)), false)); + attributes.push_back(new attribute("KnotSpec", new named_type(IFC4X3_ADD2_IfcKnotType_type), false)); + std::vector derived; derived.reserve(12); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBSplineSurfaceWithKnots_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcBeamTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBeam_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcBeamTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBeamType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcBearingTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBearing_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcBearingTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBearingType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RasterFormat", new named_type(IFC4X3_ADD2_IfcIdentifier_type), false)); + attributes.push_back(new attribute("RasterCode", new named_type(IFC4X3_ADD2_IfcBinary_type), false)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBlobTexture_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("XLength", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("YLength", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("ZLength", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBlock_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcBoilerTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBoiler_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcBoilerTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBoilerType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBooleanClippingResult_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Operator", new named_type(IFC4X3_ADD2_IfcBooleanOperator_type), false)); + attributes.push_back(new attribute("FirstOperand", new named_type(IFC4X3_ADD2_IfcBooleanOperand_type), false)); + attributes.push_back(new attribute("SecondOperand", new named_type(IFC4X3_ADD2_IfcBooleanOperand_type), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBooleanResult_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBorehole_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcBoundaryCondition_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBoundaryCurve_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(6); + attributes.push_back(new attribute("TranslationalStiffnessByLengthX", new named_type(IFC4X3_ADD2_IfcModulusOfTranslationalSubgradeReactionSelect_type), true)); + attributes.push_back(new attribute("TranslationalStiffnessByLengthY", new named_type(IFC4X3_ADD2_IfcModulusOfTranslationalSubgradeReactionSelect_type), true)); + attributes.push_back(new attribute("TranslationalStiffnessByLengthZ", new named_type(IFC4X3_ADD2_IfcModulusOfTranslationalSubgradeReactionSelect_type), true)); + attributes.push_back(new attribute("RotationalStiffnessByLengthX", new named_type(IFC4X3_ADD2_IfcModulusOfRotationalSubgradeReactionSelect_type), true)); + attributes.push_back(new attribute("RotationalStiffnessByLengthY", new named_type(IFC4X3_ADD2_IfcModulusOfRotationalSubgradeReactionSelect_type), true)); + attributes.push_back(new attribute("RotationalStiffnessByLengthZ", new named_type(IFC4X3_ADD2_IfcModulusOfRotationalSubgradeReactionSelect_type), true)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBoundaryEdgeCondition_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("TranslationalStiffnessByAreaX", new named_type(IFC4X3_ADD2_IfcModulusOfSubgradeReactionSelect_type), true)); + attributes.push_back(new attribute("TranslationalStiffnessByAreaY", new named_type(IFC4X3_ADD2_IfcModulusOfSubgradeReactionSelect_type), true)); + attributes.push_back(new attribute("TranslationalStiffnessByAreaZ", new named_type(IFC4X3_ADD2_IfcModulusOfSubgradeReactionSelect_type), true)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBoundaryFaceCondition_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(6); + attributes.push_back(new attribute("TranslationalStiffnessX", new named_type(IFC4X3_ADD2_IfcTranslationalStiffnessSelect_type), true)); + attributes.push_back(new attribute("TranslationalStiffnessY", new named_type(IFC4X3_ADD2_IfcTranslationalStiffnessSelect_type), true)); + attributes.push_back(new attribute("TranslationalStiffnessZ", new named_type(IFC4X3_ADD2_IfcTranslationalStiffnessSelect_type), true)); + attributes.push_back(new attribute("RotationalStiffnessX", new named_type(IFC4X3_ADD2_IfcRotationalStiffnessSelect_type), true)); + attributes.push_back(new attribute("RotationalStiffnessY", new named_type(IFC4X3_ADD2_IfcRotationalStiffnessSelect_type), true)); + attributes.push_back(new attribute("RotationalStiffnessZ", new named_type(IFC4X3_ADD2_IfcRotationalStiffnessSelect_type), true)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBoundaryNodeCondition_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("WarpingStiffness", new named_type(IFC4X3_ADD2_IfcWarpingStiffnessSelect_type), true)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBoundaryNodeConditionWarping_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(0); + + IFC4X3_ADD2_IfcBoundedCurve_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(0); + + IFC4X3_ADD2_IfcBoundedSurface_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("Corner", new named_type(IFC4X3_ADD2_IfcCartesianPoint_type), false)); + attributes.push_back(new attribute("XDim", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("YDim", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("ZDim", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBoundingBox_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Enclosure", new named_type(IFC4X3_ADD2_IfcBoundingBox_type), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBoxedHalfSpace_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcBridgeTypeEnum_type), true)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBridge_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcBridgePartTypeEnum_type), true)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBridgePart_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("ElevationOfRefHeight", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("ElevationOfTerrain", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("BuildingAddress", new named_type(IFC4X3_ADD2_IfcPostalAddress_type), true)); + std::vector derived; derived.reserve(12); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBuilding_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcBuildingElementPartTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBuildingElementPart_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcBuildingElementPartTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBuildingElementPartType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcBuildingElementProxyTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBuildingElementProxy_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcBuildingElementProxyTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBuildingElementProxyType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Elevation", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBuildingStorey_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcBuildingSystemTypeEnum_type), true)); + attributes.push_back(new attribute("LongName", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBuildingSystem_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBuiltElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBuiltElementType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcBuiltSystemTypeEnum_type), true)); + attributes.push_back(new attribute("LongName", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBuiltSystem_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcBurnerTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBurner_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcBurnerTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcBurnerType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("Depth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("Width", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("WallThickness", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("Girth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("InternalFilletRadius", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), true)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCShapeProfileDef_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCableCarrierFittingTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCableCarrierFitting_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCableCarrierFittingTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCableCarrierFittingType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCableCarrierSegmentTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCableCarrierSegment_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCableCarrierSegmentTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCableCarrierSegmentType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCableFittingTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCableFitting_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCableFittingTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCableFittingType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCableSegmentTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCableSegment_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCableSegmentTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCableSegmentType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCaissonFoundationTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCaissonFoundation_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCaissonFoundationTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCaissonFoundationType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Coordinates", new aggregation_type(aggregation_type::list_type, 1, 3, new named_type(IFC4X3_ADD2_IfcLengthMeasure_type)), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcCartesianPoint_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(0); + + IFC4X3_ADD2_IfcCartesianPointList_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("CoordList", new aggregation_type(aggregation_type::list_type, 1, -1, new aggregation_type(aggregation_type::list_type, 2, 2, new named_type(IFC4X3_ADD2_IfcLengthMeasure_type))), false)); + attributes.push_back(new attribute("TagList", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcLabel_type)), true)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCartesianPointList2D_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("CoordList", new aggregation_type(aggregation_type::list_type, 1, -1, new aggregation_type(aggregation_type::list_type, 3, 3, new named_type(IFC4X3_ADD2_IfcLengthMeasure_type))), false)); + attributes.push_back(new attribute("TagList", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcLabel_type)), true)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCartesianPointList3D_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("Axis1", new named_type(IFC4X3_ADD2_IfcDirection_type), true)); + attributes.push_back(new attribute("Axis2", new named_type(IFC4X3_ADD2_IfcDirection_type), true)); + attributes.push_back(new attribute("LocalOrigin", new named_type(IFC4X3_ADD2_IfcCartesianPoint_type), false)); + attributes.push_back(new attribute("Scale", new named_type(IFC4X3_ADD2_IfcReal_type), true)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCartesianTransformationOperator_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCartesianTransformationOperator2D_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Scale2", new named_type(IFC4X3_ADD2_IfcReal_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCartesianTransformationOperator2DnonUniform_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Axis3", new named_type(IFC4X3_ADD2_IfcDirection_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCartesianTransformationOperator3D_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Scale2", new named_type(IFC4X3_ADD2_IfcReal_type), true)); + attributes.push_back(new attribute("Scale3", new named_type(IFC4X3_ADD2_IfcReal_type), true)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCartesianTransformationOperator3DnonUniform_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Thickness", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCenterLineProfileDef_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcChillerTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcChiller_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcChillerTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcChillerType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcChimneyTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcChimney_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcChimneyTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcChimneyType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Radius", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCircle_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("WallThickness", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCircleHollowProfileDef_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Radius", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCircleProfileDef_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCivilElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCivilElementType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(7); + attributes.push_back(new attribute("Source", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Edition", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("EditionDate", new named_type(IFC4X3_ADD2_IfcDate_type), true)); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), false)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("Specification", new named_type(IFC4X3_ADD2_IfcURIReference_type), true)); + attributes.push_back(new attribute("ReferenceTokens", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcIdentifier_type)), true)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcClassification_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("ReferencedSource", new named_type(IFC4X3_ADD2_IfcClassificationReferenceSelect_type), true)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("Sort", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcClassificationReference_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcClosedShell_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("ClothoidConstant", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcClothoid_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCoilTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCoil_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCoilTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCoilType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Red", new named_type(IFC4X3_ADD2_IfcNormalisedRatioMeasure_type), false)); + attributes.push_back(new attribute("Green", new named_type(IFC4X3_ADD2_IfcNormalisedRatioMeasure_type), false)); + attributes.push_back(new attribute("Blue", new named_type(IFC4X3_ADD2_IfcNormalisedRatioMeasure_type), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcColourRgb_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("ColourList", new aggregation_type(aggregation_type::list_type, 1, -1, new aggregation_type(aggregation_type::list_type, 3, 3, new named_type(IFC4X3_ADD2_IfcNormalisedRatioMeasure_type))), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcColourRgbList_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcColourSpecification_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcColumnTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcColumn_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcColumnTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcColumnType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCommunicationsApplianceTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCommunicationsAppliance_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCommunicationsApplianceTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCommunicationsApplianceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("UsageName", new named_type(IFC4X3_ADD2_IfcIdentifier_type), false)); + attributes.push_back(new attribute("HasProperties", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcProperty_type)), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcComplexProperty_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("UsageName", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("TemplateType", new named_type(IFC4X3_ADD2_IfcComplexPropertyTemplateTypeEnum_type), true)); + attributes.push_back(new attribute("HasPropertyTemplates", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcPropertyTemplate_type)), true)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcComplexPropertyTemplate_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Segments", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcSegment_type)), false)); + attributes.push_back(new attribute("SelfIntersect", new named_type(IFC4X3_ADD2_IfcLogical_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCompositeCurve_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCompositeCurveOnSurface_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("SameSense", new named_type(IFC4X3_ADD2_IfcBoolean_type), false)); + attributes.push_back(new attribute("ParentCurve", new named_type(IFC4X3_ADD2_IfcCurve_type), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCompositeCurveSegment_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Profiles", new aggregation_type(aggregation_type::set_type, 2, -1, new named_type(IFC4X3_ADD2_IfcProfileDef_type)), false)); + attributes.push_back(new attribute("Label", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCompositeProfileDef_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCompressorTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCompressor_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCompressorTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCompressorType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCondenserTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCondenser_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCondenserTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCondenserType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Position", new named_type(IFC4X3_ADD2_IfcAxis2Placement_type), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcConic_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("CfsFaces", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcFace_type)), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcConnectedFaceSet_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("CurveOnRelatingElement", new named_type(IFC4X3_ADD2_IfcCurveOrEdgeCurve_type), false)); + attributes.push_back(new attribute("CurveOnRelatedElement", new named_type(IFC4X3_ADD2_IfcCurveOrEdgeCurve_type), true)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcConnectionCurveGeometry_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(0); + + IFC4X3_ADD2_IfcConnectionGeometry_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("EccentricityInX", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("EccentricityInY", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("EccentricityInZ", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcConnectionPointEccentricity_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("PointOnRelatingElement", new named_type(IFC4X3_ADD2_IfcPointOrVertexPoint_type), false)); + attributes.push_back(new attribute("PointOnRelatedElement", new named_type(IFC4X3_ADD2_IfcPointOrVertexPoint_type), true)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcConnectionPointGeometry_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("SurfaceOnRelatingElement", new named_type(IFC4X3_ADD2_IfcSurfaceOrFaceSurface_type), false)); + attributes.push_back(new attribute("SurfaceOnRelatedElement", new named_type(IFC4X3_ADD2_IfcSurfaceOrFaceSurface_type), true)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcConnectionSurfaceGeometry_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("VolumeOnRelatingElement", new named_type(IFC4X3_ADD2_IfcSolidOrShell_type), false)); + attributes.push_back(new attribute("VolumeOnRelatedElement", new named_type(IFC4X3_ADD2_IfcSolidOrShell_type), true)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcConnectionVolumeGeometry_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(7); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), false)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("ConstraintGrade", new named_type(IFC4X3_ADD2_IfcConstraintEnum_type), false)); + attributes.push_back(new attribute("ConstraintSource", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("CreatingActor", new named_type(IFC4X3_ADD2_IfcActorSelect_type), true)); + attributes.push_back(new attribute("CreationTime", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + attributes.push_back(new attribute("UserDefinedGrade", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcConstraint_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcConstructionEquipmentResourceTypeEnum_type), true)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcConstructionEquipmentResource_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcConstructionEquipmentResourceTypeEnum_type), false)); + std::vector derived; derived.reserve(12); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcConstructionEquipmentResourceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcConstructionMaterialResourceTypeEnum_type), true)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcConstructionMaterialResource_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcConstructionMaterialResourceTypeEnum_type), false)); + std::vector derived; derived.reserve(12); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcConstructionMaterialResourceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcConstructionProductResourceTypeEnum_type), true)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcConstructionProductResource_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcConstructionProductResourceTypeEnum_type), false)); + std::vector derived; derived.reserve(12); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcConstructionProductResourceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Usage", new named_type(IFC4X3_ADD2_IfcResourceTime_type), true)); + attributes.push_back(new attribute("BaseCosts", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcAppliedValue_type)), true)); + attributes.push_back(new attribute("BaseQuantity", new named_type(IFC4X3_ADD2_IfcPhysicalQuantity_type), true)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcConstructionResource_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("BaseCosts", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcAppliedValue_type)), true)); + attributes.push_back(new attribute("BaseQuantity", new named_type(IFC4X3_ADD2_IfcPhysicalQuantity_type), true)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcConstructionResourceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("ObjectType", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("LongName", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Phase", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("RepresentationContexts", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcRepresentationContext_type)), true)); + attributes.push_back(new attribute("UnitsInContext", new named_type(IFC4X3_ADD2_IfcUnitAssignment_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcContext_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcContextDependentUnit_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Identification", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcControl_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcControllerTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcController_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcControllerTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcControllerType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), false)); + attributes.push_back(new attribute("ConversionFactor", new named_type(IFC4X3_ADD2_IfcMeasureWithUnit_type), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcConversionBasedUnit_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("ConversionOffset", new named_type(IFC4X3_ADD2_IfcReal_type), false)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcConversionBasedUnitWithOffset_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcConveyorSegmentTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcConveyorSegment_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcConveyorSegmentTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcConveyorSegmentType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCooledBeamTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCooledBeam_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCooledBeamTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCooledBeamType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCoolingTowerTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCoolingTower_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCoolingTowerTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCoolingTowerType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("SourceCRS", new named_type(IFC4X3_ADD2_IfcCoordinateReferenceSystemSelect_type), false)); + attributes.push_back(new attribute("TargetCRS", new named_type(IFC4X3_ADD2_IfcCoordinateReferenceSystem_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCoordinateOperation_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("GeodeticDatum", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCoordinateReferenceSystem_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("CosineTerm", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + attributes.push_back(new attribute("ConstantTerm", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCosineSpiral_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCostItemTypeEnum_type), true)); + attributes.push_back(new attribute("CostValues", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcCostValue_type)), true)); + attributes.push_back(new attribute("CostQuantities", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcPhysicalQuantity_type)), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCostItem_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCostScheduleTypeEnum_type), true)); + attributes.push_back(new attribute("Status", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("SubmittedOn", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + attributes.push_back(new attribute("UpdateDate", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCostSchedule_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCostValue_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCourseTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCourse_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCourseTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCourseType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCoveringTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCovering_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCoveringTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCoveringType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCrewResourceTypeEnum_type), true)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCrewResource_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCrewResourceTypeEnum_type), false)); + std::vector derived; derived.reserve(12); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCrewResourceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Position", new named_type(IFC4X3_ADD2_IfcAxis2Placement3D_type), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcCsgPrimitive3D_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("TreeRootExpression", new named_type(IFC4X3_ADD2_IfcCsgSelect_type), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcCsgSolid_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("RelatingMonetaryUnit", new named_type(IFC4X3_ADD2_IfcMonetaryUnit_type), false)); + attributes.push_back(new attribute("RelatedMonetaryUnit", new named_type(IFC4X3_ADD2_IfcMonetaryUnit_type), false)); + attributes.push_back(new attribute("ExchangeRate", new named_type(IFC4X3_ADD2_IfcPositiveRatioMeasure_type), false)); + attributes.push_back(new attribute("RateDateTime", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + attributes.push_back(new attribute("RateSource", new named_type(IFC4X3_ADD2_IfcLibraryInformation_type), true)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCurrencyRelationship_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCurtainWallTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCurtainWall_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcCurtainWallTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCurtainWallType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(0); + + IFC4X3_ADD2_IfcCurve_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("BasisSurface", new named_type(IFC4X3_ADD2_IfcPlane_type), false)); + attributes.push_back(new attribute("OuterBoundary", new named_type(IFC4X3_ADD2_IfcCurve_type), false)); + attributes.push_back(new attribute("InnerBoundaries", new aggregation_type(aggregation_type::set_type, 0, -1, new named_type(IFC4X3_ADD2_IfcCurve_type)), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCurveBoundedPlane_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("BasisSurface", new named_type(IFC4X3_ADD2_IfcSurface_type), false)); + attributes.push_back(new attribute("Boundaries", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcBoundaryCurve_type)), false)); + attributes.push_back(new attribute("ImplicitOuter", new named_type(IFC4X3_ADD2_IfcBoolean_type), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCurveBoundedSurface_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("Placement", new named_type(IFC4X3_ADD2_IfcPlacement_type), false)); + attributes.push_back(new attribute("SegmentStart", new named_type(IFC4X3_ADD2_IfcCurveMeasureSelect_type), false)); + attributes.push_back(new attribute("SegmentLength", new named_type(IFC4X3_ADD2_IfcCurveMeasureSelect_type), false)); + attributes.push_back(new attribute("ParentCurve", new named_type(IFC4X3_ADD2_IfcCurve_type), false)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCurveSegment_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("CurveFont", new named_type(IFC4X3_ADD2_IfcCurveFontOrScaledCurveFontSelect_type), true)); + attributes.push_back(new attribute("CurveWidth", new named_type(IFC4X3_ADD2_IfcSizeSelect_type), true)); + attributes.push_back(new attribute("CurveColour", new named_type(IFC4X3_ADD2_IfcColour_type), true)); + attributes.push_back(new attribute("ModelOrDraughting", new named_type(IFC4X3_ADD2_IfcBoolean_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCurveStyle_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("PatternList", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcCurveStyleFontPattern_type)), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCurveStyleFont_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("CurveStyleFont", new named_type(IFC4X3_ADD2_IfcCurveStyleFontSelect_type), false)); + attributes.push_back(new attribute("CurveFontScaling", new named_type(IFC4X3_ADD2_IfcPositiveRatioMeasure_type), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCurveStyleFontAndScaling_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("VisibleSegmentLength", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + attributes.push_back(new attribute("InvisibleSegmentLength", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCurveStyleFontPattern_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Radius", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcCylindricalSurface_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcDamperTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDamper_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcDamperTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDamperType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDeepFoundation_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDeepFoundationType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("ParentProfile", new named_type(IFC4X3_ADD2_IfcProfileDef_type), false)); + attributes.push_back(new attribute("Operator", new named_type(IFC4X3_ADD2_IfcCartesianTransformationOperator2D_type), false)); + attributes.push_back(new attribute("Label", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDerivedProfileDef_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("Elements", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcDerivedUnitElement_type)), false)); + attributes.push_back(new attribute("UnitType", new named_type(IFC4X3_ADD2_IfcDerivedUnitEnum_type), false)); + attributes.push_back(new attribute("UserDefinedType", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDerivedUnit_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Unit", new named_type(IFC4X3_ADD2_IfcNamedUnit_type), false)); + attributes.push_back(new attribute("Exponent", new simple_type(simple_type::integer_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDerivedUnitElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(7); + attributes.push_back(new attribute("LengthExponent", new simple_type(simple_type::integer_type), false)); + attributes.push_back(new attribute("MassExponent", new simple_type(simple_type::integer_type), false)); + attributes.push_back(new attribute("TimeExponent", new simple_type(simple_type::integer_type), false)); + attributes.push_back(new attribute("ElectricCurrentExponent", new simple_type(simple_type::integer_type), false)); + attributes.push_back(new attribute("ThermodynamicTemperatureExponent", new simple_type(simple_type::integer_type), false)); + attributes.push_back(new attribute("AmountOfSubstanceExponent", new simple_type(simple_type::integer_type), false)); + attributes.push_back(new attribute("LuminousIntensityExponent", new simple_type(simple_type::integer_type), false)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDimensionalExponents_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("DirectionRatios", new aggregation_type(aggregation_type::list_type, 2, 3, new named_type(IFC4X3_ADD2_IfcReal_type)), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcDirection_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Directrix", new named_type(IFC4X3_ADD2_IfcCurve_type), false)); + attributes.push_back(new attribute("StartParam", new named_type(IFC4X3_ADD2_IfcCurveMeasureSelect_type), true)); + attributes.push_back(new attribute("EndParam", new named_type(IFC4X3_ADD2_IfcCurveMeasureSelect_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDirectrixCurveSweptAreaSolid_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDirectrixDerivedReferenceSweptAreaSolid_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcDiscreteAccessoryTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDiscreteAccessory_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcDiscreteAccessoryTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDiscreteAccessoryType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcDistributionBoardTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDistributionBoard_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcDistributionBoardTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDistributionBoardType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcDistributionChamberElementTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDistributionChamberElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcDistributionChamberElementTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDistributionChamberElementType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDistributionCircuit_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDistributionControlElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDistributionControlElementType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDistributionElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDistributionElementType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDistributionFlowElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDistributionFlowElementType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("FlowDirection", new named_type(IFC4X3_ADD2_IfcFlowDirectionEnum_type), true)); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcDistributionPortTypeEnum_type), true)); + attributes.push_back(new attribute("SystemType", new named_type(IFC4X3_ADD2_IfcDistributionSystemEnum_type), true)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDistributionPort_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("LongName", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcDistributionSystemEnum_type), true)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDistributionSystem_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(17); + attributes.push_back(new attribute("Identification", new named_type(IFC4X3_ADD2_IfcIdentifier_type), false)); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), false)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("Location", new named_type(IFC4X3_ADD2_IfcURIReference_type), true)); + attributes.push_back(new attribute("Purpose", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("IntendedUse", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("Scope", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("Revision", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("DocumentOwner", new named_type(IFC4X3_ADD2_IfcActorSelect_type), true)); + attributes.push_back(new attribute("Editors", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcActorSelect_type)), true)); + attributes.push_back(new attribute("CreationTime", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + attributes.push_back(new attribute("LastRevisionTime", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + attributes.push_back(new attribute("ElectronicFormat", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + attributes.push_back(new attribute("ValidFrom", new named_type(IFC4X3_ADD2_IfcDate_type), true)); + attributes.push_back(new attribute("ValidUntil", new named_type(IFC4X3_ADD2_IfcDate_type), true)); + attributes.push_back(new attribute("Confidentiality", new named_type(IFC4X3_ADD2_IfcDocumentConfidentialityEnum_type), true)); + attributes.push_back(new attribute("Status", new named_type(IFC4X3_ADD2_IfcDocumentStatusEnum_type), true)); + std::vector derived; derived.reserve(17); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDocumentInformation_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("RelatingDocument", new named_type(IFC4X3_ADD2_IfcDocumentInformation_type), false)); + attributes.push_back(new attribute("RelatedDocuments", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcDocumentInformation_type)), false)); + attributes.push_back(new attribute("RelationshipType", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDocumentInformationRelationship_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("ReferencedDocument", new named_type(IFC4X3_ADD2_IfcDocumentInformation_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDocumentReference_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("OverallHeight", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("OverallWidth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcDoorTypeEnum_type), true)); + attributes.push_back(new attribute("OperationType", new named_type(IFC4X3_ADD2_IfcDoorTypeOperationEnum_type), true)); + attributes.push_back(new attribute("UserDefinedOperationType", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(13); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDoor_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(13); + attributes.push_back(new attribute("LiningDepth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("LiningThickness", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), true)); + attributes.push_back(new attribute("ThresholdDepth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("ThresholdThickness", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), true)); + attributes.push_back(new attribute("TransomThickness", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), true)); + attributes.push_back(new attribute("TransomOffset", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("LiningOffset", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("ThresholdOffset", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("CasingThickness", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("CasingDepth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("ShapeAspectStyle", new named_type(IFC4X3_ADD2_IfcShapeAspect_type), true)); + attributes.push_back(new attribute("LiningToPanelOffsetX", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("LiningToPanelOffsetY", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + std::vector derived; derived.reserve(17); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDoorLiningProperties_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("PanelDepth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("PanelOperation", new named_type(IFC4X3_ADD2_IfcDoorPanelOperationEnum_type), false)); + attributes.push_back(new attribute("PanelWidth", new named_type(IFC4X3_ADD2_IfcNormalisedRatioMeasure_type), true)); + attributes.push_back(new attribute("PanelPosition", new named_type(IFC4X3_ADD2_IfcDoorPanelPositionEnum_type), false)); + attributes.push_back(new attribute("ShapeAspectStyle", new named_type(IFC4X3_ADD2_IfcShapeAspect_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDoorPanelProperties_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcDoorTypeEnum_type), false)); + attributes.push_back(new attribute("OperationType", new named_type(IFC4X3_ADD2_IfcDoorTypeOperationEnum_type), false)); + attributes.push_back(new attribute("ParameterTakesPrecedence", new named_type(IFC4X3_ADD2_IfcBoolean_type), true)); + attributes.push_back(new attribute("UserDefinedOperationType", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(13); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDoorType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcDraughtingPreDefinedColour_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcDraughtingPreDefinedCurveFont_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcDuctFittingTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDuctFitting_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcDuctFittingTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDuctFittingType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcDuctSegmentTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDuctSegment_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcDuctSegmentTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDuctSegmentType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcDuctSilencerTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDuctSilencer_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcDuctSilencerTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcDuctSilencerType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcEarthworksCutTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcEarthworksCut_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcEarthworksElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcEarthworksFillTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcEarthworksFill_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("EdgeStart", new named_type(IFC4X3_ADD2_IfcVertex_type), false)); + attributes.push_back(new attribute("EdgeEnd", new named_type(IFC4X3_ADD2_IfcVertex_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcEdge_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("EdgeGeometry", new named_type(IFC4X3_ADD2_IfcCurve_type), false)); + attributes.push_back(new attribute("SameSense", new named_type(IFC4X3_ADD2_IfcBoolean_type), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcEdgeCurve_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("EdgeList", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcOrientedEdge_type)), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcEdgeLoop_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcElectricApplianceTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcElectricAppliance_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcElectricApplianceTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcElectricApplianceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcElectricDistributionBoardTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcElectricDistributionBoard_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcElectricDistributionBoardTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcElectricDistributionBoardType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcElectricFlowStorageDeviceTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcElectricFlowStorageDevice_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcElectricFlowStorageDeviceTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcElectricFlowStorageDeviceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcElectricFlowTreatmentDeviceTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcElectricFlowTreatmentDevice_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcElectricFlowTreatmentDeviceTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcElectricFlowTreatmentDeviceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcElectricGeneratorTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcElectricGenerator_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcElectricGeneratorTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcElectricGeneratorType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcElectricMotorTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcElectricMotor_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcElectricMotorTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcElectricMotorType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcElectricTimeControlTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcElectricTimeControl_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcElectricTimeControlTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcElectricTimeControlType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Tag", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("AssemblyPlace", new named_type(IFC4X3_ADD2_IfcAssemblyPlaceEnum_type), true)); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcElementAssemblyTypeEnum_type), true)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcElementAssembly_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcElementAssemblyTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcElementAssemblyType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcElementComponent_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcElementComponentType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("MethodOfMeasurement", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Quantities", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcPhysicalQuantity_type)), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcElementQuantity_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("ElementType", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcElementType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Position", new named_type(IFC4X3_ADD2_IfcAxis2Placement3D_type), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcElementarySurface_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("SemiAxis1", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("SemiAxis2", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcEllipse_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("SemiAxis1", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("SemiAxis2", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcEllipseProfileDef_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcEnergyConversionDevice_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcEnergyConversionDeviceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcEngineTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcEngine_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcEngineTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcEngineType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcEvaporativeCoolerTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcEvaporativeCooler_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcEvaporativeCoolerTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcEvaporativeCoolerType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcEvaporatorTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcEvaporator_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcEvaporatorTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcEvaporatorType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcEventTypeEnum_type), true)); + attributes.push_back(new attribute("EventTriggerType", new named_type(IFC4X3_ADD2_IfcEventTriggerTypeEnum_type), true)); + attributes.push_back(new attribute("UserDefinedEventTriggerType", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("EventOccurenceTime", new named_type(IFC4X3_ADD2_IfcEventTime_type), true)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcEvent_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("ActualDate", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + attributes.push_back(new attribute("EarlyDate", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + attributes.push_back(new attribute("LateDate", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + attributes.push_back(new attribute("ScheduleDate", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcEventTime_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcEventTypeEnum_type), false)); + attributes.push_back(new attribute("EventTriggerType", new named_type(IFC4X3_ADD2_IfcEventTriggerTypeEnum_type), false)); + attributes.push_back(new attribute("UserDefinedEventTriggerType", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(12); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcEventType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("Properties", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcProperty_type)), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcExtendedProperties_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(0); + + IFC4X3_ADD2_IfcExternalInformation_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Location", new named_type(IFC4X3_ADD2_IfcURIReference_type), true)); + attributes.push_back(new attribute("Identification", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcExternalReference_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatingReference", new named_type(IFC4X3_ADD2_IfcExternalReference_type), false)); + attributes.push_back(new attribute("RelatedResourceObjects", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcResourceObjectSelect_type)), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcExternalReferenceRelationship_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcExternalSpatialElementTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcExternalSpatialElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcExternalSpatialStructureElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcExternallyDefinedHatchStyle_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcExternallyDefinedSurfaceStyle_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcExternallyDefinedTextFont_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("ExtrudedDirection", new named_type(IFC4X3_ADD2_IfcDirection_type), false)); + attributes.push_back(new attribute("Depth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcExtrudedAreaSolid_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("EndSweptArea", new named_type(IFC4X3_ADD2_IfcProfileDef_type), false)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcExtrudedAreaSolidTapered_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Bounds", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcFaceBound_type)), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcFace_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("FbsmFaces", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcConnectedFaceSet_type)), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcFaceBasedSurfaceModel_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Bound", new named_type(IFC4X3_ADD2_IfcLoop_type), false)); + attributes.push_back(new attribute("Orientation", new named_type(IFC4X3_ADD2_IfcBoolean_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFaceBound_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFaceOuterBound_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("FaceSurface", new named_type(IFC4X3_ADD2_IfcSurface_type), false)); + attributes.push_back(new attribute("SameSense", new named_type(IFC4X3_ADD2_IfcBoolean_type), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFaceSurface_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcFacetedBrep_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Voids", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcClosedShell_type)), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFacetedBrepWithVoids_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFacility_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("UsageType", new named_type(IFC4X3_ADD2_IfcFacilityUsageEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFacilityPart_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcFacilityPartCommonTypeEnum_type), true)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFacilityPartCommon_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(6); + attributes.push_back(new attribute("TensionFailureX", new named_type(IFC4X3_ADD2_IfcForceMeasure_type), true)); + attributes.push_back(new attribute("TensionFailureY", new named_type(IFC4X3_ADD2_IfcForceMeasure_type), true)); + attributes.push_back(new attribute("TensionFailureZ", new named_type(IFC4X3_ADD2_IfcForceMeasure_type), true)); + attributes.push_back(new attribute("CompressionFailureX", new named_type(IFC4X3_ADD2_IfcForceMeasure_type), true)); + attributes.push_back(new attribute("CompressionFailureY", new named_type(IFC4X3_ADD2_IfcForceMeasure_type), true)); + attributes.push_back(new attribute("CompressionFailureZ", new named_type(IFC4X3_ADD2_IfcForceMeasure_type), true)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFailureConnectionCondition_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcFanTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFan_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcFanTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFanType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcFastenerTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFastener_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcFastenerTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFastenerType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFeatureElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFeatureElementAddition_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFeatureElementSubtraction_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("FillStyles", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcFillStyleSelect_type)), false)); + attributes.push_back(new attribute("ModelOrDraughting", new named_type(IFC4X3_ADD2_IfcBoolean_type), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFillAreaStyle_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("HatchLineAppearance", new named_type(IFC4X3_ADD2_IfcCurveStyle_type), false)); + attributes.push_back(new attribute("StartOfNextHatchLine", new named_type(IFC4X3_ADD2_IfcHatchLineDistanceSelect_type), false)); + attributes.push_back(new attribute("PointOfReferenceHatchLine", new named_type(IFC4X3_ADD2_IfcCartesianPoint_type), true)); + attributes.push_back(new attribute("PatternStart", new named_type(IFC4X3_ADD2_IfcCartesianPoint_type), true)); + attributes.push_back(new attribute("HatchLineAngle", new named_type(IFC4X3_ADD2_IfcPlaneAngleMeasure_type), false)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFillAreaStyleHatching_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("TilingPattern", new aggregation_type(aggregation_type::list_type, 2, 2, new named_type(IFC4X3_ADD2_IfcVector_type)), false)); + attributes.push_back(new attribute("Tiles", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcStyledItem_type)), false)); + attributes.push_back(new attribute("TilingScale", new named_type(IFC4X3_ADD2_IfcPositiveRatioMeasure_type), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFillAreaStyleTiles_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcFilterTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFilter_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcFilterTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFilterType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcFireSuppressionTerminalTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFireSuppressionTerminal_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcFireSuppressionTerminalTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFireSuppressionTerminalType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("FixedReference", new named_type(IFC4X3_ADD2_IfcDirection_type), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFixedReferenceSweptAreaSolid_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFlowController_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFlowControllerType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFlowFitting_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFlowFittingType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcFlowInstrumentTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFlowInstrument_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcFlowInstrumentTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFlowInstrumentType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcFlowMeterTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFlowMeter_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcFlowMeterTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFlowMeterType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFlowMovingDevice_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFlowMovingDeviceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFlowSegment_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFlowSegmentType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFlowStorageDevice_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFlowStorageDeviceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFlowTerminal_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFlowTerminalType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFlowTreatmentDevice_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFlowTreatmentDeviceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcFootingTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFooting_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcFootingTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFootingType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFurnishingElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFurnishingElementType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcFurnitureTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFurniture_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("AssemblyPlace", new named_type(IFC4X3_ADD2_IfcAssemblyPlaceEnum_type), false)); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcFurnitureTypeEnum_type), true)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcFurnitureType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("PrimeMeridian", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + attributes.push_back(new attribute("AngleUnit", new named_type(IFC4X3_ADD2_IfcNamedUnit_type), true)); + attributes.push_back(new attribute("HeightUnit", new named_type(IFC4X3_ADD2_IfcNamedUnit_type), true)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcGeographicCRS_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcGeographicElementTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcGeographicElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcGeographicElementTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcGeographicElementType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcGeometricCurveSet_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("CoordinateSpaceDimension", new named_type(IFC4X3_ADD2_IfcDimensionCount_type), false)); + attributes.push_back(new attribute("Precision", new named_type(IFC4X3_ADD2_IfcReal_type), true)); + attributes.push_back(new attribute("WorldCoordinateSystem", new named_type(IFC4X3_ADD2_IfcAxis2Placement_type), false)); + attributes.push_back(new attribute("TrueNorth", new named_type(IFC4X3_ADD2_IfcDirection_type), true)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcGeometricRepresentationContext_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(0); + + IFC4X3_ADD2_IfcGeometricRepresentationItem_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("ParentContext", new named_type(IFC4X3_ADD2_IfcGeometricRepresentationContext_type), false)); + attributes.push_back(new attribute("TargetScale", new named_type(IFC4X3_ADD2_IfcPositiveRatioMeasure_type), true)); + attributes.push_back(new attribute("TargetView", new named_type(IFC4X3_ADD2_IfcGeometricProjectionEnum_type), false)); + attributes.push_back(new attribute("UserDefinedTargetView", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(true); derived.push_back(true); derived.push_back(true); derived.push_back(true); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcGeometricRepresentationSubContext_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Elements", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcGeometricSetSelect_type)), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcGeometricSet_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcGeomodel_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcGeoslice_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcGeotechnicalAssembly_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcGeotechnicalElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcGeotechnicalStratumTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcGeotechnicalStratum_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("BaseCurve", new named_type(IFC4X3_ADD2_IfcBoundedCurve_type), false)); + attributes.push_back(new attribute("EndPoint", new named_type(IFC4X3_ADD2_IfcPlacement_type), true)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcGradientCurve_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("UAxes", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcGridAxis_type)), false)); + attributes.push_back(new attribute("VAxes", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcGridAxis_type)), false)); + attributes.push_back(new attribute("WAxes", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcGridAxis_type)), true)); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcGridTypeEnum_type), true)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcGrid_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("AxisTag", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("AxisCurve", new named_type(IFC4X3_ADD2_IfcCurve_type), false)); + attributes.push_back(new attribute("SameSense", new named_type(IFC4X3_ADD2_IfcBoolean_type), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcGridAxis_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("PlacementLocation", new named_type(IFC4X3_ADD2_IfcVirtualGridIntersection_type), false)); + attributes.push_back(new attribute("PlacementRefDirection", new named_type(IFC4X3_ADD2_IfcGridPlacementDirectionSelect_type), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcGridPlacement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcGroup_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("BaseSurface", new named_type(IFC4X3_ADD2_IfcSurface_type), false)); + attributes.push_back(new attribute("AgreementFlag", new named_type(IFC4X3_ADD2_IfcBoolean_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcHalfSpaceSolid_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcHeatExchangerTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcHeatExchanger_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcHeatExchangerTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcHeatExchangerType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcHumidifierTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcHumidifier_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcHumidifierTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcHumidifierType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(7); + attributes.push_back(new attribute("OverallWidth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("OverallDepth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("WebThickness", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("FlangeThickness", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("FilletRadius", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), true)); + attributes.push_back(new attribute("FlangeEdgeRadius", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), true)); + attributes.push_back(new attribute("FlangeSlope", new named_type(IFC4X3_ADD2_IfcPlaneAngleMeasure_type), true)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcIShapeProfileDef_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("URLReference", new named_type(IFC4X3_ADD2_IfcURIReference_type), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcImageTexture_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcImpactProtectionDeviceTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcImpactProtectionDevice_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcImpactProtectionDeviceTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcImpactProtectionDeviceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("MappedTo", new named_type(IFC4X3_ADD2_IfcTessellatedFaceSet_type), false)); + attributes.push_back(new attribute("Opacity", new named_type(IFC4X3_ADD2_IfcNormalisedRatioMeasure_type), true)); + attributes.push_back(new attribute("Colours", new named_type(IFC4X3_ADD2_IfcColourRgbList_type), false)); + attributes.push_back(new attribute("ColourIndex", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcPositiveInteger_type)), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcIndexedColourMap_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Points", new named_type(IFC4X3_ADD2_IfcCartesianPointList_type), false)); + attributes.push_back(new attribute("Segments", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcSegmentIndexSelect_type)), true)); + attributes.push_back(new attribute("SelfIntersect", new named_type(IFC4X3_ADD2_IfcBoolean_type), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcIndexedPolyCurve_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("CoordIndex", new aggregation_type(aggregation_type::list_type, 3, -1, new named_type(IFC4X3_ADD2_IfcPositiveInteger_type)), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcIndexedPolygonalFace_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("InnerCoordIndices", new aggregation_type(aggregation_type::list_type, 1, -1, new aggregation_type(aggregation_type::list_type, 3, -1, new named_type(IFC4X3_ADD2_IfcPositiveInteger_type))), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcIndexedPolygonalFaceWithVoids_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("TexCoordIndices", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcTextureCoordinateIndices_type)), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcIndexedPolygonalTextureMap_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("MappedTo", new named_type(IFC4X3_ADD2_IfcTessellatedFaceSet_type), false)); + attributes.push_back(new attribute("TexCoords", new named_type(IFC4X3_ADD2_IfcTextureVertexList_type), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcIndexedTextureMap_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("TexCoordIndex", new aggregation_type(aggregation_type::list_type, 1, -1, new aggregation_type(aggregation_type::list_type, 3, 3, new named_type(IFC4X3_ADD2_IfcPositiveInteger_type))), true)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcIndexedTriangleTextureMap_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcInterceptorTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcInterceptor_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcInterceptorTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcInterceptorType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcIntersectionCurve_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(6); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcInventoryTypeEnum_type), true)); + attributes.push_back(new attribute("Jurisdiction", new named_type(IFC4X3_ADD2_IfcActorSelect_type), true)); + attributes.push_back(new attribute("ResponsiblePersons", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcPerson_type)), true)); + attributes.push_back(new attribute("LastUpdateDate", new named_type(IFC4X3_ADD2_IfcDate_type), true)); + attributes.push_back(new attribute("CurrentValue", new named_type(IFC4X3_ADD2_IfcCostValue_type), true)); + attributes.push_back(new attribute("OriginalValue", new named_type(IFC4X3_ADD2_IfcCostValue_type), true)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcInventory_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Values", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcIrregularTimeSeriesValue_type)), false)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcIrregularTimeSeries_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("TimeStamp", new named_type(IFC4X3_ADD2_IfcDateTime_type), false)); + attributes.push_back(new attribute("ListValues", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcValue_type)), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcIrregularTimeSeriesValue_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcJunctionBoxTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcJunctionBox_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcJunctionBoxTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcJunctionBoxType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcKerbTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcKerb_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcKerbTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcKerbType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(6); + attributes.push_back(new attribute("Depth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("Width", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("Thickness", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("FilletRadius", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), true)); + attributes.push_back(new attribute("EdgeRadius", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), true)); + attributes.push_back(new attribute("LegSlope", new named_type(IFC4X3_ADD2_IfcPlaneAngleMeasure_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcLShapeProfileDef_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcLaborResourceTypeEnum_type), true)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcLaborResource_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcLaborResourceTypeEnum_type), false)); + std::vector derived; derived.reserve(12); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcLaborResourceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("LagValue", new named_type(IFC4X3_ADD2_IfcTimeOrRatioSelect_type), false)); + attributes.push_back(new attribute("DurationType", new named_type(IFC4X3_ADD2_IfcTaskDurationEnum_type), false)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcLagTime_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcLampTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcLamp_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcLampTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcLampType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(6); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), false)); + attributes.push_back(new attribute("Version", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Publisher", new named_type(IFC4X3_ADD2_IfcActorSelect_type), true)); + attributes.push_back(new attribute("VersionDate", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + attributes.push_back(new attribute("Location", new named_type(IFC4X3_ADD2_IfcURIReference_type), true)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcLibraryInformation_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("Language", new named_type(IFC4X3_ADD2_IfcLanguageId_type), true)); + attributes.push_back(new attribute("ReferencedLibrary", new named_type(IFC4X3_ADD2_IfcLibraryInformation_type), true)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcLibraryReference_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("MainPlaneAngle", new named_type(IFC4X3_ADD2_IfcPlaneAngleMeasure_type), false)); + attributes.push_back(new attribute("SecondaryPlaneAngle", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcPlaneAngleMeasure_type)), false)); + attributes.push_back(new attribute("LuminousIntensity", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcLuminousIntensityDistributionMeasure_type)), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcLightDistributionData_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcLightFixtureTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcLightFixture_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcLightFixtureTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcLightFixtureType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("LightDistributionCurve", new named_type(IFC4X3_ADD2_IfcLightDistributionCurveEnum_type), false)); + attributes.push_back(new attribute("DistributionData", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcLightDistributionData_type)), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcLightIntensityDistribution_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("LightColour", new named_type(IFC4X3_ADD2_IfcColourRgb_type), false)); + attributes.push_back(new attribute("AmbientIntensity", new named_type(IFC4X3_ADD2_IfcNormalisedRatioMeasure_type), true)); + attributes.push_back(new attribute("Intensity", new named_type(IFC4X3_ADD2_IfcNormalisedRatioMeasure_type), true)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcLightSource_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcLightSourceAmbient_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Orientation", new named_type(IFC4X3_ADD2_IfcDirection_type), false)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcLightSourceDirectional_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(6); + attributes.push_back(new attribute("Position", new named_type(IFC4X3_ADD2_IfcAxis2Placement3D_type), false)); + attributes.push_back(new attribute("ColourAppearance", new named_type(IFC4X3_ADD2_IfcColourRgb_type), true)); + attributes.push_back(new attribute("ColourTemperature", new named_type(IFC4X3_ADD2_IfcThermodynamicTemperatureMeasure_type), false)); + attributes.push_back(new attribute("LuminousFlux", new named_type(IFC4X3_ADD2_IfcLuminousFluxMeasure_type), false)); + attributes.push_back(new attribute("LightEmissionSource", new named_type(IFC4X3_ADD2_IfcLightEmissionSourceEnum_type), false)); + attributes.push_back(new attribute("LightDistributionDataSource", new named_type(IFC4X3_ADD2_IfcLightDistributionDataSourceSelect_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcLightSourceGoniometric_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("Position", new named_type(IFC4X3_ADD2_IfcCartesianPoint_type), false)); + attributes.push_back(new attribute("Radius", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("ConstantAttenuation", new named_type(IFC4X3_ADD2_IfcReal_type), false)); + attributes.push_back(new attribute("DistanceAttenuation", new named_type(IFC4X3_ADD2_IfcReal_type), false)); + attributes.push_back(new attribute("QuadricAttenuation", new named_type(IFC4X3_ADD2_IfcReal_type), false)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcLightSourcePositional_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("Orientation", new named_type(IFC4X3_ADD2_IfcDirection_type), false)); + attributes.push_back(new attribute("ConcentrationExponent", new named_type(IFC4X3_ADD2_IfcReal_type), true)); + attributes.push_back(new attribute("SpreadAngle", new named_type(IFC4X3_ADD2_IfcPositivePlaneAngleMeasure_type), false)); + attributes.push_back(new attribute("BeamWidthAngle", new named_type(IFC4X3_ADD2_IfcPositivePlaneAngleMeasure_type), false)); + std::vector derived; derived.reserve(13); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcLightSourceSpot_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Pnt", new named_type(IFC4X3_ADD2_IfcCartesianPoint_type), false)); + attributes.push_back(new attribute("Dir", new named_type(IFC4X3_ADD2_IfcVector_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcLine_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcLinearElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelativePlacement", new named_type(IFC4X3_ADD2_IfcAxis2PlacementLinear_type), false)); + attributes.push_back(new attribute("CartesianPosition", new named_type(IFC4X3_ADD2_IfcAxis2Placement3D_type), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcLinearPlacement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcLinearPositioningElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcLiquidTerminalTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcLiquidTerminal_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcLiquidTerminalTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcLiquidTerminalType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("RelativePlacement", new named_type(IFC4X3_ADD2_IfcAxis2Placement_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcLocalPlacement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(0); + + IFC4X3_ADD2_IfcLoop_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Outer", new named_type(IFC4X3_ADD2_IfcClosedShell_type), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcManifoldSolidBrep_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(6); + attributes.push_back(new attribute("Eastings", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + attributes.push_back(new attribute("Northings", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + attributes.push_back(new attribute("OrthogonalHeight", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + attributes.push_back(new attribute("XAxisAbscissa", new named_type(IFC4X3_ADD2_IfcReal_type), true)); + attributes.push_back(new attribute("XAxisOrdinate", new named_type(IFC4X3_ADD2_IfcReal_type), true)); + attributes.push_back(new attribute("Scale", new named_type(IFC4X3_ADD2_IfcReal_type), true)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMapConversion_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("FactorX", new named_type(IFC4X3_ADD2_IfcReal_type), false)); + attributes.push_back(new attribute("FactorY", new named_type(IFC4X3_ADD2_IfcReal_type), false)); + attributes.push_back(new attribute("FactorZ", new named_type(IFC4X3_ADD2_IfcReal_type), false)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMapConversionScaled_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("MappingSource", new named_type(IFC4X3_ADD2_IfcRepresentationMap_type), false)); + attributes.push_back(new attribute("MappingTarget", new named_type(IFC4X3_ADD2_IfcCartesianTransformationOperator_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMappedItem_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcMarineFacilityTypeEnum_type), true)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMarineFacility_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcMarinePartTypeEnum_type), true)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMarinePart_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), false)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("Category", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMaterial_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("MaterialClassifications", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcClassificationSelect_type)), false)); + attributes.push_back(new attribute("ClassifiedMaterial", new named_type(IFC4X3_ADD2_IfcMaterial_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMaterialClassificationRelationship_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("Material", new named_type(IFC4X3_ADD2_IfcMaterial_type), false)); + attributes.push_back(new attribute("Fraction", new named_type(IFC4X3_ADD2_IfcNormalisedRatioMeasure_type), true)); + attributes.push_back(new attribute("Category", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMaterialConstituent_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("MaterialConstituents", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcMaterialConstituent_type)), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMaterialConstituentSet_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(0); + + IFC4X3_ADD2_IfcMaterialDefinition_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("RepresentedMaterial", new named_type(IFC4X3_ADD2_IfcMaterial_type), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMaterialDefinitionRepresentation_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(7); + attributes.push_back(new attribute("Material", new named_type(IFC4X3_ADD2_IfcMaterial_type), true)); + attributes.push_back(new attribute("LayerThickness", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), false)); + attributes.push_back(new attribute("IsVentilated", new named_type(IFC4X3_ADD2_IfcLogical_type), true)); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("Category", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Priority", new named_type(IFC4X3_ADD2_IfcInteger_type), true)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMaterialLayer_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("MaterialLayers", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcMaterialLayer_type)), false)); + attributes.push_back(new attribute("LayerSetName", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMaterialLayerSet_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("ForLayerSet", new named_type(IFC4X3_ADD2_IfcMaterialLayerSet_type), false)); + attributes.push_back(new attribute("LayerSetDirection", new named_type(IFC4X3_ADD2_IfcLayerSetDirectionEnum_type), false)); + attributes.push_back(new attribute("DirectionSense", new named_type(IFC4X3_ADD2_IfcDirectionSenseEnum_type), false)); + attributes.push_back(new attribute("OffsetFromReferenceLine", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + attributes.push_back(new attribute("ReferenceExtent", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMaterialLayerSetUsage_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("OffsetDirection", new named_type(IFC4X3_ADD2_IfcLayerSetDirectionEnum_type), false)); + attributes.push_back(new attribute("OffsetValues", new aggregation_type(aggregation_type::array_type, 1, 2, new named_type(IFC4X3_ADD2_IfcLengthMeasure_type)), false)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMaterialLayerWithOffsets_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Materials", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcMaterial_type)), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcMaterialList_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(6); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("Material", new named_type(IFC4X3_ADD2_IfcMaterial_type), true)); + attributes.push_back(new attribute("Profile", new named_type(IFC4X3_ADD2_IfcProfileDef_type), false)); + attributes.push_back(new attribute("Priority", new named_type(IFC4X3_ADD2_IfcInteger_type), true)); + attributes.push_back(new attribute("Category", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMaterialProfile_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("MaterialProfiles", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcMaterialProfile_type)), false)); + attributes.push_back(new attribute("CompositeProfile", new named_type(IFC4X3_ADD2_IfcCompositeProfileDef_type), true)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMaterialProfileSet_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("ForProfileSet", new named_type(IFC4X3_ADD2_IfcMaterialProfileSet_type), false)); + attributes.push_back(new attribute("CardinalPoint", new named_type(IFC4X3_ADD2_IfcCardinalPointReference_type), true)); + attributes.push_back(new attribute("ReferenceExtent", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMaterialProfileSetUsage_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("ForProfileEndSet", new named_type(IFC4X3_ADD2_IfcMaterialProfileSet_type), false)); + attributes.push_back(new attribute("CardinalEndPoint", new named_type(IFC4X3_ADD2_IfcCardinalPointReference_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMaterialProfileSetUsageTapering_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("OffsetValues", new aggregation_type(aggregation_type::array_type, 1, 2, new named_type(IFC4X3_ADD2_IfcLengthMeasure_type)), false)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMaterialProfileWithOffsets_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Material", new named_type(IFC4X3_ADD2_IfcMaterialDefinition_type), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMaterialProperties_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("RelatingMaterial", new named_type(IFC4X3_ADD2_IfcMaterial_type), false)); + attributes.push_back(new attribute("RelatedMaterials", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcMaterial_type)), false)); + attributes.push_back(new attribute("MaterialExpression", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMaterialRelationship_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(0); + + IFC4X3_ADD2_IfcMaterialUsageDefinition_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("ValueComponent", new named_type(IFC4X3_ADD2_IfcValue_type), false)); + attributes.push_back(new attribute("UnitComponent", new named_type(IFC4X3_ADD2_IfcUnit_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMeasureWithUnit_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("NominalDiameter", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("NominalLength", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcMechanicalFastenerTypeEnum_type), true)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMechanicalFastener_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcMechanicalFastenerTypeEnum_type), false)); + attributes.push_back(new attribute("NominalDiameter", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("NominalLength", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + std::vector derived; derived.reserve(12); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMechanicalFastenerType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcMedicalDeviceTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMedicalDevice_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcMedicalDeviceTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMedicalDeviceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcMemberTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMember_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcMemberTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMemberType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("Benchmark", new named_type(IFC4X3_ADD2_IfcBenchmarkEnum_type), false)); + attributes.push_back(new attribute("ValueSource", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("DataValue", new named_type(IFC4X3_ADD2_IfcMetricValueSelect_type), true)); + attributes.push_back(new attribute("ReferencePath", new named_type(IFC4X3_ADD2_IfcReference_type), true)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMetric_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(true); derived.push_back(false); + IFC4X3_ADD2_IfcMirroredProfileDef_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcMobileTelecommunicationsApplianceTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMobileTelecommunicationsAppliance_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcMobileTelecommunicationsApplianceTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMobileTelecommunicationsApplianceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Currency", new named_type(IFC4X3_ADD2_IfcLabel_type), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcMonetaryUnit_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcMooringDeviceTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMooringDevice_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcMooringDeviceTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMooringDeviceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcMotorConnectionTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMotorConnection_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcMotorConnectionTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcMotorConnectionType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Dimensions", new named_type(IFC4X3_ADD2_IfcDimensionalExponents_type), false)); + attributes.push_back(new attribute("UnitType", new named_type(IFC4X3_ADD2_IfcUnitEnum_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcNamedUnit_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcNavigationElementTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcNavigationElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcNavigationElementTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcNavigationElementType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("ObjectType", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcObject_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcObjectDefinition_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PlacementRelTo", new named_type(IFC4X3_ADD2_IfcObjectPlacement_type), true)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcObjectPlacement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("BenchmarkValues", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcConstraint_type)), true)); + attributes.push_back(new attribute("LogicalAggregator", new named_type(IFC4X3_ADD2_IfcLogicalOperatorEnum_type), true)); + attributes.push_back(new attribute("ObjectiveQualifier", new named_type(IFC4X3_ADD2_IfcObjectiveEnum_type), false)); + attributes.push_back(new attribute("UserDefinedQualifier", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcObjective_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcOccupantTypeEnum_type), true)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcOccupant_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("BasisCurve", new named_type(IFC4X3_ADD2_IfcCurve_type), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcOffsetCurve_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Distance", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + attributes.push_back(new attribute("SelfIntersect", new named_type(IFC4X3_ADD2_IfcLogical_type), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcOffsetCurve2D_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Distance", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + attributes.push_back(new attribute("SelfIntersect", new named_type(IFC4X3_ADD2_IfcLogical_type), false)); + attributes.push_back(new attribute("RefDirection", new named_type(IFC4X3_ADD2_IfcDirection_type), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcOffsetCurve3D_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("OffsetValues", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcPointByDistanceExpression_type)), false)); + attributes.push_back(new attribute("Tag", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcOffsetCurveByDistances_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("HorizontalWidths", new named_type(IFC4X3_ADD2_IfcBoolean_type), false)); + attributes.push_back(new attribute("Widths", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type)), false)); + attributes.push_back(new attribute("Slopes", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcPlaneAngleMeasure_type)), false)); + attributes.push_back(new attribute("Tags", new aggregation_type(aggregation_type::list_type, 2, -1, new named_type(IFC4X3_ADD2_IfcLabel_type)), true)); + attributes.push_back(new attribute("OffsetPoint", new named_type(IFC4X3_ADD2_IfcCartesianPoint_type), true)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcOpenCrossProfileDef_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcOpenShell_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcOpeningElementTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcOpeningElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("Identification", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), false)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("Roles", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcActorRole_type)), true)); + attributes.push_back(new attribute("Addresses", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcAddress_type)), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcOrganization_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatingOrganization", new named_type(IFC4X3_ADD2_IfcOrganization_type), false)); + attributes.push_back(new attribute("RelatedOrganizations", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcOrganization_type)), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcOrganizationRelationship_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("EdgeElement", new named_type(IFC4X3_ADD2_IfcEdge_type), false)); + attributes.push_back(new attribute("Orientation", new named_type(IFC4X3_ADD2_IfcBoolean_type), false)); + std::vector derived; derived.reserve(4); + derived.push_back(true); derived.push_back(true); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcOrientedEdge_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcOuterBoundaryCurve_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcOutletTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcOutlet_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcOutletTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcOutletType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(8); + attributes.push_back(new attribute("OwningUser", new named_type(IFC4X3_ADD2_IfcPersonAndOrganization_type), false)); + attributes.push_back(new attribute("OwningApplication", new named_type(IFC4X3_ADD2_IfcApplication_type), false)); + attributes.push_back(new attribute("State", new named_type(IFC4X3_ADD2_IfcStateEnum_type), true)); + attributes.push_back(new attribute("ChangeAction", new named_type(IFC4X3_ADD2_IfcChangeActionEnum_type), true)); + attributes.push_back(new attribute("LastModifiedDate", new named_type(IFC4X3_ADD2_IfcTimeStamp_type), true)); + attributes.push_back(new attribute("LastModifyingUser", new named_type(IFC4X3_ADD2_IfcPersonAndOrganization_type), true)); + attributes.push_back(new attribute("LastModifyingApplication", new named_type(IFC4X3_ADD2_IfcApplication_type), true)); + attributes.push_back(new attribute("CreationDate", new named_type(IFC4X3_ADD2_IfcTimeStamp_type), false)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcOwnerHistory_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Position", new named_type(IFC4X3_ADD2_IfcAxis2Placement2D_type), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcParameterizedProfileDef_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("EdgeList", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcOrientedEdge_type)), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcPath_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcPavementTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPavement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcPavementTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPavementType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("BasisSurface", new named_type(IFC4X3_ADD2_IfcSurface_type), false)); + attributes.push_back(new attribute("ReferenceCurve", new named_type(IFC4X3_ADD2_IfcCurve_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPcurve_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("LifeCyclePhase", new named_type(IFC4X3_ADD2_IfcLabel_type), false)); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcPerformanceHistoryTypeEnum_type), true)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPerformanceHistory_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("OperationType", new named_type(IFC4X3_ADD2_IfcPermeableCoveringOperationEnum_type), false)); + attributes.push_back(new attribute("PanelPosition", new named_type(IFC4X3_ADD2_IfcWindowPanelPositionEnum_type), false)); + attributes.push_back(new attribute("FrameDepth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("FrameThickness", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("ShapeAspectStyle", new named_type(IFC4X3_ADD2_IfcShapeAspect_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPermeableCoveringProperties_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcPermitTypeEnum_type), true)); + attributes.push_back(new attribute("Status", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("LongDescription", new named_type(IFC4X3_ADD2_IfcText_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPermit_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(8); + attributes.push_back(new attribute("Identification", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + attributes.push_back(new attribute("FamilyName", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("GivenName", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("MiddleNames", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcLabel_type)), true)); + attributes.push_back(new attribute("PrefixTitles", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcLabel_type)), true)); + attributes.push_back(new attribute("SuffixTitles", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcLabel_type)), true)); + attributes.push_back(new attribute("Roles", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcActorRole_type)), true)); + attributes.push_back(new attribute("Addresses", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcAddress_type)), true)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPerson_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("ThePerson", new named_type(IFC4X3_ADD2_IfcPerson_type), false)); + attributes.push_back(new attribute("TheOrganization", new named_type(IFC4X3_ADD2_IfcOrganization_type), false)); + attributes.push_back(new attribute("Roles", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcActorRole_type)), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPersonAndOrganization_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("HasQuantities", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcPhysicalQuantity_type)), false)); + attributes.push_back(new attribute("Discrimination", new named_type(IFC4X3_ADD2_IfcLabel_type), false)); + attributes.push_back(new attribute("Quality", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Usage", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPhysicalComplexQuantity_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), false)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPhysicalQuantity_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Unit", new named_type(IFC4X3_ADD2_IfcNamedUnit_type), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPhysicalSimpleQuantity_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcPileTypeEnum_type), true)); + attributes.push_back(new attribute("ConstructionType", new named_type(IFC4X3_ADD2_IfcPileConstructionEnum_type), true)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPile_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcPileTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPileType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcPipeFittingTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPipeFitting_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcPipeFittingTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPipeFittingType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcPipeSegmentTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPipeSegment_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcPipeSegmentTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPipeSegmentType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("Width", new named_type(IFC4X3_ADD2_IfcInteger_type), false)); + attributes.push_back(new attribute("Height", new named_type(IFC4X3_ADD2_IfcInteger_type), false)); + attributes.push_back(new attribute("ColourComponents", new named_type(IFC4X3_ADD2_IfcInteger_type), false)); + attributes.push_back(new attribute("Pixel", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcBinary_type)), false)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPixelTexture_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Location", new named_type(IFC4X3_ADD2_IfcPoint_type), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcPlacement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Placement", new named_type(IFC4X3_ADD2_IfcAxis2Placement_type), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPlanarBox_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("SizeInX", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + attributes.push_back(new attribute("SizeInY", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPlanarExtent_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcPlane_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcPlateTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPlate_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcPlateTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPlateType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(0); + + IFC4X3_ADD2_IfcPoint_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("DistanceAlong", new named_type(IFC4X3_ADD2_IfcCurveMeasureSelect_type), false)); + attributes.push_back(new attribute("OffsetLateral", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("OffsetVertical", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("OffsetLongitudinal", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("BasisCurve", new named_type(IFC4X3_ADD2_IfcCurve_type), false)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPointByDistanceExpression_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("BasisCurve", new named_type(IFC4X3_ADD2_IfcCurve_type), false)); + attributes.push_back(new attribute("PointParameter", new named_type(IFC4X3_ADD2_IfcParameterValue_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPointOnCurve_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("BasisSurface", new named_type(IFC4X3_ADD2_IfcSurface_type), false)); + attributes.push_back(new attribute("PointParameterU", new named_type(IFC4X3_ADD2_IfcParameterValue_type), false)); + attributes.push_back(new attribute("PointParameterV", new named_type(IFC4X3_ADD2_IfcParameterValue_type), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPointOnSurface_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Polygon", new aggregation_type(aggregation_type::list_type, 3, -1, new named_type(IFC4X3_ADD2_IfcCartesianPoint_type)), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcPolyLoop_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Position", new named_type(IFC4X3_ADD2_IfcAxis2Placement3D_type), false)); + attributes.push_back(new attribute("PolygonalBoundary", new named_type(IFC4X3_ADD2_IfcBoundedCurve_type), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPolygonalBoundedHalfSpace_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Closed", new named_type(IFC4X3_ADD2_IfcBoolean_type), true)); + attributes.push_back(new attribute("Faces", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcIndexedPolygonalFace_type)), false)); + attributes.push_back(new attribute("PnIndex", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcPositiveInteger_type)), true)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPolygonalFaceSet_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Points", new aggregation_type(aggregation_type::list_type, 2, -1, new named_type(IFC4X3_ADD2_IfcCartesianPoint_type)), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcPolyline_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("Position", new named_type(IFC4X3_ADD2_IfcPlacement_type), false)); + attributes.push_back(new attribute("CoefficientsX", new aggregation_type(aggregation_type::list_type, 2, -1, new named_type(IFC4X3_ADD2_IfcReal_type)), true)); + attributes.push_back(new attribute("CoefficientsY", new aggregation_type(aggregation_type::list_type, 2, -1, new named_type(IFC4X3_ADD2_IfcReal_type)), true)); + attributes.push_back(new attribute("CoefficientsZ", new aggregation_type(aggregation_type::list_type, 2, -1, new named_type(IFC4X3_ADD2_IfcReal_type)), true)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPolynomialCurve_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPort_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPositioningElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(7); + attributes.push_back(new attribute("InternalLocation", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("AddressLines", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcLabel_type)), true)); + attributes.push_back(new attribute("PostalBox", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Town", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Region", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("PostalCode", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Country", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPostalAddress_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcPreDefinedColour_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcPreDefinedCurveFont_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcPreDefinedItem_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(0); + + IFC4X3_ADD2_IfcPreDefinedProperties_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPreDefinedPropertySet_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcPreDefinedTextFont_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(0); + + IFC4X3_ADD2_IfcPresentationItem_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), false)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("AssignedItems", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcLayeredItem_type)), false)); + attributes.push_back(new attribute("Identifier", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPresentationLayerAssignment_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("LayerOn", new named_type(IFC4X3_ADD2_IfcLogical_type), false)); + attributes.push_back(new attribute("LayerFrozen", new named_type(IFC4X3_ADD2_IfcLogical_type), false)); + attributes.push_back(new attribute("LayerBlocked", new named_type(IFC4X3_ADD2_IfcLogical_type), false)); + attributes.push_back(new attribute("LayerStyles", new aggregation_type(aggregation_type::set_type, 0, -1, new named_type(IFC4X3_ADD2_IfcPresentationStyle_type)), false)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPresentationLayerWithStyle_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcPresentationStyle_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcProcedureTypeEnum_type), true)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcProcedure_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcProcedureTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcProcedureType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Identification", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + attributes.push_back(new attribute("LongDescription", new named_type(IFC4X3_ADD2_IfcText_type), true)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcProcess_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("ObjectPlacement", new named_type(IFC4X3_ADD2_IfcObjectPlacement_type), true)); + attributes.push_back(new attribute("Representation", new named_type(IFC4X3_ADD2_IfcProductRepresentation_type), true)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcProduct_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcProductDefinitionShape_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("Representations", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcRepresentation_type)), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcProductRepresentation_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("ProfileType", new named_type(IFC4X3_ADD2_IfcProfileTypeEnum_type), false)); + attributes.push_back(new attribute("ProfileName", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcProfileDef_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("ProfileDefinition", new named_type(IFC4X3_ADD2_IfcProfileDef_type), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcProfileProperties_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcProject_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcProjectLibrary_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcProjectOrderTypeEnum_type), true)); + attributes.push_back(new attribute("Status", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("LongDescription", new named_type(IFC4X3_ADD2_IfcText_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcProjectOrder_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("VerticalDatum", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + attributes.push_back(new attribute("MapProjection", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + attributes.push_back(new attribute("MapZone", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + attributes.push_back(new attribute("MapUnit", new named_type(IFC4X3_ADD2_IfcNamedUnit_type), true)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcProjectedCRS_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcProjectionElementTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcProjectionElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcIdentifier_type), false)); + attributes.push_back(new attribute("Specification", new named_type(IFC4X3_ADD2_IfcText_type), true)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcProperty_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(0); + + IFC4X3_ADD2_IfcPropertyAbstraction_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("UpperBoundValue", new named_type(IFC4X3_ADD2_IfcValue_type), true)); + attributes.push_back(new attribute("LowerBoundValue", new named_type(IFC4X3_ADD2_IfcValue_type), true)); + attributes.push_back(new attribute("Unit", new named_type(IFC4X3_ADD2_IfcUnit_type), true)); + attributes.push_back(new attribute("SetPointValue", new named_type(IFC4X3_ADD2_IfcValue_type), true)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPropertyBoundedValue_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPropertyDefinition_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("DependingProperty", new named_type(IFC4X3_ADD2_IfcProperty_type), false)); + attributes.push_back(new attribute("DependantProperty", new named_type(IFC4X3_ADD2_IfcProperty_type), false)); + attributes.push_back(new attribute("Expression", new named_type(IFC4X3_ADD2_IfcText_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPropertyDependencyRelationship_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("EnumerationValues", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcValue_type)), true)); + attributes.push_back(new attribute("EnumerationReference", new named_type(IFC4X3_ADD2_IfcPropertyEnumeration_type), true)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPropertyEnumeratedValue_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), false)); + attributes.push_back(new attribute("EnumerationValues", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcValue_type)), false)); + attributes.push_back(new attribute("Unit", new named_type(IFC4X3_ADD2_IfcUnit_type), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPropertyEnumeration_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("ListValues", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcValue_type)), true)); + attributes.push_back(new attribute("Unit", new named_type(IFC4X3_ADD2_IfcUnit_type), true)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPropertyListValue_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("UsageName", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("PropertyReference", new named_type(IFC4X3_ADD2_IfcObjectReferenceSelect_type), true)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPropertyReferenceValue_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("HasProperties", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcProperty_type)), false)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPropertySet_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPropertySetDefinition_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("TemplateType", new named_type(IFC4X3_ADD2_IfcPropertySetTemplateTypeEnum_type), true)); + attributes.push_back(new attribute("ApplicableEntity", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + attributes.push_back(new attribute("HasPropertyTemplates", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcPropertyTemplate_type)), false)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPropertySetTemplate_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("NominalValue", new named_type(IFC4X3_ADD2_IfcValue_type), true)); + attributes.push_back(new attribute("Unit", new named_type(IFC4X3_ADD2_IfcUnit_type), true)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPropertySingleValue_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(6); + attributes.push_back(new attribute("DefiningValues", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcValue_type)), true)); + attributes.push_back(new attribute("DefinedValues", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcValue_type)), true)); + attributes.push_back(new attribute("Expression", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("DefiningUnit", new named_type(IFC4X3_ADD2_IfcUnit_type), true)); + attributes.push_back(new attribute("DefinedUnit", new named_type(IFC4X3_ADD2_IfcUnit_type), true)); + attributes.push_back(new attribute("CurveInterpolation", new named_type(IFC4X3_ADD2_IfcCurveInterpolationEnum_type), true)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPropertyTableValue_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPropertyTemplate_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPropertyTemplateDefinition_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcProtectiveDeviceTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcProtectiveDevice_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnitTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnit_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnitTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnitType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcProtectiveDeviceTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcProtectiveDeviceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcPumpTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPump_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcPumpTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcPumpType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("AreaValue", new named_type(IFC4X3_ADD2_IfcAreaMeasure_type), false)); + attributes.push_back(new attribute("Formula", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcQuantityArea_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("CountValue", new named_type(IFC4X3_ADD2_IfcCountMeasure_type), false)); + attributes.push_back(new attribute("Formula", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcQuantityCount_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("LengthValue", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + attributes.push_back(new attribute("Formula", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcQuantityLength_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("NumberValue", new named_type(IFC4X3_ADD2_IfcNumericMeasure_type), false)); + attributes.push_back(new attribute("Formula", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcQuantityNumber_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcQuantitySet_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("TimeValue", new named_type(IFC4X3_ADD2_IfcTimeMeasure_type), false)); + attributes.push_back(new attribute("Formula", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcQuantityTime_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("VolumeValue", new named_type(IFC4X3_ADD2_IfcVolumeMeasure_type), false)); + attributes.push_back(new attribute("Formula", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcQuantityVolume_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("WeightValue", new named_type(IFC4X3_ADD2_IfcMassMeasure_type), false)); + attributes.push_back(new attribute("Formula", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcQuantityWeight_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcRailTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRail_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcRailTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRailType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcRailingTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRailing_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcRailingTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRailingType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcRailwayTypeEnum_type), true)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRailway_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcRailwayPartTypeEnum_type), true)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRailwayPart_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcRampTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRamp_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcRampFlightTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRampFlight_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcRampFlightTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRampFlightType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcRampTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRampType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("WeightsData", new aggregation_type(aggregation_type::list_type, 2, -1, new named_type(IFC4X3_ADD2_IfcReal_type)), false)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRationalBSplineCurveWithKnots_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("WeightsData", new aggregation_type(aggregation_type::list_type, 2, -1, new aggregation_type(aggregation_type::list_type, 2, -1, new named_type(IFC4X3_ADD2_IfcReal_type))), false)); + std::vector derived; derived.reserve(13); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRationalBSplineSurfaceWithKnots_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("WallThickness", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("InnerFilletRadius", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), true)); + attributes.push_back(new attribute("OuterFilletRadius", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), true)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRectangleHollowProfileDef_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("XDim", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("YDim", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRectangleProfileDef_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("XLength", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("YLength", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("Height", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRectangularPyramid_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(7); + attributes.push_back(new attribute("BasisSurface", new named_type(IFC4X3_ADD2_IfcSurface_type), false)); + attributes.push_back(new attribute("U1", new named_type(IFC4X3_ADD2_IfcParameterValue_type), false)); + attributes.push_back(new attribute("V1", new named_type(IFC4X3_ADD2_IfcParameterValue_type), false)); + attributes.push_back(new attribute("U2", new named_type(IFC4X3_ADD2_IfcParameterValue_type), false)); + attributes.push_back(new attribute("V2", new named_type(IFC4X3_ADD2_IfcParameterValue_type), false)); + attributes.push_back(new attribute("Usense", new named_type(IFC4X3_ADD2_IfcBoolean_type), false)); + attributes.push_back(new attribute("Vsense", new named_type(IFC4X3_ADD2_IfcBoolean_type), false)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRectangularTrimmedSurface_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(8); + attributes.push_back(new attribute("RecurrenceType", new named_type(IFC4X3_ADD2_IfcRecurrenceTypeEnum_type), false)); + attributes.push_back(new attribute("DayComponent", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcDayInMonthNumber_type)), true)); + attributes.push_back(new attribute("WeekdayComponent", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcDayInWeekNumber_type)), true)); + attributes.push_back(new attribute("MonthComponent", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcMonthInYearNumber_type)), true)); + attributes.push_back(new attribute("Position", new named_type(IFC4X3_ADD2_IfcInteger_type), true)); + attributes.push_back(new attribute("Interval", new named_type(IFC4X3_ADD2_IfcInteger_type), true)); + attributes.push_back(new attribute("Occurrences", new named_type(IFC4X3_ADD2_IfcInteger_type), true)); + attributes.push_back(new attribute("TimePeriods", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcTimePeriod_type)), true)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRecurrencePattern_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("TypeIdentifier", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + attributes.push_back(new attribute("AttributeIdentifier", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + attributes.push_back(new attribute("InstanceName", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("ListPositions", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcInteger_type)), true)); + attributes.push_back(new attribute("InnerReference", new named_type(IFC4X3_ADD2_IfcReference_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcReference_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcReferentTypeEnum_type), true)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcReferent_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("TimeStep", new named_type(IFC4X3_ADD2_IfcTimeMeasure_type), false)); + attributes.push_back(new attribute("Values", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcTimeSeriesValue_type)), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRegularTimeSeries_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcReinforcedSoilTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcReinforcedSoil_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(6); + attributes.push_back(new attribute("TotalCrossSectionArea", new named_type(IFC4X3_ADD2_IfcAreaMeasure_type), false)); + attributes.push_back(new attribute("SteelGrade", new named_type(IFC4X3_ADD2_IfcLabel_type), false)); + attributes.push_back(new attribute("BarSurface", new named_type(IFC4X3_ADD2_IfcReinforcingBarSurfaceEnum_type), true)); + attributes.push_back(new attribute("EffectiveDepth", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("NominalBarDiameter", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("BarCount", new named_type(IFC4X3_ADD2_IfcCountMeasure_type), true)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcReinforcementBarProperties_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("DefinitionType", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("ReinforcementSectionDefinitions", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcSectionReinforcementProperties_type)), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcReinforcementDefinitionProperties_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("NominalDiameter", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("CrossSectionArea", new named_type(IFC4X3_ADD2_IfcAreaMeasure_type), true)); + attributes.push_back(new attribute("BarLength", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcReinforcingBarTypeEnum_type), true)); + attributes.push_back(new attribute("BarSurface", new named_type(IFC4X3_ADD2_IfcReinforcingBarSurfaceEnum_type), true)); + std::vector derived; derived.reserve(14); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcReinforcingBar_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(7); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcReinforcingBarTypeEnum_type), false)); + attributes.push_back(new attribute("NominalDiameter", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("CrossSectionArea", new named_type(IFC4X3_ADD2_IfcAreaMeasure_type), true)); + attributes.push_back(new attribute("BarLength", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("BarSurface", new named_type(IFC4X3_ADD2_IfcReinforcingBarSurfaceEnum_type), true)); + attributes.push_back(new attribute("BendingShapeCode", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("BendingParameters", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcBendingParameterSelect_type)), true)); + std::vector derived; derived.reserve(16); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcReinforcingBarType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("SteelGrade", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcReinforcingElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcReinforcingElementType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(9); + attributes.push_back(new attribute("MeshLength", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("MeshWidth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("LongitudinalBarNominalDiameter", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("TransverseBarNominalDiameter", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("LongitudinalBarCrossSectionArea", new named_type(IFC4X3_ADD2_IfcAreaMeasure_type), true)); + attributes.push_back(new attribute("TransverseBarCrossSectionArea", new named_type(IFC4X3_ADD2_IfcAreaMeasure_type), true)); + attributes.push_back(new attribute("LongitudinalBarSpacing", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("TransverseBarSpacing", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcReinforcingMeshTypeEnum_type), true)); + std::vector derived; derived.reserve(18); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcReinforcingMesh_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(11); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcReinforcingMeshTypeEnum_type), false)); + attributes.push_back(new attribute("MeshLength", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("MeshWidth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("LongitudinalBarNominalDiameter", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("TransverseBarNominalDiameter", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("LongitudinalBarCrossSectionArea", new named_type(IFC4X3_ADD2_IfcAreaMeasure_type), true)); + attributes.push_back(new attribute("TransverseBarCrossSectionArea", new named_type(IFC4X3_ADD2_IfcAreaMeasure_type), true)); + attributes.push_back(new attribute("LongitudinalBarSpacing", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("TransverseBarSpacing", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("BendingShapeCode", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("BendingParameters", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcBendingParameterSelect_type)), true)); + std::vector derived; derived.reserve(20); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcReinforcingMeshType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatingElement", new named_type(IFC4X3_ADD2_IfcElement_type), false)); + attributes.push_back(new attribute("RelatedSurfaceFeatures", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcSurfaceFeature_type)), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelAdheresToElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatingObject", new named_type(IFC4X3_ADD2_IfcObjectDefinition_type), false)); + attributes.push_back(new attribute("RelatedObjects", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcObjectDefinition_type)), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelAggregates_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatedObjects", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcObjectDefinition_type)), false)); + attributes.push_back(new attribute("RelatedObjectsType", new named_type(IFC4X3_ADD2_IfcStrippedOptional_type), true)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelAssigns_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatingActor", new named_type(IFC4X3_ADD2_IfcActor_type), false)); + attributes.push_back(new attribute("ActingRole", new named_type(IFC4X3_ADD2_IfcActorRole_type), true)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelAssignsToActor_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("RelatingControl", new named_type(IFC4X3_ADD2_IfcControl_type), false)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelAssignsToControl_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("RelatingGroup", new named_type(IFC4X3_ADD2_IfcGroup_type), false)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelAssignsToGroup_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Factor", new named_type(IFC4X3_ADD2_IfcRatioMeasure_type), false)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelAssignsToGroupByFactor_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatingProcess", new named_type(IFC4X3_ADD2_IfcProcessSelect_type), false)); + attributes.push_back(new attribute("QuantityInProcess", new named_type(IFC4X3_ADD2_IfcMeasureWithUnit_type), true)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelAssignsToProcess_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("RelatingProduct", new named_type(IFC4X3_ADD2_IfcProductSelect_type), false)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelAssignsToProduct_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("RelatingResource", new named_type(IFC4X3_ADD2_IfcResourceSelect_type), false)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelAssignsToResource_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("RelatedObjects", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcDefinitionSelect_type)), false)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelAssociates_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("RelatingApproval", new named_type(IFC4X3_ADD2_IfcApproval_type), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelAssociatesApproval_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("RelatingClassification", new named_type(IFC4X3_ADD2_IfcClassificationSelect_type), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelAssociatesClassification_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Intent", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("RelatingConstraint", new named_type(IFC4X3_ADD2_IfcConstraint_type), false)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelAssociatesConstraint_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("RelatingDocument", new named_type(IFC4X3_ADD2_IfcDocumentSelect_type), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelAssociatesDocument_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("RelatingLibrary", new named_type(IFC4X3_ADD2_IfcLibrarySelect_type), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelAssociatesLibrary_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("RelatingMaterial", new named_type(IFC4X3_ADD2_IfcMaterialSelect_type), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelAssociatesMaterial_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("RelatingProfileDef", new named_type(IFC4X3_ADD2_IfcProfileDef_type), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelAssociatesProfileDef_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelConnects_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("ConnectionGeometry", new named_type(IFC4X3_ADD2_IfcConnectionGeometry_type), true)); + attributes.push_back(new attribute("RelatingElement", new named_type(IFC4X3_ADD2_IfcElement_type), false)); + attributes.push_back(new attribute("RelatedElement", new named_type(IFC4X3_ADD2_IfcElement_type), false)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelConnectsElements_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("RelatingPriorities", new aggregation_type(aggregation_type::list_type, 0, -1, new named_type(IFC4X3_ADD2_IfcInteger_type)), false)); + attributes.push_back(new attribute("RelatedPriorities", new aggregation_type(aggregation_type::list_type, 0, -1, new named_type(IFC4X3_ADD2_IfcInteger_type)), false)); + attributes.push_back(new attribute("RelatedConnectionType", new named_type(IFC4X3_ADD2_IfcConnectionTypeEnum_type), false)); + attributes.push_back(new attribute("RelatingConnectionType", new named_type(IFC4X3_ADD2_IfcConnectionTypeEnum_type), false)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelConnectsPathElements_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatingPort", new named_type(IFC4X3_ADD2_IfcPort_type), false)); + attributes.push_back(new attribute("RelatedElement", new named_type(IFC4X3_ADD2_IfcDistributionElement_type), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelConnectsPortToElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("RelatingPort", new named_type(IFC4X3_ADD2_IfcPort_type), false)); + attributes.push_back(new attribute("RelatedPort", new named_type(IFC4X3_ADD2_IfcPort_type), false)); + attributes.push_back(new attribute("RealizingElement", new named_type(IFC4X3_ADD2_IfcElement_type), true)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelConnectsPorts_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatingElement", new named_type(IFC4X3_ADD2_IfcStructuralActivityAssignmentSelect_type), false)); + attributes.push_back(new attribute("RelatedStructuralActivity", new named_type(IFC4X3_ADD2_IfcStructuralActivity_type), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelConnectsStructuralActivity_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(6); + attributes.push_back(new attribute("RelatingStructuralMember", new named_type(IFC4X3_ADD2_IfcStructuralMember_type), false)); + attributes.push_back(new attribute("RelatedStructuralConnection", new named_type(IFC4X3_ADD2_IfcStructuralConnection_type), false)); + attributes.push_back(new attribute("AppliedCondition", new named_type(IFC4X3_ADD2_IfcBoundaryCondition_type), true)); + attributes.push_back(new attribute("AdditionalConditions", new named_type(IFC4X3_ADD2_IfcStructuralConnectionCondition_type), true)); + attributes.push_back(new attribute("SupportedLength", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("ConditionCoordinateSystem", new named_type(IFC4X3_ADD2_IfcAxis2Placement3D_type), true)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelConnectsStructuralMember_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("ConnectionConstraint", new named_type(IFC4X3_ADD2_IfcConnectionGeometry_type), false)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelConnectsWithEccentricity_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RealizingElements", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcElement_type)), false)); + attributes.push_back(new attribute("ConnectionType", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelConnectsWithRealizingElements_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatedElements", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcProduct_type)), false)); + attributes.push_back(new attribute("RelatingStructure", new named_type(IFC4X3_ADD2_IfcSpatialElement_type), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelContainedInSpatialStructure_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatingBuildingElement", new named_type(IFC4X3_ADD2_IfcElement_type), false)); + attributes.push_back(new attribute("RelatedCoverings", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcCovering_type)), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelCoversBldgElements_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatingSpace", new named_type(IFC4X3_ADD2_IfcSpace_type), false)); + attributes.push_back(new attribute("RelatedCoverings", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcCovering_type)), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelCoversSpaces_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatingContext", new named_type(IFC4X3_ADD2_IfcContext_type), false)); + attributes.push_back(new attribute("RelatedDefinitions", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcDefinitionSelect_type)), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelDeclares_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelDecomposes_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelDefines_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatedObjects", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcObject_type)), false)); + attributes.push_back(new attribute("RelatingObject", new named_type(IFC4X3_ADD2_IfcObject_type), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelDefinesByObject_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatedObjects", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcObjectDefinition_type)), false)); + attributes.push_back(new attribute("RelatingPropertyDefinition", new named_type(IFC4X3_ADD2_IfcPropertySetDefinitionSelect_type), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelDefinesByProperties_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatedPropertySets", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcPropertySetDefinition_type)), false)); + attributes.push_back(new attribute("RelatingTemplate", new named_type(IFC4X3_ADD2_IfcPropertySetTemplate_type), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelDefinesByTemplate_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatedObjects", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcObject_type)), false)); + attributes.push_back(new attribute("RelatingType", new named_type(IFC4X3_ADD2_IfcTypeObject_type), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelDefinesByType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatingOpeningElement", new named_type(IFC4X3_ADD2_IfcOpeningElement_type), false)); + attributes.push_back(new attribute("RelatedBuildingElement", new named_type(IFC4X3_ADD2_IfcElement_type), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelFillsElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatedControlElements", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcDistributionControlElement_type)), false)); + attributes.push_back(new attribute("RelatingFlowElement", new named_type(IFC4X3_ADD2_IfcDistributionFlowElement_type), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelFlowControlElements_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(6); + attributes.push_back(new attribute("RelatingElement", new named_type(IFC4X3_ADD2_IfcInterferenceSelect_type), false)); + attributes.push_back(new attribute("RelatedElement", new named_type(IFC4X3_ADD2_IfcInterferenceSelect_type), false)); + attributes.push_back(new attribute("InterferenceGeometry", new named_type(IFC4X3_ADD2_IfcConnectionGeometry_type), true)); + attributes.push_back(new attribute("InterferenceType", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + attributes.push_back(new attribute("ImpliedOrder", new named_type(IFC4X3_ADD2_IfcLogical_type), false)); + attributes.push_back(new attribute("InterferenceSpace", new named_type(IFC4X3_ADD2_IfcSpatialZone_type), true)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelInterferesElements_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatingObject", new named_type(IFC4X3_ADD2_IfcObjectDefinition_type), false)); + attributes.push_back(new attribute("RelatedObjects", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcObjectDefinition_type)), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelNests_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatingPositioningElement", new named_type(IFC4X3_ADD2_IfcPositioningElement_type), false)); + attributes.push_back(new attribute("RelatedProducts", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcProduct_type)), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelPositions_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatingElement", new named_type(IFC4X3_ADD2_IfcElement_type), false)); + attributes.push_back(new attribute("RelatedFeatureElement", new named_type(IFC4X3_ADD2_IfcFeatureElementAddition_type), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelProjectsElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatedElements", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcSpatialReferenceSelect_type)), false)); + attributes.push_back(new attribute("RelatingStructure", new named_type(IFC4X3_ADD2_IfcSpatialElement_type), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelReferencedInSpatialStructure_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("RelatingProcess", new named_type(IFC4X3_ADD2_IfcProcess_type), false)); + attributes.push_back(new attribute("RelatedProcess", new named_type(IFC4X3_ADD2_IfcProcess_type), false)); + attributes.push_back(new attribute("TimeLag", new named_type(IFC4X3_ADD2_IfcLagTime_type), true)); + attributes.push_back(new attribute("SequenceType", new named_type(IFC4X3_ADD2_IfcSequenceEnum_type), true)); + attributes.push_back(new attribute("UserDefinedSequenceType", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelSequence_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatingSystem", new named_type(IFC4X3_ADD2_IfcSystem_type), false)); + attributes.push_back(new attribute("RelatedBuildings", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcSpatialElement_type)), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelServicesBuildings_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("RelatingSpace", new named_type(IFC4X3_ADD2_IfcSpaceBoundarySelect_type), false)); + attributes.push_back(new attribute("RelatedBuildingElement", new named_type(IFC4X3_ADD2_IfcElement_type), false)); + attributes.push_back(new attribute("ConnectionGeometry", new named_type(IFC4X3_ADD2_IfcConnectionGeometry_type), true)); + attributes.push_back(new attribute("PhysicalOrVirtualBoundary", new named_type(IFC4X3_ADD2_IfcPhysicalOrVirtualEnum_type), false)); + attributes.push_back(new attribute("InternalOrExternalBoundary", new named_type(IFC4X3_ADD2_IfcInternalOrExternalEnum_type), false)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelSpaceBoundary_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("ParentBoundary", new named_type(IFC4X3_ADD2_IfcRelSpaceBoundary1stLevel_type), true)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelSpaceBoundary1stLevel_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("CorrespondingBoundary", new named_type(IFC4X3_ADD2_IfcRelSpaceBoundary2ndLevel_type), true)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelSpaceBoundary2ndLevel_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatingBuildingElement", new named_type(IFC4X3_ADD2_IfcElement_type), false)); + attributes.push_back(new attribute("RelatedOpeningElement", new named_type(IFC4X3_ADD2_IfcFeatureElementSubtraction_type), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelVoidsElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRelationship_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("ParamLength", new named_type(IFC4X3_ADD2_IfcParameterValue_type), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcReparametrisedCompositeCurveSegment_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("ContextOfItems", new named_type(IFC4X3_ADD2_IfcRepresentationContext_type), false)); + attributes.push_back(new attribute("RepresentationIdentifier", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("RepresentationType", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Items", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcRepresentationItem_type)), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRepresentation_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("ContextIdentifier", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("ContextType", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRepresentationContext_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(0); + + IFC4X3_ADD2_IfcRepresentationItem_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("MappingOrigin", new named_type(IFC4X3_ADD2_IfcAxis2Placement_type), false)); + attributes.push_back(new attribute("MappedRepresentation", new named_type(IFC4X3_ADD2_IfcRepresentation_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRepresentationMap_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Identification", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + attributes.push_back(new attribute("LongDescription", new named_type(IFC4X3_ADD2_IfcText_type), true)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcResource_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatedResourceObjects", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcResourceObjectSelect_type)), false)); + attributes.push_back(new attribute("RelatingApproval", new named_type(IFC4X3_ADD2_IfcApproval_type), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcResourceApprovalRelationship_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RelatingConstraint", new named_type(IFC4X3_ADD2_IfcConstraint_type), false)); + attributes.push_back(new attribute("RelatedResourceObjects", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcResourceObjectSelect_type)), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcResourceConstraintRelationship_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcResourceLevelRelationship_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(15); + attributes.push_back(new attribute("ScheduleWork", new named_type(IFC4X3_ADD2_IfcDuration_type), true)); + attributes.push_back(new attribute("ScheduleUsage", new named_type(IFC4X3_ADD2_IfcPositiveRatioMeasure_type), true)); + attributes.push_back(new attribute("ScheduleStart", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + attributes.push_back(new attribute("ScheduleFinish", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + attributes.push_back(new attribute("ScheduleContour", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("LevelingDelay", new named_type(IFC4X3_ADD2_IfcDuration_type), true)); + attributes.push_back(new attribute("IsOverAllocated", new named_type(IFC4X3_ADD2_IfcBoolean_type), true)); + attributes.push_back(new attribute("StatusTime", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + attributes.push_back(new attribute("ActualWork", new named_type(IFC4X3_ADD2_IfcDuration_type), true)); + attributes.push_back(new attribute("ActualUsage", new named_type(IFC4X3_ADD2_IfcPositiveRatioMeasure_type), true)); + attributes.push_back(new attribute("ActualStart", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + attributes.push_back(new attribute("ActualFinish", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + attributes.push_back(new attribute("RemainingWork", new named_type(IFC4X3_ADD2_IfcDuration_type), true)); + attributes.push_back(new attribute("RemainingUsage", new named_type(IFC4X3_ADD2_IfcPositiveRatioMeasure_type), true)); + attributes.push_back(new attribute("Completion", new named_type(IFC4X3_ADD2_IfcPositiveRatioMeasure_type), true)); + std::vector derived; derived.reserve(18); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcResourceTime_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Axis", new named_type(IFC4X3_ADD2_IfcAxis1Placement_type), false)); + attributes.push_back(new attribute("Angle", new named_type(IFC4X3_ADD2_IfcPlaneAngleMeasure_type), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRevolvedAreaSolid_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("EndSweptArea", new named_type(IFC4X3_ADD2_IfcProfileDef_type), false)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRevolvedAreaSolidTapered_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Height", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("BottomRadius", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRightCircularCone_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Height", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("Radius", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRightCircularCylinder_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("FirstCoordinate", new named_type(IFC4X3_ADD2_IfcMeasureValue_type), false)); + attributes.push_back(new attribute("SecondCoordinate", new named_type(IFC4X3_ADD2_IfcMeasureValue_type), false)); + attributes.push_back(new attribute("Height", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRigidOperation_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcRoadTypeEnum_type), true)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRoad_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcRoadPartTypeEnum_type), true)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRoadPart_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcRoofTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRoof_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcRoofTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRoofType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("GlobalId", new named_type(IFC4X3_ADD2_IfcGloballyUniqueId_type), false)); + attributes.push_back(new attribute("OwnerHistory", new named_type(IFC4X3_ADD2_IfcOwnerHistory_type), true)); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRoot_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("RoundingRadius", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcRoundedRectangleProfileDef_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Prefix", new named_type(IFC4X3_ADD2_IfcSIPrefix_type), true)); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcSIUnitName_type), false)); + std::vector derived; derived.reserve(4); + derived.push_back(true); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSIUnit_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcSanitaryTerminalTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSanitaryTerminal_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcSanitaryTerminalTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSanitaryTerminalType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("DataOrigin", new named_type(IFC4X3_ADD2_IfcDataOriginEnum_type), true)); + attributes.push_back(new attribute("UserDefinedDataOrigin", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSchedulingTime_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSeamCurve_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("QuadraticTerm", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + attributes.push_back(new attribute("LinearTerm", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("ConstantTerm", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSecondOrderPolynomialSpiral_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("SectionType", new named_type(IFC4X3_ADD2_IfcSectionTypeEnum_type), false)); + attributes.push_back(new attribute("StartProfile", new named_type(IFC4X3_ADD2_IfcProfileDef_type), false)); + attributes.push_back(new attribute("EndProfile", new named_type(IFC4X3_ADD2_IfcProfileDef_type), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSectionProperties_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(6); + attributes.push_back(new attribute("LongitudinalStartPosition", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + attributes.push_back(new attribute("LongitudinalEndPosition", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + attributes.push_back(new attribute("TransversePosition", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("ReinforcementRole", new named_type(IFC4X3_ADD2_IfcReinforcingBarRoleEnum_type), false)); + attributes.push_back(new attribute("SectionDefinition", new named_type(IFC4X3_ADD2_IfcSectionProperties_type), false)); + attributes.push_back(new attribute("CrossSectionReinforcementDefinitions", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcReinforcementBarProperties_type)), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSectionReinforcementProperties_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Directrix", new named_type(IFC4X3_ADD2_IfcCurve_type), false)); + attributes.push_back(new attribute("CrossSections", new aggregation_type(aggregation_type::list_type, 2, -1, new named_type(IFC4X3_ADD2_IfcProfileDef_type)), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSectionedSolid_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("CrossSectionPositions", new aggregation_type(aggregation_type::list_type, 2, -1, new named_type(IFC4X3_ADD2_IfcAxis2PlacementLinear_type)), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSectionedSolidHorizontal_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("SpineCurve", new named_type(IFC4X3_ADD2_IfcCompositeCurve_type), false)); + attributes.push_back(new attribute("CrossSections", new aggregation_type(aggregation_type::list_type, 2, -1, new named_type(IFC4X3_ADD2_IfcProfileDef_type)), false)); + attributes.push_back(new attribute("CrossSectionPositions", new aggregation_type(aggregation_type::list_type, 2, -1, new named_type(IFC4X3_ADD2_IfcAxis2Placement3D_type)), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSectionedSpine_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Directrix", new named_type(IFC4X3_ADD2_IfcCurve_type), false)); + attributes.push_back(new attribute("CrossSectionPositions", new aggregation_type(aggregation_type::list_type, 2, -1, new named_type(IFC4X3_ADD2_IfcAxis2PlacementLinear_type)), false)); + attributes.push_back(new attribute("CrossSections", new aggregation_type(aggregation_type::list_type, 2, -1, new named_type(IFC4X3_ADD2_IfcProfileDef_type)), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSectionedSurface_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Transition", new named_type(IFC4X3_ADD2_IfcTransitionCode_type), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcSegment_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("BaseCurve", new named_type(IFC4X3_ADD2_IfcBoundedCurve_type), false)); + attributes.push_back(new attribute("EndPoint", new named_type(IFC4X3_ADD2_IfcPlacement_type), true)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSegmentedReferenceCurve_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcSensorTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSensor_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcSensorTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSensorType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(8); + attributes.push_back(new attribute("SepticTerm", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + attributes.push_back(new attribute("SexticTerm", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("QuinticTerm", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("QuarticTerm", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("CubicTerm", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("QuadraticTerm", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("LinearTerm", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("ConstantTerm", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSeventhOrderPolynomialSpiral_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcShadingDeviceTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcShadingDevice_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcShadingDeviceTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcShadingDeviceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("ShapeRepresentations", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcShapeModel_type)), false)); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("ProductDefinitional", new named_type(IFC4X3_ADD2_IfcLogical_type), false)); + attributes.push_back(new attribute("PartOfProductDefinitionShape", new named_type(IFC4X3_ADD2_IfcProductRepresentationSelect_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcShapeAspect_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcShapeModel_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcShapeRepresentation_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("SbsmBoundary", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcShell_type)), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcShellBasedSurfaceModel_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcSignTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSign_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcSignTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSignType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcSignalTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSignal_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcSignalTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSignalType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSimpleProperty_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(8); + attributes.push_back(new attribute("TemplateType", new named_type(IFC4X3_ADD2_IfcSimplePropertyTemplateTypeEnum_type), true)); + attributes.push_back(new attribute("PrimaryMeasureType", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("SecondaryMeasureType", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Enumerators", new named_type(IFC4X3_ADD2_IfcPropertyEnumeration_type), true)); + attributes.push_back(new attribute("PrimaryUnit", new named_type(IFC4X3_ADD2_IfcUnit_type), true)); + attributes.push_back(new attribute("SecondaryUnit", new named_type(IFC4X3_ADD2_IfcUnit_type), true)); + attributes.push_back(new attribute("Expression", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("AccessState", new named_type(IFC4X3_ADD2_IfcStateEnum_type), true)); + std::vector derived; derived.reserve(12); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSimplePropertyTemplate_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("SineTerm", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + attributes.push_back(new attribute("LinearTerm", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("ConstantTerm", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSineSpiral_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("RefLatitude", new named_type(IFC4X3_ADD2_IfcCompoundPlaneAngleMeasure_type), true)); + attributes.push_back(new attribute("RefLongitude", new named_type(IFC4X3_ADD2_IfcCompoundPlaneAngleMeasure_type), true)); + attributes.push_back(new attribute("RefElevation", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("LandTitleNumber", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("SiteAddress", new named_type(IFC4X3_ADD2_IfcPostalAddress_type), true)); + std::vector derived; derived.reserve(14); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSite_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcSlabTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSlab_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcSlabTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSlabType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("SlippageX", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("SlippageY", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("SlippageZ", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSlippageConnectionCondition_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcSolarDeviceTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSolarDevice_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcSolarDeviceTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSolarDeviceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(0); + + IFC4X3_ADD2_IfcSolidModel_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcSpaceTypeEnum_type), true)); + attributes.push_back(new attribute("ElevationWithFlooring", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSpace_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcSpaceHeaterTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSpaceHeater_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcSpaceHeaterTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSpaceHeaterType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcSpaceTypeEnum_type), false)); + attributes.push_back(new attribute("LongName", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSpaceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("LongName", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSpatialElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("ElementType", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSpatialElementType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("CompositionType", new named_type(IFC4X3_ADD2_IfcElementCompositionEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSpatialStructureElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSpatialStructureElementType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcSpatialZoneTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSpatialZone_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcSpatialZoneTypeEnum_type), false)); + attributes.push_back(new attribute("LongName", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSpatialZoneType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Radius", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSphere_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Radius", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSphericalSurface_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Position", new named_type(IFC4X3_ADD2_IfcAxis2Placement_type), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcSpiral_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcStackTerminalTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStackTerminal_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcStackTerminalTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStackTerminalType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcStairTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStair_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("NumberOfRisers", new named_type(IFC4X3_ADD2_IfcInteger_type), true)); + attributes.push_back(new attribute("NumberOfTreads", new named_type(IFC4X3_ADD2_IfcInteger_type), true)); + attributes.push_back(new attribute("RiserHeight", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("TreadLength", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcStairFlightTypeEnum_type), true)); + std::vector derived; derived.reserve(13); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStairFlight_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcStairFlightTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStairFlightType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcStairTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStairType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("DestabilizingLoad", new named_type(IFC4X3_ADD2_IfcBoolean_type), true)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralAction_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("AppliedLoad", new named_type(IFC4X3_ADD2_IfcStructuralLoad_type), false)); + attributes.push_back(new attribute("GlobalOrLocal", new named_type(IFC4X3_ADD2_IfcGlobalOrLocalEnum_type), false)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralActivity_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcAnalysisModelTypeEnum_type), false)); + attributes.push_back(new attribute("OrientationOf2DPlane", new named_type(IFC4X3_ADD2_IfcAxis2Placement3D_type), true)); + attributes.push_back(new attribute("LoadedBy", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcStructuralLoadGroup_type)), true)); + attributes.push_back(new attribute("HasResults", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcStructuralResultGroup_type)), true)); + attributes.push_back(new attribute("SharedPlacement", new named_type(IFC4X3_ADD2_IfcObjectPlacement_type), true)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralAnalysisModel_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("AppliedCondition", new named_type(IFC4X3_ADD2_IfcBoundaryCondition_type), true)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralConnection_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcStructuralConnectionCondition_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("ProjectedOrTrue", new named_type(IFC4X3_ADD2_IfcProjectedOrTrueLengthEnum_type), true)); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcStructuralCurveActivityTypeEnum_type), false)); + std::vector derived; derived.reserve(12); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralCurveAction_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("AxisDirection", new named_type(IFC4X3_ADD2_IfcDirection_type), false)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralCurveConnection_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcStructuralCurveMemberTypeEnum_type), false)); + attributes.push_back(new attribute("Axis", new named_type(IFC4X3_ADD2_IfcDirection_type), false)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralCurveMember_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralCurveMemberVarying_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcStructuralCurveActivityTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralCurveReaction_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralItem_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(12); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralLinearAction_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcStructuralLoad_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("SelfWeightCoefficients", new aggregation_type(aggregation_type::list_type, 3, 3, new named_type(IFC4X3_ADD2_IfcRatioMeasure_type)), true)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralLoadCase_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Values", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcStructuralLoadOrResult_type)), false)); + attributes.push_back(new attribute("Locations", new aggregation_type(aggregation_type::list_type, 1, -1, new aggregation_type(aggregation_type::list_type, 1, 2, new named_type(IFC4X3_ADD2_IfcLengthMeasure_type))), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralLoadConfiguration_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcLoadGroupTypeEnum_type), false)); + attributes.push_back(new attribute("ActionType", new named_type(IFC4X3_ADD2_IfcActionTypeEnum_type), false)); + attributes.push_back(new attribute("ActionSource", new named_type(IFC4X3_ADD2_IfcActionSourceTypeEnum_type), false)); + attributes.push_back(new attribute("Coefficient", new named_type(IFC4X3_ADD2_IfcRatioMeasure_type), true)); + attributes.push_back(new attribute("Purpose", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralLoadGroup_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(6); + attributes.push_back(new attribute("LinearForceX", new named_type(IFC4X3_ADD2_IfcLinearForceMeasure_type), true)); + attributes.push_back(new attribute("LinearForceY", new named_type(IFC4X3_ADD2_IfcLinearForceMeasure_type), true)); + attributes.push_back(new attribute("LinearForceZ", new named_type(IFC4X3_ADD2_IfcLinearForceMeasure_type), true)); + attributes.push_back(new attribute("LinearMomentX", new named_type(IFC4X3_ADD2_IfcLinearMomentMeasure_type), true)); + attributes.push_back(new attribute("LinearMomentY", new named_type(IFC4X3_ADD2_IfcLinearMomentMeasure_type), true)); + attributes.push_back(new attribute("LinearMomentZ", new named_type(IFC4X3_ADD2_IfcLinearMomentMeasure_type), true)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralLoadLinearForce_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcStructuralLoadOrResult_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("PlanarForceX", new named_type(IFC4X3_ADD2_IfcPlanarForceMeasure_type), true)); + attributes.push_back(new attribute("PlanarForceY", new named_type(IFC4X3_ADD2_IfcPlanarForceMeasure_type), true)); + attributes.push_back(new attribute("PlanarForceZ", new named_type(IFC4X3_ADD2_IfcPlanarForceMeasure_type), true)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralLoadPlanarForce_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(6); + attributes.push_back(new attribute("DisplacementX", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("DisplacementY", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("DisplacementZ", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("RotationalDisplacementRX", new named_type(IFC4X3_ADD2_IfcPlaneAngleMeasure_type), true)); + attributes.push_back(new attribute("RotationalDisplacementRY", new named_type(IFC4X3_ADD2_IfcPlaneAngleMeasure_type), true)); + attributes.push_back(new attribute("RotationalDisplacementRZ", new named_type(IFC4X3_ADD2_IfcPlaneAngleMeasure_type), true)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralLoadSingleDisplacement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Distortion", new named_type(IFC4X3_ADD2_IfcCurvatureMeasure_type), true)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralLoadSingleDisplacementDistortion_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(6); + attributes.push_back(new attribute("ForceX", new named_type(IFC4X3_ADD2_IfcForceMeasure_type), true)); + attributes.push_back(new attribute("ForceY", new named_type(IFC4X3_ADD2_IfcForceMeasure_type), true)); + attributes.push_back(new attribute("ForceZ", new named_type(IFC4X3_ADD2_IfcForceMeasure_type), true)); + attributes.push_back(new attribute("MomentX", new named_type(IFC4X3_ADD2_IfcTorqueMeasure_type), true)); + attributes.push_back(new attribute("MomentY", new named_type(IFC4X3_ADD2_IfcTorqueMeasure_type), true)); + attributes.push_back(new attribute("MomentZ", new named_type(IFC4X3_ADD2_IfcTorqueMeasure_type), true)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralLoadSingleForce_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("WarpingMoment", new named_type(IFC4X3_ADD2_IfcWarpingMomentMeasure_type), true)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralLoadSingleForceWarping_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcStructuralLoadStatic_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("DeltaTConstant", new named_type(IFC4X3_ADD2_IfcThermodynamicTemperatureMeasure_type), true)); + attributes.push_back(new attribute("DeltaTY", new named_type(IFC4X3_ADD2_IfcThermodynamicTemperatureMeasure_type), true)); + attributes.push_back(new attribute("DeltaTZ", new named_type(IFC4X3_ADD2_IfcThermodynamicTemperatureMeasure_type), true)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralLoadTemperature_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralMember_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(12); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralPlanarAction_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralPointAction_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("ConditionCoordinateSystem", new named_type(IFC4X3_ADD2_IfcAxis2Placement3D_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralPointConnection_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralPointReaction_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralReaction_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("TheoryType", new named_type(IFC4X3_ADD2_IfcAnalysisTheoryTypeEnum_type), false)); + attributes.push_back(new attribute("ResultForLoadGroup", new named_type(IFC4X3_ADD2_IfcStructuralLoadGroup_type), true)); + attributes.push_back(new attribute("IsLinear", new named_type(IFC4X3_ADD2_IfcBoolean_type), false)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralResultGroup_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("ProjectedOrTrue", new named_type(IFC4X3_ADD2_IfcProjectedOrTrueLengthEnum_type), true)); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcStructuralSurfaceActivityTypeEnum_type), false)); + std::vector derived; derived.reserve(12); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralSurfaceAction_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralSurfaceConnection_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcStructuralSurfaceMemberTypeEnum_type), false)); + attributes.push_back(new attribute("Thickness", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralSurfaceMember_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralSurfaceMemberVarying_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcStructuralSurfaceActivityTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStructuralSurfaceReaction_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStyleModel_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Item", new named_type(IFC4X3_ADD2_IfcRepresentationItem_type), true)); + attributes.push_back(new attribute("Styles", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcPresentationStyle_type)), false)); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStyledItem_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcStyledRepresentation_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcSubContractResourceTypeEnum_type), true)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSubContractResource_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcSubContractResourceTypeEnum_type), false)); + std::vector derived; derived.reserve(12); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSubContractResourceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("ParentEdge", new named_type(IFC4X3_ADD2_IfcEdge_type), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSubedge_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(0); + + IFC4X3_ADD2_IfcSurface_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Curve3D", new named_type(IFC4X3_ADD2_IfcCurve_type), false)); + attributes.push_back(new attribute("AssociatedGeometry", new aggregation_type(aggregation_type::list_type, 1, 2, new named_type(IFC4X3_ADD2_IfcPcurve_type)), false)); + attributes.push_back(new attribute("MasterRepresentation", new named_type(IFC4X3_ADD2_IfcPreferredSurfaceCurveRepresentation_type), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSurfaceCurve_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("ReferenceSurface", new named_type(IFC4X3_ADD2_IfcSurface_type), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSurfaceCurveSweptAreaSolid_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcSurfaceFeatureTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSurfaceFeature_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("ExtrudedDirection", new named_type(IFC4X3_ADD2_IfcDirection_type), false)); + attributes.push_back(new attribute("Depth", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSurfaceOfLinearExtrusion_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("AxisPosition", new named_type(IFC4X3_ADD2_IfcAxis1Placement_type), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSurfaceOfRevolution_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("SurfaceReinforcement1", new aggregation_type(aggregation_type::list_type, 2, 3, new named_type(IFC4X3_ADD2_IfcLengthMeasure_type)), true)); + attributes.push_back(new attribute("SurfaceReinforcement2", new aggregation_type(aggregation_type::list_type, 2, 3, new named_type(IFC4X3_ADD2_IfcLengthMeasure_type)), true)); + attributes.push_back(new attribute("ShearReinforcement", new named_type(IFC4X3_ADD2_IfcRatioMeasure_type), true)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSurfaceReinforcementArea_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Side", new named_type(IFC4X3_ADD2_IfcSurfaceSide_type), false)); + attributes.push_back(new attribute("Styles", new aggregation_type(aggregation_type::set_type, 1, 5, new named_type(IFC4X3_ADD2_IfcSurfaceStyleElementSelect_type)), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSurfaceStyle_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("DiffuseTransmissionColour", new named_type(IFC4X3_ADD2_IfcColourRgb_type), false)); + attributes.push_back(new attribute("DiffuseReflectionColour", new named_type(IFC4X3_ADD2_IfcColourRgb_type), false)); + attributes.push_back(new attribute("TransmissionColour", new named_type(IFC4X3_ADD2_IfcColourRgb_type), false)); + attributes.push_back(new attribute("ReflectanceColour", new named_type(IFC4X3_ADD2_IfcColourRgb_type), false)); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSurfaceStyleLighting_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RefractionIndex", new named_type(IFC4X3_ADD2_IfcReal_type), true)); + attributes.push_back(new attribute("DispersionFactor", new named_type(IFC4X3_ADD2_IfcReal_type), true)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSurfaceStyleRefraction_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(7); + attributes.push_back(new attribute("DiffuseColour", new named_type(IFC4X3_ADD2_IfcColourOrFactor_type), true)); + attributes.push_back(new attribute("TransmissionColour", new named_type(IFC4X3_ADD2_IfcColourOrFactor_type), true)); + attributes.push_back(new attribute("DiffuseTransmissionColour", new named_type(IFC4X3_ADD2_IfcColourOrFactor_type), true)); + attributes.push_back(new attribute("ReflectionColour", new named_type(IFC4X3_ADD2_IfcColourOrFactor_type), true)); + attributes.push_back(new attribute("SpecularColour", new named_type(IFC4X3_ADD2_IfcColourOrFactor_type), true)); + attributes.push_back(new attribute("SpecularHighlight", new named_type(IFC4X3_ADD2_IfcSpecularHighlightSelect_type), true)); + attributes.push_back(new attribute("ReflectanceMethod", new named_type(IFC4X3_ADD2_IfcReflectanceMethodEnum_type), false)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSurfaceStyleRendering_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("SurfaceColour", new named_type(IFC4X3_ADD2_IfcColourRgb_type), false)); + attributes.push_back(new attribute("Transparency", new named_type(IFC4X3_ADD2_IfcNormalisedRatioMeasure_type), true)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSurfaceStyleShading_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Textures", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcSurfaceTexture_type)), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcSurfaceStyleWithTextures_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("RepeatS", new named_type(IFC4X3_ADD2_IfcBoolean_type), false)); + attributes.push_back(new attribute("RepeatT", new named_type(IFC4X3_ADD2_IfcBoolean_type), false)); + attributes.push_back(new attribute("Mode", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + attributes.push_back(new attribute("TextureTransform", new named_type(IFC4X3_ADD2_IfcCartesianTransformationOperator2D_type), true)); + attributes.push_back(new attribute("Parameter", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcIdentifier_type)), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSurfaceTexture_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("SweptArea", new named_type(IFC4X3_ADD2_IfcProfileDef_type), false)); + attributes.push_back(new attribute("Position", new named_type(IFC4X3_ADD2_IfcAxis2Placement3D_type), true)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSweptAreaSolid_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("Directrix", new named_type(IFC4X3_ADD2_IfcCurve_type), false)); + attributes.push_back(new attribute("Radius", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("InnerRadius", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("StartParam", new named_type(IFC4X3_ADD2_IfcParameterValue_type), true)); + attributes.push_back(new attribute("EndParam", new named_type(IFC4X3_ADD2_IfcParameterValue_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSweptDiskSolid_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("FilletRadius", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), true)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSweptDiskSolidPolygonal_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("SweptCurve", new named_type(IFC4X3_ADD2_IfcProfileDef_type), false)); + attributes.push_back(new attribute("Position", new named_type(IFC4X3_ADD2_IfcAxis2Placement3D_type), true)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSweptSurface_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcSwitchingDeviceTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSwitchingDevice_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcSwitchingDeviceTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSwitchingDeviceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSystem_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcSystemFurnitureElementTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSystemFurnitureElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcSystemFurnitureElementTypeEnum_type), true)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcSystemFurnitureElementType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(9); + attributes.push_back(new attribute("Depth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("FlangeWidth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("WebThickness", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("FlangeThickness", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("FilletRadius", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), true)); + attributes.push_back(new attribute("FlangeEdgeRadius", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), true)); + attributes.push_back(new attribute("WebEdgeRadius", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), true)); + attributes.push_back(new attribute("WebSlope", new named_type(IFC4X3_ADD2_IfcPlaneAngleMeasure_type), true)); + attributes.push_back(new attribute("FlangeSlope", new named_type(IFC4X3_ADD2_IfcPlaneAngleMeasure_type), true)); + std::vector derived; derived.reserve(12); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTShapeProfileDef_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Rows", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcTableRow_type)), true)); + attributes.push_back(new attribute("Columns", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcTableColumn_type)), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTable_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("Identifier", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("Unit", new named_type(IFC4X3_ADD2_IfcUnit_type), true)); + attributes.push_back(new attribute("ReferencePath", new named_type(IFC4X3_ADD2_IfcReference_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTableColumn_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RowCells", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcValue_type)), true)); + attributes.push_back(new attribute("IsHeading", new named_type(IFC4X3_ADD2_IfcBoolean_type), true)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTableRow_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcTankTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTank_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcTankTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTankType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(6); + attributes.push_back(new attribute("Status", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("WorkMethod", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("IsMilestone", new named_type(IFC4X3_ADD2_IfcBoolean_type), false)); + attributes.push_back(new attribute("Priority", new named_type(IFC4X3_ADD2_IfcInteger_type), true)); + attributes.push_back(new attribute("TaskTime", new named_type(IFC4X3_ADD2_IfcTaskTime_type), true)); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcTaskTypeEnum_type), true)); + std::vector derived; derived.reserve(13); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTask_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(17); + attributes.push_back(new attribute("DurationType", new named_type(IFC4X3_ADD2_IfcTaskDurationEnum_type), true)); + attributes.push_back(new attribute("ScheduleDuration", new named_type(IFC4X3_ADD2_IfcDuration_type), true)); + attributes.push_back(new attribute("ScheduleStart", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + attributes.push_back(new attribute("ScheduleFinish", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + attributes.push_back(new attribute("EarlyStart", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + attributes.push_back(new attribute("EarlyFinish", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + attributes.push_back(new attribute("LateStart", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + attributes.push_back(new attribute("LateFinish", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + attributes.push_back(new attribute("FreeFloat", new named_type(IFC4X3_ADD2_IfcDuration_type), true)); + attributes.push_back(new attribute("TotalFloat", new named_type(IFC4X3_ADD2_IfcDuration_type), true)); + attributes.push_back(new attribute("IsCritical", new named_type(IFC4X3_ADD2_IfcBoolean_type), true)); + attributes.push_back(new attribute("StatusTime", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + attributes.push_back(new attribute("ActualDuration", new named_type(IFC4X3_ADD2_IfcDuration_type), true)); + attributes.push_back(new attribute("ActualStart", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + attributes.push_back(new attribute("ActualFinish", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + attributes.push_back(new attribute("RemainingTime", new named_type(IFC4X3_ADD2_IfcDuration_type), true)); + attributes.push_back(new attribute("Completion", new named_type(IFC4X3_ADD2_IfcPositiveRatioMeasure_type), true)); + std::vector derived; derived.reserve(20); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTaskTime_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Recurrence", new named_type(IFC4X3_ADD2_IfcRecurrencePattern_type), false)); + std::vector derived; derived.reserve(21); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTaskTimeRecurring_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcTaskTypeEnum_type), false)); + attributes.push_back(new attribute("WorkMethod", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(11); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTaskType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(6); + attributes.push_back(new attribute("TelephoneNumbers", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcLabel_type)), true)); + attributes.push_back(new attribute("FacsimileNumbers", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcLabel_type)), true)); + attributes.push_back(new attribute("PagerNumber", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("ElectronicMailAddresses", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcLabel_type)), true)); + attributes.push_back(new attribute("WWWHomePageURL", new named_type(IFC4X3_ADD2_IfcURIReference_type), true)); + attributes.push_back(new attribute("MessagingIDs", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcURIReference_type)), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTelecomAddress_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(8); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcTendonTypeEnum_type), true)); + attributes.push_back(new attribute("NominalDiameter", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("CrossSectionArea", new named_type(IFC4X3_ADD2_IfcAreaMeasure_type), true)); + attributes.push_back(new attribute("TensionForce", new named_type(IFC4X3_ADD2_IfcForceMeasure_type), true)); + attributes.push_back(new attribute("PreStress", new named_type(IFC4X3_ADD2_IfcPressureMeasure_type), true)); + attributes.push_back(new attribute("FrictionCoefficient", new named_type(IFC4X3_ADD2_IfcNormalisedRatioMeasure_type), true)); + attributes.push_back(new attribute("AnchorageSlip", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("MinCurvatureRadius", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + std::vector derived; derived.reserve(17); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTendon_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcTendonAnchorTypeEnum_type), true)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTendonAnchor_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcTendonAnchorTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTendonAnchorType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcTendonConduitTypeEnum_type), true)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTendonConduit_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcTendonConduitTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTendonConduitType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcTendonTypeEnum_type), false)); + attributes.push_back(new attribute("NominalDiameter", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("CrossSectionArea", new named_type(IFC4X3_ADD2_IfcAreaMeasure_type), true)); + attributes.push_back(new attribute("SheathDiameter", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + std::vector derived; derived.reserve(13); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTendonType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Coordinates", new named_type(IFC4X3_ADD2_IfcCartesianPointList3D_type), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcTessellatedFaceSet_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(0); + + IFC4X3_ADD2_IfcTessellatedItem_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Literal", new named_type(IFC4X3_ADD2_IfcPresentableText_type), false)); + attributes.push_back(new attribute("Placement", new named_type(IFC4X3_ADD2_IfcAxis2Placement_type), false)); + attributes.push_back(new attribute("Path", new named_type(IFC4X3_ADD2_IfcTextPath_type), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTextLiteral_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Extent", new named_type(IFC4X3_ADD2_IfcPlanarExtent_type), false)); + attributes.push_back(new attribute("BoxAlignment", new named_type(IFC4X3_ADD2_IfcBoxAlignment_type), false)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTextLiteralWithExtent_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("TextCharacterAppearance", new named_type(IFC4X3_ADD2_IfcTextStyleForDefinedFont_type), true)); + attributes.push_back(new attribute("TextStyle", new named_type(IFC4X3_ADD2_IfcTextStyleTextModel_type), true)); + attributes.push_back(new attribute("TextFontStyle", new named_type(IFC4X3_ADD2_IfcTextFontSelect_type), false)); + attributes.push_back(new attribute("ModelOrDraughting", new named_type(IFC4X3_ADD2_IfcBoolean_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTextStyle_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("FontFamily", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcTextFontName_type)), false)); + attributes.push_back(new attribute("FontStyle", new named_type(IFC4X3_ADD2_IfcFontStyle_type), true)); + attributes.push_back(new attribute("FontVariant", new named_type(IFC4X3_ADD2_IfcFontVariant_type), true)); + attributes.push_back(new attribute("FontWeight", new named_type(IFC4X3_ADD2_IfcFontWeight_type), true)); + attributes.push_back(new attribute("FontSize", new named_type(IFC4X3_ADD2_IfcSizeSelect_type), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTextStyleFontModel_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Colour", new named_type(IFC4X3_ADD2_IfcColour_type), false)); + attributes.push_back(new attribute("BackgroundColour", new named_type(IFC4X3_ADD2_IfcColour_type), true)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTextStyleForDefinedFont_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(7); + attributes.push_back(new attribute("TextIndent", new named_type(IFC4X3_ADD2_IfcSizeSelect_type), true)); + attributes.push_back(new attribute("TextAlign", new named_type(IFC4X3_ADD2_IfcTextAlignment_type), true)); + attributes.push_back(new attribute("TextDecoration", new named_type(IFC4X3_ADD2_IfcTextDecoration_type), true)); + attributes.push_back(new attribute("LetterSpacing", new named_type(IFC4X3_ADD2_IfcSizeSelect_type), true)); + attributes.push_back(new attribute("WordSpacing", new named_type(IFC4X3_ADD2_IfcSizeSelect_type), true)); + attributes.push_back(new attribute("TextTransform", new named_type(IFC4X3_ADD2_IfcTextTransformation_type), true)); + attributes.push_back(new attribute("LineHeight", new named_type(IFC4X3_ADD2_IfcSizeSelect_type), true)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTextStyleTextModel_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Maps", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcSurfaceTexture_type)), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcTextureCoordinate_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Mode", new named_type(IFC4X3_ADD2_IfcLabel_type), false)); + attributes.push_back(new attribute("Parameter", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcReal_type)), true)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTextureCoordinateGenerator_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("TexCoordIndex", new aggregation_type(aggregation_type::list_type, 3, -1, new named_type(IFC4X3_ADD2_IfcPositiveInteger_type)), false)); + attributes.push_back(new attribute("TexCoordsOf", new named_type(IFC4X3_ADD2_IfcIndexedPolygonalFace_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTextureCoordinateIndices_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("InnerTexCoordIndices", new aggregation_type(aggregation_type::list_type, 1, -1, new aggregation_type(aggregation_type::list_type, 3, -1, new named_type(IFC4X3_ADD2_IfcPositiveInteger_type))), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTextureCoordinateIndicesWithVoids_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Vertices", new aggregation_type(aggregation_type::list_type, 3, -1, new named_type(IFC4X3_ADD2_IfcTextureVertex_type)), false)); + attributes.push_back(new attribute("MappedTo", new named_type(IFC4X3_ADD2_IfcFace_type), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTextureMap_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Coordinates", new aggregation_type(aggregation_type::list_type, 2, 2, new named_type(IFC4X3_ADD2_IfcParameterValue_type)), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcTextureVertex_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("TexCoordsList", new aggregation_type(aggregation_type::list_type, 1, -1, new aggregation_type(aggregation_type::list_type, 2, 2, new named_type(IFC4X3_ADD2_IfcParameterValue_type))), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcTextureVertexList_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("CubicTerm", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + attributes.push_back(new attribute("QuadraticTerm", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("LinearTerm", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("ConstantTerm", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcThirdOrderPolynomialSpiral_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("StartTime", new named_type(IFC4X3_ADD2_IfcTime_type), false)); + attributes.push_back(new attribute("EndTime", new named_type(IFC4X3_ADD2_IfcTime_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTimePeriod_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(8); + attributes.push_back(new attribute("Name", new named_type(IFC4X3_ADD2_IfcLabel_type), false)); + attributes.push_back(new attribute("Description", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("StartTime", new named_type(IFC4X3_ADD2_IfcDateTime_type), false)); + attributes.push_back(new attribute("EndTime", new named_type(IFC4X3_ADD2_IfcDateTime_type), false)); + attributes.push_back(new attribute("TimeSeriesDataType", new named_type(IFC4X3_ADD2_IfcTimeSeriesDataTypeEnum_type), false)); + attributes.push_back(new attribute("DataOrigin", new named_type(IFC4X3_ADD2_IfcDataOriginEnum_type), false)); + attributes.push_back(new attribute("UserDefinedDataOrigin", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Unit", new named_type(IFC4X3_ADD2_IfcUnit_type), true)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTimeSeries_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("ListValues", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcValue_type)), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcTimeSeriesValue_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(0); + + IFC4X3_ADD2_IfcTopologicalRepresentationItem_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(4); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTopologyRepresentation_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("MajorRadius", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("MinorRadius", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + std::vector derived; derived.reserve(3); + derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcToroidalSurface_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcTrackElementTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTrackElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcTrackElementTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTrackElementType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcTransformerTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTransformer_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcTransformerTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTransformerType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcTransportElementTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTransportElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcTransportElementTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTransportElementType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTransportationDevice_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTransportationDeviceType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("BottomXDim", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("TopXDim", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("YDim", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("TopXOffset", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + std::vector derived; derived.reserve(7); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTrapeziumProfileDef_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("Normals", new aggregation_type(aggregation_type::list_type, 1, -1, new aggregation_type(aggregation_type::list_type, 3, 3, new named_type(IFC4X3_ADD2_IfcParameterValue_type))), true)); + attributes.push_back(new attribute("Closed", new named_type(IFC4X3_ADD2_IfcBoolean_type), true)); + attributes.push_back(new attribute("CoordIndex", new aggregation_type(aggregation_type::list_type, 1, -1, new aggregation_type(aggregation_type::list_type, 3, 3, new named_type(IFC4X3_ADD2_IfcPositiveInteger_type))), false)); + attributes.push_back(new attribute("PnIndex", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcPositiveInteger_type)), true)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTriangulatedFaceSet_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Flags", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcInteger_type)), false)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTriangulatedIrregularNetwork_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("BasisCurve", new named_type(IFC4X3_ADD2_IfcCurve_type), false)); + attributes.push_back(new attribute("Trim1", new aggregation_type(aggregation_type::set_type, 1, 2, new named_type(IFC4X3_ADD2_IfcTrimmingSelect_type)), false)); + attributes.push_back(new attribute("Trim2", new aggregation_type(aggregation_type::set_type, 1, 2, new named_type(IFC4X3_ADD2_IfcTrimmingSelect_type)), false)); + attributes.push_back(new attribute("SenseAgreement", new named_type(IFC4X3_ADD2_IfcBoolean_type), false)); + attributes.push_back(new attribute("MasterRepresentation", new named_type(IFC4X3_ADD2_IfcTrimmingPreference_type), false)); + std::vector derived; derived.reserve(5); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTrimmedCurve_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcTubeBundleTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTubeBundle_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcTubeBundleTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTubeBundleType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("ApplicableOccurrence", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + attributes.push_back(new attribute("HasPropertySets", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcPropertySetDefinition_type)), true)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTypeObject_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Identification", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + attributes.push_back(new attribute("LongDescription", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("ProcessType", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTypeProcess_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("RepresentationMaps", new aggregation_type(aggregation_type::list_type, 1, -1, new named_type(IFC4X3_ADD2_IfcRepresentationMap_type)), true)); + attributes.push_back(new attribute("Tag", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(8); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTypeProduct_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("Identification", new named_type(IFC4X3_ADD2_IfcIdentifier_type), true)); + attributes.push_back(new attribute("LongDescription", new named_type(IFC4X3_ADD2_IfcText_type), true)); + attributes.push_back(new attribute("ResourceType", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcTypeResource_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(7); + attributes.push_back(new attribute("Depth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("FlangeWidth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("WebThickness", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("FlangeThickness", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("FilletRadius", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), true)); + attributes.push_back(new attribute("EdgeRadius", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), true)); + attributes.push_back(new attribute("FlangeSlope", new named_type(IFC4X3_ADD2_IfcPlaneAngleMeasure_type), true)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcUShapeProfileDef_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("Units", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcUnit_type)), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcUnitAssignment_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcUnitaryControlElementTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcUnitaryControlElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcUnitaryControlElementTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcUnitaryControlElementType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcUnitaryEquipmentTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcUnitaryEquipment_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcUnitaryEquipmentTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcUnitaryEquipmentType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcValveTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcValve_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcValveTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcValveType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("Orientation", new named_type(IFC4X3_ADD2_IfcDirection_type), false)); + attributes.push_back(new attribute("Magnitude", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcVector_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcVehicleTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcVehicle_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcVehicleTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcVehicleType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(0); + + IFC4X3_ADD2_IfcVertex_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("LoopVertex", new named_type(IFC4X3_ADD2_IfcVertex_type), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcVertexLoop_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("VertexGeometry", new named_type(IFC4X3_ADD2_IfcPoint_type), false)); + std::vector derived; derived.reserve(1); + derived.push_back(false); + IFC4X3_ADD2_IfcVertexPoint_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcVibrationDamperTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcVibrationDamper_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcVibrationDamperTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcVibrationDamperType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcVibrationIsolatorTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcVibrationIsolator_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcVibrationIsolatorTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcVibrationIsolatorType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcVirtualElementTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcVirtualElement_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("IntersectingAxes", new aggregation_type(aggregation_type::list_type, 2, 2, new named_type(IFC4X3_ADD2_IfcGridAxis_type)), false)); + attributes.push_back(new attribute("OffsetDistances", new aggregation_type(aggregation_type::list_type, 2, 3, new named_type(IFC4X3_ADD2_IfcLengthMeasure_type)), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcVirtualGridIntersection_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcVoidingFeatureTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcVoidingFeature_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcWallTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcWall_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(0); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcWallStandardCase_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcWallTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcWallType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcWasteTerminalTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcWasteTerminal_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcWasteTerminalTypeEnum_type), false)); + std::vector derived; derived.reserve(10); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcWasteTerminalType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new attribute("WellKnownText", new named_type(IFC4X3_ADD2_IfcWellKnownTextLiteral_type), false)); + attributes.push_back(new attribute("CoordinateReferenceSystem", new named_type(IFC4X3_ADD2_IfcCoordinateReferenceSystem_type), false)); + std::vector derived; derived.reserve(2); + derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcWellKnownText_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("OverallHeight", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("OverallWidth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcWindowTypeEnum_type), true)); + attributes.push_back(new attribute("PartitioningType", new named_type(IFC4X3_ADD2_IfcWindowTypePartitioningEnum_type), true)); + attributes.push_back(new attribute("UserDefinedPartitioningType", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(13); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcWindow_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(12); + attributes.push_back(new attribute("LiningDepth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("LiningThickness", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), true)); + attributes.push_back(new attribute("TransomThickness", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), true)); + attributes.push_back(new attribute("MullionThickness", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), true)); + attributes.push_back(new attribute("FirstTransomOffset", new named_type(IFC4X3_ADD2_IfcNormalisedRatioMeasure_type), true)); + attributes.push_back(new attribute("SecondTransomOffset", new named_type(IFC4X3_ADD2_IfcNormalisedRatioMeasure_type), true)); + attributes.push_back(new attribute("FirstMullionOffset", new named_type(IFC4X3_ADD2_IfcNormalisedRatioMeasure_type), true)); + attributes.push_back(new attribute("SecondMullionOffset", new named_type(IFC4X3_ADD2_IfcNormalisedRatioMeasure_type), true)); + attributes.push_back(new attribute("ShapeAspectStyle", new named_type(IFC4X3_ADD2_IfcShapeAspect_type), true)); + attributes.push_back(new attribute("LiningOffset", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("LiningToPanelOffsetX", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + attributes.push_back(new attribute("LiningToPanelOffsetY", new named_type(IFC4X3_ADD2_IfcLengthMeasure_type), true)); + std::vector derived; derived.reserve(16); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcWindowLiningProperties_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new attribute("OperationType", new named_type(IFC4X3_ADD2_IfcWindowPanelOperationEnum_type), false)); + attributes.push_back(new attribute("PanelPosition", new named_type(IFC4X3_ADD2_IfcWindowPanelPositionEnum_type), false)); + attributes.push_back(new attribute("FrameDepth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("FrameThickness", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), true)); + attributes.push_back(new attribute("ShapeAspectStyle", new named_type(IFC4X3_ADD2_IfcShapeAspect_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcWindowPanelProperties_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcWindowTypeEnum_type), false)); + attributes.push_back(new attribute("PartitioningType", new named_type(IFC4X3_ADD2_IfcWindowTypePartitioningEnum_type), false)); + attributes.push_back(new attribute("ParameterTakesPrecedence", new named_type(IFC4X3_ADD2_IfcBoolean_type), true)); + attributes.push_back(new attribute("UserDefinedPartitioningType", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(13); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcWindowType_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("WorkingTimes", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcWorkTime_type)), true)); + attributes.push_back(new attribute("ExceptionTimes", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcWorkTime_type)), true)); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcWorkCalendarTypeEnum_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcWorkCalendar_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(7); + attributes.push_back(new attribute("CreationDate", new named_type(IFC4X3_ADD2_IfcDateTime_type), false)); + attributes.push_back(new attribute("Creators", new aggregation_type(aggregation_type::set_type, 1, -1, new named_type(IFC4X3_ADD2_IfcPerson_type)), true)); + attributes.push_back(new attribute("Purpose", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + attributes.push_back(new attribute("Duration", new named_type(IFC4X3_ADD2_IfcDuration_type), true)); + attributes.push_back(new attribute("TotalFloat", new named_type(IFC4X3_ADD2_IfcDuration_type), true)); + attributes.push_back(new attribute("StartTime", new named_type(IFC4X3_ADD2_IfcDateTime_type), false)); + attributes.push_back(new attribute("FinishTime", new named_type(IFC4X3_ADD2_IfcDateTime_type), true)); + std::vector derived; derived.reserve(13); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcWorkControl_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcWorkPlanTypeEnum_type), true)); + std::vector derived; derived.reserve(14); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcWorkPlan_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("PredefinedType", new named_type(IFC4X3_ADD2_IfcWorkScheduleTypeEnum_type), true)); + std::vector derived; derived.reserve(14); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcWorkSchedule_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new attribute("RecurrencePattern", new named_type(IFC4X3_ADD2_IfcRecurrencePattern_type), true)); + attributes.push_back(new attribute("StartDate", new named_type(IFC4X3_ADD2_IfcDate_type), true)); + attributes.push_back(new attribute("FinishDate", new named_type(IFC4X3_ADD2_IfcDate_type), true)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcWorkTime_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(6); + attributes.push_back(new attribute("Depth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("FlangeWidth", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("WebThickness", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("FlangeThickness", new named_type(IFC4X3_ADD2_IfcPositiveLengthMeasure_type), false)); + attributes.push_back(new attribute("FilletRadius", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), true)); + attributes.push_back(new attribute("EdgeRadius", new named_type(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type), true)); + std::vector derived; derived.reserve(9); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcZShapeProfileDef_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new attribute("LongName", new named_type(IFC4X3_ADD2_IfcLabel_type), true)); + std::vector derived; derived.reserve(6); + derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); derived.push_back(false); + IFC4X3_ADD2_IfcZone_type->set_attributes(attributes, derived); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("IsActingUpon", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelAssignsToActor_type, IFC4X3_ADD2_IfcRelAssignsToActor_type->attributes()[0])); + IFC4X3_ADD2_IfcActor_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("HasExternalReference", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcExternalReferenceRelationship_type, IFC4X3_ADD2_IfcExternalReferenceRelationship_type->attributes()[1])); + IFC4X3_ADD2_IfcActorRole_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new inverse_attribute("OfPerson", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcPerson_type, IFC4X3_ADD2_IfcPerson_type->attributes()[7])); + attributes.push_back(new inverse_attribute("OfOrganization", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcOrganization_type, IFC4X3_ADD2_IfcOrganization_type->attributes()[4])); + IFC4X3_ADD2_IfcAddress_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("ContainedInStructure", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcRelContainedInSpatialStructure_type, IFC4X3_ADD2_IfcRelContainedInSpatialStructure_type->attributes()[0])); + IFC4X3_ADD2_IfcAnnotation_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("HasExternalReference", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcExternalReferenceRelationship_type, IFC4X3_ADD2_IfcExternalReferenceRelationship_type->attributes()[1])); + IFC4X3_ADD2_IfcAppliedValue_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new inverse_attribute("HasExternalReferences", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcExternalReferenceRelationship_type, IFC4X3_ADD2_IfcExternalReferenceRelationship_type->attributes()[1])); + attributes.push_back(new inverse_attribute("ApprovedObjects", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelAssociatesApproval_type, IFC4X3_ADD2_IfcRelAssociatesApproval_type->attributes()[0])); + attributes.push_back(new inverse_attribute("ApprovedResources", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcResourceApprovalRelationship_type, IFC4X3_ADD2_IfcResourceApprovalRelationship_type->attributes()[1])); + attributes.push_back(new inverse_attribute("IsRelatedWith", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcApprovalRelationship_type, IFC4X3_ADD2_IfcApprovalRelationship_type->attributes()[1])); + attributes.push_back(new inverse_attribute("Relates", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcApprovalRelationship_type, IFC4X3_ADD2_IfcApprovalRelationship_type->attributes()[0])); + IFC4X3_ADD2_IfcApproval_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new inverse_attribute("ClassificationForObjects", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelAssociatesClassification_type, IFC4X3_ADD2_IfcRelAssociatesClassification_type->attributes()[0])); + attributes.push_back(new inverse_attribute("HasReferences", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcClassificationReference_type, IFC4X3_ADD2_IfcClassificationReference_type->attributes()[0])); + IFC4X3_ADD2_IfcClassification_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new inverse_attribute("ClassificationRefForObjects", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelAssociatesClassification_type, IFC4X3_ADD2_IfcRelAssociatesClassification_type->attributes()[0])); + attributes.push_back(new inverse_attribute("HasReferences", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcClassificationReference_type, IFC4X3_ADD2_IfcClassificationReference_type->attributes()[0])); + IFC4X3_ADD2_IfcClassificationReference_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new inverse_attribute("HasExternalReferences", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcExternalReferenceRelationship_type, IFC4X3_ADD2_IfcExternalReferenceRelationship_type->attributes()[1])); + attributes.push_back(new inverse_attribute("PropertiesForConstraint", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcResourceConstraintRelationship_type, IFC4X3_ADD2_IfcResourceConstraintRelationship_type->attributes()[0])); + IFC4X3_ADD2_IfcConstraint_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new inverse_attribute("IsDefinedBy", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelDefinesByProperties_type, IFC4X3_ADD2_IfcRelDefinesByProperties_type->attributes()[0])); + attributes.push_back(new inverse_attribute("Declares", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelDeclares_type, IFC4X3_ADD2_IfcRelDeclares_type->attributes()[0])); + IFC4X3_ADD2_IfcContext_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("HasExternalReference", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcExternalReferenceRelationship_type, IFC4X3_ADD2_IfcExternalReferenceRelationship_type->attributes()[1])); + IFC4X3_ADD2_IfcContextDependentUnit_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("Controls", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelAssignsToControl_type, IFC4X3_ADD2_IfcRelAssignsToControl_type->attributes()[0])); + IFC4X3_ADD2_IfcControl_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("HasExternalReference", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcExternalReferenceRelationship_type, IFC4X3_ADD2_IfcExternalReferenceRelationship_type->attributes()[1])); + IFC4X3_ADD2_IfcConversionBasedUnit_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new inverse_attribute("HasCoordinateOperation", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcCoordinateOperation_type, IFC4X3_ADD2_IfcCoordinateOperation_type->attributes()[0])); + attributes.push_back(new inverse_attribute("WellKnownText", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcWellKnownText_type, IFC4X3_ADD2_IfcWellKnownText_type->attributes()[1])); + IFC4X3_ADD2_IfcCoordinateReferenceSystem_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new inverse_attribute("CoversSpaces", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcRelCoversSpaces_type, IFC4X3_ADD2_IfcRelCoversSpaces_type->attributes()[1])); + attributes.push_back(new inverse_attribute("CoversElements", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcRelCoversBldgElements_type, IFC4X3_ADD2_IfcRelCoversBldgElements_type->attributes()[1])); + IFC4X3_ADD2_IfcCovering_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("AssignedToFlowElement", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcRelFlowControlElements_type, IFC4X3_ADD2_IfcRelFlowControlElements_type->attributes()[0])); + IFC4X3_ADD2_IfcDistributionControlElement_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("HasPorts", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelConnectsPortToElement_type, IFC4X3_ADD2_IfcRelConnectsPortToElement_type->attributes()[1])); + IFC4X3_ADD2_IfcDistributionElement_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("HasControlElements", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcRelFlowControlElements_type, IFC4X3_ADD2_IfcRelFlowControlElements_type->attributes()[1])); + IFC4X3_ADD2_IfcDistributionFlowElement_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new inverse_attribute("DocumentInfoForObjects", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelAssociatesDocument_type, IFC4X3_ADD2_IfcRelAssociatesDocument_type->attributes()[0])); + attributes.push_back(new inverse_attribute("HasDocumentReferences", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcDocumentReference_type, IFC4X3_ADD2_IfcDocumentReference_type->attributes()[1])); + attributes.push_back(new inverse_attribute("IsPointedTo", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcDocumentInformationRelationship_type, IFC4X3_ADD2_IfcDocumentInformationRelationship_type->attributes()[1])); + attributes.push_back(new inverse_attribute("IsPointer", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcDocumentInformationRelationship_type, IFC4X3_ADD2_IfcDocumentInformationRelationship_type->attributes()[0])); + IFC4X3_ADD2_IfcDocumentInformation_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("DocumentRefForObjects", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelAssociatesDocument_type, IFC4X3_ADD2_IfcRelAssociatesDocument_type->attributes()[0])); + IFC4X3_ADD2_IfcDocumentReference_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(12); + attributes.push_back(new inverse_attribute("FillsVoids", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcRelFillsElement_type, IFC4X3_ADD2_IfcRelFillsElement_type->attributes()[1])); + attributes.push_back(new inverse_attribute("ConnectedTo", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelConnectsElements_type, IFC4X3_ADD2_IfcRelConnectsElements_type->attributes()[1])); + attributes.push_back(new inverse_attribute("IsInterferedByElements", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelInterferesElements_type, IFC4X3_ADD2_IfcRelInterferesElements_type->attributes()[1])); + attributes.push_back(new inverse_attribute("InterferesElements", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelInterferesElements_type, IFC4X3_ADD2_IfcRelInterferesElements_type->attributes()[0])); + attributes.push_back(new inverse_attribute("HasProjections", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelProjectsElement_type, IFC4X3_ADD2_IfcRelProjectsElement_type->attributes()[0])); + attributes.push_back(new inverse_attribute("HasOpenings", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelVoidsElement_type, IFC4X3_ADD2_IfcRelVoidsElement_type->attributes()[0])); + attributes.push_back(new inverse_attribute("IsConnectionRealization", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelConnectsWithRealizingElements_type, IFC4X3_ADD2_IfcRelConnectsWithRealizingElements_type->attributes()[0])); + attributes.push_back(new inverse_attribute("ProvidesBoundaries", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelSpaceBoundary_type, IFC4X3_ADD2_IfcRelSpaceBoundary_type->attributes()[1])); + attributes.push_back(new inverse_attribute("ConnectedFrom", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelConnectsElements_type, IFC4X3_ADD2_IfcRelConnectsElements_type->attributes()[2])); + attributes.push_back(new inverse_attribute("ContainedInStructure", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcRelContainedInSpatialStructure_type, IFC4X3_ADD2_IfcRelContainedInSpatialStructure_type->attributes()[0])); + attributes.push_back(new inverse_attribute("HasCoverings", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelCoversBldgElements_type, IFC4X3_ADD2_IfcRelCoversBldgElements_type->attributes()[0])); + attributes.push_back(new inverse_attribute("HasSurfaceFeatures", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelAdheresToElement_type, IFC4X3_ADD2_IfcRelAdheresToElement_type->attributes()[0])); + IFC4X3_ADD2_IfcElement_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("ExternalReferenceForResources", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcExternalReferenceRelationship_type, IFC4X3_ADD2_IfcExternalReferenceRelationship_type->attributes()[0])); + IFC4X3_ADD2_IfcExternalReference_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("BoundedBy", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelSpaceBoundary_type, IFC4X3_ADD2_IfcRelSpaceBoundary_type->attributes()[0])); + IFC4X3_ADD2_IfcExternalSpatialElement_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("HasTextureMaps", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcTextureMap_type, IFC4X3_ADD2_IfcTextureMap_type->attributes()[1])); + IFC4X3_ADD2_IfcFace_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("ProjectsElements", inverse_attribute::unspecified_type, -1, -1, IFC4X3_ADD2_IfcRelProjectsElement_type, IFC4X3_ADD2_IfcRelProjectsElement_type->attributes()[1])); + IFC4X3_ADD2_IfcFeatureElementAddition_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("VoidsElements", inverse_attribute::unspecified_type, -1, -1, IFC4X3_ADD2_IfcRelVoidsElement_type, IFC4X3_ADD2_IfcRelVoidsElement_type->attributes()[1])); + IFC4X3_ADD2_IfcFeatureElementSubtraction_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new inverse_attribute("HasSubContexts", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcGeometricRepresentationSubContext_type, IFC4X3_ADD2_IfcGeometricRepresentationSubContext_type->attributes()[0])); + attributes.push_back(new inverse_attribute("HasCoordinateOperation", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcCoordinateOperation_type, IFC4X3_ADD2_IfcCoordinateOperation_type->attributes()[0])); + IFC4X3_ADD2_IfcGeometricRepresentationContext_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new inverse_attribute("PartOfW", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcGrid_type, IFC4X3_ADD2_IfcGrid_type->attributes()[2])); + attributes.push_back(new inverse_attribute("PartOfV", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcGrid_type, IFC4X3_ADD2_IfcGrid_type->attributes()[1])); + attributes.push_back(new inverse_attribute("PartOfU", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcGrid_type, IFC4X3_ADD2_IfcGrid_type->attributes()[0])); + attributes.push_back(new inverse_attribute("HasIntersections", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcVirtualGridIntersection_type, IFC4X3_ADD2_IfcVirtualGridIntersection_type->attributes()[0])); + IFC4X3_ADD2_IfcGridAxis_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new inverse_attribute("IsGroupedBy", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelAssignsToGroup_type, IFC4X3_ADD2_IfcRelAssignsToGroup_type->attributes()[0])); + attributes.push_back(new inverse_attribute("ReferencedInStructures", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelReferencedInSpatialStructure_type, IFC4X3_ADD2_IfcRelReferencedInSpatialStructure_type->attributes()[0])); + IFC4X3_ADD2_IfcGroup_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new inverse_attribute("ToFaceSet", inverse_attribute::set_type, 1, -1, IFC4X3_ADD2_IfcPolygonalFaceSet_type, IFC4X3_ADD2_IfcPolygonalFaceSet_type->attributes()[1])); + attributes.push_back(new inverse_attribute("HasTexCoords", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcTextureCoordinateIndices_type, IFC4X3_ADD2_IfcTextureCoordinateIndices_type->attributes()[1])); + IFC4X3_ADD2_IfcIndexedPolygonalFace_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new inverse_attribute("LibraryInfoForObjects", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelAssociatesLibrary_type, IFC4X3_ADD2_IfcRelAssociatesLibrary_type->attributes()[0])); + attributes.push_back(new inverse_attribute("HasLibraryReferences", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcLibraryReference_type, IFC4X3_ADD2_IfcLibraryReference_type->attributes()[2])); + IFC4X3_ADD2_IfcLibraryInformation_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("LibraryRefForObjects", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelAssociatesLibrary_type, IFC4X3_ADD2_IfcRelAssociatesLibrary_type->attributes()[0])); + IFC4X3_ADD2_IfcLibraryReference_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new inverse_attribute("HasRepresentation", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcMaterialDefinitionRepresentation_type, IFC4X3_ADD2_IfcMaterialDefinitionRepresentation_type->attributes()[0])); + attributes.push_back(new inverse_attribute("IsRelatedWith", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcMaterialRelationship_type, IFC4X3_ADD2_IfcMaterialRelationship_type->attributes()[1])); + attributes.push_back(new inverse_attribute("RelatesTo", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcMaterialRelationship_type, IFC4X3_ADD2_IfcMaterialRelationship_type->attributes()[0])); + IFC4X3_ADD2_IfcMaterial_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("ToMaterialConstituentSet", inverse_attribute::unspecified_type, -1, -1, IFC4X3_ADD2_IfcMaterialConstituentSet_type, IFC4X3_ADD2_IfcMaterialConstituentSet_type->attributes()[2])); + IFC4X3_ADD2_IfcMaterialConstituent_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new inverse_attribute("AssociatedTo", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelAssociatesMaterial_type, IFC4X3_ADD2_IfcRelAssociatesMaterial_type->attributes()[0])); + attributes.push_back(new inverse_attribute("HasExternalReferences", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcExternalReferenceRelationship_type, IFC4X3_ADD2_IfcExternalReferenceRelationship_type->attributes()[1])); + attributes.push_back(new inverse_attribute("HasProperties", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcMaterialProperties_type, IFC4X3_ADD2_IfcMaterialProperties_type->attributes()[0])); + IFC4X3_ADD2_IfcMaterialDefinition_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("ToMaterialLayerSet", inverse_attribute::unspecified_type, -1, -1, IFC4X3_ADD2_IfcMaterialLayerSet_type, IFC4X3_ADD2_IfcMaterialLayerSet_type->attributes()[0])); + IFC4X3_ADD2_IfcMaterialLayer_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("ToMaterialProfileSet", inverse_attribute::unspecified_type, -1, -1, IFC4X3_ADD2_IfcMaterialProfileSet_type, IFC4X3_ADD2_IfcMaterialProfileSet_type->attributes()[2])); + IFC4X3_ADD2_IfcMaterialProfile_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("AssociatedTo", inverse_attribute::set_type, 1, -1, IFC4X3_ADD2_IfcRelAssociatesMaterial_type, IFC4X3_ADD2_IfcRelAssociatesMaterial_type->attributes()[0])); + IFC4X3_ADD2_IfcMaterialUsageDefinition_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(4); + attributes.push_back(new inverse_attribute("IsDeclaredBy", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcRelDefinesByObject_type, IFC4X3_ADD2_IfcRelDefinesByObject_type->attributes()[0])); + attributes.push_back(new inverse_attribute("Declares", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelDefinesByObject_type, IFC4X3_ADD2_IfcRelDefinesByObject_type->attributes()[1])); + attributes.push_back(new inverse_attribute("IsTypedBy", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcRelDefinesByType_type, IFC4X3_ADD2_IfcRelDefinesByType_type->attributes()[0])); + attributes.push_back(new inverse_attribute("IsDefinedBy", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelDefinesByProperties_type, IFC4X3_ADD2_IfcRelDefinesByProperties_type->attributes()[0])); + IFC4X3_ADD2_IfcObject_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(7); + attributes.push_back(new inverse_attribute("HasAssignments", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelAssigns_type, IFC4X3_ADD2_IfcRelAssigns_type->attributes()[0])); + attributes.push_back(new inverse_attribute("Nests", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcRelNests_type, IFC4X3_ADD2_IfcRelNests_type->attributes()[1])); + attributes.push_back(new inverse_attribute("IsNestedBy", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelNests_type, IFC4X3_ADD2_IfcRelNests_type->attributes()[0])); + attributes.push_back(new inverse_attribute("HasContext", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcRelDeclares_type, IFC4X3_ADD2_IfcRelDeclares_type->attributes()[1])); + attributes.push_back(new inverse_attribute("IsDecomposedBy", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelAggregates_type, IFC4X3_ADD2_IfcRelAggregates_type->attributes()[0])); + attributes.push_back(new inverse_attribute("Decomposes", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcRelAggregates_type, IFC4X3_ADD2_IfcRelAggregates_type->attributes()[1])); + attributes.push_back(new inverse_attribute("HasAssociations", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelAssociates_type, IFC4X3_ADD2_IfcRelAssociates_type->attributes()[0])); + IFC4X3_ADD2_IfcObjectDefinition_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new inverse_attribute("PlacesObject", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcProduct_type, IFC4X3_ADD2_IfcProduct_type->attributes()[0])); + attributes.push_back(new inverse_attribute("ReferencedByPlacements", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcObjectPlacement_type, IFC4X3_ADD2_IfcObjectPlacement_type->attributes()[0])); + IFC4X3_ADD2_IfcObjectPlacement_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("HasFillings", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelFillsElement_type, IFC4X3_ADD2_IfcRelFillsElement_type->attributes()[0])); + IFC4X3_ADD2_IfcOpeningElement_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new inverse_attribute("IsRelatedBy", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcOrganizationRelationship_type, IFC4X3_ADD2_IfcOrganizationRelationship_type->attributes()[1])); + attributes.push_back(new inverse_attribute("Relates", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcOrganizationRelationship_type, IFC4X3_ADD2_IfcOrganizationRelationship_type->attributes()[0])); + attributes.push_back(new inverse_attribute("Engages", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcPersonAndOrganization_type, IFC4X3_ADD2_IfcPersonAndOrganization_type->attributes()[1])); + IFC4X3_ADD2_IfcOrganization_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("EngagedIn", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcPersonAndOrganization_type, IFC4X3_ADD2_IfcPersonAndOrganization_type->attributes()[0])); + IFC4X3_ADD2_IfcPerson_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new inverse_attribute("HasExternalReferences", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcExternalReferenceRelationship_type, IFC4X3_ADD2_IfcExternalReferenceRelationship_type->attributes()[1])); + attributes.push_back(new inverse_attribute("PartOfComplex", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcPhysicalComplexQuantity_type, IFC4X3_ADD2_IfcPhysicalComplexQuantity_type->attributes()[0])); + IFC4X3_ADD2_IfcPhysicalQuantity_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new inverse_attribute("ContainedIn", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcRelConnectsPortToElement_type, IFC4X3_ADD2_IfcRelConnectsPortToElement_type->attributes()[0])); + attributes.push_back(new inverse_attribute("ConnectedFrom", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcRelConnectsPorts_type, IFC4X3_ADD2_IfcRelConnectsPorts_type->attributes()[1])); + attributes.push_back(new inverse_attribute("ConnectedTo", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcRelConnectsPorts_type, IFC4X3_ADD2_IfcRelConnectsPorts_type->attributes()[0])); + IFC4X3_ADD2_IfcPort_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new inverse_attribute("ContainedInStructure", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcRelContainedInSpatialStructure_type, IFC4X3_ADD2_IfcRelContainedInSpatialStructure_type->attributes()[0])); + attributes.push_back(new inverse_attribute("Positions", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelPositions_type, IFC4X3_ADD2_IfcRelPositions_type->attributes()[0])); + IFC4X3_ADD2_IfcPositioningElement_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new inverse_attribute("IsPredecessorTo", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelSequence_type, IFC4X3_ADD2_IfcRelSequence_type->attributes()[0])); + attributes.push_back(new inverse_attribute("IsSuccessorFrom", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelSequence_type, IFC4X3_ADD2_IfcRelSequence_type->attributes()[1])); + attributes.push_back(new inverse_attribute("OperatesOn", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelAssignsToProcess_type, IFC4X3_ADD2_IfcRelAssignsToProcess_type->attributes()[0])); + IFC4X3_ADD2_IfcProcess_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new inverse_attribute("ReferencedBy", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelAssignsToProduct_type, IFC4X3_ADD2_IfcRelAssignsToProduct_type->attributes()[0])); + attributes.push_back(new inverse_attribute("PositionedRelativeTo", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelPositions_type, IFC4X3_ADD2_IfcRelPositions_type->attributes()[1])); + attributes.push_back(new inverse_attribute("ReferencedInStructures", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelReferencedInSpatialStructure_type, IFC4X3_ADD2_IfcRelReferencedInSpatialStructure_type->attributes()[0])); + IFC4X3_ADD2_IfcProduct_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new inverse_attribute("ShapeOfProduct", inverse_attribute::set_type, 1, -1, IFC4X3_ADD2_IfcProduct_type, IFC4X3_ADD2_IfcProduct_type->attributes()[1])); + attributes.push_back(new inverse_attribute("HasShapeAspects", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcShapeAspect_type, IFC4X3_ADD2_IfcShapeAspect_type->attributes()[4])); + IFC4X3_ADD2_IfcProductDefinitionShape_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new inverse_attribute("HasExternalReference", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcExternalReferenceRelationship_type, IFC4X3_ADD2_IfcExternalReferenceRelationship_type->attributes()[1])); + attributes.push_back(new inverse_attribute("HasProperties", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcProfileProperties_type, IFC4X3_ADD2_IfcProfileProperties_type->attributes()[0])); + IFC4X3_ADD2_IfcProfileDef_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(6); + attributes.push_back(new inverse_attribute("PartOfPset", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcPropertySet_type, IFC4X3_ADD2_IfcPropertySet_type->attributes()[0])); + attributes.push_back(new inverse_attribute("PropertyForDependance", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcPropertyDependencyRelationship_type, IFC4X3_ADD2_IfcPropertyDependencyRelationship_type->attributes()[0])); + attributes.push_back(new inverse_attribute("PropertyDependsOn", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcPropertyDependencyRelationship_type, IFC4X3_ADD2_IfcPropertyDependencyRelationship_type->attributes()[1])); + attributes.push_back(new inverse_attribute("PartOfComplex", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcComplexProperty_type, IFC4X3_ADD2_IfcComplexProperty_type->attributes()[1])); + attributes.push_back(new inverse_attribute("HasConstraints", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcResourceConstraintRelationship_type, IFC4X3_ADD2_IfcResourceConstraintRelationship_type->attributes()[1])); + attributes.push_back(new inverse_attribute("HasApprovals", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcResourceApprovalRelationship_type, IFC4X3_ADD2_IfcResourceApprovalRelationship_type->attributes()[0])); + IFC4X3_ADD2_IfcProperty_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("HasExternalReferences", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcExternalReferenceRelationship_type, IFC4X3_ADD2_IfcExternalReferenceRelationship_type->attributes()[1])); + IFC4X3_ADD2_IfcPropertyAbstraction_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new inverse_attribute("HasContext", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcRelDeclares_type, IFC4X3_ADD2_IfcRelDeclares_type->attributes()[1])); + attributes.push_back(new inverse_attribute("HasAssociations", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelAssociates_type, IFC4X3_ADD2_IfcRelAssociates_type->attributes()[0])); + IFC4X3_ADD2_IfcPropertyDefinition_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new inverse_attribute("DefinesType", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcTypeObject_type, IFC4X3_ADD2_IfcTypeObject_type->attributes()[1])); + attributes.push_back(new inverse_attribute("IsDefinedBy", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelDefinesByTemplate_type, IFC4X3_ADD2_IfcRelDefinesByTemplate_type->attributes()[0])); + attributes.push_back(new inverse_attribute("DefinesOccurrence", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelDefinesByProperties_type, IFC4X3_ADD2_IfcRelDefinesByProperties_type->attributes()[1])); + IFC4X3_ADD2_IfcPropertySetDefinition_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("Defines", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelDefinesByTemplate_type, IFC4X3_ADD2_IfcRelDefinesByTemplate_type->attributes()[1])); + IFC4X3_ADD2_IfcPropertySetTemplate_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new inverse_attribute("PartOfComplexTemplate", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcComplexPropertyTemplate_type, IFC4X3_ADD2_IfcComplexPropertyTemplate_type->attributes()[2])); + attributes.push_back(new inverse_attribute("PartOfPsetTemplate", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcPropertySetTemplate_type, IFC4X3_ADD2_IfcPropertySetTemplate_type->attributes()[2])); + IFC4X3_ADD2_IfcPropertyTemplate_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("InnerBoundaries", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelSpaceBoundary1stLevel_type, IFC4X3_ADD2_IfcRelSpaceBoundary1stLevel_type->attributes()[0])); + IFC4X3_ADD2_IfcRelSpaceBoundary1stLevel_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("Corresponds", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcRelSpaceBoundary2ndLevel_type, IFC4X3_ADD2_IfcRelSpaceBoundary2ndLevel_type->attributes()[0])); + IFC4X3_ADD2_IfcRelSpaceBoundary2ndLevel_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(3); + attributes.push_back(new inverse_attribute("RepresentationMap", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcRepresentationMap_type, IFC4X3_ADD2_IfcRepresentationMap_type->attributes()[1])); + attributes.push_back(new inverse_attribute("LayerAssignments", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcPresentationLayerAssignment_type, IFC4X3_ADD2_IfcPresentationLayerAssignment_type->attributes()[2])); + attributes.push_back(new inverse_attribute("OfProductRepresentation", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcProductRepresentation_type, IFC4X3_ADD2_IfcProductRepresentation_type->attributes()[2])); + IFC4X3_ADD2_IfcRepresentation_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("RepresentationsInContext", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRepresentation_type, IFC4X3_ADD2_IfcRepresentation_type->attributes()[0])); + IFC4X3_ADD2_IfcRepresentationContext_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new inverse_attribute("LayerAssignment", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcPresentationLayerAssignment_type, IFC4X3_ADD2_IfcPresentationLayerAssignment_type->attributes()[2])); + attributes.push_back(new inverse_attribute("StyledByItem", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcStyledItem_type, IFC4X3_ADD2_IfcStyledItem_type->attributes()[0])); + IFC4X3_ADD2_IfcRepresentationItem_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new inverse_attribute("HasShapeAspects", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcShapeAspect_type, IFC4X3_ADD2_IfcShapeAspect_type->attributes()[4])); + attributes.push_back(new inverse_attribute("MapUsage", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcMappedItem_type, IFC4X3_ADD2_IfcMappedItem_type->attributes()[0])); + IFC4X3_ADD2_IfcRepresentationMap_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("ResourceOf", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelAssignsToResource_type, IFC4X3_ADD2_IfcRelAssignsToResource_type->attributes()[0])); + IFC4X3_ADD2_IfcResource_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("UsingCurves", inverse_attribute::set_type, 1, -1, IFC4X3_ADD2_IfcCompositeCurve_type, IFC4X3_ADD2_IfcCompositeCurve_type->attributes()[0])); + IFC4X3_ADD2_IfcSegment_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("HasExternalReferences", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcExternalReferenceRelationship_type, IFC4X3_ADD2_IfcExternalReferenceRelationship_type->attributes()[1])); + IFC4X3_ADD2_IfcShapeAspect_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("OfShapeAspect", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcShapeAspect_type, IFC4X3_ADD2_IfcShapeAspect_type->attributes()[0])); + IFC4X3_ADD2_IfcShapeModel_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new inverse_attribute("HasCoverings", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelCoversSpaces_type, IFC4X3_ADD2_IfcRelCoversSpaces_type->attributes()[0])); + attributes.push_back(new inverse_attribute("BoundedBy", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelSpaceBoundary_type, IFC4X3_ADD2_IfcRelSpaceBoundary_type->attributes()[0])); + IFC4X3_ADD2_IfcSpace_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(5); + attributes.push_back(new inverse_attribute("ContainsElements", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelContainedInSpatialStructure_type, IFC4X3_ADD2_IfcRelContainedInSpatialStructure_type->attributes()[1])); + attributes.push_back(new inverse_attribute("ServicedBySystems", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelServicesBuildings_type, IFC4X3_ADD2_IfcRelServicesBuildings_type->attributes()[1])); + attributes.push_back(new inverse_attribute("ReferencesElements", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelReferencedInSpatialStructure_type, IFC4X3_ADD2_IfcRelReferencedInSpatialStructure_type->attributes()[1])); + attributes.push_back(new inverse_attribute("IsInterferedByElements", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelInterferesElements_type, IFC4X3_ADD2_IfcRelInterferesElements_type->attributes()[1])); + attributes.push_back(new inverse_attribute("InterferesElements", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelInterferesElements_type, IFC4X3_ADD2_IfcRelInterferesElements_type->attributes()[0])); + IFC4X3_ADD2_IfcSpatialElement_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("AssignedToStructuralItem", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcRelConnectsStructuralActivity_type, IFC4X3_ADD2_IfcRelConnectsStructuralActivity_type->attributes()[1])); + IFC4X3_ADD2_IfcStructuralActivity_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("ConnectsStructuralMembers", inverse_attribute::set_type, 1, -1, IFC4X3_ADD2_IfcRelConnectsStructuralMember_type, IFC4X3_ADD2_IfcRelConnectsStructuralMember_type->attributes()[1])); + IFC4X3_ADD2_IfcStructuralConnection_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("AssignedStructuralActivity", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelConnectsStructuralActivity_type, IFC4X3_ADD2_IfcRelConnectsStructuralActivity_type->attributes()[0])); + IFC4X3_ADD2_IfcStructuralItem_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new inverse_attribute("SourceOfResultGroup", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcStructuralResultGroup_type, IFC4X3_ADD2_IfcStructuralResultGroup_type->attributes()[1])); + attributes.push_back(new inverse_attribute("LoadGroupFor", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcStructuralAnalysisModel_type, IFC4X3_ADD2_IfcStructuralAnalysisModel_type->attributes()[2])); + IFC4X3_ADD2_IfcStructuralLoadGroup_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("ConnectedBy", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelConnectsStructuralMember_type, IFC4X3_ADD2_IfcRelConnectsStructuralMember_type->attributes()[0])); + IFC4X3_ADD2_IfcStructuralMember_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("ResultGroupFor", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcStructuralAnalysisModel_type, IFC4X3_ADD2_IfcStructuralAnalysisModel_type->attributes()[3])); + IFC4X3_ADD2_IfcStructuralResultGroup_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("AdheresToElement", inverse_attribute::unspecified_type, -1, -1, IFC4X3_ADD2_IfcRelAdheresToElement_type, IFC4X3_ADD2_IfcRelAdheresToElement_type->attributes()[1])); + IFC4X3_ADD2_IfcSurfaceFeature_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new inverse_attribute("IsMappedBy", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcTextureCoordinate_type, IFC4X3_ADD2_IfcTextureCoordinate_type->attributes()[0])); + attributes.push_back(new inverse_attribute("UsedInStyles", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcSurfaceStyleWithTextures_type, IFC4X3_ADD2_IfcSurfaceStyleWithTextures_type->attributes()[0])); + IFC4X3_ADD2_IfcSurfaceTexture_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new inverse_attribute("ServicesBuildings", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcRelServicesBuildings_type, IFC4X3_ADD2_IfcRelServicesBuildings_type->attributes()[0])); + attributes.push_back(new inverse_attribute("ServicesFacilities", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelReferencedInSpatialStructure_type, IFC4X3_ADD2_IfcRelReferencedInSpatialStructure_type->attributes()[0])); + IFC4X3_ADD2_IfcSystem_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(2); + attributes.push_back(new inverse_attribute("HasColours", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcIndexedColourMap_type, IFC4X3_ADD2_IfcIndexedColourMap_type->attributes()[0])); + attributes.push_back(new inverse_attribute("HasTextures", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcIndexedTextureMap_type, IFC4X3_ADD2_IfcIndexedTextureMap_type->attributes()[0])); + IFC4X3_ADD2_IfcTessellatedFaceSet_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("ToTexMap", inverse_attribute::unspecified_type, -1, -1, IFC4X3_ADD2_IfcIndexedPolygonalTextureMap_type, IFC4X3_ADD2_IfcIndexedPolygonalTextureMap_type->attributes()[0])); + IFC4X3_ADD2_IfcTextureCoordinateIndices_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("HasExternalReference", inverse_attribute::set_type, 1, -1, IFC4X3_ADD2_IfcExternalReferenceRelationship_type, IFC4X3_ADD2_IfcExternalReferenceRelationship_type->attributes()[1])); + IFC4X3_ADD2_IfcTimeSeries_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("Types", inverse_attribute::set_type, 0, 1, IFC4X3_ADD2_IfcRelDefinesByType_type, IFC4X3_ADD2_IfcRelDefinesByType_type->attributes()[1])); + IFC4X3_ADD2_IfcTypeObject_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("OperatesOn", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelAssignsToProcess_type, IFC4X3_ADD2_IfcRelAssignsToProcess_type->attributes()[0])); + IFC4X3_ADD2_IfcTypeProcess_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("ReferencedBy", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelAssignsToProduct_type, IFC4X3_ADD2_IfcRelAssignsToProduct_type->attributes()[0])); + IFC4X3_ADD2_IfcTypeProduct_type->set_inverse_attributes(attributes); + } + { + std::vector attributes; attributes.reserve(1); + attributes.push_back(new inverse_attribute("ResourceOf", inverse_attribute::set_type, 0, -1, IFC4X3_ADD2_IfcRelAssignsToResource_type, IFC4X3_ADD2_IfcRelAssignsToResource_type->attributes()[0])); + IFC4X3_ADD2_IfcTypeResource_type->set_inverse_attributes(attributes); + } + { + std::vector defs; defs.reserve(8); + defs.push_back(IFC4X3_ADD2_IfcActionRequest_type);defs.push_back(IFC4X3_ADD2_IfcCostItem_type);defs.push_back(IFC4X3_ADD2_IfcCostSchedule_type);defs.push_back(IFC4X3_ADD2_IfcPerformanceHistory_type);defs.push_back(IFC4X3_ADD2_IfcPermit_type);defs.push_back(IFC4X3_ADD2_IfcProjectOrder_type);defs.push_back(IFC4X3_ADD2_IfcWorkCalendar_type);defs.push_back(IFC4X3_ADD2_IfcWorkControl_type); + IFC4X3_ADD2_IfcControl_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(6); + defs.push_back(IFC4X3_ADD2_IfcActor_type);defs.push_back(IFC4X3_ADD2_IfcControl_type);defs.push_back(IFC4X3_ADD2_IfcGroup_type);defs.push_back(IFC4X3_ADD2_IfcProcess_type);defs.push_back(IFC4X3_ADD2_IfcProduct_type);defs.push_back(IFC4X3_ADD2_IfcResource_type); + IFC4X3_ADD2_IfcObject_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(7); + defs.push_back(IFC4X3_ADD2_IfcActuator_type);defs.push_back(IFC4X3_ADD2_IfcAlarm_type);defs.push_back(IFC4X3_ADD2_IfcController_type);defs.push_back(IFC4X3_ADD2_IfcFlowInstrument_type);defs.push_back(IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnit_type);defs.push_back(IFC4X3_ADD2_IfcSensor_type);defs.push_back(IFC4X3_ADD2_IfcUnitaryControlElement_type); + IFC4X3_ADD2_IfcDistributionControlElement_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(7); + defs.push_back(IFC4X3_ADD2_IfcActuatorType_type);defs.push_back(IFC4X3_ADD2_IfcAlarmType_type);defs.push_back(IFC4X3_ADD2_IfcControllerType_type);defs.push_back(IFC4X3_ADD2_IfcFlowInstrumentType_type);defs.push_back(IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnitType_type);defs.push_back(IFC4X3_ADD2_IfcSensorType_type);defs.push_back(IFC4X3_ADD2_IfcUnitaryControlElementType_type); + IFC4X3_ADD2_IfcDistributionControlElementType_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcAdvancedBrep_type);defs.push_back(IFC4X3_ADD2_IfcFacetedBrep_type); + IFC4X3_ADD2_IfcManifoldSolidBrep_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcAdvancedBrepWithVoids_type); + IFC4X3_ADD2_IfcAdvancedBrep_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcAdvancedFace_type); + IFC4X3_ADD2_IfcFaceSurface_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(16); + defs.push_back(IFC4X3_ADD2_IfcAirTerminal_type);defs.push_back(IFC4X3_ADD2_IfcAudioVisualAppliance_type);defs.push_back(IFC4X3_ADD2_IfcCommunicationsAppliance_type);defs.push_back(IFC4X3_ADD2_IfcElectricAppliance_type);defs.push_back(IFC4X3_ADD2_IfcFireSuppressionTerminal_type);defs.push_back(IFC4X3_ADD2_IfcLamp_type);defs.push_back(IFC4X3_ADD2_IfcLightFixture_type);defs.push_back(IFC4X3_ADD2_IfcLiquidTerminal_type);defs.push_back(IFC4X3_ADD2_IfcMedicalDevice_type);defs.push_back(IFC4X3_ADD2_IfcMobileTelecommunicationsAppliance_type);defs.push_back(IFC4X3_ADD2_IfcOutlet_type);defs.push_back(IFC4X3_ADD2_IfcSanitaryTerminal_type);defs.push_back(IFC4X3_ADD2_IfcSignal_type);defs.push_back(IFC4X3_ADD2_IfcSpaceHeater_type);defs.push_back(IFC4X3_ADD2_IfcStackTerminal_type);defs.push_back(IFC4X3_ADD2_IfcWasteTerminal_type); + IFC4X3_ADD2_IfcFlowTerminal_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(9); + defs.push_back(IFC4X3_ADD2_IfcAirTerminalBox_type);defs.push_back(IFC4X3_ADD2_IfcDamper_type);defs.push_back(IFC4X3_ADD2_IfcDistributionBoard_type);defs.push_back(IFC4X3_ADD2_IfcElectricDistributionBoard_type);defs.push_back(IFC4X3_ADD2_IfcElectricTimeControl_type);defs.push_back(IFC4X3_ADD2_IfcFlowMeter_type);defs.push_back(IFC4X3_ADD2_IfcProtectiveDevice_type);defs.push_back(IFC4X3_ADD2_IfcSwitchingDevice_type);defs.push_back(IFC4X3_ADD2_IfcValve_type); + IFC4X3_ADD2_IfcFlowController_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(9); + defs.push_back(IFC4X3_ADD2_IfcAirTerminalBoxType_type);defs.push_back(IFC4X3_ADD2_IfcDamperType_type);defs.push_back(IFC4X3_ADD2_IfcDistributionBoardType_type);defs.push_back(IFC4X3_ADD2_IfcElectricDistributionBoardType_type);defs.push_back(IFC4X3_ADD2_IfcElectricTimeControlType_type);defs.push_back(IFC4X3_ADD2_IfcFlowMeterType_type);defs.push_back(IFC4X3_ADD2_IfcProtectiveDeviceType_type);defs.push_back(IFC4X3_ADD2_IfcSwitchingDeviceType_type);defs.push_back(IFC4X3_ADD2_IfcValveType_type); + IFC4X3_ADD2_IfcFlowControllerType_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(16); + defs.push_back(IFC4X3_ADD2_IfcAirTerminalType_type);defs.push_back(IFC4X3_ADD2_IfcAudioVisualApplianceType_type);defs.push_back(IFC4X3_ADD2_IfcCommunicationsApplianceType_type);defs.push_back(IFC4X3_ADD2_IfcElectricApplianceType_type);defs.push_back(IFC4X3_ADD2_IfcFireSuppressionTerminalType_type);defs.push_back(IFC4X3_ADD2_IfcLampType_type);defs.push_back(IFC4X3_ADD2_IfcLightFixtureType_type);defs.push_back(IFC4X3_ADD2_IfcLiquidTerminalType_type);defs.push_back(IFC4X3_ADD2_IfcMedicalDeviceType_type);defs.push_back(IFC4X3_ADD2_IfcMobileTelecommunicationsApplianceType_type);defs.push_back(IFC4X3_ADD2_IfcOutletType_type);defs.push_back(IFC4X3_ADD2_IfcSanitaryTerminalType_type);defs.push_back(IFC4X3_ADD2_IfcSignalType_type);defs.push_back(IFC4X3_ADD2_IfcSpaceHeaterType_type);defs.push_back(IFC4X3_ADD2_IfcStackTerminalType_type);defs.push_back(IFC4X3_ADD2_IfcWasteTerminalType_type); + IFC4X3_ADD2_IfcFlowTerminalType_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(20); + defs.push_back(IFC4X3_ADD2_IfcAirToAirHeatRecovery_type);defs.push_back(IFC4X3_ADD2_IfcBoiler_type);defs.push_back(IFC4X3_ADD2_IfcBurner_type);defs.push_back(IFC4X3_ADD2_IfcChiller_type);defs.push_back(IFC4X3_ADD2_IfcCoil_type);defs.push_back(IFC4X3_ADD2_IfcCondenser_type);defs.push_back(IFC4X3_ADD2_IfcCooledBeam_type);defs.push_back(IFC4X3_ADD2_IfcCoolingTower_type);defs.push_back(IFC4X3_ADD2_IfcElectricGenerator_type);defs.push_back(IFC4X3_ADD2_IfcElectricMotor_type);defs.push_back(IFC4X3_ADD2_IfcEngine_type);defs.push_back(IFC4X3_ADD2_IfcEvaporativeCooler_type);defs.push_back(IFC4X3_ADD2_IfcEvaporator_type);defs.push_back(IFC4X3_ADD2_IfcHeatExchanger_type);defs.push_back(IFC4X3_ADD2_IfcHumidifier_type);defs.push_back(IFC4X3_ADD2_IfcMotorConnection_type);defs.push_back(IFC4X3_ADD2_IfcSolarDevice_type);defs.push_back(IFC4X3_ADD2_IfcTransformer_type);defs.push_back(IFC4X3_ADD2_IfcTubeBundle_type);defs.push_back(IFC4X3_ADD2_IfcUnitaryEquipment_type); + IFC4X3_ADD2_IfcEnergyConversionDevice_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(20); + defs.push_back(IFC4X3_ADD2_IfcAirToAirHeatRecoveryType_type);defs.push_back(IFC4X3_ADD2_IfcBoilerType_type);defs.push_back(IFC4X3_ADD2_IfcBurnerType_type);defs.push_back(IFC4X3_ADD2_IfcChillerType_type);defs.push_back(IFC4X3_ADD2_IfcCoilType_type);defs.push_back(IFC4X3_ADD2_IfcCondenserType_type);defs.push_back(IFC4X3_ADD2_IfcCooledBeamType_type);defs.push_back(IFC4X3_ADD2_IfcCoolingTowerType_type);defs.push_back(IFC4X3_ADD2_IfcElectricGeneratorType_type);defs.push_back(IFC4X3_ADD2_IfcElectricMotorType_type);defs.push_back(IFC4X3_ADD2_IfcEngineType_type);defs.push_back(IFC4X3_ADD2_IfcEvaporativeCoolerType_type);defs.push_back(IFC4X3_ADD2_IfcEvaporatorType_type);defs.push_back(IFC4X3_ADD2_IfcHeatExchangerType_type);defs.push_back(IFC4X3_ADD2_IfcHumidifierType_type);defs.push_back(IFC4X3_ADD2_IfcMotorConnectionType_type);defs.push_back(IFC4X3_ADD2_IfcSolarDeviceType_type);defs.push_back(IFC4X3_ADD2_IfcTransformerType_type);defs.push_back(IFC4X3_ADD2_IfcTubeBundleType_type);defs.push_back(IFC4X3_ADD2_IfcUnitaryEquipmentType_type); + IFC4X3_ADD2_IfcEnergyConversionDeviceType_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcAlignment_type); + IFC4X3_ADD2_IfcLinearPositioningElement_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(4); + defs.push_back(IFC4X3_ADD2_IfcAlignmentCant_type);defs.push_back(IFC4X3_ADD2_IfcAlignmentHorizontal_type);defs.push_back(IFC4X3_ADD2_IfcAlignmentSegment_type);defs.push_back(IFC4X3_ADD2_IfcAlignmentVertical_type); + IFC4X3_ADD2_IfcLinearElement_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcAlignmentCantSegment_type);defs.push_back(IFC4X3_ADD2_IfcAlignmentHorizontalSegment_type);defs.push_back(IFC4X3_ADD2_IfcAlignmentVerticalSegment_type); + IFC4X3_ADD2_IfcAlignmentParameterSegment_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(8); + defs.push_back(IFC4X3_ADD2_IfcAnnotation_type);defs.push_back(IFC4X3_ADD2_IfcElement_type);defs.push_back(IFC4X3_ADD2_IfcLinearElement_type);defs.push_back(IFC4X3_ADD2_IfcPort_type);defs.push_back(IFC4X3_ADD2_IfcPositioningElement_type);defs.push_back(IFC4X3_ADD2_IfcSpatialElement_type);defs.push_back(IFC4X3_ADD2_IfcStructuralActivity_type);defs.push_back(IFC4X3_ADD2_IfcStructuralItem_type); + IFC4X3_ADD2_IfcProduct_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(25); + defs.push_back(IFC4X3_ADD2_IfcAnnotationFillArea_type);defs.push_back(IFC4X3_ADD2_IfcBooleanResult_type);defs.push_back(IFC4X3_ADD2_IfcBoundingBox_type);defs.push_back(IFC4X3_ADD2_IfcCartesianPointList_type);defs.push_back(IFC4X3_ADD2_IfcCartesianTransformationOperator_type);defs.push_back(IFC4X3_ADD2_IfcCsgPrimitive3D_type);defs.push_back(IFC4X3_ADD2_IfcCurve_type);defs.push_back(IFC4X3_ADD2_IfcDirection_type);defs.push_back(IFC4X3_ADD2_IfcFaceBasedSurfaceModel_type);defs.push_back(IFC4X3_ADD2_IfcFillAreaStyleHatching_type);defs.push_back(IFC4X3_ADD2_IfcFillAreaStyleTiles_type);defs.push_back(IFC4X3_ADD2_IfcGeometricSet_type);defs.push_back(IFC4X3_ADD2_IfcHalfSpaceSolid_type);defs.push_back(IFC4X3_ADD2_IfcLightSource_type);defs.push_back(IFC4X3_ADD2_IfcPlacement_type);defs.push_back(IFC4X3_ADD2_IfcPlanarExtent_type);defs.push_back(IFC4X3_ADD2_IfcPoint_type);defs.push_back(IFC4X3_ADD2_IfcSectionedSpine_type);defs.push_back(IFC4X3_ADD2_IfcSegment_type);defs.push_back(IFC4X3_ADD2_IfcShellBasedSurfaceModel_type);defs.push_back(IFC4X3_ADD2_IfcSolidModel_type);defs.push_back(IFC4X3_ADD2_IfcSurface_type);defs.push_back(IFC4X3_ADD2_IfcTessellatedItem_type);defs.push_back(IFC4X3_ADD2_IfcTextLiteral_type);defs.push_back(IFC4X3_ADD2_IfcVector_type); + IFC4X3_ADD2_IfcGeometricRepresentationItem_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(9); + defs.push_back(IFC4X3_ADD2_IfcApprovalRelationship_type);defs.push_back(IFC4X3_ADD2_IfcCurrencyRelationship_type);defs.push_back(IFC4X3_ADD2_IfcDocumentInformationRelationship_type);defs.push_back(IFC4X3_ADD2_IfcExternalReferenceRelationship_type);defs.push_back(IFC4X3_ADD2_IfcMaterialRelationship_type);defs.push_back(IFC4X3_ADD2_IfcOrganizationRelationship_type);defs.push_back(IFC4X3_ADD2_IfcPropertyDependencyRelationship_type);defs.push_back(IFC4X3_ADD2_IfcResourceApprovalRelationship_type);defs.push_back(IFC4X3_ADD2_IfcResourceConstraintRelationship_type); + IFC4X3_ADD2_IfcResourceLevelRelationship_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(6); + defs.push_back(IFC4X3_ADD2_IfcArbitraryClosedProfileDef_type);defs.push_back(IFC4X3_ADD2_IfcArbitraryOpenProfileDef_type);defs.push_back(IFC4X3_ADD2_IfcCompositeProfileDef_type);defs.push_back(IFC4X3_ADD2_IfcDerivedProfileDef_type);defs.push_back(IFC4X3_ADD2_IfcOpenCrossProfileDef_type);defs.push_back(IFC4X3_ADD2_IfcParameterizedProfileDef_type); + IFC4X3_ADD2_IfcProfileDef_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcArbitraryProfileDefWithVoids_type); + IFC4X3_ADD2_IfcArbitraryClosedProfileDef_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(5); + defs.push_back(IFC4X3_ADD2_IfcAsset_type);defs.push_back(IFC4X3_ADD2_IfcInventory_type);defs.push_back(IFC4X3_ADD2_IfcStructuralLoadGroup_type);defs.push_back(IFC4X3_ADD2_IfcStructuralResultGroup_type);defs.push_back(IFC4X3_ADD2_IfcSystem_type); + IFC4X3_ADD2_IfcGroup_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(11); + defs.push_back(IFC4X3_ADD2_IfcAsymmetricIShapeProfileDef_type);defs.push_back(IFC4X3_ADD2_IfcCShapeProfileDef_type);defs.push_back(IFC4X3_ADD2_IfcCircleProfileDef_type);defs.push_back(IFC4X3_ADD2_IfcEllipseProfileDef_type);defs.push_back(IFC4X3_ADD2_IfcIShapeProfileDef_type);defs.push_back(IFC4X3_ADD2_IfcLShapeProfileDef_type);defs.push_back(IFC4X3_ADD2_IfcRectangleProfileDef_type);defs.push_back(IFC4X3_ADD2_IfcTShapeProfileDef_type);defs.push_back(IFC4X3_ADD2_IfcTrapeziumProfileDef_type);defs.push_back(IFC4X3_ADD2_IfcUShapeProfileDef_type);defs.push_back(IFC4X3_ADD2_IfcZShapeProfileDef_type); + IFC4X3_ADD2_IfcParameterizedProfileDef_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(4); + defs.push_back(IFC4X3_ADD2_IfcAxis1Placement_type);defs.push_back(IFC4X3_ADD2_IfcAxis2Placement2D_type);defs.push_back(IFC4X3_ADD2_IfcAxis2Placement3D_type);defs.push_back(IFC4X3_ADD2_IfcAxis2PlacementLinear_type); + IFC4X3_ADD2_IfcPlacement_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(5); + defs.push_back(IFC4X3_ADD2_IfcBSplineCurve_type);defs.push_back(IFC4X3_ADD2_IfcCompositeCurve_type);defs.push_back(IFC4X3_ADD2_IfcIndexedPolyCurve_type);defs.push_back(IFC4X3_ADD2_IfcPolyline_type);defs.push_back(IFC4X3_ADD2_IfcTrimmedCurve_type); + IFC4X3_ADD2_IfcBoundedCurve_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcBSplineCurveWithKnots_type); + IFC4X3_ADD2_IfcBSplineCurve_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(4); + defs.push_back(IFC4X3_ADD2_IfcBSplineSurface_type);defs.push_back(IFC4X3_ADD2_IfcCurveBoundedPlane_type);defs.push_back(IFC4X3_ADD2_IfcCurveBoundedSurface_type);defs.push_back(IFC4X3_ADD2_IfcRectangularTrimmedSurface_type); + IFC4X3_ADD2_IfcBoundedSurface_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcBSplineSurfaceWithKnots_type); + IFC4X3_ADD2_IfcBSplineSurface_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(30); + defs.push_back(IFC4X3_ADD2_IfcBeam_type);defs.push_back(IFC4X3_ADD2_IfcBearing_type);defs.push_back(IFC4X3_ADD2_IfcBuildingElementProxy_type);defs.push_back(IFC4X3_ADD2_IfcChimney_type);defs.push_back(IFC4X3_ADD2_IfcColumn_type);defs.push_back(IFC4X3_ADD2_IfcCourse_type);defs.push_back(IFC4X3_ADD2_IfcCovering_type);defs.push_back(IFC4X3_ADD2_IfcCurtainWall_type);defs.push_back(IFC4X3_ADD2_IfcDeepFoundation_type);defs.push_back(IFC4X3_ADD2_IfcDoor_type);defs.push_back(IFC4X3_ADD2_IfcEarthworksElement_type);defs.push_back(IFC4X3_ADD2_IfcFooting_type);defs.push_back(IFC4X3_ADD2_IfcKerb_type);defs.push_back(IFC4X3_ADD2_IfcMember_type);defs.push_back(IFC4X3_ADD2_IfcMooringDevice_type);defs.push_back(IFC4X3_ADD2_IfcNavigationElement_type);defs.push_back(IFC4X3_ADD2_IfcPavement_type);defs.push_back(IFC4X3_ADD2_IfcPlate_type);defs.push_back(IFC4X3_ADD2_IfcRail_type);defs.push_back(IFC4X3_ADD2_IfcRailing_type);defs.push_back(IFC4X3_ADD2_IfcRamp_type);defs.push_back(IFC4X3_ADD2_IfcRampFlight_type);defs.push_back(IFC4X3_ADD2_IfcRoof_type);defs.push_back(IFC4X3_ADD2_IfcShadingDevice_type);defs.push_back(IFC4X3_ADD2_IfcSlab_type);defs.push_back(IFC4X3_ADD2_IfcStair_type);defs.push_back(IFC4X3_ADD2_IfcStairFlight_type);defs.push_back(IFC4X3_ADD2_IfcTrackElement_type);defs.push_back(IFC4X3_ADD2_IfcWall_type);defs.push_back(IFC4X3_ADD2_IfcWindow_type); + IFC4X3_ADD2_IfcBuiltElement_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(29); + defs.push_back(IFC4X3_ADD2_IfcBeamType_type);defs.push_back(IFC4X3_ADD2_IfcBearingType_type);defs.push_back(IFC4X3_ADD2_IfcBuildingElementProxyType_type);defs.push_back(IFC4X3_ADD2_IfcChimneyType_type);defs.push_back(IFC4X3_ADD2_IfcColumnType_type);defs.push_back(IFC4X3_ADD2_IfcCourseType_type);defs.push_back(IFC4X3_ADD2_IfcCoveringType_type);defs.push_back(IFC4X3_ADD2_IfcCurtainWallType_type);defs.push_back(IFC4X3_ADD2_IfcDeepFoundationType_type);defs.push_back(IFC4X3_ADD2_IfcDoorType_type);defs.push_back(IFC4X3_ADD2_IfcFootingType_type);defs.push_back(IFC4X3_ADD2_IfcKerbType_type);defs.push_back(IFC4X3_ADD2_IfcMemberType_type);defs.push_back(IFC4X3_ADD2_IfcMooringDeviceType_type);defs.push_back(IFC4X3_ADD2_IfcNavigationElementType_type);defs.push_back(IFC4X3_ADD2_IfcPavementType_type);defs.push_back(IFC4X3_ADD2_IfcPlateType_type);defs.push_back(IFC4X3_ADD2_IfcRailType_type);defs.push_back(IFC4X3_ADD2_IfcRailingType_type);defs.push_back(IFC4X3_ADD2_IfcRampFlightType_type);defs.push_back(IFC4X3_ADD2_IfcRampType_type);defs.push_back(IFC4X3_ADD2_IfcRoofType_type);defs.push_back(IFC4X3_ADD2_IfcShadingDeviceType_type);defs.push_back(IFC4X3_ADD2_IfcSlabType_type);defs.push_back(IFC4X3_ADD2_IfcStairFlightType_type);defs.push_back(IFC4X3_ADD2_IfcStairType_type);defs.push_back(IFC4X3_ADD2_IfcTrackElementType_type);defs.push_back(IFC4X3_ADD2_IfcWallType_type);defs.push_back(IFC4X3_ADD2_IfcWindowType_type); + IFC4X3_ADD2_IfcBuiltElementType_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcBlobTexture_type);defs.push_back(IFC4X3_ADD2_IfcImageTexture_type);defs.push_back(IFC4X3_ADD2_IfcPixelTexture_type); + IFC4X3_ADD2_IfcSurfaceTexture_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(5); + defs.push_back(IFC4X3_ADD2_IfcBlock_type);defs.push_back(IFC4X3_ADD2_IfcRectangularPyramid_type);defs.push_back(IFC4X3_ADD2_IfcRightCircularCone_type);defs.push_back(IFC4X3_ADD2_IfcRightCircularCylinder_type);defs.push_back(IFC4X3_ADD2_IfcSphere_type); + IFC4X3_ADD2_IfcCsgPrimitive3D_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcBooleanClippingResult_type); + IFC4X3_ADD2_IfcBooleanResult_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcBorehole_type);defs.push_back(IFC4X3_ADD2_IfcGeomodel_type);defs.push_back(IFC4X3_ADD2_IfcGeoslice_type); + IFC4X3_ADD2_IfcGeotechnicalAssembly_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcBoundaryCurve_type); + IFC4X3_ADD2_IfcCompositeCurveOnSurface_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcBoundaryEdgeCondition_type);defs.push_back(IFC4X3_ADD2_IfcBoundaryFaceCondition_type);defs.push_back(IFC4X3_ADD2_IfcBoundaryNodeCondition_type); + IFC4X3_ADD2_IfcBoundaryCondition_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcBoundaryNodeConditionWarping_type); + IFC4X3_ADD2_IfcBoundaryNodeCondition_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(8); + defs.push_back(IFC4X3_ADD2_IfcBoundedCurve_type);defs.push_back(IFC4X3_ADD2_IfcConic_type);defs.push_back(IFC4X3_ADD2_IfcLine_type);defs.push_back(IFC4X3_ADD2_IfcOffsetCurve_type);defs.push_back(IFC4X3_ADD2_IfcPcurve_type);defs.push_back(IFC4X3_ADD2_IfcPolynomialCurve_type);defs.push_back(IFC4X3_ADD2_IfcSpiral_type);defs.push_back(IFC4X3_ADD2_IfcSurfaceCurve_type); + IFC4X3_ADD2_IfcCurve_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(4); + defs.push_back(IFC4X3_ADD2_IfcBoundedSurface_type);defs.push_back(IFC4X3_ADD2_IfcElementarySurface_type);defs.push_back(IFC4X3_ADD2_IfcSectionedSurface_type);defs.push_back(IFC4X3_ADD2_IfcSweptSurface_type); + IFC4X3_ADD2_IfcSurface_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcBoxedHalfSpace_type);defs.push_back(IFC4X3_ADD2_IfcPolygonalBoundedHalfSpace_type); + IFC4X3_ADD2_IfcHalfSpaceSolid_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(5); + defs.push_back(IFC4X3_ADD2_IfcBridge_type);defs.push_back(IFC4X3_ADD2_IfcBuilding_type);defs.push_back(IFC4X3_ADD2_IfcMarineFacility_type);defs.push_back(IFC4X3_ADD2_IfcRailway_type);defs.push_back(IFC4X3_ADD2_IfcRoad_type); + IFC4X3_ADD2_IfcFacility_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(5); + defs.push_back(IFC4X3_ADD2_IfcBridgePart_type);defs.push_back(IFC4X3_ADD2_IfcFacilityPartCommon_type);defs.push_back(IFC4X3_ADD2_IfcMarinePart_type);defs.push_back(IFC4X3_ADD2_IfcRailwayPart_type);defs.push_back(IFC4X3_ADD2_IfcRoadPart_type); + IFC4X3_ADD2_IfcFacilityPart_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(9); + defs.push_back(IFC4X3_ADD2_IfcBuildingElementPart_type);defs.push_back(IFC4X3_ADD2_IfcDiscreteAccessory_type);defs.push_back(IFC4X3_ADD2_IfcFastener_type);defs.push_back(IFC4X3_ADD2_IfcImpactProtectionDevice_type);defs.push_back(IFC4X3_ADD2_IfcMechanicalFastener_type);defs.push_back(IFC4X3_ADD2_IfcReinforcingElement_type);defs.push_back(IFC4X3_ADD2_IfcSign_type);defs.push_back(IFC4X3_ADD2_IfcVibrationDamper_type);defs.push_back(IFC4X3_ADD2_IfcVibrationIsolator_type); + IFC4X3_ADD2_IfcElementComponent_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(9); + defs.push_back(IFC4X3_ADD2_IfcBuildingElementPartType_type);defs.push_back(IFC4X3_ADD2_IfcDiscreteAccessoryType_type);defs.push_back(IFC4X3_ADD2_IfcFastenerType_type);defs.push_back(IFC4X3_ADD2_IfcImpactProtectionDeviceType_type);defs.push_back(IFC4X3_ADD2_IfcMechanicalFastenerType_type);defs.push_back(IFC4X3_ADD2_IfcReinforcingElementType_type);defs.push_back(IFC4X3_ADD2_IfcSignType_type);defs.push_back(IFC4X3_ADD2_IfcVibrationDamperType_type);defs.push_back(IFC4X3_ADD2_IfcVibrationIsolatorType_type); + IFC4X3_ADD2_IfcElementComponentType_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(5); + defs.push_back(IFC4X3_ADD2_IfcBuildingStorey_type);defs.push_back(IFC4X3_ADD2_IfcFacility_type);defs.push_back(IFC4X3_ADD2_IfcFacilityPart_type);defs.push_back(IFC4X3_ADD2_IfcSite_type);defs.push_back(IFC4X3_ADD2_IfcSpace_type); + IFC4X3_ADD2_IfcSpatialStructureElement_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(5); + defs.push_back(IFC4X3_ADD2_IfcBuildingSystem_type);defs.push_back(IFC4X3_ADD2_IfcBuiltSystem_type);defs.push_back(IFC4X3_ADD2_IfcDistributionSystem_type);defs.push_back(IFC4X3_ADD2_IfcStructuralAnalysisModel_type);defs.push_back(IFC4X3_ADD2_IfcZone_type); + IFC4X3_ADD2_IfcSystem_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(11); + defs.push_back(IFC4X3_ADD2_IfcBuiltElement_type);defs.push_back(IFC4X3_ADD2_IfcCivilElement_type);defs.push_back(IFC4X3_ADD2_IfcDistributionElement_type);defs.push_back(IFC4X3_ADD2_IfcElementAssembly_type);defs.push_back(IFC4X3_ADD2_IfcElementComponent_type);defs.push_back(IFC4X3_ADD2_IfcFeatureElement_type);defs.push_back(IFC4X3_ADD2_IfcFurnishingElement_type);defs.push_back(IFC4X3_ADD2_IfcGeographicElement_type);defs.push_back(IFC4X3_ADD2_IfcGeotechnicalElement_type);defs.push_back(IFC4X3_ADD2_IfcTransportationDevice_type);defs.push_back(IFC4X3_ADD2_IfcVirtualElement_type); + IFC4X3_ADD2_IfcElement_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(8); + defs.push_back(IFC4X3_ADD2_IfcBuiltElementType_type);defs.push_back(IFC4X3_ADD2_IfcCivilElementType_type);defs.push_back(IFC4X3_ADD2_IfcDistributionElementType_type);defs.push_back(IFC4X3_ADD2_IfcElementAssemblyType_type);defs.push_back(IFC4X3_ADD2_IfcElementComponentType_type);defs.push_back(IFC4X3_ADD2_IfcFurnishingElementType_type);defs.push_back(IFC4X3_ADD2_IfcGeographicElementType_type);defs.push_back(IFC4X3_ADD2_IfcTransportationDeviceType_type); + IFC4X3_ADD2_IfcElementType_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(5); + defs.push_back(IFC4X3_ADD2_IfcCableCarrierFitting_type);defs.push_back(IFC4X3_ADD2_IfcCableFitting_type);defs.push_back(IFC4X3_ADD2_IfcDuctFitting_type);defs.push_back(IFC4X3_ADD2_IfcJunctionBox_type);defs.push_back(IFC4X3_ADD2_IfcPipeFitting_type); + IFC4X3_ADD2_IfcFlowFitting_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(5); + defs.push_back(IFC4X3_ADD2_IfcCableCarrierFittingType_type);defs.push_back(IFC4X3_ADD2_IfcCableFittingType_type);defs.push_back(IFC4X3_ADD2_IfcDuctFittingType_type);defs.push_back(IFC4X3_ADD2_IfcJunctionBoxType_type);defs.push_back(IFC4X3_ADD2_IfcPipeFittingType_type); + IFC4X3_ADD2_IfcFlowFittingType_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(5); + defs.push_back(IFC4X3_ADD2_IfcCableCarrierSegment_type);defs.push_back(IFC4X3_ADD2_IfcCableSegment_type);defs.push_back(IFC4X3_ADD2_IfcConveyorSegment_type);defs.push_back(IFC4X3_ADD2_IfcDuctSegment_type);defs.push_back(IFC4X3_ADD2_IfcPipeSegment_type); + IFC4X3_ADD2_IfcFlowSegment_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(5); + defs.push_back(IFC4X3_ADD2_IfcCableCarrierSegmentType_type);defs.push_back(IFC4X3_ADD2_IfcCableSegmentType_type);defs.push_back(IFC4X3_ADD2_IfcConveyorSegmentType_type);defs.push_back(IFC4X3_ADD2_IfcDuctSegmentType_type);defs.push_back(IFC4X3_ADD2_IfcPipeSegmentType_type); + IFC4X3_ADD2_IfcFlowSegmentType_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcCaissonFoundation_type);defs.push_back(IFC4X3_ADD2_IfcPile_type); + IFC4X3_ADD2_IfcDeepFoundation_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcCaissonFoundationType_type);defs.push_back(IFC4X3_ADD2_IfcPileType_type); + IFC4X3_ADD2_IfcDeepFoundationType_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(4); + defs.push_back(IFC4X3_ADD2_IfcCartesianPoint_type);defs.push_back(IFC4X3_ADD2_IfcPointByDistanceExpression_type);defs.push_back(IFC4X3_ADD2_IfcPointOnCurve_type);defs.push_back(IFC4X3_ADD2_IfcPointOnSurface_type); + IFC4X3_ADD2_IfcPoint_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcCartesianPointList2D_type);defs.push_back(IFC4X3_ADD2_IfcCartesianPointList3D_type); + IFC4X3_ADD2_IfcCartesianPointList_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcCartesianTransformationOperator2D_type);defs.push_back(IFC4X3_ADD2_IfcCartesianTransformationOperator3D_type); + IFC4X3_ADD2_IfcCartesianTransformationOperator_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcCartesianTransformationOperator2DnonUniform_type); + IFC4X3_ADD2_IfcCartesianTransformationOperator2D_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcCartesianTransformationOperator3DnonUniform_type); + IFC4X3_ADD2_IfcCartesianTransformationOperator3D_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcCenterLineProfileDef_type); + IFC4X3_ADD2_IfcArbitraryOpenProfileDef_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcCircle_type);defs.push_back(IFC4X3_ADD2_IfcEllipse_type); + IFC4X3_ADD2_IfcConic_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcCircleHollowProfileDef_type); + IFC4X3_ADD2_IfcCircleProfileDef_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcClassification_type);defs.push_back(IFC4X3_ADD2_IfcDocumentInformation_type);defs.push_back(IFC4X3_ADD2_IfcLibraryInformation_type); + IFC4X3_ADD2_IfcExternalInformation_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(6); + defs.push_back(IFC4X3_ADD2_IfcClassificationReference_type);defs.push_back(IFC4X3_ADD2_IfcDocumentReference_type);defs.push_back(IFC4X3_ADD2_IfcExternallyDefinedHatchStyle_type);defs.push_back(IFC4X3_ADD2_IfcExternallyDefinedSurfaceStyle_type);defs.push_back(IFC4X3_ADD2_IfcExternallyDefinedTextFont_type);defs.push_back(IFC4X3_ADD2_IfcLibraryReference_type); + IFC4X3_ADD2_IfcExternalReference_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcClosedShell_type);defs.push_back(IFC4X3_ADD2_IfcOpenShell_type); + IFC4X3_ADD2_IfcConnectedFaceSet_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(6); + defs.push_back(IFC4X3_ADD2_IfcClothoid_type);defs.push_back(IFC4X3_ADD2_IfcCosineSpiral_type);defs.push_back(IFC4X3_ADD2_IfcSecondOrderPolynomialSpiral_type);defs.push_back(IFC4X3_ADD2_IfcSeventhOrderPolynomialSpiral_type);defs.push_back(IFC4X3_ADD2_IfcSineSpiral_type);defs.push_back(IFC4X3_ADD2_IfcThirdOrderPolynomialSpiral_type); + IFC4X3_ADD2_IfcSpiral_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcColourRgb_type); + IFC4X3_ADD2_IfcColourSpecification_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(17); + defs.push_back(IFC4X3_ADD2_IfcColourRgbList_type);defs.push_back(IFC4X3_ADD2_IfcColourSpecification_type);defs.push_back(IFC4X3_ADD2_IfcCurveStyleFont_type);defs.push_back(IFC4X3_ADD2_IfcCurveStyleFontAndScaling_type);defs.push_back(IFC4X3_ADD2_IfcCurveStyleFontPattern_type);defs.push_back(IFC4X3_ADD2_IfcIndexedColourMap_type);defs.push_back(IFC4X3_ADD2_IfcPreDefinedItem_type);defs.push_back(IFC4X3_ADD2_IfcSurfaceStyleLighting_type);defs.push_back(IFC4X3_ADD2_IfcSurfaceStyleRefraction_type);defs.push_back(IFC4X3_ADD2_IfcSurfaceStyleShading_type);defs.push_back(IFC4X3_ADD2_IfcSurfaceStyleWithTextures_type);defs.push_back(IFC4X3_ADD2_IfcSurfaceTexture_type);defs.push_back(IFC4X3_ADD2_IfcTextStyleForDefinedFont_type);defs.push_back(IFC4X3_ADD2_IfcTextStyleTextModel_type);defs.push_back(IFC4X3_ADD2_IfcTextureCoordinate_type);defs.push_back(IFC4X3_ADD2_IfcTextureVertex_type);defs.push_back(IFC4X3_ADD2_IfcTextureVertexList_type); + IFC4X3_ADD2_IfcPresentationItem_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcComplexProperty_type);defs.push_back(IFC4X3_ADD2_IfcSimpleProperty_type); + IFC4X3_ADD2_IfcProperty_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcComplexPropertyTemplate_type);defs.push_back(IFC4X3_ADD2_IfcSimplePropertyTemplate_type); + IFC4X3_ADD2_IfcPropertyTemplate_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcCompositeCurveOnSurface_type);defs.push_back(IFC4X3_ADD2_IfcGradientCurve_type);defs.push_back(IFC4X3_ADD2_IfcSegmentedReferenceCurve_type); + IFC4X3_ADD2_IfcCompositeCurve_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcCompositeCurveSegment_type);defs.push_back(IFC4X3_ADD2_IfcCurveSegment_type); + IFC4X3_ADD2_IfcSegment_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcCompressor_type);defs.push_back(IFC4X3_ADD2_IfcFan_type);defs.push_back(IFC4X3_ADD2_IfcPump_type); + IFC4X3_ADD2_IfcFlowMovingDevice_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcCompressorType_type);defs.push_back(IFC4X3_ADD2_IfcFanType_type);defs.push_back(IFC4X3_ADD2_IfcPumpType_type); + IFC4X3_ADD2_IfcFlowMovingDeviceType_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(7); + defs.push_back(IFC4X3_ADD2_IfcConnectedFaceSet_type);defs.push_back(IFC4X3_ADD2_IfcEdge_type);defs.push_back(IFC4X3_ADD2_IfcFace_type);defs.push_back(IFC4X3_ADD2_IfcFaceBound_type);defs.push_back(IFC4X3_ADD2_IfcLoop_type);defs.push_back(IFC4X3_ADD2_IfcPath_type);defs.push_back(IFC4X3_ADD2_IfcVertex_type); + IFC4X3_ADD2_IfcTopologicalRepresentationItem_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(4); + defs.push_back(IFC4X3_ADD2_IfcConnectionCurveGeometry_type);defs.push_back(IFC4X3_ADD2_IfcConnectionPointGeometry_type);defs.push_back(IFC4X3_ADD2_IfcConnectionSurfaceGeometry_type);defs.push_back(IFC4X3_ADD2_IfcConnectionVolumeGeometry_type); + IFC4X3_ADD2_IfcConnectionGeometry_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcConnectionPointEccentricity_type); + IFC4X3_ADD2_IfcConnectionPointGeometry_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(6); + defs.push_back(IFC4X3_ADD2_IfcConstructionEquipmentResource_type);defs.push_back(IFC4X3_ADD2_IfcConstructionMaterialResource_type);defs.push_back(IFC4X3_ADD2_IfcConstructionProductResource_type);defs.push_back(IFC4X3_ADD2_IfcCrewResource_type);defs.push_back(IFC4X3_ADD2_IfcLaborResource_type);defs.push_back(IFC4X3_ADD2_IfcSubContractResource_type); + IFC4X3_ADD2_IfcConstructionResource_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(6); + defs.push_back(IFC4X3_ADD2_IfcConstructionEquipmentResourceType_type);defs.push_back(IFC4X3_ADD2_IfcConstructionMaterialResourceType_type);defs.push_back(IFC4X3_ADD2_IfcConstructionProductResourceType_type);defs.push_back(IFC4X3_ADD2_IfcCrewResourceType_type);defs.push_back(IFC4X3_ADD2_IfcLaborResourceType_type);defs.push_back(IFC4X3_ADD2_IfcSubContractResourceType_type); + IFC4X3_ADD2_IfcConstructionResourceType_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcConstructionResource_type); + IFC4X3_ADD2_IfcResource_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcConstructionResourceType_type); + IFC4X3_ADD2_IfcTypeResource_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcContext_type);defs.push_back(IFC4X3_ADD2_IfcObject_type);defs.push_back(IFC4X3_ADD2_IfcTypeObject_type); + IFC4X3_ADD2_IfcObjectDefinition_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcContextDependentUnit_type);defs.push_back(IFC4X3_ADD2_IfcConversionBasedUnit_type);defs.push_back(IFC4X3_ADD2_IfcSIUnit_type); + IFC4X3_ADD2_IfcNamedUnit_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcConversionBasedUnitWithOffset_type); + IFC4X3_ADD2_IfcConversionBasedUnit_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcCostValue_type); + IFC4X3_ADD2_IfcAppliedValue_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(5); + defs.push_back(IFC4X3_ADD2_IfcCsgSolid_type);defs.push_back(IFC4X3_ADD2_IfcManifoldSolidBrep_type);defs.push_back(IFC4X3_ADD2_IfcSectionedSolid_type);defs.push_back(IFC4X3_ADD2_IfcSweptAreaSolid_type);defs.push_back(IFC4X3_ADD2_IfcSweptDiskSolid_type); + IFC4X3_ADD2_IfcSolidModel_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(4); + defs.push_back(IFC4X3_ADD2_IfcCurveStyle_type);defs.push_back(IFC4X3_ADD2_IfcFillAreaStyle_type);defs.push_back(IFC4X3_ADD2_IfcSurfaceStyle_type);defs.push_back(IFC4X3_ADD2_IfcTextStyle_type); + IFC4X3_ADD2_IfcPresentationStyle_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(4); + defs.push_back(IFC4X3_ADD2_IfcCylindricalSurface_type);defs.push_back(IFC4X3_ADD2_IfcPlane_type);defs.push_back(IFC4X3_ADD2_IfcSphericalSurface_type);defs.push_back(IFC4X3_ADD2_IfcToroidalSurface_type); + IFC4X3_ADD2_IfcElementarySurface_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcDirectrixCurveSweptAreaSolid_type);defs.push_back(IFC4X3_ADD2_IfcExtrudedAreaSolid_type);defs.push_back(IFC4X3_ADD2_IfcRevolvedAreaSolid_type); + IFC4X3_ADD2_IfcSweptAreaSolid_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcDirectrixDerivedReferenceSweptAreaSolid_type); + IFC4X3_ADD2_IfcFixedReferenceSweptAreaSolid_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(9); + defs.push_back(IFC4X3_ADD2_IfcDistributionChamberElement_type);defs.push_back(IFC4X3_ADD2_IfcEnergyConversionDevice_type);defs.push_back(IFC4X3_ADD2_IfcFlowController_type);defs.push_back(IFC4X3_ADD2_IfcFlowFitting_type);defs.push_back(IFC4X3_ADD2_IfcFlowMovingDevice_type);defs.push_back(IFC4X3_ADD2_IfcFlowSegment_type);defs.push_back(IFC4X3_ADD2_IfcFlowStorageDevice_type);defs.push_back(IFC4X3_ADD2_IfcFlowTerminal_type);defs.push_back(IFC4X3_ADD2_IfcFlowTreatmentDevice_type); + IFC4X3_ADD2_IfcDistributionFlowElement_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(9); + defs.push_back(IFC4X3_ADD2_IfcDistributionChamberElementType_type);defs.push_back(IFC4X3_ADD2_IfcEnergyConversionDeviceType_type);defs.push_back(IFC4X3_ADD2_IfcFlowControllerType_type);defs.push_back(IFC4X3_ADD2_IfcFlowFittingType_type);defs.push_back(IFC4X3_ADD2_IfcFlowMovingDeviceType_type);defs.push_back(IFC4X3_ADD2_IfcFlowSegmentType_type);defs.push_back(IFC4X3_ADD2_IfcFlowStorageDeviceType_type);defs.push_back(IFC4X3_ADD2_IfcFlowTerminalType_type);defs.push_back(IFC4X3_ADD2_IfcFlowTreatmentDeviceType_type); + IFC4X3_ADD2_IfcDistributionFlowElementType_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcDistributionCircuit_type); + IFC4X3_ADD2_IfcDistributionSystem_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcDistributionControlElement_type);defs.push_back(IFC4X3_ADD2_IfcDistributionFlowElement_type); + IFC4X3_ADD2_IfcDistributionElement_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcDistributionControlElementType_type);defs.push_back(IFC4X3_ADD2_IfcDistributionFlowElementType_type); + IFC4X3_ADD2_IfcDistributionElementType_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcDistributionPort_type); + IFC4X3_ADD2_IfcPort_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(6); + defs.push_back(IFC4X3_ADD2_IfcDoorLiningProperties_type);defs.push_back(IFC4X3_ADD2_IfcDoorPanelProperties_type);defs.push_back(IFC4X3_ADD2_IfcPermeableCoveringProperties_type);defs.push_back(IFC4X3_ADD2_IfcReinforcementDefinitionProperties_type);defs.push_back(IFC4X3_ADD2_IfcWindowLiningProperties_type);defs.push_back(IFC4X3_ADD2_IfcWindowPanelProperties_type); + IFC4X3_ADD2_IfcPreDefinedPropertySet_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcDraughtingPreDefinedColour_type); + IFC4X3_ADD2_IfcPreDefinedColour_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcDraughtingPreDefinedCurveFont_type); + IFC4X3_ADD2_IfcPreDefinedCurveFont_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(4); + defs.push_back(IFC4X3_ADD2_IfcDuctSilencer_type);defs.push_back(IFC4X3_ADD2_IfcElectricFlowTreatmentDevice_type);defs.push_back(IFC4X3_ADD2_IfcFilter_type);defs.push_back(IFC4X3_ADD2_IfcInterceptor_type); + IFC4X3_ADD2_IfcFlowTreatmentDevice_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(4); + defs.push_back(IFC4X3_ADD2_IfcDuctSilencerType_type);defs.push_back(IFC4X3_ADD2_IfcElectricFlowTreatmentDeviceType_type);defs.push_back(IFC4X3_ADD2_IfcFilterType_type);defs.push_back(IFC4X3_ADD2_IfcInterceptorType_type); + IFC4X3_ADD2_IfcFlowTreatmentDeviceType_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcEarthworksCut_type);defs.push_back(IFC4X3_ADD2_IfcOpeningElement_type);defs.push_back(IFC4X3_ADD2_IfcVoidingFeature_type); + IFC4X3_ADD2_IfcFeatureElementSubtraction_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcEarthworksFill_type);defs.push_back(IFC4X3_ADD2_IfcReinforcedSoil_type); + IFC4X3_ADD2_IfcEarthworksElement_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcEdgeCurve_type);defs.push_back(IFC4X3_ADD2_IfcOrientedEdge_type);defs.push_back(IFC4X3_ADD2_IfcSubedge_type); + IFC4X3_ADD2_IfcEdge_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcEdgeLoop_type);defs.push_back(IFC4X3_ADD2_IfcPolyLoop_type);defs.push_back(IFC4X3_ADD2_IfcVertexLoop_type); + IFC4X3_ADD2_IfcLoop_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcElectricFlowStorageDevice_type);defs.push_back(IFC4X3_ADD2_IfcTank_type); + IFC4X3_ADD2_IfcFlowStorageDevice_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcElectricFlowStorageDeviceType_type);defs.push_back(IFC4X3_ADD2_IfcTankType_type); + IFC4X3_ADD2_IfcFlowStorageDeviceType_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcElementQuantity_type); + IFC4X3_ADD2_IfcQuantitySet_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcElementType_type);defs.push_back(IFC4X3_ADD2_IfcSpatialElementType_type); + IFC4X3_ADD2_IfcTypeProduct_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcEvent_type);defs.push_back(IFC4X3_ADD2_IfcProcedure_type);defs.push_back(IFC4X3_ADD2_IfcTask_type); + IFC4X3_ADD2_IfcProcess_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(5); + defs.push_back(IFC4X3_ADD2_IfcEventTime_type);defs.push_back(IFC4X3_ADD2_IfcLagTime_type);defs.push_back(IFC4X3_ADD2_IfcResourceTime_type);defs.push_back(IFC4X3_ADD2_IfcTaskTime_type);defs.push_back(IFC4X3_ADD2_IfcWorkTime_type); + IFC4X3_ADD2_IfcSchedulingTime_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcEventType_type);defs.push_back(IFC4X3_ADD2_IfcProcedureType_type);defs.push_back(IFC4X3_ADD2_IfcTaskType_type); + IFC4X3_ADD2_IfcTypeProcess_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(4); + defs.push_back(IFC4X3_ADD2_IfcExtendedProperties_type);defs.push_back(IFC4X3_ADD2_IfcPreDefinedProperties_type);defs.push_back(IFC4X3_ADD2_IfcProperty_type);defs.push_back(IFC4X3_ADD2_IfcPropertyEnumeration_type); + IFC4X3_ADD2_IfcPropertyAbstraction_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcExternalSpatialElement_type); + IFC4X3_ADD2_IfcExternalSpatialStructureElement_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcExternalSpatialStructureElement_type);defs.push_back(IFC4X3_ADD2_IfcSpatialStructureElement_type);defs.push_back(IFC4X3_ADD2_IfcSpatialZone_type); + IFC4X3_ADD2_IfcSpatialElement_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcExtrudedAreaSolidTapered_type); + IFC4X3_ADD2_IfcExtrudedAreaSolid_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcFaceOuterBound_type); + IFC4X3_ADD2_IfcFaceBound_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcFaceSurface_type); + IFC4X3_ADD2_IfcFace_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcFacetedBrepWithVoids_type); + IFC4X3_ADD2_IfcFacetedBrep_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcFailureConnectionCondition_type);defs.push_back(IFC4X3_ADD2_IfcSlippageConnectionCondition_type); + IFC4X3_ADD2_IfcStructuralConnectionCondition_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcFeatureElementAddition_type);defs.push_back(IFC4X3_ADD2_IfcFeatureElementSubtraction_type);defs.push_back(IFC4X3_ADD2_IfcSurfaceFeature_type); + IFC4X3_ADD2_IfcFeatureElement_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcFixedReferenceSweptAreaSolid_type);defs.push_back(IFC4X3_ADD2_IfcSurfaceCurveSweptAreaSolid_type); + IFC4X3_ADD2_IfcDirectrixCurveSweptAreaSolid_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcFurniture_type);defs.push_back(IFC4X3_ADD2_IfcSystemFurnitureElement_type); + IFC4X3_ADD2_IfcFurnishingElement_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcFurnitureType_type);defs.push_back(IFC4X3_ADD2_IfcSystemFurnitureElementType_type); + IFC4X3_ADD2_IfcFurnishingElementType_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcGeographicCRS_type);defs.push_back(IFC4X3_ADD2_IfcProjectedCRS_type); + IFC4X3_ADD2_IfcCoordinateReferenceSystem_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcGeometricCurveSet_type); + IFC4X3_ADD2_IfcGeometricSet_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcGeometricRepresentationContext_type); + IFC4X3_ADD2_IfcRepresentationContext_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(4); + defs.push_back(IFC4X3_ADD2_IfcGeometricRepresentationItem_type);defs.push_back(IFC4X3_ADD2_IfcMappedItem_type);defs.push_back(IFC4X3_ADD2_IfcStyledItem_type);defs.push_back(IFC4X3_ADD2_IfcTopologicalRepresentationItem_type); + IFC4X3_ADD2_IfcRepresentationItem_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcGeometricRepresentationSubContext_type); + IFC4X3_ADD2_IfcGeometricRepresentationContext_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcGeotechnicalAssembly_type);defs.push_back(IFC4X3_ADD2_IfcGeotechnicalStratum_type); + IFC4X3_ADD2_IfcGeotechnicalElement_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcGrid_type);defs.push_back(IFC4X3_ADD2_IfcLinearPositioningElement_type);defs.push_back(IFC4X3_ADD2_IfcReferent_type); + IFC4X3_ADD2_IfcPositioningElement_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcGridPlacement_type);defs.push_back(IFC4X3_ADD2_IfcLinearPlacement_type);defs.push_back(IFC4X3_ADD2_IfcLocalPlacement_type); + IFC4X3_ADD2_IfcObjectPlacement_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcIndexedPolygonalFace_type);defs.push_back(IFC4X3_ADD2_IfcTessellatedFaceSet_type); + IFC4X3_ADD2_IfcTessellatedItem_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcIndexedPolygonalFaceWithVoids_type); + IFC4X3_ADD2_IfcIndexedPolygonalFace_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcIndexedPolygonalTextureMap_type);defs.push_back(IFC4X3_ADD2_IfcIndexedTriangleTextureMap_type); + IFC4X3_ADD2_IfcIndexedTextureMap_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcIndexedTextureMap_type);defs.push_back(IFC4X3_ADD2_IfcTextureCoordinateGenerator_type);defs.push_back(IFC4X3_ADD2_IfcTextureMap_type); + IFC4X3_ADD2_IfcTextureCoordinate_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcIntersectionCurve_type);defs.push_back(IFC4X3_ADD2_IfcSeamCurve_type); + IFC4X3_ADD2_IfcSurfaceCurve_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcIrregularTimeSeries_type);defs.push_back(IFC4X3_ADD2_IfcRegularTimeSeries_type); + IFC4X3_ADD2_IfcTimeSeries_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(4); + defs.push_back(IFC4X3_ADD2_IfcLightSourceAmbient_type);defs.push_back(IFC4X3_ADD2_IfcLightSourceDirectional_type);defs.push_back(IFC4X3_ADD2_IfcLightSourceGoniometric_type);defs.push_back(IFC4X3_ADD2_IfcLightSourcePositional_type); + IFC4X3_ADD2_IfcLightSource_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcLightSourceSpot_type); + IFC4X3_ADD2_IfcLightSourcePositional_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcMapConversion_type);defs.push_back(IFC4X3_ADD2_IfcRigidOperation_type); + IFC4X3_ADD2_IfcCoordinateOperation_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcMapConversionScaled_type); + IFC4X3_ADD2_IfcMapConversion_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(7); + defs.push_back(IFC4X3_ADD2_IfcMaterial_type);defs.push_back(IFC4X3_ADD2_IfcMaterialConstituent_type);defs.push_back(IFC4X3_ADD2_IfcMaterialConstituentSet_type);defs.push_back(IFC4X3_ADD2_IfcMaterialLayer_type);defs.push_back(IFC4X3_ADD2_IfcMaterialLayerSet_type);defs.push_back(IFC4X3_ADD2_IfcMaterialProfile_type);defs.push_back(IFC4X3_ADD2_IfcMaterialProfileSet_type); + IFC4X3_ADD2_IfcMaterialDefinition_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcMaterialDefinitionRepresentation_type);defs.push_back(IFC4X3_ADD2_IfcProductDefinitionShape_type); + IFC4X3_ADD2_IfcProductRepresentation_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcMaterialLayerSetUsage_type);defs.push_back(IFC4X3_ADD2_IfcMaterialProfileSetUsage_type); + IFC4X3_ADD2_IfcMaterialUsageDefinition_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcMaterialLayerWithOffsets_type); + IFC4X3_ADD2_IfcMaterialLayer_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcMaterialProfileSetUsageTapering_type); + IFC4X3_ADD2_IfcMaterialProfileSetUsage_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcMaterialProfileWithOffsets_type); + IFC4X3_ADD2_IfcMaterialProfile_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcMaterialProperties_type);defs.push_back(IFC4X3_ADD2_IfcProfileProperties_type); + IFC4X3_ADD2_IfcExtendedProperties_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcMetric_type);defs.push_back(IFC4X3_ADD2_IfcObjective_type); + IFC4X3_ADD2_IfcConstraint_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcMirroredProfileDef_type); + IFC4X3_ADD2_IfcDerivedProfileDef_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcObjectDefinition_type);defs.push_back(IFC4X3_ADD2_IfcPropertyDefinition_type);defs.push_back(IFC4X3_ADD2_IfcRelationship_type); + IFC4X3_ADD2_IfcRoot_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcOccupant_type); + IFC4X3_ADD2_IfcActor_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcOffsetCurve2D_type);defs.push_back(IFC4X3_ADD2_IfcOffsetCurve3D_type);defs.push_back(IFC4X3_ADD2_IfcOffsetCurveByDistances_type); + IFC4X3_ADD2_IfcOffsetCurve_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcOuterBoundaryCurve_type); + IFC4X3_ADD2_IfcBoundaryCurve_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcPhysicalComplexQuantity_type);defs.push_back(IFC4X3_ADD2_IfcPhysicalSimpleQuantity_type); + IFC4X3_ADD2_IfcPhysicalQuantity_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcPlanarBox_type); + IFC4X3_ADD2_IfcPlanarExtent_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcPolygonalFaceSet_type);defs.push_back(IFC4X3_ADD2_IfcTriangulatedFaceSet_type); + IFC4X3_ADD2_IfcTessellatedFaceSet_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcPostalAddress_type);defs.push_back(IFC4X3_ADD2_IfcTelecomAddress_type); + IFC4X3_ADD2_IfcAddress_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcPreDefinedColour_type);defs.push_back(IFC4X3_ADD2_IfcPreDefinedCurveFont_type);defs.push_back(IFC4X3_ADD2_IfcPreDefinedTextFont_type); + IFC4X3_ADD2_IfcPreDefinedItem_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcPreDefinedPropertySet_type);defs.push_back(IFC4X3_ADD2_IfcPropertySet_type);defs.push_back(IFC4X3_ADD2_IfcQuantitySet_type); + IFC4X3_ADD2_IfcPropertySetDefinition_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcPresentationLayerWithStyle_type); + IFC4X3_ADD2_IfcPresentationLayerAssignment_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcProject_type);defs.push_back(IFC4X3_ADD2_IfcProjectLibrary_type); + IFC4X3_ADD2_IfcContext_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcProjectionElement_type); + IFC4X3_ADD2_IfcFeatureElementAddition_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(6); + defs.push_back(IFC4X3_ADD2_IfcPropertyBoundedValue_type);defs.push_back(IFC4X3_ADD2_IfcPropertyEnumeratedValue_type);defs.push_back(IFC4X3_ADD2_IfcPropertyListValue_type);defs.push_back(IFC4X3_ADD2_IfcPropertyReferenceValue_type);defs.push_back(IFC4X3_ADD2_IfcPropertySingleValue_type);defs.push_back(IFC4X3_ADD2_IfcPropertyTableValue_type); + IFC4X3_ADD2_IfcSimpleProperty_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcPropertySetDefinition_type);defs.push_back(IFC4X3_ADD2_IfcPropertyTemplateDefinition_type); + IFC4X3_ADD2_IfcPropertyDefinition_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcPropertySetTemplate_type);defs.push_back(IFC4X3_ADD2_IfcPropertyTemplate_type); + IFC4X3_ADD2_IfcPropertyTemplateDefinition_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(7); + defs.push_back(IFC4X3_ADD2_IfcQuantityArea_type);defs.push_back(IFC4X3_ADD2_IfcQuantityCount_type);defs.push_back(IFC4X3_ADD2_IfcQuantityLength_type);defs.push_back(IFC4X3_ADD2_IfcQuantityNumber_type);defs.push_back(IFC4X3_ADD2_IfcQuantityTime_type);defs.push_back(IFC4X3_ADD2_IfcQuantityVolume_type);defs.push_back(IFC4X3_ADD2_IfcQuantityWeight_type); + IFC4X3_ADD2_IfcPhysicalSimpleQuantity_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcRationalBSplineCurveWithKnots_type); + IFC4X3_ADD2_IfcBSplineCurveWithKnots_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcRationalBSplineSurfaceWithKnots_type); + IFC4X3_ADD2_IfcBSplineSurfaceWithKnots_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcRectangleHollowProfileDef_type);defs.push_back(IFC4X3_ADD2_IfcRoundedRectangleProfileDef_type); + IFC4X3_ADD2_IfcRectangleProfileDef_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcReinforcementBarProperties_type);defs.push_back(IFC4X3_ADD2_IfcSectionProperties_type);defs.push_back(IFC4X3_ADD2_IfcSectionReinforcementProperties_type); + IFC4X3_ADD2_IfcPreDefinedProperties_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(5); + defs.push_back(IFC4X3_ADD2_IfcReinforcingBar_type);defs.push_back(IFC4X3_ADD2_IfcReinforcingMesh_type);defs.push_back(IFC4X3_ADD2_IfcTendon_type);defs.push_back(IFC4X3_ADD2_IfcTendonAnchor_type);defs.push_back(IFC4X3_ADD2_IfcTendonConduit_type); + IFC4X3_ADD2_IfcReinforcingElement_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(5); + defs.push_back(IFC4X3_ADD2_IfcReinforcingBarType_type);defs.push_back(IFC4X3_ADD2_IfcReinforcingMeshType_type);defs.push_back(IFC4X3_ADD2_IfcTendonAnchorType_type);defs.push_back(IFC4X3_ADD2_IfcTendonConduitType_type);defs.push_back(IFC4X3_ADD2_IfcTendonType_type); + IFC4X3_ADD2_IfcReinforcingElementType_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(5); + defs.push_back(IFC4X3_ADD2_IfcRelAdheresToElement_type);defs.push_back(IFC4X3_ADD2_IfcRelAggregates_type);defs.push_back(IFC4X3_ADD2_IfcRelNests_type);defs.push_back(IFC4X3_ADD2_IfcRelProjectsElement_type);defs.push_back(IFC4X3_ADD2_IfcRelVoidsElement_type); + IFC4X3_ADD2_IfcRelDecomposes_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(6); + defs.push_back(IFC4X3_ADD2_IfcRelAssigns_type);defs.push_back(IFC4X3_ADD2_IfcRelAssociates_type);defs.push_back(IFC4X3_ADD2_IfcRelConnects_type);defs.push_back(IFC4X3_ADD2_IfcRelDeclares_type);defs.push_back(IFC4X3_ADD2_IfcRelDecomposes_type);defs.push_back(IFC4X3_ADD2_IfcRelDefines_type); + IFC4X3_ADD2_IfcRelationship_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(6); + defs.push_back(IFC4X3_ADD2_IfcRelAssignsToActor_type);defs.push_back(IFC4X3_ADD2_IfcRelAssignsToControl_type);defs.push_back(IFC4X3_ADD2_IfcRelAssignsToGroup_type);defs.push_back(IFC4X3_ADD2_IfcRelAssignsToProcess_type);defs.push_back(IFC4X3_ADD2_IfcRelAssignsToProduct_type);defs.push_back(IFC4X3_ADD2_IfcRelAssignsToResource_type); + IFC4X3_ADD2_IfcRelAssigns_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcRelAssignsToGroupByFactor_type); + IFC4X3_ADD2_IfcRelAssignsToGroup_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(7); + defs.push_back(IFC4X3_ADD2_IfcRelAssociatesApproval_type);defs.push_back(IFC4X3_ADD2_IfcRelAssociatesClassification_type);defs.push_back(IFC4X3_ADD2_IfcRelAssociatesConstraint_type);defs.push_back(IFC4X3_ADD2_IfcRelAssociatesDocument_type);defs.push_back(IFC4X3_ADD2_IfcRelAssociatesLibrary_type);defs.push_back(IFC4X3_ADD2_IfcRelAssociatesMaterial_type);defs.push_back(IFC4X3_ADD2_IfcRelAssociatesProfileDef_type); + IFC4X3_ADD2_IfcRelAssociates_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(16); + defs.push_back(IFC4X3_ADD2_IfcRelConnectsElements_type);defs.push_back(IFC4X3_ADD2_IfcRelConnectsPortToElement_type);defs.push_back(IFC4X3_ADD2_IfcRelConnectsPorts_type);defs.push_back(IFC4X3_ADD2_IfcRelConnectsStructuralActivity_type);defs.push_back(IFC4X3_ADD2_IfcRelConnectsStructuralMember_type);defs.push_back(IFC4X3_ADD2_IfcRelContainedInSpatialStructure_type);defs.push_back(IFC4X3_ADD2_IfcRelCoversBldgElements_type);defs.push_back(IFC4X3_ADD2_IfcRelCoversSpaces_type);defs.push_back(IFC4X3_ADD2_IfcRelFillsElement_type);defs.push_back(IFC4X3_ADD2_IfcRelFlowControlElements_type);defs.push_back(IFC4X3_ADD2_IfcRelInterferesElements_type);defs.push_back(IFC4X3_ADD2_IfcRelPositions_type);defs.push_back(IFC4X3_ADD2_IfcRelReferencedInSpatialStructure_type);defs.push_back(IFC4X3_ADD2_IfcRelSequence_type);defs.push_back(IFC4X3_ADD2_IfcRelServicesBuildings_type);defs.push_back(IFC4X3_ADD2_IfcRelSpaceBoundary_type); + IFC4X3_ADD2_IfcRelConnects_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcRelConnectsPathElements_type);defs.push_back(IFC4X3_ADD2_IfcRelConnectsWithRealizingElements_type); + IFC4X3_ADD2_IfcRelConnectsElements_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcRelConnectsWithEccentricity_type); + IFC4X3_ADD2_IfcRelConnectsStructuralMember_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(4); + defs.push_back(IFC4X3_ADD2_IfcRelDefinesByObject_type);defs.push_back(IFC4X3_ADD2_IfcRelDefinesByProperties_type);defs.push_back(IFC4X3_ADD2_IfcRelDefinesByTemplate_type);defs.push_back(IFC4X3_ADD2_IfcRelDefinesByType_type); + IFC4X3_ADD2_IfcRelDefines_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcRelSpaceBoundary1stLevel_type); + IFC4X3_ADD2_IfcRelSpaceBoundary_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcRelSpaceBoundary2ndLevel_type); + IFC4X3_ADD2_IfcRelSpaceBoundary1stLevel_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcReparametrisedCompositeCurveSegment_type); + IFC4X3_ADD2_IfcCompositeCurveSegment_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcRevolvedAreaSolidTapered_type); + IFC4X3_ADD2_IfcRevolvedAreaSolid_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcSectionedSolidHorizontal_type); + IFC4X3_ADD2_IfcSectionedSolid_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcShapeModel_type);defs.push_back(IFC4X3_ADD2_IfcStyleModel_type); + IFC4X3_ADD2_IfcRepresentation_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcShapeRepresentation_type);defs.push_back(IFC4X3_ADD2_IfcTopologyRepresentation_type); + IFC4X3_ADD2_IfcShapeModel_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcSpaceType_type); + IFC4X3_ADD2_IfcSpatialStructureElementType_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcSpatialStructureElementType_type);defs.push_back(IFC4X3_ADD2_IfcSpatialZoneType_type); + IFC4X3_ADD2_IfcSpatialElementType_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcStructuralAction_type);defs.push_back(IFC4X3_ADD2_IfcStructuralReaction_type); + IFC4X3_ADD2_IfcStructuralActivity_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcStructuralConnection_type);defs.push_back(IFC4X3_ADD2_IfcStructuralMember_type); + IFC4X3_ADD2_IfcStructuralItem_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcStructuralCurveAction_type);defs.push_back(IFC4X3_ADD2_IfcStructuralPointAction_type);defs.push_back(IFC4X3_ADD2_IfcStructuralSurfaceAction_type); + IFC4X3_ADD2_IfcStructuralAction_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcStructuralCurveConnection_type);defs.push_back(IFC4X3_ADD2_IfcStructuralPointConnection_type);defs.push_back(IFC4X3_ADD2_IfcStructuralSurfaceConnection_type); + IFC4X3_ADD2_IfcStructuralConnection_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcStructuralCurveMember_type);defs.push_back(IFC4X3_ADD2_IfcStructuralSurfaceMember_type); + IFC4X3_ADD2_IfcStructuralMember_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcStructuralCurveMemberVarying_type); + IFC4X3_ADD2_IfcStructuralCurveMember_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcStructuralCurveReaction_type);defs.push_back(IFC4X3_ADD2_IfcStructuralPointReaction_type);defs.push_back(IFC4X3_ADD2_IfcStructuralSurfaceReaction_type); + IFC4X3_ADD2_IfcStructuralReaction_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcStructuralLinearAction_type); + IFC4X3_ADD2_IfcStructuralCurveAction_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcStructuralLoadCase_type); + IFC4X3_ADD2_IfcStructuralLoadGroup_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcStructuralLoadConfiguration_type);defs.push_back(IFC4X3_ADD2_IfcStructuralLoadOrResult_type); + IFC4X3_ADD2_IfcStructuralLoad_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(5); + defs.push_back(IFC4X3_ADD2_IfcStructuralLoadLinearForce_type);defs.push_back(IFC4X3_ADD2_IfcStructuralLoadPlanarForce_type);defs.push_back(IFC4X3_ADD2_IfcStructuralLoadSingleDisplacement_type);defs.push_back(IFC4X3_ADD2_IfcStructuralLoadSingleForce_type);defs.push_back(IFC4X3_ADD2_IfcStructuralLoadTemperature_type); + IFC4X3_ADD2_IfcStructuralLoadStatic_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcStructuralLoadSingleDisplacementDistortion_type); + IFC4X3_ADD2_IfcStructuralLoadSingleDisplacement_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcStructuralLoadSingleForceWarping_type); + IFC4X3_ADD2_IfcStructuralLoadSingleForce_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcStructuralLoadStatic_type);defs.push_back(IFC4X3_ADD2_IfcSurfaceReinforcementArea_type); + IFC4X3_ADD2_IfcStructuralLoadOrResult_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcStructuralPlanarAction_type); + IFC4X3_ADD2_IfcStructuralSurfaceAction_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcStructuralSurfaceMemberVarying_type); + IFC4X3_ADD2_IfcStructuralSurfaceMember_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcStyledRepresentation_type); + IFC4X3_ADD2_IfcStyleModel_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcSurfaceOfLinearExtrusion_type);defs.push_back(IFC4X3_ADD2_IfcSurfaceOfRevolution_type); + IFC4X3_ADD2_IfcSweptSurface_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcSurfaceStyleRendering_type); + IFC4X3_ADD2_IfcSurfaceStyleShading_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcSweptDiskSolidPolygonal_type); + IFC4X3_ADD2_IfcSweptDiskSolid_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcTaskTimeRecurring_type); + IFC4X3_ADD2_IfcTaskTime_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcTextLiteralWithExtent_type); + IFC4X3_ADD2_IfcTextLiteral_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcTextStyleFontModel_type); + IFC4X3_ADD2_IfcPreDefinedTextFont_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcTextureCoordinateIndicesWithVoids_type); + IFC4X3_ADD2_IfcTextureCoordinateIndices_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcTransportElement_type);defs.push_back(IFC4X3_ADD2_IfcVehicle_type); + IFC4X3_ADD2_IfcTransportationDevice_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcTransportElementType_type);defs.push_back(IFC4X3_ADD2_IfcVehicleType_type); + IFC4X3_ADD2_IfcTransportationDeviceType_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcTriangulatedIrregularNetwork_type); + IFC4X3_ADD2_IfcTriangulatedFaceSet_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(3); + defs.push_back(IFC4X3_ADD2_IfcTypeProcess_type);defs.push_back(IFC4X3_ADD2_IfcTypeProduct_type);defs.push_back(IFC4X3_ADD2_IfcTypeResource_type); + IFC4X3_ADD2_IfcTypeObject_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcVertexPoint_type); + IFC4X3_ADD2_IfcVertex_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(1); + defs.push_back(IFC4X3_ADD2_IfcWallStandardCase_type); + IFC4X3_ADD2_IfcWall_type->set_subtypes(defs); + } + { + std::vector defs; defs.reserve(2); + defs.push_back(IFC4X3_ADD2_IfcWorkPlan_type);defs.push_back(IFC4X3_ADD2_IfcWorkSchedule_type); + IFC4X3_ADD2_IfcWorkControl_type->set_subtypes(defs); + } + + std::vector declarations; declarations.reserve(1312); + declarations.push_back(IFC4X3_ADD2_IfcAbsorbedDoseMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcAccelerationMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcActionRequest_type); + declarations.push_back(IFC4X3_ADD2_IfcActionRequestTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcActionSourceTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcActionTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcActor_type); + declarations.push_back(IFC4X3_ADD2_IfcActorRole_type); + declarations.push_back(IFC4X3_ADD2_IfcActorSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcActuator_type); + declarations.push_back(IFC4X3_ADD2_IfcActuatorType_type); + declarations.push_back(IFC4X3_ADD2_IfcActuatorTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcAddress_type); + declarations.push_back(IFC4X3_ADD2_IfcAddressTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcAdvancedBrep_type); + declarations.push_back(IFC4X3_ADD2_IfcAdvancedBrepWithVoids_type); + declarations.push_back(IFC4X3_ADD2_IfcAdvancedFace_type); + declarations.push_back(IFC4X3_ADD2_IfcAirTerminal_type); + declarations.push_back(IFC4X3_ADD2_IfcAirTerminalBox_type); + declarations.push_back(IFC4X3_ADD2_IfcAirTerminalBoxType_type); + declarations.push_back(IFC4X3_ADD2_IfcAirTerminalBoxTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcAirTerminalType_type); + declarations.push_back(IFC4X3_ADD2_IfcAirTerminalTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcAirToAirHeatRecovery_type); + declarations.push_back(IFC4X3_ADD2_IfcAirToAirHeatRecoveryType_type); + declarations.push_back(IFC4X3_ADD2_IfcAirToAirHeatRecoveryTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcAlarm_type); + declarations.push_back(IFC4X3_ADD2_IfcAlarmType_type); + declarations.push_back(IFC4X3_ADD2_IfcAlarmTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcAlignment_type); + declarations.push_back(IFC4X3_ADD2_IfcAlignmentCant_type); + declarations.push_back(IFC4X3_ADD2_IfcAlignmentCantSegment_type); + declarations.push_back(IFC4X3_ADD2_IfcAlignmentCantSegmentTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcAlignmentHorizontal_type); + declarations.push_back(IFC4X3_ADD2_IfcAlignmentHorizontalSegment_type); + declarations.push_back(IFC4X3_ADD2_IfcAlignmentHorizontalSegmentTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcAlignmentParameterSegment_type); + declarations.push_back(IFC4X3_ADD2_IfcAlignmentSegment_type); + declarations.push_back(IFC4X3_ADD2_IfcAlignmentTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcAlignmentVertical_type); + declarations.push_back(IFC4X3_ADD2_IfcAlignmentVerticalSegment_type); + declarations.push_back(IFC4X3_ADD2_IfcAlignmentVerticalSegmentTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcAmountOfSubstanceMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcAnalysisModelTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcAnalysisTheoryTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcAngularVelocityMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcAnnotation_type); + declarations.push_back(IFC4X3_ADD2_IfcAnnotationFillArea_type); + declarations.push_back(IFC4X3_ADD2_IfcAnnotationTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcApplication_type); + declarations.push_back(IFC4X3_ADD2_IfcAppliedValue_type); + declarations.push_back(IFC4X3_ADD2_IfcAppliedValueSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcApproval_type); + declarations.push_back(IFC4X3_ADD2_IfcApprovalRelationship_type); + declarations.push_back(IFC4X3_ADD2_IfcArbitraryClosedProfileDef_type); + declarations.push_back(IFC4X3_ADD2_IfcArbitraryOpenProfileDef_type); + declarations.push_back(IFC4X3_ADD2_IfcArbitraryProfileDefWithVoids_type); + declarations.push_back(IFC4X3_ADD2_IfcArcIndex_type); + declarations.push_back(IFC4X3_ADD2_IfcAreaDensityMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcAreaMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcArithmeticOperatorEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcAssemblyPlaceEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcAsset_type); + declarations.push_back(IFC4X3_ADD2_IfcAsymmetricIShapeProfileDef_type); + declarations.push_back(IFC4X3_ADD2_IfcAudioVisualAppliance_type); + declarations.push_back(IFC4X3_ADD2_IfcAudioVisualApplianceType_type); + declarations.push_back(IFC4X3_ADD2_IfcAudioVisualApplianceTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcAxis1Placement_type); + declarations.push_back(IFC4X3_ADD2_IfcAxis2Placement_type); + declarations.push_back(IFC4X3_ADD2_IfcAxis2Placement2D_type); + declarations.push_back(IFC4X3_ADD2_IfcAxis2Placement3D_type); + declarations.push_back(IFC4X3_ADD2_IfcAxis2PlacementLinear_type); + declarations.push_back(IFC4X3_ADD2_IfcBeam_type); + declarations.push_back(IFC4X3_ADD2_IfcBeamType_type); + declarations.push_back(IFC4X3_ADD2_IfcBeamTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcBearing_type); + declarations.push_back(IFC4X3_ADD2_IfcBearingType_type); + declarations.push_back(IFC4X3_ADD2_IfcBearingTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcBenchmarkEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcBendingParameterSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcBinary_type); + declarations.push_back(IFC4X3_ADD2_IfcBlobTexture_type); + declarations.push_back(IFC4X3_ADD2_IfcBlock_type); + declarations.push_back(IFC4X3_ADD2_IfcBoiler_type); + declarations.push_back(IFC4X3_ADD2_IfcBoilerType_type); + declarations.push_back(IFC4X3_ADD2_IfcBoilerTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcBoolean_type); + declarations.push_back(IFC4X3_ADD2_IfcBooleanClippingResult_type); + declarations.push_back(IFC4X3_ADD2_IfcBooleanOperand_type); + declarations.push_back(IFC4X3_ADD2_IfcBooleanOperator_type); + declarations.push_back(IFC4X3_ADD2_IfcBooleanResult_type); + declarations.push_back(IFC4X3_ADD2_IfcBorehole_type); + declarations.push_back(IFC4X3_ADD2_IfcBoundaryCondition_type); + declarations.push_back(IFC4X3_ADD2_IfcBoundaryCurve_type); + declarations.push_back(IFC4X3_ADD2_IfcBoundaryEdgeCondition_type); + declarations.push_back(IFC4X3_ADD2_IfcBoundaryFaceCondition_type); + declarations.push_back(IFC4X3_ADD2_IfcBoundaryNodeCondition_type); + declarations.push_back(IFC4X3_ADD2_IfcBoundaryNodeConditionWarping_type); + declarations.push_back(IFC4X3_ADD2_IfcBoundedCurve_type); + declarations.push_back(IFC4X3_ADD2_IfcBoundedSurface_type); + declarations.push_back(IFC4X3_ADD2_IfcBoundingBox_type); + declarations.push_back(IFC4X3_ADD2_IfcBoxAlignment_type); + declarations.push_back(IFC4X3_ADD2_IfcBoxedHalfSpace_type); + declarations.push_back(IFC4X3_ADD2_IfcBridge_type); + declarations.push_back(IFC4X3_ADD2_IfcBridgePart_type); + declarations.push_back(IFC4X3_ADD2_IfcBridgePartTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcBridgeTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcBSplineCurve_type); + declarations.push_back(IFC4X3_ADD2_IfcBSplineCurveForm_type); + declarations.push_back(IFC4X3_ADD2_IfcBSplineCurveWithKnots_type); + declarations.push_back(IFC4X3_ADD2_IfcBSplineSurface_type); + declarations.push_back(IFC4X3_ADD2_IfcBSplineSurfaceForm_type); + declarations.push_back(IFC4X3_ADD2_IfcBSplineSurfaceWithKnots_type); + declarations.push_back(IFC4X3_ADD2_IfcBuilding_type); + declarations.push_back(IFC4X3_ADD2_IfcBuildingElementPart_type); + declarations.push_back(IFC4X3_ADD2_IfcBuildingElementPartType_type); + declarations.push_back(IFC4X3_ADD2_IfcBuildingElementPartTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcBuildingElementProxy_type); + declarations.push_back(IFC4X3_ADD2_IfcBuildingElementProxyType_type); + declarations.push_back(IFC4X3_ADD2_IfcBuildingElementProxyTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcBuildingStorey_type); + declarations.push_back(IFC4X3_ADD2_IfcBuildingSystem_type); + declarations.push_back(IFC4X3_ADD2_IfcBuildingSystemTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcBuiltElement_type); + declarations.push_back(IFC4X3_ADD2_IfcBuiltElementType_type); + declarations.push_back(IFC4X3_ADD2_IfcBuiltSystem_type); + declarations.push_back(IFC4X3_ADD2_IfcBuiltSystemTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcBurner_type); + declarations.push_back(IFC4X3_ADD2_IfcBurnerType_type); + declarations.push_back(IFC4X3_ADD2_IfcBurnerTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcCableCarrierFitting_type); + declarations.push_back(IFC4X3_ADD2_IfcCableCarrierFittingType_type); + declarations.push_back(IFC4X3_ADD2_IfcCableCarrierFittingTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcCableCarrierSegment_type); + declarations.push_back(IFC4X3_ADD2_IfcCableCarrierSegmentType_type); + declarations.push_back(IFC4X3_ADD2_IfcCableCarrierSegmentTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcCableFitting_type); + declarations.push_back(IFC4X3_ADD2_IfcCableFittingType_type); + declarations.push_back(IFC4X3_ADD2_IfcCableFittingTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcCableSegment_type); + declarations.push_back(IFC4X3_ADD2_IfcCableSegmentType_type); + declarations.push_back(IFC4X3_ADD2_IfcCableSegmentTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcCaissonFoundation_type); + declarations.push_back(IFC4X3_ADD2_IfcCaissonFoundationType_type); + declarations.push_back(IFC4X3_ADD2_IfcCaissonFoundationTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcCardinalPointReference_type); + declarations.push_back(IFC4X3_ADD2_IfcCartesianPoint_type); + declarations.push_back(IFC4X3_ADD2_IfcCartesianPointList_type); + declarations.push_back(IFC4X3_ADD2_IfcCartesianPointList2D_type); + declarations.push_back(IFC4X3_ADD2_IfcCartesianPointList3D_type); + declarations.push_back(IFC4X3_ADD2_IfcCartesianTransformationOperator_type); + declarations.push_back(IFC4X3_ADD2_IfcCartesianTransformationOperator2D_type); + declarations.push_back(IFC4X3_ADD2_IfcCartesianTransformationOperator2DnonUniform_type); + declarations.push_back(IFC4X3_ADD2_IfcCartesianTransformationOperator3D_type); + declarations.push_back(IFC4X3_ADD2_IfcCartesianTransformationOperator3DnonUniform_type); + declarations.push_back(IFC4X3_ADD2_IfcCenterLineProfileDef_type); + declarations.push_back(IFC4X3_ADD2_IfcChangeActionEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcChiller_type); + declarations.push_back(IFC4X3_ADD2_IfcChillerType_type); + declarations.push_back(IFC4X3_ADD2_IfcChillerTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcChimney_type); + declarations.push_back(IFC4X3_ADD2_IfcChimneyType_type); + declarations.push_back(IFC4X3_ADD2_IfcChimneyTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcCircle_type); + declarations.push_back(IFC4X3_ADD2_IfcCircleHollowProfileDef_type); + declarations.push_back(IFC4X3_ADD2_IfcCircleProfileDef_type); + declarations.push_back(IFC4X3_ADD2_IfcCivilElement_type); + declarations.push_back(IFC4X3_ADD2_IfcCivilElementType_type); + declarations.push_back(IFC4X3_ADD2_IfcClassification_type); + declarations.push_back(IFC4X3_ADD2_IfcClassificationReference_type); + declarations.push_back(IFC4X3_ADD2_IfcClassificationReferenceSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcClassificationSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcClosedShell_type); + declarations.push_back(IFC4X3_ADD2_IfcClothoid_type); + declarations.push_back(IFC4X3_ADD2_IfcCoil_type); + declarations.push_back(IFC4X3_ADD2_IfcCoilType_type); + declarations.push_back(IFC4X3_ADD2_IfcCoilTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcColour_type); + declarations.push_back(IFC4X3_ADD2_IfcColourOrFactor_type); + declarations.push_back(IFC4X3_ADD2_IfcColourRgb_type); + declarations.push_back(IFC4X3_ADD2_IfcColourRgbList_type); + declarations.push_back(IFC4X3_ADD2_IfcColourSpecification_type); + declarations.push_back(IFC4X3_ADD2_IfcColumn_type); + declarations.push_back(IFC4X3_ADD2_IfcColumnType_type); + declarations.push_back(IFC4X3_ADD2_IfcColumnTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcCommunicationsAppliance_type); + declarations.push_back(IFC4X3_ADD2_IfcCommunicationsApplianceType_type); + declarations.push_back(IFC4X3_ADD2_IfcCommunicationsApplianceTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcComplexNumber_type); + declarations.push_back(IFC4X3_ADD2_IfcComplexProperty_type); + declarations.push_back(IFC4X3_ADD2_IfcComplexPropertyTemplate_type); + declarations.push_back(IFC4X3_ADD2_IfcComplexPropertyTemplateTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcCompositeCurve_type); + declarations.push_back(IFC4X3_ADD2_IfcCompositeCurveOnSurface_type); + declarations.push_back(IFC4X3_ADD2_IfcCompositeCurveSegment_type); + declarations.push_back(IFC4X3_ADD2_IfcCompositeProfileDef_type); + declarations.push_back(IFC4X3_ADD2_IfcCompoundPlaneAngleMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcCompressor_type); + declarations.push_back(IFC4X3_ADD2_IfcCompressorType_type); + declarations.push_back(IFC4X3_ADD2_IfcCompressorTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcCondenser_type); + declarations.push_back(IFC4X3_ADD2_IfcCondenserType_type); + declarations.push_back(IFC4X3_ADD2_IfcCondenserTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcConic_type); + declarations.push_back(IFC4X3_ADD2_IfcConnectedFaceSet_type); + declarations.push_back(IFC4X3_ADD2_IfcConnectionCurveGeometry_type); + declarations.push_back(IFC4X3_ADD2_IfcConnectionGeometry_type); + declarations.push_back(IFC4X3_ADD2_IfcConnectionPointEccentricity_type); + declarations.push_back(IFC4X3_ADD2_IfcConnectionPointGeometry_type); + declarations.push_back(IFC4X3_ADD2_IfcConnectionSurfaceGeometry_type); + declarations.push_back(IFC4X3_ADD2_IfcConnectionTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcConnectionVolumeGeometry_type); + declarations.push_back(IFC4X3_ADD2_IfcConstraint_type); + declarations.push_back(IFC4X3_ADD2_IfcConstraintEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcConstructionEquipmentResource_type); + declarations.push_back(IFC4X3_ADD2_IfcConstructionEquipmentResourceType_type); + declarations.push_back(IFC4X3_ADD2_IfcConstructionEquipmentResourceTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcConstructionMaterialResource_type); + declarations.push_back(IFC4X3_ADD2_IfcConstructionMaterialResourceType_type); + declarations.push_back(IFC4X3_ADD2_IfcConstructionMaterialResourceTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcConstructionProductResource_type); + declarations.push_back(IFC4X3_ADD2_IfcConstructionProductResourceType_type); + declarations.push_back(IFC4X3_ADD2_IfcConstructionProductResourceTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcConstructionResource_type); + declarations.push_back(IFC4X3_ADD2_IfcConstructionResourceType_type); + declarations.push_back(IFC4X3_ADD2_IfcContext_type); + declarations.push_back(IFC4X3_ADD2_IfcContextDependentMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcContextDependentUnit_type); + declarations.push_back(IFC4X3_ADD2_IfcControl_type); + declarations.push_back(IFC4X3_ADD2_IfcController_type); + declarations.push_back(IFC4X3_ADD2_IfcControllerType_type); + declarations.push_back(IFC4X3_ADD2_IfcControllerTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcConversionBasedUnit_type); + declarations.push_back(IFC4X3_ADD2_IfcConversionBasedUnitWithOffset_type); + declarations.push_back(IFC4X3_ADD2_IfcConveyorSegment_type); + declarations.push_back(IFC4X3_ADD2_IfcConveyorSegmentType_type); + declarations.push_back(IFC4X3_ADD2_IfcConveyorSegmentTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcCooledBeam_type); + declarations.push_back(IFC4X3_ADD2_IfcCooledBeamType_type); + declarations.push_back(IFC4X3_ADD2_IfcCooledBeamTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcCoolingTower_type); + declarations.push_back(IFC4X3_ADD2_IfcCoolingTowerType_type); + declarations.push_back(IFC4X3_ADD2_IfcCoolingTowerTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcCoordinateOperation_type); + declarations.push_back(IFC4X3_ADD2_IfcCoordinateReferenceSystem_type); + declarations.push_back(IFC4X3_ADD2_IfcCoordinateReferenceSystemSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcCosineSpiral_type); + declarations.push_back(IFC4X3_ADD2_IfcCostItem_type); + declarations.push_back(IFC4X3_ADD2_IfcCostItemTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcCostSchedule_type); + declarations.push_back(IFC4X3_ADD2_IfcCostScheduleTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcCostValue_type); + declarations.push_back(IFC4X3_ADD2_IfcCountMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcCourse_type); + declarations.push_back(IFC4X3_ADD2_IfcCourseType_type); + declarations.push_back(IFC4X3_ADD2_IfcCourseTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcCovering_type); + declarations.push_back(IFC4X3_ADD2_IfcCoveringType_type); + declarations.push_back(IFC4X3_ADD2_IfcCoveringTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcCrewResource_type); + declarations.push_back(IFC4X3_ADD2_IfcCrewResourceType_type); + declarations.push_back(IFC4X3_ADD2_IfcCrewResourceTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcCsgPrimitive3D_type); + declarations.push_back(IFC4X3_ADD2_IfcCsgSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcCsgSolid_type); + declarations.push_back(IFC4X3_ADD2_IfcCShapeProfileDef_type); + declarations.push_back(IFC4X3_ADD2_IfcCurrencyRelationship_type); + declarations.push_back(IFC4X3_ADD2_IfcCurtainWall_type); + declarations.push_back(IFC4X3_ADD2_IfcCurtainWallType_type); + declarations.push_back(IFC4X3_ADD2_IfcCurtainWallTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcCurvatureMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcCurve_type); + declarations.push_back(IFC4X3_ADD2_IfcCurveBoundedPlane_type); + declarations.push_back(IFC4X3_ADD2_IfcCurveBoundedSurface_type); + declarations.push_back(IFC4X3_ADD2_IfcCurveFontOrScaledCurveFontSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcCurveInterpolationEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcCurveMeasureSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcCurveOnSurface_type); + declarations.push_back(IFC4X3_ADD2_IfcCurveOrEdgeCurve_type); + declarations.push_back(IFC4X3_ADD2_IfcCurveSegment_type); + declarations.push_back(IFC4X3_ADD2_IfcCurveStyle_type); + declarations.push_back(IFC4X3_ADD2_IfcCurveStyleFont_type); + declarations.push_back(IFC4X3_ADD2_IfcCurveStyleFontAndScaling_type); + declarations.push_back(IFC4X3_ADD2_IfcCurveStyleFontPattern_type); + declarations.push_back(IFC4X3_ADD2_IfcCurveStyleFontSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcCylindricalSurface_type); + declarations.push_back(IFC4X3_ADD2_IfcDamper_type); + declarations.push_back(IFC4X3_ADD2_IfcDamperType_type); + declarations.push_back(IFC4X3_ADD2_IfcDamperTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcDataOriginEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcDate_type); + declarations.push_back(IFC4X3_ADD2_IfcDateTime_type); + declarations.push_back(IFC4X3_ADD2_IfcDayInMonthNumber_type); + declarations.push_back(IFC4X3_ADD2_IfcDayInWeekNumber_type); + declarations.push_back(IFC4X3_ADD2_IfcDeepFoundation_type); + declarations.push_back(IFC4X3_ADD2_IfcDeepFoundationType_type); + declarations.push_back(IFC4X3_ADD2_IfcDefinitionSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcDerivedMeasureValue_type); + declarations.push_back(IFC4X3_ADD2_IfcDerivedProfileDef_type); + declarations.push_back(IFC4X3_ADD2_IfcDerivedUnit_type); + declarations.push_back(IFC4X3_ADD2_IfcDerivedUnitElement_type); + declarations.push_back(IFC4X3_ADD2_IfcDerivedUnitEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcDescriptiveMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcDimensionalExponents_type); + declarations.push_back(IFC4X3_ADD2_IfcDimensionCount_type); + declarations.push_back(IFC4X3_ADD2_IfcDirection_type); + declarations.push_back(IFC4X3_ADD2_IfcDirectionSenseEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcDirectrixCurveSweptAreaSolid_type); + declarations.push_back(IFC4X3_ADD2_IfcDirectrixDerivedReferenceSweptAreaSolid_type); + declarations.push_back(IFC4X3_ADD2_IfcDiscreteAccessory_type); + declarations.push_back(IFC4X3_ADD2_IfcDiscreteAccessoryType_type); + declarations.push_back(IFC4X3_ADD2_IfcDiscreteAccessoryTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcDistributionBoard_type); + declarations.push_back(IFC4X3_ADD2_IfcDistributionBoardType_type); + declarations.push_back(IFC4X3_ADD2_IfcDistributionBoardTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcDistributionChamberElement_type); + declarations.push_back(IFC4X3_ADD2_IfcDistributionChamberElementType_type); + declarations.push_back(IFC4X3_ADD2_IfcDistributionChamberElementTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcDistributionCircuit_type); + declarations.push_back(IFC4X3_ADD2_IfcDistributionControlElement_type); + declarations.push_back(IFC4X3_ADD2_IfcDistributionControlElementType_type); + declarations.push_back(IFC4X3_ADD2_IfcDistributionElement_type); + declarations.push_back(IFC4X3_ADD2_IfcDistributionElementType_type); + declarations.push_back(IFC4X3_ADD2_IfcDistributionFlowElement_type); + declarations.push_back(IFC4X3_ADD2_IfcDistributionFlowElementType_type); + declarations.push_back(IFC4X3_ADD2_IfcDistributionPort_type); + declarations.push_back(IFC4X3_ADD2_IfcDistributionPortTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcDistributionSystem_type); + declarations.push_back(IFC4X3_ADD2_IfcDistributionSystemEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcDocumentConfidentialityEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcDocumentInformation_type); + declarations.push_back(IFC4X3_ADD2_IfcDocumentInformationRelationship_type); + declarations.push_back(IFC4X3_ADD2_IfcDocumentReference_type); + declarations.push_back(IFC4X3_ADD2_IfcDocumentSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcDocumentStatusEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcDoor_type); + declarations.push_back(IFC4X3_ADD2_IfcDoorLiningProperties_type); + declarations.push_back(IFC4X3_ADD2_IfcDoorPanelOperationEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcDoorPanelPositionEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcDoorPanelProperties_type); + declarations.push_back(IFC4X3_ADD2_IfcDoorType_type); + declarations.push_back(IFC4X3_ADD2_IfcDoorTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcDoorTypeOperationEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcDoseEquivalentMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcDraughtingPreDefinedColour_type); + declarations.push_back(IFC4X3_ADD2_IfcDraughtingPreDefinedCurveFont_type); + declarations.push_back(IFC4X3_ADD2_IfcDuctFitting_type); + declarations.push_back(IFC4X3_ADD2_IfcDuctFittingType_type); + declarations.push_back(IFC4X3_ADD2_IfcDuctFittingTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcDuctSegment_type); + declarations.push_back(IFC4X3_ADD2_IfcDuctSegmentType_type); + declarations.push_back(IFC4X3_ADD2_IfcDuctSegmentTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcDuctSilencer_type); + declarations.push_back(IFC4X3_ADD2_IfcDuctSilencerType_type); + declarations.push_back(IFC4X3_ADD2_IfcDuctSilencerTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcDuration_type); + declarations.push_back(IFC4X3_ADD2_IfcDynamicViscosityMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcEarthworksCut_type); + declarations.push_back(IFC4X3_ADD2_IfcEarthworksCutTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcEarthworksElement_type); + declarations.push_back(IFC4X3_ADD2_IfcEarthworksFill_type); + declarations.push_back(IFC4X3_ADD2_IfcEarthworksFillTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcEdge_type); + declarations.push_back(IFC4X3_ADD2_IfcEdgeCurve_type); + declarations.push_back(IFC4X3_ADD2_IfcEdgeLoop_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricAppliance_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricApplianceType_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricApplianceTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricCapacitanceMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricChargeMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricConductanceMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricCurrentMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricDistributionBoard_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricDistributionBoardType_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricDistributionBoardTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricFlowStorageDevice_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricFlowStorageDeviceType_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricFlowStorageDeviceTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricFlowTreatmentDevice_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricFlowTreatmentDeviceType_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricFlowTreatmentDeviceTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricGenerator_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricGeneratorType_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricGeneratorTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricMotor_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricMotorType_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricMotorTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricResistanceMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricTimeControl_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricTimeControlType_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricTimeControlTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcElectricVoltageMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcElement_type); + declarations.push_back(IFC4X3_ADD2_IfcElementarySurface_type); + declarations.push_back(IFC4X3_ADD2_IfcElementAssembly_type); + declarations.push_back(IFC4X3_ADD2_IfcElementAssemblyType_type); + declarations.push_back(IFC4X3_ADD2_IfcElementAssemblyTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcElementComponent_type); + declarations.push_back(IFC4X3_ADD2_IfcElementComponentType_type); + declarations.push_back(IFC4X3_ADD2_IfcElementCompositionEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcElementQuantity_type); + declarations.push_back(IFC4X3_ADD2_IfcElementType_type); + declarations.push_back(IFC4X3_ADD2_IfcEllipse_type); + declarations.push_back(IFC4X3_ADD2_IfcEllipseProfileDef_type); + declarations.push_back(IFC4X3_ADD2_IfcEnergyConversionDevice_type); + declarations.push_back(IFC4X3_ADD2_IfcEnergyConversionDeviceType_type); + declarations.push_back(IFC4X3_ADD2_IfcEnergyMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcEngine_type); + declarations.push_back(IFC4X3_ADD2_IfcEngineType_type); + declarations.push_back(IFC4X3_ADD2_IfcEngineTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcEvaporativeCooler_type); + declarations.push_back(IFC4X3_ADD2_IfcEvaporativeCoolerType_type); + declarations.push_back(IFC4X3_ADD2_IfcEvaporativeCoolerTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcEvaporator_type); + declarations.push_back(IFC4X3_ADD2_IfcEvaporatorType_type); + declarations.push_back(IFC4X3_ADD2_IfcEvaporatorTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcEvent_type); + declarations.push_back(IFC4X3_ADD2_IfcEventTime_type); + declarations.push_back(IFC4X3_ADD2_IfcEventTriggerTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcEventType_type); + declarations.push_back(IFC4X3_ADD2_IfcEventTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcExtendedProperties_type); + declarations.push_back(IFC4X3_ADD2_IfcExternalInformation_type); + declarations.push_back(IFC4X3_ADD2_IfcExternallyDefinedHatchStyle_type); + declarations.push_back(IFC4X3_ADD2_IfcExternallyDefinedSurfaceStyle_type); + declarations.push_back(IFC4X3_ADD2_IfcExternallyDefinedTextFont_type); + declarations.push_back(IFC4X3_ADD2_IfcExternalReference_type); + declarations.push_back(IFC4X3_ADD2_IfcExternalReferenceRelationship_type); + declarations.push_back(IFC4X3_ADD2_IfcExternalSpatialElement_type); + declarations.push_back(IFC4X3_ADD2_IfcExternalSpatialElementTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcExternalSpatialStructureElement_type); + declarations.push_back(IFC4X3_ADD2_IfcExtrudedAreaSolid_type); + declarations.push_back(IFC4X3_ADD2_IfcExtrudedAreaSolidTapered_type); + declarations.push_back(IFC4X3_ADD2_IfcFace_type); + declarations.push_back(IFC4X3_ADD2_IfcFaceBasedSurfaceModel_type); + declarations.push_back(IFC4X3_ADD2_IfcFaceBound_type); + declarations.push_back(IFC4X3_ADD2_IfcFaceOuterBound_type); + declarations.push_back(IFC4X3_ADD2_IfcFaceSurface_type); + declarations.push_back(IFC4X3_ADD2_IfcFacetedBrep_type); + declarations.push_back(IFC4X3_ADD2_IfcFacetedBrepWithVoids_type); + declarations.push_back(IFC4X3_ADD2_IfcFacility_type); + declarations.push_back(IFC4X3_ADD2_IfcFacilityPart_type); + declarations.push_back(IFC4X3_ADD2_IfcFacilityPartCommon_type); + declarations.push_back(IFC4X3_ADD2_IfcFacilityPartCommonTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcFacilityUsageEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcFailureConnectionCondition_type); + declarations.push_back(IFC4X3_ADD2_IfcFan_type); + declarations.push_back(IFC4X3_ADD2_IfcFanType_type); + declarations.push_back(IFC4X3_ADD2_IfcFanTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcFastener_type); + declarations.push_back(IFC4X3_ADD2_IfcFastenerType_type); + declarations.push_back(IFC4X3_ADD2_IfcFastenerTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcFeatureElement_type); + declarations.push_back(IFC4X3_ADD2_IfcFeatureElementAddition_type); + declarations.push_back(IFC4X3_ADD2_IfcFeatureElementSubtraction_type); + declarations.push_back(IFC4X3_ADD2_IfcFillAreaStyle_type); + declarations.push_back(IFC4X3_ADD2_IfcFillAreaStyleHatching_type); + declarations.push_back(IFC4X3_ADD2_IfcFillAreaStyleTiles_type); + declarations.push_back(IFC4X3_ADD2_IfcFillStyleSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcFilter_type); + declarations.push_back(IFC4X3_ADD2_IfcFilterType_type); + declarations.push_back(IFC4X3_ADD2_IfcFilterTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcFireSuppressionTerminal_type); + declarations.push_back(IFC4X3_ADD2_IfcFireSuppressionTerminalType_type); + declarations.push_back(IFC4X3_ADD2_IfcFireSuppressionTerminalTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcFixedReferenceSweptAreaSolid_type); + declarations.push_back(IFC4X3_ADD2_IfcFlowController_type); + declarations.push_back(IFC4X3_ADD2_IfcFlowControllerType_type); + declarations.push_back(IFC4X3_ADD2_IfcFlowDirectionEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcFlowFitting_type); + declarations.push_back(IFC4X3_ADD2_IfcFlowFittingType_type); + declarations.push_back(IFC4X3_ADD2_IfcFlowInstrument_type); + declarations.push_back(IFC4X3_ADD2_IfcFlowInstrumentType_type); + declarations.push_back(IFC4X3_ADD2_IfcFlowInstrumentTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcFlowMeter_type); + declarations.push_back(IFC4X3_ADD2_IfcFlowMeterType_type); + declarations.push_back(IFC4X3_ADD2_IfcFlowMeterTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcFlowMovingDevice_type); + declarations.push_back(IFC4X3_ADD2_IfcFlowMovingDeviceType_type); + declarations.push_back(IFC4X3_ADD2_IfcFlowSegment_type); + declarations.push_back(IFC4X3_ADD2_IfcFlowSegmentType_type); + declarations.push_back(IFC4X3_ADD2_IfcFlowStorageDevice_type); + declarations.push_back(IFC4X3_ADD2_IfcFlowStorageDeviceType_type); + declarations.push_back(IFC4X3_ADD2_IfcFlowTerminal_type); + declarations.push_back(IFC4X3_ADD2_IfcFlowTerminalType_type); + declarations.push_back(IFC4X3_ADD2_IfcFlowTreatmentDevice_type); + declarations.push_back(IFC4X3_ADD2_IfcFlowTreatmentDeviceType_type); + declarations.push_back(IFC4X3_ADD2_IfcFontStyle_type); + declarations.push_back(IFC4X3_ADD2_IfcFontVariant_type); + declarations.push_back(IFC4X3_ADD2_IfcFontWeight_type); + declarations.push_back(IFC4X3_ADD2_IfcFooting_type); + declarations.push_back(IFC4X3_ADD2_IfcFootingType_type); + declarations.push_back(IFC4X3_ADD2_IfcFootingTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcForceMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcFrequencyMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcFurnishingElement_type); + declarations.push_back(IFC4X3_ADD2_IfcFurnishingElementType_type); + declarations.push_back(IFC4X3_ADD2_IfcFurniture_type); + declarations.push_back(IFC4X3_ADD2_IfcFurnitureType_type); + declarations.push_back(IFC4X3_ADD2_IfcFurnitureTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcGeographicCRS_type); + declarations.push_back(IFC4X3_ADD2_IfcGeographicElement_type); + declarations.push_back(IFC4X3_ADD2_IfcGeographicElementType_type); + declarations.push_back(IFC4X3_ADD2_IfcGeographicElementTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcGeometricCurveSet_type); + declarations.push_back(IFC4X3_ADD2_IfcGeometricProjectionEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcGeometricRepresentationContext_type); + declarations.push_back(IFC4X3_ADD2_IfcGeometricRepresentationItem_type); + declarations.push_back(IFC4X3_ADD2_IfcGeometricRepresentationSubContext_type); + declarations.push_back(IFC4X3_ADD2_IfcGeometricSet_type); + declarations.push_back(IFC4X3_ADD2_IfcGeometricSetSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcGeomodel_type); + declarations.push_back(IFC4X3_ADD2_IfcGeoslice_type); + declarations.push_back(IFC4X3_ADD2_IfcGeotechnicalAssembly_type); + declarations.push_back(IFC4X3_ADD2_IfcGeotechnicalElement_type); + declarations.push_back(IFC4X3_ADD2_IfcGeotechnicalStratum_type); + declarations.push_back(IFC4X3_ADD2_IfcGeotechnicalStratumTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcGloballyUniqueId_type); + declarations.push_back(IFC4X3_ADD2_IfcGlobalOrLocalEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcGradientCurve_type); + declarations.push_back(IFC4X3_ADD2_IfcGrid_type); + declarations.push_back(IFC4X3_ADD2_IfcGridAxis_type); + declarations.push_back(IFC4X3_ADD2_IfcGridPlacement_type); + declarations.push_back(IFC4X3_ADD2_IfcGridPlacementDirectionSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcGridTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcGroup_type); + declarations.push_back(IFC4X3_ADD2_IfcHalfSpaceSolid_type); + declarations.push_back(IFC4X3_ADD2_IfcHatchLineDistanceSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcHeatExchanger_type); + declarations.push_back(IFC4X3_ADD2_IfcHeatExchangerType_type); + declarations.push_back(IFC4X3_ADD2_IfcHeatExchangerTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcHeatFluxDensityMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcHeatingValueMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcHumidifier_type); + declarations.push_back(IFC4X3_ADD2_IfcHumidifierType_type); + declarations.push_back(IFC4X3_ADD2_IfcHumidifierTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcIdentifier_type); + declarations.push_back(IFC4X3_ADD2_IfcIlluminanceMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcImageTexture_type); + declarations.push_back(IFC4X3_ADD2_IfcImpactProtectionDevice_type); + declarations.push_back(IFC4X3_ADD2_IfcImpactProtectionDeviceType_type); + declarations.push_back(IFC4X3_ADD2_IfcImpactProtectionDeviceTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcIndexedColourMap_type); + declarations.push_back(IFC4X3_ADD2_IfcIndexedPolyCurve_type); + declarations.push_back(IFC4X3_ADD2_IfcIndexedPolygonalFace_type); + declarations.push_back(IFC4X3_ADD2_IfcIndexedPolygonalFaceWithVoids_type); + declarations.push_back(IFC4X3_ADD2_IfcIndexedPolygonalTextureMap_type); + declarations.push_back(IFC4X3_ADD2_IfcIndexedTextureMap_type); + declarations.push_back(IFC4X3_ADD2_IfcIndexedTriangleTextureMap_type); + declarations.push_back(IFC4X3_ADD2_IfcInductanceMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcInteger_type); + declarations.push_back(IFC4X3_ADD2_IfcIntegerCountRateMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcInterceptor_type); + declarations.push_back(IFC4X3_ADD2_IfcInterceptorType_type); + declarations.push_back(IFC4X3_ADD2_IfcInterceptorTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcInterferenceSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcInternalOrExternalEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcIntersectionCurve_type); + declarations.push_back(IFC4X3_ADD2_IfcInventory_type); + declarations.push_back(IFC4X3_ADD2_IfcInventoryTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcIonConcentrationMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcIrregularTimeSeries_type); + declarations.push_back(IFC4X3_ADD2_IfcIrregularTimeSeriesValue_type); + declarations.push_back(IFC4X3_ADD2_IfcIShapeProfileDef_type); + declarations.push_back(IFC4X3_ADD2_IfcIsothermalMoistureCapacityMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcJunctionBox_type); + declarations.push_back(IFC4X3_ADD2_IfcJunctionBoxType_type); + declarations.push_back(IFC4X3_ADD2_IfcJunctionBoxTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcKerb_type); + declarations.push_back(IFC4X3_ADD2_IfcKerbType_type); + declarations.push_back(IFC4X3_ADD2_IfcKerbTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcKinematicViscosityMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcKnotType_type); + declarations.push_back(IFC4X3_ADD2_IfcLabel_type); + declarations.push_back(IFC4X3_ADD2_IfcLaborResource_type); + declarations.push_back(IFC4X3_ADD2_IfcLaborResourceType_type); + declarations.push_back(IFC4X3_ADD2_IfcLaborResourceTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcLagTime_type); + declarations.push_back(IFC4X3_ADD2_IfcLamp_type); + declarations.push_back(IFC4X3_ADD2_IfcLampType_type); + declarations.push_back(IFC4X3_ADD2_IfcLampTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcLanguageId_type); + declarations.push_back(IFC4X3_ADD2_IfcLayeredItem_type); + declarations.push_back(IFC4X3_ADD2_IfcLayerSetDirectionEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcLengthMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcLibraryInformation_type); + declarations.push_back(IFC4X3_ADD2_IfcLibraryReference_type); + declarations.push_back(IFC4X3_ADD2_IfcLibrarySelect_type); + declarations.push_back(IFC4X3_ADD2_IfcLightDistributionCurveEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcLightDistributionData_type); + declarations.push_back(IFC4X3_ADD2_IfcLightDistributionDataSourceSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcLightEmissionSourceEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcLightFixture_type); + declarations.push_back(IFC4X3_ADD2_IfcLightFixtureType_type); + declarations.push_back(IFC4X3_ADD2_IfcLightFixtureTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcLightIntensityDistribution_type); + declarations.push_back(IFC4X3_ADD2_IfcLightSource_type); + declarations.push_back(IFC4X3_ADD2_IfcLightSourceAmbient_type); + declarations.push_back(IFC4X3_ADD2_IfcLightSourceDirectional_type); + declarations.push_back(IFC4X3_ADD2_IfcLightSourceGoniometric_type); + declarations.push_back(IFC4X3_ADD2_IfcLightSourcePositional_type); + declarations.push_back(IFC4X3_ADD2_IfcLightSourceSpot_type); + declarations.push_back(IFC4X3_ADD2_IfcLine_type); + declarations.push_back(IFC4X3_ADD2_IfcLinearElement_type); + declarations.push_back(IFC4X3_ADD2_IfcLinearForceMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcLinearMomentMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcLinearPlacement_type); + declarations.push_back(IFC4X3_ADD2_IfcLinearPositioningElement_type); + declarations.push_back(IFC4X3_ADD2_IfcLinearStiffnessMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcLinearVelocityMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcLineIndex_type); + declarations.push_back(IFC4X3_ADD2_IfcLiquidTerminal_type); + declarations.push_back(IFC4X3_ADD2_IfcLiquidTerminalType_type); + declarations.push_back(IFC4X3_ADD2_IfcLiquidTerminalTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcLoadGroupTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcLocalPlacement_type); + declarations.push_back(IFC4X3_ADD2_IfcLogical_type); + declarations.push_back(IFC4X3_ADD2_IfcLogicalOperatorEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcLoop_type); + declarations.push_back(IFC4X3_ADD2_IfcLShapeProfileDef_type); + declarations.push_back(IFC4X3_ADD2_IfcLuminousFluxMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcLuminousIntensityDistributionMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcLuminousIntensityMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcMagneticFluxDensityMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcMagneticFluxMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcManifoldSolidBrep_type); + declarations.push_back(IFC4X3_ADD2_IfcMapConversion_type); + declarations.push_back(IFC4X3_ADD2_IfcMapConversionScaled_type); + declarations.push_back(IFC4X3_ADD2_IfcMappedItem_type); + declarations.push_back(IFC4X3_ADD2_IfcMarineFacility_type); + declarations.push_back(IFC4X3_ADD2_IfcMarineFacilityTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcMarinePart_type); + declarations.push_back(IFC4X3_ADD2_IfcMarinePartTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcMassDensityMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcMassFlowRateMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcMassMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcMassPerLengthMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcMaterial_type); + declarations.push_back(IFC4X3_ADD2_IfcMaterialClassificationRelationship_type); + declarations.push_back(IFC4X3_ADD2_IfcMaterialConstituent_type); + declarations.push_back(IFC4X3_ADD2_IfcMaterialConstituentSet_type); + declarations.push_back(IFC4X3_ADD2_IfcMaterialDefinition_type); + declarations.push_back(IFC4X3_ADD2_IfcMaterialDefinitionRepresentation_type); + declarations.push_back(IFC4X3_ADD2_IfcMaterialLayer_type); + declarations.push_back(IFC4X3_ADD2_IfcMaterialLayerSet_type); + declarations.push_back(IFC4X3_ADD2_IfcMaterialLayerSetUsage_type); + declarations.push_back(IFC4X3_ADD2_IfcMaterialLayerWithOffsets_type); + declarations.push_back(IFC4X3_ADD2_IfcMaterialList_type); + declarations.push_back(IFC4X3_ADD2_IfcMaterialProfile_type); + declarations.push_back(IFC4X3_ADD2_IfcMaterialProfileSet_type); + declarations.push_back(IFC4X3_ADD2_IfcMaterialProfileSetUsage_type); + declarations.push_back(IFC4X3_ADD2_IfcMaterialProfileSetUsageTapering_type); + declarations.push_back(IFC4X3_ADD2_IfcMaterialProfileWithOffsets_type); + declarations.push_back(IFC4X3_ADD2_IfcMaterialProperties_type); + declarations.push_back(IFC4X3_ADD2_IfcMaterialRelationship_type); + declarations.push_back(IFC4X3_ADD2_IfcMaterialSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcMaterialUsageDefinition_type); + declarations.push_back(IFC4X3_ADD2_IfcMeasureValue_type); + declarations.push_back(IFC4X3_ADD2_IfcMeasureWithUnit_type); + declarations.push_back(IFC4X3_ADD2_IfcMechanicalFastener_type); + declarations.push_back(IFC4X3_ADD2_IfcMechanicalFastenerType_type); + declarations.push_back(IFC4X3_ADD2_IfcMechanicalFastenerTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcMedicalDevice_type); + declarations.push_back(IFC4X3_ADD2_IfcMedicalDeviceType_type); + declarations.push_back(IFC4X3_ADD2_IfcMedicalDeviceTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcMember_type); + declarations.push_back(IFC4X3_ADD2_IfcMemberType_type); + declarations.push_back(IFC4X3_ADD2_IfcMemberTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcMetric_type); + declarations.push_back(IFC4X3_ADD2_IfcMetricValueSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcMirroredProfileDef_type); + declarations.push_back(IFC4X3_ADD2_IfcMobileTelecommunicationsAppliance_type); + declarations.push_back(IFC4X3_ADD2_IfcMobileTelecommunicationsApplianceType_type); + declarations.push_back(IFC4X3_ADD2_IfcMobileTelecommunicationsApplianceTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcModulusOfElasticityMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcModulusOfLinearSubgradeReactionMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcModulusOfRotationalSubgradeReactionMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcModulusOfRotationalSubgradeReactionSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcModulusOfSubgradeReactionMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcModulusOfSubgradeReactionSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcModulusOfTranslationalSubgradeReactionSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcMoistureDiffusivityMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcMolecularWeightMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcMomentOfInertiaMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcMonetaryMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcMonetaryUnit_type); + declarations.push_back(IFC4X3_ADD2_IfcMonthInYearNumber_type); + declarations.push_back(IFC4X3_ADD2_IfcMooringDevice_type); + declarations.push_back(IFC4X3_ADD2_IfcMooringDeviceType_type); + declarations.push_back(IFC4X3_ADD2_IfcMooringDeviceTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcMotorConnection_type); + declarations.push_back(IFC4X3_ADD2_IfcMotorConnectionType_type); + declarations.push_back(IFC4X3_ADD2_IfcMotorConnectionTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcNamedUnit_type); + declarations.push_back(IFC4X3_ADD2_IfcNavigationElement_type); + declarations.push_back(IFC4X3_ADD2_IfcNavigationElementType_type); + declarations.push_back(IFC4X3_ADD2_IfcNavigationElementTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcNormalisedRatioMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcNumericMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcObject_type); + declarations.push_back(IFC4X3_ADD2_IfcObjectDefinition_type); + declarations.push_back(IFC4X3_ADD2_IfcObjective_type); + declarations.push_back(IFC4X3_ADD2_IfcObjectiveEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcObjectPlacement_type); + declarations.push_back(IFC4X3_ADD2_IfcObjectReferenceSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcOccupant_type); + declarations.push_back(IFC4X3_ADD2_IfcOccupantTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcOffsetCurve_type); + declarations.push_back(IFC4X3_ADD2_IfcOffsetCurve2D_type); + declarations.push_back(IFC4X3_ADD2_IfcOffsetCurve3D_type); + declarations.push_back(IFC4X3_ADD2_IfcOffsetCurveByDistances_type); + declarations.push_back(IFC4X3_ADD2_IfcOpenCrossProfileDef_type); + declarations.push_back(IFC4X3_ADD2_IfcOpeningElement_type); + declarations.push_back(IFC4X3_ADD2_IfcOpeningElementTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcOpenShell_type); + declarations.push_back(IFC4X3_ADD2_IfcOrganization_type); + declarations.push_back(IFC4X3_ADD2_IfcOrganizationRelationship_type); + declarations.push_back(IFC4X3_ADD2_IfcOrientedEdge_type); + declarations.push_back(IFC4X3_ADD2_IfcOuterBoundaryCurve_type); + declarations.push_back(IFC4X3_ADD2_IfcOutlet_type); + declarations.push_back(IFC4X3_ADD2_IfcOutletType_type); + declarations.push_back(IFC4X3_ADD2_IfcOutletTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcOwnerHistory_type); + declarations.push_back(IFC4X3_ADD2_IfcParameterizedProfileDef_type); + declarations.push_back(IFC4X3_ADD2_IfcParameterValue_type); + declarations.push_back(IFC4X3_ADD2_IfcPath_type); + declarations.push_back(IFC4X3_ADD2_IfcPavement_type); + declarations.push_back(IFC4X3_ADD2_IfcPavementType_type); + declarations.push_back(IFC4X3_ADD2_IfcPavementTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcPcurve_type); + declarations.push_back(IFC4X3_ADD2_IfcPerformanceHistory_type); + declarations.push_back(IFC4X3_ADD2_IfcPerformanceHistoryTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcPermeableCoveringOperationEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcPermeableCoveringProperties_type); + declarations.push_back(IFC4X3_ADD2_IfcPermit_type); + declarations.push_back(IFC4X3_ADD2_IfcPermitTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcPerson_type); + declarations.push_back(IFC4X3_ADD2_IfcPersonAndOrganization_type); + declarations.push_back(IFC4X3_ADD2_IfcPHMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcPhysicalComplexQuantity_type); + declarations.push_back(IFC4X3_ADD2_IfcPhysicalOrVirtualEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcPhysicalQuantity_type); + declarations.push_back(IFC4X3_ADD2_IfcPhysicalSimpleQuantity_type); + declarations.push_back(IFC4X3_ADD2_IfcPile_type); + declarations.push_back(IFC4X3_ADD2_IfcPileConstructionEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcPileType_type); + declarations.push_back(IFC4X3_ADD2_IfcPileTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcPipeFitting_type); + declarations.push_back(IFC4X3_ADD2_IfcPipeFittingType_type); + declarations.push_back(IFC4X3_ADD2_IfcPipeFittingTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcPipeSegment_type); + declarations.push_back(IFC4X3_ADD2_IfcPipeSegmentType_type); + declarations.push_back(IFC4X3_ADD2_IfcPipeSegmentTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcPixelTexture_type); + declarations.push_back(IFC4X3_ADD2_IfcPlacement_type); + declarations.push_back(IFC4X3_ADD2_IfcPlanarBox_type); + declarations.push_back(IFC4X3_ADD2_IfcPlanarExtent_type); + declarations.push_back(IFC4X3_ADD2_IfcPlanarForceMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcPlane_type); + declarations.push_back(IFC4X3_ADD2_IfcPlaneAngleMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcPlate_type); + declarations.push_back(IFC4X3_ADD2_IfcPlateType_type); + declarations.push_back(IFC4X3_ADD2_IfcPlateTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcPoint_type); + declarations.push_back(IFC4X3_ADD2_IfcPointByDistanceExpression_type); + declarations.push_back(IFC4X3_ADD2_IfcPointOnCurve_type); + declarations.push_back(IFC4X3_ADD2_IfcPointOnSurface_type); + declarations.push_back(IFC4X3_ADD2_IfcPointOrVertexPoint_type); + declarations.push_back(IFC4X3_ADD2_IfcPolygonalBoundedHalfSpace_type); + declarations.push_back(IFC4X3_ADD2_IfcPolygonalFaceSet_type); + declarations.push_back(IFC4X3_ADD2_IfcPolyline_type); + declarations.push_back(IFC4X3_ADD2_IfcPolyLoop_type); + declarations.push_back(IFC4X3_ADD2_IfcPolynomialCurve_type); + declarations.push_back(IFC4X3_ADD2_IfcPort_type); + declarations.push_back(IFC4X3_ADD2_IfcPositioningElement_type); + declarations.push_back(IFC4X3_ADD2_IfcPositiveInteger_type); + declarations.push_back(IFC4X3_ADD2_IfcPositiveLengthMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcPositivePlaneAngleMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcPositiveRatioMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcPostalAddress_type); + declarations.push_back(IFC4X3_ADD2_IfcPowerMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcPreDefinedColour_type); + declarations.push_back(IFC4X3_ADD2_IfcPreDefinedCurveFont_type); + declarations.push_back(IFC4X3_ADD2_IfcPreDefinedItem_type); + declarations.push_back(IFC4X3_ADD2_IfcPreDefinedProperties_type); + declarations.push_back(IFC4X3_ADD2_IfcPreDefinedPropertySet_type); + declarations.push_back(IFC4X3_ADD2_IfcPreDefinedTextFont_type); + declarations.push_back(IFC4X3_ADD2_IfcPreferredSurfaceCurveRepresentation_type); + declarations.push_back(IFC4X3_ADD2_IfcPresentableText_type); + declarations.push_back(IFC4X3_ADD2_IfcPresentationItem_type); + declarations.push_back(IFC4X3_ADD2_IfcPresentationLayerAssignment_type); + declarations.push_back(IFC4X3_ADD2_IfcPresentationLayerWithStyle_type); + declarations.push_back(IFC4X3_ADD2_IfcPresentationStyle_type); + declarations.push_back(IFC4X3_ADD2_IfcPressureMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcProcedure_type); + declarations.push_back(IFC4X3_ADD2_IfcProcedureType_type); + declarations.push_back(IFC4X3_ADD2_IfcProcedureTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcProcess_type); + declarations.push_back(IFC4X3_ADD2_IfcProcessSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcProduct_type); + declarations.push_back(IFC4X3_ADD2_IfcProductDefinitionShape_type); + declarations.push_back(IFC4X3_ADD2_IfcProductRepresentation_type); + declarations.push_back(IFC4X3_ADD2_IfcProductRepresentationSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcProductSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcProfileDef_type); + declarations.push_back(IFC4X3_ADD2_IfcProfileProperties_type); + declarations.push_back(IFC4X3_ADD2_IfcProfileTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcProject_type); + declarations.push_back(IFC4X3_ADD2_IfcProjectedCRS_type); + declarations.push_back(IFC4X3_ADD2_IfcProjectedOrTrueLengthEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcProjectionElement_type); + declarations.push_back(IFC4X3_ADD2_IfcProjectionElementTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcProjectLibrary_type); + declarations.push_back(IFC4X3_ADD2_IfcProjectOrder_type); + declarations.push_back(IFC4X3_ADD2_IfcProjectOrderTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcProperty_type); + declarations.push_back(IFC4X3_ADD2_IfcPropertyAbstraction_type); + declarations.push_back(IFC4X3_ADD2_IfcPropertyBoundedValue_type); + declarations.push_back(IFC4X3_ADD2_IfcPropertyDefinition_type); + declarations.push_back(IFC4X3_ADD2_IfcPropertyDependencyRelationship_type); + declarations.push_back(IFC4X3_ADD2_IfcPropertyEnumeratedValue_type); + declarations.push_back(IFC4X3_ADD2_IfcPropertyEnumeration_type); + declarations.push_back(IFC4X3_ADD2_IfcPropertyListValue_type); + declarations.push_back(IFC4X3_ADD2_IfcPropertyReferenceValue_type); + declarations.push_back(IFC4X3_ADD2_IfcPropertySet_type); + declarations.push_back(IFC4X3_ADD2_IfcPropertySetDefinition_type); + declarations.push_back(IFC4X3_ADD2_IfcPropertySetDefinitionSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcPropertySetDefinitionSet_type); + declarations.push_back(IFC4X3_ADD2_IfcPropertySetTemplate_type); + declarations.push_back(IFC4X3_ADD2_IfcPropertySetTemplateTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcPropertySingleValue_type); + declarations.push_back(IFC4X3_ADD2_IfcPropertyTableValue_type); + declarations.push_back(IFC4X3_ADD2_IfcPropertyTemplate_type); + declarations.push_back(IFC4X3_ADD2_IfcPropertyTemplateDefinition_type); + declarations.push_back(IFC4X3_ADD2_IfcProtectiveDevice_type); + declarations.push_back(IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnit_type); + declarations.push_back(IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnitType_type); + declarations.push_back(IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnitTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcProtectiveDeviceType_type); + declarations.push_back(IFC4X3_ADD2_IfcProtectiveDeviceTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcPump_type); + declarations.push_back(IFC4X3_ADD2_IfcPumpType_type); + declarations.push_back(IFC4X3_ADD2_IfcPumpTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcQuantityArea_type); + declarations.push_back(IFC4X3_ADD2_IfcQuantityCount_type); + declarations.push_back(IFC4X3_ADD2_IfcQuantityLength_type); + declarations.push_back(IFC4X3_ADD2_IfcQuantityNumber_type); + declarations.push_back(IFC4X3_ADD2_IfcQuantitySet_type); + declarations.push_back(IFC4X3_ADD2_IfcQuantityTime_type); + declarations.push_back(IFC4X3_ADD2_IfcQuantityVolume_type); + declarations.push_back(IFC4X3_ADD2_IfcQuantityWeight_type); + declarations.push_back(IFC4X3_ADD2_IfcRadioActivityMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcRail_type); + declarations.push_back(IFC4X3_ADD2_IfcRailing_type); + declarations.push_back(IFC4X3_ADD2_IfcRailingType_type); + declarations.push_back(IFC4X3_ADD2_IfcRailingTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcRailType_type); + declarations.push_back(IFC4X3_ADD2_IfcRailTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcRailway_type); + declarations.push_back(IFC4X3_ADD2_IfcRailwayPart_type); + declarations.push_back(IFC4X3_ADD2_IfcRailwayPartTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcRailwayTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcRamp_type); + declarations.push_back(IFC4X3_ADD2_IfcRampFlight_type); + declarations.push_back(IFC4X3_ADD2_IfcRampFlightType_type); + declarations.push_back(IFC4X3_ADD2_IfcRampFlightTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcRampType_type); + declarations.push_back(IFC4X3_ADD2_IfcRampTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcRatioMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcRationalBSplineCurveWithKnots_type); + declarations.push_back(IFC4X3_ADD2_IfcRationalBSplineSurfaceWithKnots_type); + declarations.push_back(IFC4X3_ADD2_IfcReal_type); + declarations.push_back(IFC4X3_ADD2_IfcRectangleHollowProfileDef_type); + declarations.push_back(IFC4X3_ADD2_IfcRectangleProfileDef_type); + declarations.push_back(IFC4X3_ADD2_IfcRectangularPyramid_type); + declarations.push_back(IFC4X3_ADD2_IfcRectangularTrimmedSurface_type); + declarations.push_back(IFC4X3_ADD2_IfcRecurrencePattern_type); + declarations.push_back(IFC4X3_ADD2_IfcRecurrenceTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcReference_type); + declarations.push_back(IFC4X3_ADD2_IfcReferent_type); + declarations.push_back(IFC4X3_ADD2_IfcReferentTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcReflectanceMethodEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcRegularTimeSeries_type); + declarations.push_back(IFC4X3_ADD2_IfcReinforcedSoil_type); + declarations.push_back(IFC4X3_ADD2_IfcReinforcedSoilTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcReinforcementBarProperties_type); + declarations.push_back(IFC4X3_ADD2_IfcReinforcementDefinitionProperties_type); + declarations.push_back(IFC4X3_ADD2_IfcReinforcingBar_type); + declarations.push_back(IFC4X3_ADD2_IfcReinforcingBarRoleEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcReinforcingBarSurfaceEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcReinforcingBarType_type); + declarations.push_back(IFC4X3_ADD2_IfcReinforcingBarTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcReinforcingElement_type); + declarations.push_back(IFC4X3_ADD2_IfcReinforcingElementType_type); + declarations.push_back(IFC4X3_ADD2_IfcReinforcingMesh_type); + declarations.push_back(IFC4X3_ADD2_IfcReinforcingMeshType_type); + declarations.push_back(IFC4X3_ADD2_IfcReinforcingMeshTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcRelAdheresToElement_type); + declarations.push_back(IFC4X3_ADD2_IfcRelAggregates_type); + declarations.push_back(IFC4X3_ADD2_IfcRelAssigns_type); + declarations.push_back(IFC4X3_ADD2_IfcRelAssignsToActor_type); + declarations.push_back(IFC4X3_ADD2_IfcRelAssignsToControl_type); + declarations.push_back(IFC4X3_ADD2_IfcRelAssignsToGroup_type); + declarations.push_back(IFC4X3_ADD2_IfcRelAssignsToGroupByFactor_type); + declarations.push_back(IFC4X3_ADD2_IfcRelAssignsToProcess_type); + declarations.push_back(IFC4X3_ADD2_IfcRelAssignsToProduct_type); + declarations.push_back(IFC4X3_ADD2_IfcRelAssignsToResource_type); + declarations.push_back(IFC4X3_ADD2_IfcRelAssociates_type); + declarations.push_back(IFC4X3_ADD2_IfcRelAssociatesApproval_type); + declarations.push_back(IFC4X3_ADD2_IfcRelAssociatesClassification_type); + declarations.push_back(IFC4X3_ADD2_IfcRelAssociatesConstraint_type); + declarations.push_back(IFC4X3_ADD2_IfcRelAssociatesDocument_type); + declarations.push_back(IFC4X3_ADD2_IfcRelAssociatesLibrary_type); + declarations.push_back(IFC4X3_ADD2_IfcRelAssociatesMaterial_type); + declarations.push_back(IFC4X3_ADD2_IfcRelAssociatesProfileDef_type); + declarations.push_back(IFC4X3_ADD2_IfcRelationship_type); + declarations.push_back(IFC4X3_ADD2_IfcRelConnects_type); + declarations.push_back(IFC4X3_ADD2_IfcRelConnectsElements_type); + declarations.push_back(IFC4X3_ADD2_IfcRelConnectsPathElements_type); + declarations.push_back(IFC4X3_ADD2_IfcRelConnectsPorts_type); + declarations.push_back(IFC4X3_ADD2_IfcRelConnectsPortToElement_type); + declarations.push_back(IFC4X3_ADD2_IfcRelConnectsStructuralActivity_type); + declarations.push_back(IFC4X3_ADD2_IfcRelConnectsStructuralMember_type); + declarations.push_back(IFC4X3_ADD2_IfcRelConnectsWithEccentricity_type); + declarations.push_back(IFC4X3_ADD2_IfcRelConnectsWithRealizingElements_type); + declarations.push_back(IFC4X3_ADD2_IfcRelContainedInSpatialStructure_type); + declarations.push_back(IFC4X3_ADD2_IfcRelCoversBldgElements_type); + declarations.push_back(IFC4X3_ADD2_IfcRelCoversSpaces_type); + declarations.push_back(IFC4X3_ADD2_IfcRelDeclares_type); + declarations.push_back(IFC4X3_ADD2_IfcRelDecomposes_type); + declarations.push_back(IFC4X3_ADD2_IfcRelDefines_type); + declarations.push_back(IFC4X3_ADD2_IfcRelDefinesByObject_type); + declarations.push_back(IFC4X3_ADD2_IfcRelDefinesByProperties_type); + declarations.push_back(IFC4X3_ADD2_IfcRelDefinesByTemplate_type); + declarations.push_back(IFC4X3_ADD2_IfcRelDefinesByType_type); + declarations.push_back(IFC4X3_ADD2_IfcRelFillsElement_type); + declarations.push_back(IFC4X3_ADD2_IfcRelFlowControlElements_type); + declarations.push_back(IFC4X3_ADD2_IfcRelInterferesElements_type); + declarations.push_back(IFC4X3_ADD2_IfcRelNests_type); + declarations.push_back(IFC4X3_ADD2_IfcRelPositions_type); + declarations.push_back(IFC4X3_ADD2_IfcRelProjectsElement_type); + declarations.push_back(IFC4X3_ADD2_IfcRelReferencedInSpatialStructure_type); + declarations.push_back(IFC4X3_ADD2_IfcRelSequence_type); + declarations.push_back(IFC4X3_ADD2_IfcRelServicesBuildings_type); + declarations.push_back(IFC4X3_ADD2_IfcRelSpaceBoundary_type); + declarations.push_back(IFC4X3_ADD2_IfcRelSpaceBoundary1stLevel_type); + declarations.push_back(IFC4X3_ADD2_IfcRelSpaceBoundary2ndLevel_type); + declarations.push_back(IFC4X3_ADD2_IfcRelVoidsElement_type); + declarations.push_back(IFC4X3_ADD2_IfcReparametrisedCompositeCurveSegment_type); + declarations.push_back(IFC4X3_ADD2_IfcRepresentation_type); + declarations.push_back(IFC4X3_ADD2_IfcRepresentationContext_type); + declarations.push_back(IFC4X3_ADD2_IfcRepresentationItem_type); + declarations.push_back(IFC4X3_ADD2_IfcRepresentationMap_type); + declarations.push_back(IFC4X3_ADD2_IfcResource_type); + declarations.push_back(IFC4X3_ADD2_IfcResourceApprovalRelationship_type); + declarations.push_back(IFC4X3_ADD2_IfcResourceConstraintRelationship_type); + declarations.push_back(IFC4X3_ADD2_IfcResourceLevelRelationship_type); + declarations.push_back(IFC4X3_ADD2_IfcResourceObjectSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcResourceSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcResourceTime_type); + declarations.push_back(IFC4X3_ADD2_IfcRevolvedAreaSolid_type); + declarations.push_back(IFC4X3_ADD2_IfcRevolvedAreaSolidTapered_type); + declarations.push_back(IFC4X3_ADD2_IfcRightCircularCone_type); + declarations.push_back(IFC4X3_ADD2_IfcRightCircularCylinder_type); + declarations.push_back(IFC4X3_ADD2_IfcRigidOperation_type); + declarations.push_back(IFC4X3_ADD2_IfcRoad_type); + declarations.push_back(IFC4X3_ADD2_IfcRoadPart_type); + declarations.push_back(IFC4X3_ADD2_IfcRoadPartTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcRoadTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcRoleEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcRoof_type); + declarations.push_back(IFC4X3_ADD2_IfcRoofType_type); + declarations.push_back(IFC4X3_ADD2_IfcRoofTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcRoot_type); + declarations.push_back(IFC4X3_ADD2_IfcRotationalFrequencyMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcRotationalMassMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcRotationalStiffnessMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcRotationalStiffnessSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcRoundedRectangleProfileDef_type); + declarations.push_back(IFC4X3_ADD2_IfcSanitaryTerminal_type); + declarations.push_back(IFC4X3_ADD2_IfcSanitaryTerminalType_type); + declarations.push_back(IFC4X3_ADD2_IfcSanitaryTerminalTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcSchedulingTime_type); + declarations.push_back(IFC4X3_ADD2_IfcSeamCurve_type); + declarations.push_back(IFC4X3_ADD2_IfcSecondOrderPolynomialSpiral_type); + declarations.push_back(IFC4X3_ADD2_IfcSectionalAreaIntegralMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcSectionedSolid_type); + declarations.push_back(IFC4X3_ADD2_IfcSectionedSolidHorizontal_type); + declarations.push_back(IFC4X3_ADD2_IfcSectionedSpine_type); + declarations.push_back(IFC4X3_ADD2_IfcSectionedSurface_type); + declarations.push_back(IFC4X3_ADD2_IfcSectionModulusMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcSectionProperties_type); + declarations.push_back(IFC4X3_ADD2_IfcSectionReinforcementProperties_type); + declarations.push_back(IFC4X3_ADD2_IfcSectionTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcSegment_type); + declarations.push_back(IFC4X3_ADD2_IfcSegmentedReferenceCurve_type); + declarations.push_back(IFC4X3_ADD2_IfcSegmentIndexSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcSensor_type); + declarations.push_back(IFC4X3_ADD2_IfcSensorType_type); + declarations.push_back(IFC4X3_ADD2_IfcSensorTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcSequenceEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcSeventhOrderPolynomialSpiral_type); + declarations.push_back(IFC4X3_ADD2_IfcShadingDevice_type); + declarations.push_back(IFC4X3_ADD2_IfcShadingDeviceType_type); + declarations.push_back(IFC4X3_ADD2_IfcShadingDeviceTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcShapeAspect_type); + declarations.push_back(IFC4X3_ADD2_IfcShapeModel_type); + declarations.push_back(IFC4X3_ADD2_IfcShapeRepresentation_type); + declarations.push_back(IFC4X3_ADD2_IfcShearModulusMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcShell_type); + declarations.push_back(IFC4X3_ADD2_IfcShellBasedSurfaceModel_type); + declarations.push_back(IFC4X3_ADD2_IfcSign_type); + declarations.push_back(IFC4X3_ADD2_IfcSignal_type); + declarations.push_back(IFC4X3_ADD2_IfcSignalType_type); + declarations.push_back(IFC4X3_ADD2_IfcSignalTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcSignType_type); + declarations.push_back(IFC4X3_ADD2_IfcSignTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcSimpleProperty_type); + declarations.push_back(IFC4X3_ADD2_IfcSimplePropertyTemplate_type); + declarations.push_back(IFC4X3_ADD2_IfcSimplePropertyTemplateTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcSimpleValue_type); + declarations.push_back(IFC4X3_ADD2_IfcSineSpiral_type); + declarations.push_back(IFC4X3_ADD2_IfcSIPrefix_type); + declarations.push_back(IFC4X3_ADD2_IfcSite_type); + declarations.push_back(IFC4X3_ADD2_IfcSIUnit_type); + declarations.push_back(IFC4X3_ADD2_IfcSIUnitName_type); + declarations.push_back(IFC4X3_ADD2_IfcSizeSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcSlab_type); + declarations.push_back(IFC4X3_ADD2_IfcSlabType_type); + declarations.push_back(IFC4X3_ADD2_IfcSlabTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcSlippageConnectionCondition_type); + declarations.push_back(IFC4X3_ADD2_IfcSolarDevice_type); + declarations.push_back(IFC4X3_ADD2_IfcSolarDeviceType_type); + declarations.push_back(IFC4X3_ADD2_IfcSolarDeviceTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcSolidAngleMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcSolidModel_type); + declarations.push_back(IFC4X3_ADD2_IfcSolidOrShell_type); + declarations.push_back(IFC4X3_ADD2_IfcSoundPowerLevelMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcSoundPowerMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcSoundPressureLevelMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcSoundPressureMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcSpace_type); + declarations.push_back(IFC4X3_ADD2_IfcSpaceBoundarySelect_type); + declarations.push_back(IFC4X3_ADD2_IfcSpaceHeater_type); + declarations.push_back(IFC4X3_ADD2_IfcSpaceHeaterType_type); + declarations.push_back(IFC4X3_ADD2_IfcSpaceHeaterTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcSpaceType_type); + declarations.push_back(IFC4X3_ADD2_IfcSpaceTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcSpatialElement_type); + declarations.push_back(IFC4X3_ADD2_IfcSpatialElementType_type); + declarations.push_back(IFC4X3_ADD2_IfcSpatialReferenceSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcSpatialStructureElement_type); + declarations.push_back(IFC4X3_ADD2_IfcSpatialStructureElementType_type); + declarations.push_back(IFC4X3_ADD2_IfcSpatialZone_type); + declarations.push_back(IFC4X3_ADD2_IfcSpatialZoneType_type); + declarations.push_back(IFC4X3_ADD2_IfcSpatialZoneTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcSpecificHeatCapacityMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcSpecularExponent_type); + declarations.push_back(IFC4X3_ADD2_IfcSpecularHighlightSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcSpecularRoughness_type); + declarations.push_back(IFC4X3_ADD2_IfcSphere_type); + declarations.push_back(IFC4X3_ADD2_IfcSphericalSurface_type); + declarations.push_back(IFC4X3_ADD2_IfcSpiral_type); + declarations.push_back(IFC4X3_ADD2_IfcStackTerminal_type); + declarations.push_back(IFC4X3_ADD2_IfcStackTerminalType_type); + declarations.push_back(IFC4X3_ADD2_IfcStackTerminalTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcStair_type); + declarations.push_back(IFC4X3_ADD2_IfcStairFlight_type); + declarations.push_back(IFC4X3_ADD2_IfcStairFlightType_type); + declarations.push_back(IFC4X3_ADD2_IfcStairFlightTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcStairType_type); + declarations.push_back(IFC4X3_ADD2_IfcStairTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcStateEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcStrippedOptional_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralAction_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralActivity_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralActivityAssignmentSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralAnalysisModel_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralConnection_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralConnectionCondition_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralCurveAction_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralCurveActivityTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralCurveConnection_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralCurveMember_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralCurveMemberTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralCurveMemberVarying_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralCurveReaction_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralItem_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralLinearAction_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralLoad_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralLoadCase_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralLoadConfiguration_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralLoadGroup_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralLoadLinearForce_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralLoadOrResult_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralLoadPlanarForce_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralLoadSingleDisplacement_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralLoadSingleDisplacementDistortion_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralLoadSingleForce_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralLoadSingleForceWarping_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralLoadStatic_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralLoadTemperature_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralMember_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralPlanarAction_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralPointAction_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralPointConnection_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralPointReaction_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralReaction_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralResultGroup_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralSurfaceAction_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralSurfaceActivityTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralSurfaceConnection_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralSurfaceMember_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralSurfaceMemberTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralSurfaceMemberVarying_type); + declarations.push_back(IFC4X3_ADD2_IfcStructuralSurfaceReaction_type); + declarations.push_back(IFC4X3_ADD2_IfcStyledItem_type); + declarations.push_back(IFC4X3_ADD2_IfcStyledRepresentation_type); + declarations.push_back(IFC4X3_ADD2_IfcStyleModel_type); + declarations.push_back(IFC4X3_ADD2_IfcSubContractResource_type); + declarations.push_back(IFC4X3_ADD2_IfcSubContractResourceType_type); + declarations.push_back(IFC4X3_ADD2_IfcSubContractResourceTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcSubedge_type); + declarations.push_back(IFC4X3_ADD2_IfcSurface_type); + declarations.push_back(IFC4X3_ADD2_IfcSurfaceCurve_type); + declarations.push_back(IFC4X3_ADD2_IfcSurfaceCurveSweptAreaSolid_type); + declarations.push_back(IFC4X3_ADD2_IfcSurfaceFeature_type); + declarations.push_back(IFC4X3_ADD2_IfcSurfaceFeatureTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcSurfaceOfLinearExtrusion_type); + declarations.push_back(IFC4X3_ADD2_IfcSurfaceOfRevolution_type); + declarations.push_back(IFC4X3_ADD2_IfcSurfaceOrFaceSurface_type); + declarations.push_back(IFC4X3_ADD2_IfcSurfaceReinforcementArea_type); + declarations.push_back(IFC4X3_ADD2_IfcSurfaceSide_type); + declarations.push_back(IFC4X3_ADD2_IfcSurfaceStyle_type); + declarations.push_back(IFC4X3_ADD2_IfcSurfaceStyleElementSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcSurfaceStyleLighting_type); + declarations.push_back(IFC4X3_ADD2_IfcSurfaceStyleRefraction_type); + declarations.push_back(IFC4X3_ADD2_IfcSurfaceStyleRendering_type); + declarations.push_back(IFC4X3_ADD2_IfcSurfaceStyleShading_type); + declarations.push_back(IFC4X3_ADD2_IfcSurfaceStyleWithTextures_type); + declarations.push_back(IFC4X3_ADD2_IfcSurfaceTexture_type); + declarations.push_back(IFC4X3_ADD2_IfcSweptAreaSolid_type); + declarations.push_back(IFC4X3_ADD2_IfcSweptDiskSolid_type); + declarations.push_back(IFC4X3_ADD2_IfcSweptDiskSolidPolygonal_type); + declarations.push_back(IFC4X3_ADD2_IfcSweptSurface_type); + declarations.push_back(IFC4X3_ADD2_IfcSwitchingDevice_type); + declarations.push_back(IFC4X3_ADD2_IfcSwitchingDeviceType_type); + declarations.push_back(IFC4X3_ADD2_IfcSwitchingDeviceTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcSystem_type); + declarations.push_back(IFC4X3_ADD2_IfcSystemFurnitureElement_type); + declarations.push_back(IFC4X3_ADD2_IfcSystemFurnitureElementType_type); + declarations.push_back(IFC4X3_ADD2_IfcSystemFurnitureElementTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcTable_type); + declarations.push_back(IFC4X3_ADD2_IfcTableColumn_type); + declarations.push_back(IFC4X3_ADD2_IfcTableRow_type); + declarations.push_back(IFC4X3_ADD2_IfcTank_type); + declarations.push_back(IFC4X3_ADD2_IfcTankType_type); + declarations.push_back(IFC4X3_ADD2_IfcTankTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcTask_type); + declarations.push_back(IFC4X3_ADD2_IfcTaskDurationEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcTaskTime_type); + declarations.push_back(IFC4X3_ADD2_IfcTaskTimeRecurring_type); + declarations.push_back(IFC4X3_ADD2_IfcTaskType_type); + declarations.push_back(IFC4X3_ADD2_IfcTaskTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcTelecomAddress_type); + declarations.push_back(IFC4X3_ADD2_IfcTemperatureGradientMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcTemperatureRateOfChangeMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcTendon_type); + declarations.push_back(IFC4X3_ADD2_IfcTendonAnchor_type); + declarations.push_back(IFC4X3_ADD2_IfcTendonAnchorType_type); + declarations.push_back(IFC4X3_ADD2_IfcTendonAnchorTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcTendonConduit_type); + declarations.push_back(IFC4X3_ADD2_IfcTendonConduitType_type); + declarations.push_back(IFC4X3_ADD2_IfcTendonConduitTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcTendonType_type); + declarations.push_back(IFC4X3_ADD2_IfcTendonTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcTessellatedFaceSet_type); + declarations.push_back(IFC4X3_ADD2_IfcTessellatedItem_type); + declarations.push_back(IFC4X3_ADD2_IfcText_type); + declarations.push_back(IFC4X3_ADD2_IfcTextAlignment_type); + declarations.push_back(IFC4X3_ADD2_IfcTextDecoration_type); + declarations.push_back(IFC4X3_ADD2_IfcTextFontName_type); + declarations.push_back(IFC4X3_ADD2_IfcTextFontSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcTextLiteral_type); + declarations.push_back(IFC4X3_ADD2_IfcTextLiteralWithExtent_type); + declarations.push_back(IFC4X3_ADD2_IfcTextPath_type); + declarations.push_back(IFC4X3_ADD2_IfcTextStyle_type); + declarations.push_back(IFC4X3_ADD2_IfcTextStyleFontModel_type); + declarations.push_back(IFC4X3_ADD2_IfcTextStyleForDefinedFont_type); + declarations.push_back(IFC4X3_ADD2_IfcTextStyleTextModel_type); + declarations.push_back(IFC4X3_ADD2_IfcTextTransformation_type); + declarations.push_back(IFC4X3_ADD2_IfcTextureCoordinate_type); + declarations.push_back(IFC4X3_ADD2_IfcTextureCoordinateGenerator_type); + declarations.push_back(IFC4X3_ADD2_IfcTextureCoordinateIndices_type); + declarations.push_back(IFC4X3_ADD2_IfcTextureCoordinateIndicesWithVoids_type); + declarations.push_back(IFC4X3_ADD2_IfcTextureMap_type); + declarations.push_back(IFC4X3_ADD2_IfcTextureVertex_type); + declarations.push_back(IFC4X3_ADD2_IfcTextureVertexList_type); + declarations.push_back(IFC4X3_ADD2_IfcThermalAdmittanceMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcThermalConductivityMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcThermalExpansionCoefficientMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcThermalResistanceMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcThermalTransmittanceMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcThermodynamicTemperatureMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcThirdOrderPolynomialSpiral_type); + declarations.push_back(IFC4X3_ADD2_IfcTime_type); + declarations.push_back(IFC4X3_ADD2_IfcTimeMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcTimeOrRatioSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcTimePeriod_type); + declarations.push_back(IFC4X3_ADD2_IfcTimeSeries_type); + declarations.push_back(IFC4X3_ADD2_IfcTimeSeriesDataTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcTimeSeriesValue_type); + declarations.push_back(IFC4X3_ADD2_IfcTimeStamp_type); + declarations.push_back(IFC4X3_ADD2_IfcTopologicalRepresentationItem_type); + declarations.push_back(IFC4X3_ADD2_IfcTopologyRepresentation_type); + declarations.push_back(IFC4X3_ADD2_IfcToroidalSurface_type); + declarations.push_back(IFC4X3_ADD2_IfcTorqueMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcTrackElement_type); + declarations.push_back(IFC4X3_ADD2_IfcTrackElementType_type); + declarations.push_back(IFC4X3_ADD2_IfcTrackElementTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcTransformer_type); + declarations.push_back(IFC4X3_ADD2_IfcTransformerType_type); + declarations.push_back(IFC4X3_ADD2_IfcTransformerTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcTransitionCode_type); + declarations.push_back(IFC4X3_ADD2_IfcTranslationalStiffnessSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcTransportationDevice_type); + declarations.push_back(IFC4X3_ADD2_IfcTransportationDeviceType_type); + declarations.push_back(IFC4X3_ADD2_IfcTransportElement_type); + declarations.push_back(IFC4X3_ADD2_IfcTransportElementType_type); + declarations.push_back(IFC4X3_ADD2_IfcTransportElementTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcTrapeziumProfileDef_type); + declarations.push_back(IFC4X3_ADD2_IfcTriangulatedFaceSet_type); + declarations.push_back(IFC4X3_ADD2_IfcTriangulatedIrregularNetwork_type); + declarations.push_back(IFC4X3_ADD2_IfcTrimmedCurve_type); + declarations.push_back(IFC4X3_ADD2_IfcTrimmingPreference_type); + declarations.push_back(IFC4X3_ADD2_IfcTrimmingSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcTShapeProfileDef_type); + declarations.push_back(IFC4X3_ADD2_IfcTubeBundle_type); + declarations.push_back(IFC4X3_ADD2_IfcTubeBundleType_type); + declarations.push_back(IFC4X3_ADD2_IfcTubeBundleTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcTypeObject_type); + declarations.push_back(IFC4X3_ADD2_IfcTypeProcess_type); + declarations.push_back(IFC4X3_ADD2_IfcTypeProduct_type); + declarations.push_back(IFC4X3_ADD2_IfcTypeResource_type); + declarations.push_back(IFC4X3_ADD2_IfcUnit_type); + declarations.push_back(IFC4X3_ADD2_IfcUnitaryControlElement_type); + declarations.push_back(IFC4X3_ADD2_IfcUnitaryControlElementType_type); + declarations.push_back(IFC4X3_ADD2_IfcUnitaryControlElementTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcUnitaryEquipment_type); + declarations.push_back(IFC4X3_ADD2_IfcUnitaryEquipmentType_type); + declarations.push_back(IFC4X3_ADD2_IfcUnitaryEquipmentTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcUnitAssignment_type); + declarations.push_back(IFC4X3_ADD2_IfcUnitEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcURIReference_type); + declarations.push_back(IFC4X3_ADD2_IfcUShapeProfileDef_type); + declarations.push_back(IFC4X3_ADD2_IfcValue_type); + declarations.push_back(IFC4X3_ADD2_IfcValve_type); + declarations.push_back(IFC4X3_ADD2_IfcValveType_type); + declarations.push_back(IFC4X3_ADD2_IfcValveTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcVaporPermeabilityMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcVector_type); + declarations.push_back(IFC4X3_ADD2_IfcVectorOrDirection_type); + declarations.push_back(IFC4X3_ADD2_IfcVehicle_type); + declarations.push_back(IFC4X3_ADD2_IfcVehicleType_type); + declarations.push_back(IFC4X3_ADD2_IfcVehicleTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcVertex_type); + declarations.push_back(IFC4X3_ADD2_IfcVertexLoop_type); + declarations.push_back(IFC4X3_ADD2_IfcVertexPoint_type); + declarations.push_back(IFC4X3_ADD2_IfcVibrationDamper_type); + declarations.push_back(IFC4X3_ADD2_IfcVibrationDamperType_type); + declarations.push_back(IFC4X3_ADD2_IfcVibrationDamperTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcVibrationIsolator_type); + declarations.push_back(IFC4X3_ADD2_IfcVibrationIsolatorType_type); + declarations.push_back(IFC4X3_ADD2_IfcVibrationIsolatorTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcVirtualElement_type); + declarations.push_back(IFC4X3_ADD2_IfcVirtualElementTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcVirtualGridIntersection_type); + declarations.push_back(IFC4X3_ADD2_IfcVoidingFeature_type); + declarations.push_back(IFC4X3_ADD2_IfcVoidingFeatureTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcVolumeMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcVolumetricFlowRateMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcWall_type); + declarations.push_back(IFC4X3_ADD2_IfcWallStandardCase_type); + declarations.push_back(IFC4X3_ADD2_IfcWallType_type); + declarations.push_back(IFC4X3_ADD2_IfcWallTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcWarpingConstantMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcWarpingMomentMeasure_type); + declarations.push_back(IFC4X3_ADD2_IfcWarpingStiffnessSelect_type); + declarations.push_back(IFC4X3_ADD2_IfcWasteTerminal_type); + declarations.push_back(IFC4X3_ADD2_IfcWasteTerminalType_type); + declarations.push_back(IFC4X3_ADD2_IfcWasteTerminalTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcWellKnownText_type); + declarations.push_back(IFC4X3_ADD2_IfcWellKnownTextLiteral_type); + declarations.push_back(IFC4X3_ADD2_IfcWindow_type); + declarations.push_back(IFC4X3_ADD2_IfcWindowLiningProperties_type); + declarations.push_back(IFC4X3_ADD2_IfcWindowPanelOperationEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcWindowPanelPositionEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcWindowPanelProperties_type); + declarations.push_back(IFC4X3_ADD2_IfcWindowType_type); + declarations.push_back(IFC4X3_ADD2_IfcWindowTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcWindowTypePartitioningEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcWorkCalendar_type); + declarations.push_back(IFC4X3_ADD2_IfcWorkCalendarTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcWorkControl_type); + declarations.push_back(IFC4X3_ADD2_IfcWorkPlan_type); + declarations.push_back(IFC4X3_ADD2_IfcWorkPlanTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcWorkSchedule_type); + declarations.push_back(IFC4X3_ADD2_IfcWorkScheduleTypeEnum_type); + declarations.push_back(IFC4X3_ADD2_IfcWorkTime_type); + declarations.push_back(IFC4X3_ADD2_IfcZone_type); + declarations.push_back(IFC4X3_ADD2_IfcZShapeProfileDef_type); + return new schema_definition("IFC4X3_ADD2", declarations, new IFC4X3_ADD2_instance_factory()); +} + + +#if defined(__clang__) +#elif defined(__GNUC__) || defined(__GNUG__) +#pragma GCC pop_options +#elif defined(_MSC_VER) +#pragma optimize("", on) +#endif + +static std::unique_ptr schema; + +void Ifc4x3_add2::clear_schema() { + schema.reset(); +} + +const schema_definition& Ifc4x3_add2::get_schema() { + if (!schema) { + schema.reset(IFC4X3_ADD2_populate_schema()); + } + return *schema; +} + diff --git a/src/ifcparse/Ifc4x3_add2.cpp b/src/ifcparse/Ifc4x3_add2.cpp new file mode 100644 index 0000000000..6050cfb69d --- /dev/null +++ b/src/ifcparse/Ifc4x3_add2.cpp @@ -0,0 +1,23484 @@ +/******************************************************************************** + * * + * 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/Ifc4x3_add2.h" +#include "../ifcparse/IfcSchema.h" +#include "../ifcparse/IfcException.h" +#include "../ifcparse/IfcWrite.h" + +#include + +const char* const Ifc4x3_add2::Identifier = "IFC4X3_ADD2"; + +using namespace IfcParse; +using namespace IfcWrite; + +// External definitions +extern entity* IFC4X3_ADD2_IfcActionRequest_type; +extern entity* IFC4X3_ADD2_IfcActor_type; +extern entity* IFC4X3_ADD2_IfcActorRole_type; +extern entity* IFC4X3_ADD2_IfcActuator_type; +extern entity* IFC4X3_ADD2_IfcActuatorType_type; +extern entity* IFC4X3_ADD2_IfcAddress_type; +extern entity* IFC4X3_ADD2_IfcAdvancedBrep_type; +extern entity* IFC4X3_ADD2_IfcAdvancedBrepWithVoids_type; +extern entity* IFC4X3_ADD2_IfcAdvancedFace_type; +extern entity* IFC4X3_ADD2_IfcAirTerminal_type; +extern entity* IFC4X3_ADD2_IfcAirTerminalBox_type; +extern entity* IFC4X3_ADD2_IfcAirTerminalBoxType_type; +extern entity* IFC4X3_ADD2_IfcAirTerminalType_type; +extern entity* IFC4X3_ADD2_IfcAirToAirHeatRecovery_type; +extern entity* IFC4X3_ADD2_IfcAirToAirHeatRecoveryType_type; +extern entity* IFC4X3_ADD2_IfcAlarm_type; +extern entity* IFC4X3_ADD2_IfcAlarmType_type; +extern entity* IFC4X3_ADD2_IfcAlignment_type; +extern entity* IFC4X3_ADD2_IfcAlignmentCant_type; +extern entity* IFC4X3_ADD2_IfcAlignmentCantSegment_type; +extern entity* IFC4X3_ADD2_IfcAlignmentHorizontal_type; +extern entity* IFC4X3_ADD2_IfcAlignmentHorizontalSegment_type; +extern entity* IFC4X3_ADD2_IfcAlignmentParameterSegment_type; +extern entity* IFC4X3_ADD2_IfcAlignmentSegment_type; +extern entity* IFC4X3_ADD2_IfcAlignmentVertical_type; +extern entity* IFC4X3_ADD2_IfcAlignmentVerticalSegment_type; +extern entity* IFC4X3_ADD2_IfcAnnotation_type; +extern entity* IFC4X3_ADD2_IfcAnnotationFillArea_type; +extern entity* IFC4X3_ADD2_IfcApplication_type; +extern entity* IFC4X3_ADD2_IfcAppliedValue_type; +extern entity* IFC4X3_ADD2_IfcApproval_type; +extern entity* IFC4X3_ADD2_IfcApprovalRelationship_type; +extern entity* IFC4X3_ADD2_IfcArbitraryClosedProfileDef_type; +extern entity* IFC4X3_ADD2_IfcArbitraryOpenProfileDef_type; +extern entity* IFC4X3_ADD2_IfcArbitraryProfileDefWithVoids_type; +extern entity* IFC4X3_ADD2_IfcAsset_type; +extern entity* IFC4X3_ADD2_IfcAsymmetricIShapeProfileDef_type; +extern entity* IFC4X3_ADD2_IfcAudioVisualAppliance_type; +extern entity* IFC4X3_ADD2_IfcAudioVisualApplianceType_type; +extern entity* IFC4X3_ADD2_IfcAxis1Placement_type; +extern entity* IFC4X3_ADD2_IfcAxis2Placement2D_type; +extern entity* IFC4X3_ADD2_IfcAxis2Placement3D_type; +extern entity* IFC4X3_ADD2_IfcAxis2PlacementLinear_type; +extern entity* IFC4X3_ADD2_IfcBSplineCurve_type; +extern entity* IFC4X3_ADD2_IfcBSplineCurveWithKnots_type; +extern entity* IFC4X3_ADD2_IfcBSplineSurface_type; +extern entity* IFC4X3_ADD2_IfcBSplineSurfaceWithKnots_type; +extern entity* IFC4X3_ADD2_IfcBeam_type; +extern entity* IFC4X3_ADD2_IfcBeamType_type; +extern entity* IFC4X3_ADD2_IfcBearing_type; +extern entity* IFC4X3_ADD2_IfcBearingType_type; +extern entity* IFC4X3_ADD2_IfcBlobTexture_type; +extern entity* IFC4X3_ADD2_IfcBlock_type; +extern entity* IFC4X3_ADD2_IfcBoiler_type; +extern entity* IFC4X3_ADD2_IfcBoilerType_type; +extern entity* IFC4X3_ADD2_IfcBooleanClippingResult_type; +extern entity* IFC4X3_ADD2_IfcBooleanResult_type; +extern entity* IFC4X3_ADD2_IfcBorehole_type; +extern entity* IFC4X3_ADD2_IfcBoundaryCondition_type; +extern entity* IFC4X3_ADD2_IfcBoundaryCurve_type; +extern entity* IFC4X3_ADD2_IfcBoundaryEdgeCondition_type; +extern entity* IFC4X3_ADD2_IfcBoundaryFaceCondition_type; +extern entity* IFC4X3_ADD2_IfcBoundaryNodeCondition_type; +extern entity* IFC4X3_ADD2_IfcBoundaryNodeConditionWarping_type; +extern entity* IFC4X3_ADD2_IfcBoundedCurve_type; +extern entity* IFC4X3_ADD2_IfcBoundedSurface_type; +extern entity* IFC4X3_ADD2_IfcBoundingBox_type; +extern entity* IFC4X3_ADD2_IfcBoxedHalfSpace_type; +extern entity* IFC4X3_ADD2_IfcBridge_type; +extern entity* IFC4X3_ADD2_IfcBridgePart_type; +extern entity* IFC4X3_ADD2_IfcBuilding_type; +extern entity* IFC4X3_ADD2_IfcBuildingElementPart_type; +extern entity* IFC4X3_ADD2_IfcBuildingElementPartType_type; +extern entity* IFC4X3_ADD2_IfcBuildingElementProxy_type; +extern entity* IFC4X3_ADD2_IfcBuildingElementProxyType_type; +extern entity* IFC4X3_ADD2_IfcBuildingStorey_type; +extern entity* IFC4X3_ADD2_IfcBuildingSystem_type; +extern entity* IFC4X3_ADD2_IfcBuiltElement_type; +extern entity* IFC4X3_ADD2_IfcBuiltElementType_type; +extern entity* IFC4X3_ADD2_IfcBuiltSystem_type; +extern entity* IFC4X3_ADD2_IfcBurner_type; +extern entity* IFC4X3_ADD2_IfcBurnerType_type; +extern entity* IFC4X3_ADD2_IfcCShapeProfileDef_type; +extern entity* IFC4X3_ADD2_IfcCableCarrierFitting_type; +extern entity* IFC4X3_ADD2_IfcCableCarrierFittingType_type; +extern entity* IFC4X3_ADD2_IfcCableCarrierSegment_type; +extern entity* IFC4X3_ADD2_IfcCableCarrierSegmentType_type; +extern entity* IFC4X3_ADD2_IfcCableFitting_type; +extern entity* IFC4X3_ADD2_IfcCableFittingType_type; +extern entity* IFC4X3_ADD2_IfcCableSegment_type; +extern entity* IFC4X3_ADD2_IfcCableSegmentType_type; +extern entity* IFC4X3_ADD2_IfcCaissonFoundation_type; +extern entity* IFC4X3_ADD2_IfcCaissonFoundationType_type; +extern entity* IFC4X3_ADD2_IfcCartesianPoint_type; +extern entity* IFC4X3_ADD2_IfcCartesianPointList_type; +extern entity* IFC4X3_ADD2_IfcCartesianPointList2D_type; +extern entity* IFC4X3_ADD2_IfcCartesianPointList3D_type; +extern entity* IFC4X3_ADD2_IfcCartesianTransformationOperator_type; +extern entity* IFC4X3_ADD2_IfcCartesianTransformationOperator2D_type; +extern entity* IFC4X3_ADD2_IfcCartesianTransformationOperator2DnonUniform_type; +extern entity* IFC4X3_ADD2_IfcCartesianTransformationOperator3D_type; +extern entity* IFC4X3_ADD2_IfcCartesianTransformationOperator3DnonUniform_type; +extern entity* IFC4X3_ADD2_IfcCenterLineProfileDef_type; +extern entity* IFC4X3_ADD2_IfcChiller_type; +extern entity* IFC4X3_ADD2_IfcChillerType_type; +extern entity* IFC4X3_ADD2_IfcChimney_type; +extern entity* IFC4X3_ADD2_IfcChimneyType_type; +extern entity* IFC4X3_ADD2_IfcCircle_type; +extern entity* IFC4X3_ADD2_IfcCircleHollowProfileDef_type; +extern entity* IFC4X3_ADD2_IfcCircleProfileDef_type; +extern entity* IFC4X3_ADD2_IfcCivilElement_type; +extern entity* IFC4X3_ADD2_IfcCivilElementType_type; +extern entity* IFC4X3_ADD2_IfcClassification_type; +extern entity* IFC4X3_ADD2_IfcClassificationReference_type; +extern entity* IFC4X3_ADD2_IfcClosedShell_type; +extern entity* IFC4X3_ADD2_IfcClothoid_type; +extern entity* IFC4X3_ADD2_IfcCoil_type; +extern entity* IFC4X3_ADD2_IfcCoilType_type; +extern entity* IFC4X3_ADD2_IfcColourRgb_type; +extern entity* IFC4X3_ADD2_IfcColourRgbList_type; +extern entity* IFC4X3_ADD2_IfcColourSpecification_type; +extern entity* IFC4X3_ADD2_IfcColumn_type; +extern entity* IFC4X3_ADD2_IfcColumnType_type; +extern entity* IFC4X3_ADD2_IfcCommunicationsAppliance_type; +extern entity* IFC4X3_ADD2_IfcCommunicationsApplianceType_type; +extern entity* IFC4X3_ADD2_IfcComplexProperty_type; +extern entity* IFC4X3_ADD2_IfcComplexPropertyTemplate_type; +extern entity* IFC4X3_ADD2_IfcCompositeCurve_type; +extern entity* IFC4X3_ADD2_IfcCompositeCurveOnSurface_type; +extern entity* IFC4X3_ADD2_IfcCompositeCurveSegment_type; +extern entity* IFC4X3_ADD2_IfcCompositeProfileDef_type; +extern entity* IFC4X3_ADD2_IfcCompressor_type; +extern entity* IFC4X3_ADD2_IfcCompressorType_type; +extern entity* IFC4X3_ADD2_IfcCondenser_type; +extern entity* IFC4X3_ADD2_IfcCondenserType_type; +extern entity* IFC4X3_ADD2_IfcConic_type; +extern entity* IFC4X3_ADD2_IfcConnectedFaceSet_type; +extern entity* IFC4X3_ADD2_IfcConnectionCurveGeometry_type; +extern entity* IFC4X3_ADD2_IfcConnectionGeometry_type; +extern entity* IFC4X3_ADD2_IfcConnectionPointEccentricity_type; +extern entity* IFC4X3_ADD2_IfcConnectionPointGeometry_type; +extern entity* IFC4X3_ADD2_IfcConnectionSurfaceGeometry_type; +extern entity* IFC4X3_ADD2_IfcConnectionVolumeGeometry_type; +extern entity* IFC4X3_ADD2_IfcConstraint_type; +extern entity* IFC4X3_ADD2_IfcConstructionEquipmentResource_type; +extern entity* IFC4X3_ADD2_IfcConstructionEquipmentResourceType_type; +extern entity* IFC4X3_ADD2_IfcConstructionMaterialResource_type; +extern entity* IFC4X3_ADD2_IfcConstructionMaterialResourceType_type; +extern entity* IFC4X3_ADD2_IfcConstructionProductResource_type; +extern entity* IFC4X3_ADD2_IfcConstructionProductResourceType_type; +extern entity* IFC4X3_ADD2_IfcConstructionResource_type; +extern entity* IFC4X3_ADD2_IfcConstructionResourceType_type; +extern entity* IFC4X3_ADD2_IfcContext_type; +extern entity* IFC4X3_ADD2_IfcContextDependentUnit_type; +extern entity* IFC4X3_ADD2_IfcControl_type; +extern entity* IFC4X3_ADD2_IfcController_type; +extern entity* IFC4X3_ADD2_IfcControllerType_type; +extern entity* IFC4X3_ADD2_IfcConversionBasedUnit_type; +extern entity* IFC4X3_ADD2_IfcConversionBasedUnitWithOffset_type; +extern entity* IFC4X3_ADD2_IfcConveyorSegment_type; +extern entity* IFC4X3_ADD2_IfcConveyorSegmentType_type; +extern entity* IFC4X3_ADD2_IfcCooledBeam_type; +extern entity* IFC4X3_ADD2_IfcCooledBeamType_type; +extern entity* IFC4X3_ADD2_IfcCoolingTower_type; +extern entity* IFC4X3_ADD2_IfcCoolingTowerType_type; +extern entity* IFC4X3_ADD2_IfcCoordinateOperation_type; +extern entity* IFC4X3_ADD2_IfcCoordinateReferenceSystem_type; +extern entity* IFC4X3_ADD2_IfcCosineSpiral_type; +extern entity* IFC4X3_ADD2_IfcCostItem_type; +extern entity* IFC4X3_ADD2_IfcCostSchedule_type; +extern entity* IFC4X3_ADD2_IfcCostValue_type; +extern entity* IFC4X3_ADD2_IfcCourse_type; +extern entity* IFC4X3_ADD2_IfcCourseType_type; +extern entity* IFC4X3_ADD2_IfcCovering_type; +extern entity* IFC4X3_ADD2_IfcCoveringType_type; +extern entity* IFC4X3_ADD2_IfcCrewResource_type; +extern entity* IFC4X3_ADD2_IfcCrewResourceType_type; +extern entity* IFC4X3_ADD2_IfcCsgPrimitive3D_type; +extern entity* IFC4X3_ADD2_IfcCsgSolid_type; +extern entity* IFC4X3_ADD2_IfcCurrencyRelationship_type; +extern entity* IFC4X3_ADD2_IfcCurtainWall_type; +extern entity* IFC4X3_ADD2_IfcCurtainWallType_type; +extern entity* IFC4X3_ADD2_IfcCurve_type; +extern entity* IFC4X3_ADD2_IfcCurveBoundedPlane_type; +extern entity* IFC4X3_ADD2_IfcCurveBoundedSurface_type; +extern entity* IFC4X3_ADD2_IfcCurveSegment_type; +extern entity* IFC4X3_ADD2_IfcCurveStyle_type; +extern entity* IFC4X3_ADD2_IfcCurveStyleFont_type; +extern entity* IFC4X3_ADD2_IfcCurveStyleFontAndScaling_type; +extern entity* IFC4X3_ADD2_IfcCurveStyleFontPattern_type; +extern entity* IFC4X3_ADD2_IfcCylindricalSurface_type; +extern entity* IFC4X3_ADD2_IfcDamper_type; +extern entity* IFC4X3_ADD2_IfcDamperType_type; +extern entity* IFC4X3_ADD2_IfcDeepFoundation_type; +extern entity* IFC4X3_ADD2_IfcDeepFoundationType_type; +extern entity* IFC4X3_ADD2_IfcDerivedProfileDef_type; +extern entity* IFC4X3_ADD2_IfcDerivedUnit_type; +extern entity* IFC4X3_ADD2_IfcDerivedUnitElement_type; +extern entity* IFC4X3_ADD2_IfcDimensionalExponents_type; +extern entity* IFC4X3_ADD2_IfcDirection_type; +extern entity* IFC4X3_ADD2_IfcDirectrixCurveSweptAreaSolid_type; +extern entity* IFC4X3_ADD2_IfcDirectrixDerivedReferenceSweptAreaSolid_type; +extern entity* IFC4X3_ADD2_IfcDiscreteAccessory_type; +extern entity* IFC4X3_ADD2_IfcDiscreteAccessoryType_type; +extern entity* IFC4X3_ADD2_IfcDistributionBoard_type; +extern entity* IFC4X3_ADD2_IfcDistributionBoardType_type; +extern entity* IFC4X3_ADD2_IfcDistributionChamberElement_type; +extern entity* IFC4X3_ADD2_IfcDistributionChamberElementType_type; +extern entity* IFC4X3_ADD2_IfcDistributionCircuit_type; +extern entity* IFC4X3_ADD2_IfcDistributionControlElement_type; +extern entity* IFC4X3_ADD2_IfcDistributionControlElementType_type; +extern entity* IFC4X3_ADD2_IfcDistributionElement_type; +extern entity* IFC4X3_ADD2_IfcDistributionElementType_type; +extern entity* IFC4X3_ADD2_IfcDistributionFlowElement_type; +extern entity* IFC4X3_ADD2_IfcDistributionFlowElementType_type; +extern entity* IFC4X3_ADD2_IfcDistributionPort_type; +extern entity* IFC4X3_ADD2_IfcDistributionSystem_type; +extern entity* IFC4X3_ADD2_IfcDocumentInformation_type; +extern entity* IFC4X3_ADD2_IfcDocumentInformationRelationship_type; +extern entity* IFC4X3_ADD2_IfcDocumentReference_type; +extern entity* IFC4X3_ADD2_IfcDoor_type; +extern entity* IFC4X3_ADD2_IfcDoorLiningProperties_type; +extern entity* IFC4X3_ADD2_IfcDoorPanelProperties_type; +extern entity* IFC4X3_ADD2_IfcDoorType_type; +extern entity* IFC4X3_ADD2_IfcDraughtingPreDefinedColour_type; +extern entity* IFC4X3_ADD2_IfcDraughtingPreDefinedCurveFont_type; +extern entity* IFC4X3_ADD2_IfcDuctFitting_type; +extern entity* IFC4X3_ADD2_IfcDuctFittingType_type; +extern entity* IFC4X3_ADD2_IfcDuctSegment_type; +extern entity* IFC4X3_ADD2_IfcDuctSegmentType_type; +extern entity* IFC4X3_ADD2_IfcDuctSilencer_type; +extern entity* IFC4X3_ADD2_IfcDuctSilencerType_type; +extern entity* IFC4X3_ADD2_IfcEarthworksCut_type; +extern entity* IFC4X3_ADD2_IfcEarthworksElement_type; +extern entity* IFC4X3_ADD2_IfcEarthworksFill_type; +extern entity* IFC4X3_ADD2_IfcEdge_type; +extern entity* IFC4X3_ADD2_IfcEdgeCurve_type; +extern entity* IFC4X3_ADD2_IfcEdgeLoop_type; +extern entity* IFC4X3_ADD2_IfcElectricAppliance_type; +extern entity* IFC4X3_ADD2_IfcElectricApplianceType_type; +extern entity* IFC4X3_ADD2_IfcElectricDistributionBoard_type; +extern entity* IFC4X3_ADD2_IfcElectricDistributionBoardType_type; +extern entity* IFC4X3_ADD2_IfcElectricFlowStorageDevice_type; +extern entity* IFC4X3_ADD2_IfcElectricFlowStorageDeviceType_type; +extern entity* IFC4X3_ADD2_IfcElectricFlowTreatmentDevice_type; +extern entity* IFC4X3_ADD2_IfcElectricFlowTreatmentDeviceType_type; +extern entity* IFC4X3_ADD2_IfcElectricGenerator_type; +extern entity* IFC4X3_ADD2_IfcElectricGeneratorType_type; +extern entity* IFC4X3_ADD2_IfcElectricMotor_type; +extern entity* IFC4X3_ADD2_IfcElectricMotorType_type; +extern entity* IFC4X3_ADD2_IfcElectricTimeControl_type; +extern entity* IFC4X3_ADD2_IfcElectricTimeControlType_type; +extern entity* IFC4X3_ADD2_IfcElement_type; +extern entity* IFC4X3_ADD2_IfcElementAssembly_type; +extern entity* IFC4X3_ADD2_IfcElementAssemblyType_type; +extern entity* IFC4X3_ADD2_IfcElementComponent_type; +extern entity* IFC4X3_ADD2_IfcElementComponentType_type; +extern entity* IFC4X3_ADD2_IfcElementQuantity_type; +extern entity* IFC4X3_ADD2_IfcElementType_type; +extern entity* IFC4X3_ADD2_IfcElementarySurface_type; +extern entity* IFC4X3_ADD2_IfcEllipse_type; +extern entity* IFC4X3_ADD2_IfcEllipseProfileDef_type; +extern entity* IFC4X3_ADD2_IfcEnergyConversionDevice_type; +extern entity* IFC4X3_ADD2_IfcEnergyConversionDeviceType_type; +extern entity* IFC4X3_ADD2_IfcEngine_type; +extern entity* IFC4X3_ADD2_IfcEngineType_type; +extern entity* IFC4X3_ADD2_IfcEvaporativeCooler_type; +extern entity* IFC4X3_ADD2_IfcEvaporativeCoolerType_type; +extern entity* IFC4X3_ADD2_IfcEvaporator_type; +extern entity* IFC4X3_ADD2_IfcEvaporatorType_type; +extern entity* IFC4X3_ADD2_IfcEvent_type; +extern entity* IFC4X3_ADD2_IfcEventTime_type; +extern entity* IFC4X3_ADD2_IfcEventType_type; +extern entity* IFC4X3_ADD2_IfcExtendedProperties_type; +extern entity* IFC4X3_ADD2_IfcExternalInformation_type; +extern entity* IFC4X3_ADD2_IfcExternalReference_type; +extern entity* IFC4X3_ADD2_IfcExternalReferenceRelationship_type; +extern entity* IFC4X3_ADD2_IfcExternalSpatialElement_type; +extern entity* IFC4X3_ADD2_IfcExternalSpatialStructureElement_type; +extern entity* IFC4X3_ADD2_IfcExternallyDefinedHatchStyle_type; +extern entity* IFC4X3_ADD2_IfcExternallyDefinedSurfaceStyle_type; +extern entity* IFC4X3_ADD2_IfcExternallyDefinedTextFont_type; +extern entity* IFC4X3_ADD2_IfcExtrudedAreaSolid_type; +extern entity* IFC4X3_ADD2_IfcExtrudedAreaSolidTapered_type; +extern entity* IFC4X3_ADD2_IfcFace_type; +extern entity* IFC4X3_ADD2_IfcFaceBasedSurfaceModel_type; +extern entity* IFC4X3_ADD2_IfcFaceBound_type; +extern entity* IFC4X3_ADD2_IfcFaceOuterBound_type; +extern entity* IFC4X3_ADD2_IfcFaceSurface_type; +extern entity* IFC4X3_ADD2_IfcFacetedBrep_type; +extern entity* IFC4X3_ADD2_IfcFacetedBrepWithVoids_type; +extern entity* IFC4X3_ADD2_IfcFacility_type; +extern entity* IFC4X3_ADD2_IfcFacilityPart_type; +extern entity* IFC4X3_ADD2_IfcFacilityPartCommon_type; +extern entity* IFC4X3_ADD2_IfcFailureConnectionCondition_type; +extern entity* IFC4X3_ADD2_IfcFan_type; +extern entity* IFC4X3_ADD2_IfcFanType_type; +extern entity* IFC4X3_ADD2_IfcFastener_type; +extern entity* IFC4X3_ADD2_IfcFastenerType_type; +extern entity* IFC4X3_ADD2_IfcFeatureElement_type; +extern entity* IFC4X3_ADD2_IfcFeatureElementAddition_type; +extern entity* IFC4X3_ADD2_IfcFeatureElementSubtraction_type; +extern entity* IFC4X3_ADD2_IfcFillAreaStyle_type; +extern entity* IFC4X3_ADD2_IfcFillAreaStyleHatching_type; +extern entity* IFC4X3_ADD2_IfcFillAreaStyleTiles_type; +extern entity* IFC4X3_ADD2_IfcFilter_type; +extern entity* IFC4X3_ADD2_IfcFilterType_type; +extern entity* IFC4X3_ADD2_IfcFireSuppressionTerminal_type; +extern entity* IFC4X3_ADD2_IfcFireSuppressionTerminalType_type; +extern entity* IFC4X3_ADD2_IfcFixedReferenceSweptAreaSolid_type; +extern entity* IFC4X3_ADD2_IfcFlowController_type; +extern entity* IFC4X3_ADD2_IfcFlowControllerType_type; +extern entity* IFC4X3_ADD2_IfcFlowFitting_type; +extern entity* IFC4X3_ADD2_IfcFlowFittingType_type; +extern entity* IFC4X3_ADD2_IfcFlowInstrument_type; +extern entity* IFC4X3_ADD2_IfcFlowInstrumentType_type; +extern entity* IFC4X3_ADD2_IfcFlowMeter_type; +extern entity* IFC4X3_ADD2_IfcFlowMeterType_type; +extern entity* IFC4X3_ADD2_IfcFlowMovingDevice_type; +extern entity* IFC4X3_ADD2_IfcFlowMovingDeviceType_type; +extern entity* IFC4X3_ADD2_IfcFlowSegment_type; +extern entity* IFC4X3_ADD2_IfcFlowSegmentType_type; +extern entity* IFC4X3_ADD2_IfcFlowStorageDevice_type; +extern entity* IFC4X3_ADD2_IfcFlowStorageDeviceType_type; +extern entity* IFC4X3_ADD2_IfcFlowTerminal_type; +extern entity* IFC4X3_ADD2_IfcFlowTerminalType_type; +extern entity* IFC4X3_ADD2_IfcFlowTreatmentDevice_type; +extern entity* IFC4X3_ADD2_IfcFlowTreatmentDeviceType_type; +extern entity* IFC4X3_ADD2_IfcFooting_type; +extern entity* IFC4X3_ADD2_IfcFootingType_type; +extern entity* IFC4X3_ADD2_IfcFurnishingElement_type; +extern entity* IFC4X3_ADD2_IfcFurnishingElementType_type; +extern entity* IFC4X3_ADD2_IfcFurniture_type; +extern entity* IFC4X3_ADD2_IfcFurnitureType_type; +extern entity* IFC4X3_ADD2_IfcGeographicCRS_type; +extern entity* IFC4X3_ADD2_IfcGeographicElement_type; +extern entity* IFC4X3_ADD2_IfcGeographicElementType_type; +extern entity* IFC4X3_ADD2_IfcGeometricCurveSet_type; +extern entity* IFC4X3_ADD2_IfcGeometricRepresentationContext_type; +extern entity* IFC4X3_ADD2_IfcGeometricRepresentationItem_type; +extern entity* IFC4X3_ADD2_IfcGeometricRepresentationSubContext_type; +extern entity* IFC4X3_ADD2_IfcGeometricSet_type; +extern entity* IFC4X3_ADD2_IfcGeomodel_type; +extern entity* IFC4X3_ADD2_IfcGeoslice_type; +extern entity* IFC4X3_ADD2_IfcGeotechnicalAssembly_type; +extern entity* IFC4X3_ADD2_IfcGeotechnicalElement_type; +extern entity* IFC4X3_ADD2_IfcGeotechnicalStratum_type; +extern entity* IFC4X3_ADD2_IfcGradientCurve_type; +extern entity* IFC4X3_ADD2_IfcGrid_type; +extern entity* IFC4X3_ADD2_IfcGridAxis_type; +extern entity* IFC4X3_ADD2_IfcGridPlacement_type; +extern entity* IFC4X3_ADD2_IfcGroup_type; +extern entity* IFC4X3_ADD2_IfcHalfSpaceSolid_type; +extern entity* IFC4X3_ADD2_IfcHeatExchanger_type; +extern entity* IFC4X3_ADD2_IfcHeatExchangerType_type; +extern entity* IFC4X3_ADD2_IfcHumidifier_type; +extern entity* IFC4X3_ADD2_IfcHumidifierType_type; +extern entity* IFC4X3_ADD2_IfcIShapeProfileDef_type; +extern entity* IFC4X3_ADD2_IfcImageTexture_type; +extern entity* IFC4X3_ADD2_IfcImpactProtectionDevice_type; +extern entity* IFC4X3_ADD2_IfcImpactProtectionDeviceType_type; +extern entity* IFC4X3_ADD2_IfcIndexedColourMap_type; +extern entity* IFC4X3_ADD2_IfcIndexedPolyCurve_type; +extern entity* IFC4X3_ADD2_IfcIndexedPolygonalFace_type; +extern entity* IFC4X3_ADD2_IfcIndexedPolygonalFaceWithVoids_type; +extern entity* IFC4X3_ADD2_IfcIndexedPolygonalTextureMap_type; +extern entity* IFC4X3_ADD2_IfcIndexedTextureMap_type; +extern entity* IFC4X3_ADD2_IfcIndexedTriangleTextureMap_type; +extern entity* IFC4X3_ADD2_IfcInterceptor_type; +extern entity* IFC4X3_ADD2_IfcInterceptorType_type; +extern entity* IFC4X3_ADD2_IfcIntersectionCurve_type; +extern entity* IFC4X3_ADD2_IfcInventory_type; +extern entity* IFC4X3_ADD2_IfcIrregularTimeSeries_type; +extern entity* IFC4X3_ADD2_IfcIrregularTimeSeriesValue_type; +extern entity* IFC4X3_ADD2_IfcJunctionBox_type; +extern entity* IFC4X3_ADD2_IfcJunctionBoxType_type; +extern entity* IFC4X3_ADD2_IfcKerb_type; +extern entity* IFC4X3_ADD2_IfcKerbType_type; +extern entity* IFC4X3_ADD2_IfcLShapeProfileDef_type; +extern entity* IFC4X3_ADD2_IfcLaborResource_type; +extern entity* IFC4X3_ADD2_IfcLaborResourceType_type; +extern entity* IFC4X3_ADD2_IfcLagTime_type; +extern entity* IFC4X3_ADD2_IfcLamp_type; +extern entity* IFC4X3_ADD2_IfcLampType_type; +extern entity* IFC4X3_ADD2_IfcLibraryInformation_type; +extern entity* IFC4X3_ADD2_IfcLibraryReference_type; +extern entity* IFC4X3_ADD2_IfcLightDistributionData_type; +extern entity* IFC4X3_ADD2_IfcLightFixture_type; +extern entity* IFC4X3_ADD2_IfcLightFixtureType_type; +extern entity* IFC4X3_ADD2_IfcLightIntensityDistribution_type; +extern entity* IFC4X3_ADD2_IfcLightSource_type; +extern entity* IFC4X3_ADD2_IfcLightSourceAmbient_type; +extern entity* IFC4X3_ADD2_IfcLightSourceDirectional_type; +extern entity* IFC4X3_ADD2_IfcLightSourceGoniometric_type; +extern entity* IFC4X3_ADD2_IfcLightSourcePositional_type; +extern entity* IFC4X3_ADD2_IfcLightSourceSpot_type; +extern entity* IFC4X3_ADD2_IfcLine_type; +extern entity* IFC4X3_ADD2_IfcLinearElement_type; +extern entity* IFC4X3_ADD2_IfcLinearPlacement_type; +extern entity* IFC4X3_ADD2_IfcLinearPositioningElement_type; +extern entity* IFC4X3_ADD2_IfcLiquidTerminal_type; +extern entity* IFC4X3_ADD2_IfcLiquidTerminalType_type; +extern entity* IFC4X3_ADD2_IfcLocalPlacement_type; +extern entity* IFC4X3_ADD2_IfcLoop_type; +extern entity* IFC4X3_ADD2_IfcManifoldSolidBrep_type; +extern entity* IFC4X3_ADD2_IfcMapConversion_type; +extern entity* IFC4X3_ADD2_IfcMapConversionScaled_type; +extern entity* IFC4X3_ADD2_IfcMappedItem_type; +extern entity* IFC4X3_ADD2_IfcMarineFacility_type; +extern entity* IFC4X3_ADD2_IfcMarinePart_type; +extern entity* IFC4X3_ADD2_IfcMaterial_type; +extern entity* IFC4X3_ADD2_IfcMaterialClassificationRelationship_type; +extern entity* IFC4X3_ADD2_IfcMaterialConstituent_type; +extern entity* IFC4X3_ADD2_IfcMaterialConstituentSet_type; +extern entity* IFC4X3_ADD2_IfcMaterialDefinition_type; +extern entity* IFC4X3_ADD2_IfcMaterialDefinitionRepresentation_type; +extern entity* IFC4X3_ADD2_IfcMaterialLayer_type; +extern entity* IFC4X3_ADD2_IfcMaterialLayerSet_type; +extern entity* IFC4X3_ADD2_IfcMaterialLayerSetUsage_type; +extern entity* IFC4X3_ADD2_IfcMaterialLayerWithOffsets_type; +extern entity* IFC4X3_ADD2_IfcMaterialList_type; +extern entity* IFC4X3_ADD2_IfcMaterialProfile_type; +extern entity* IFC4X3_ADD2_IfcMaterialProfileSet_type; +extern entity* IFC4X3_ADD2_IfcMaterialProfileSetUsage_type; +extern entity* IFC4X3_ADD2_IfcMaterialProfileSetUsageTapering_type; +extern entity* IFC4X3_ADD2_IfcMaterialProfileWithOffsets_type; +extern entity* IFC4X3_ADD2_IfcMaterialProperties_type; +extern entity* IFC4X3_ADD2_IfcMaterialRelationship_type; +extern entity* IFC4X3_ADD2_IfcMaterialUsageDefinition_type; +extern entity* IFC4X3_ADD2_IfcMeasureWithUnit_type; +extern entity* IFC4X3_ADD2_IfcMechanicalFastener_type; +extern entity* IFC4X3_ADD2_IfcMechanicalFastenerType_type; +extern entity* IFC4X3_ADD2_IfcMedicalDevice_type; +extern entity* IFC4X3_ADD2_IfcMedicalDeviceType_type; +extern entity* IFC4X3_ADD2_IfcMember_type; +extern entity* IFC4X3_ADD2_IfcMemberType_type; +extern entity* IFC4X3_ADD2_IfcMetric_type; +extern entity* IFC4X3_ADD2_IfcMirroredProfileDef_type; +extern entity* IFC4X3_ADD2_IfcMobileTelecommunicationsAppliance_type; +extern entity* IFC4X3_ADD2_IfcMobileTelecommunicationsApplianceType_type; +extern entity* IFC4X3_ADD2_IfcMonetaryUnit_type; +extern entity* IFC4X3_ADD2_IfcMooringDevice_type; +extern entity* IFC4X3_ADD2_IfcMooringDeviceType_type; +extern entity* IFC4X3_ADD2_IfcMotorConnection_type; +extern entity* IFC4X3_ADD2_IfcMotorConnectionType_type; +extern entity* IFC4X3_ADD2_IfcNamedUnit_type; +extern entity* IFC4X3_ADD2_IfcNavigationElement_type; +extern entity* IFC4X3_ADD2_IfcNavigationElementType_type; +extern entity* IFC4X3_ADD2_IfcObject_type; +extern entity* IFC4X3_ADD2_IfcObjectDefinition_type; +extern entity* IFC4X3_ADD2_IfcObjectPlacement_type; +extern entity* IFC4X3_ADD2_IfcObjective_type; +extern entity* IFC4X3_ADD2_IfcOccupant_type; +extern entity* IFC4X3_ADD2_IfcOffsetCurve_type; +extern entity* IFC4X3_ADD2_IfcOffsetCurve2D_type; +extern entity* IFC4X3_ADD2_IfcOffsetCurve3D_type; +extern entity* IFC4X3_ADD2_IfcOffsetCurveByDistances_type; +extern entity* IFC4X3_ADD2_IfcOpenCrossProfileDef_type; +extern entity* IFC4X3_ADD2_IfcOpenShell_type; +extern entity* IFC4X3_ADD2_IfcOpeningElement_type; +extern entity* IFC4X3_ADD2_IfcOrganization_type; +extern entity* IFC4X3_ADD2_IfcOrganizationRelationship_type; +extern entity* IFC4X3_ADD2_IfcOrientedEdge_type; +extern entity* IFC4X3_ADD2_IfcOuterBoundaryCurve_type; +extern entity* IFC4X3_ADD2_IfcOutlet_type; +extern entity* IFC4X3_ADD2_IfcOutletType_type; +extern entity* IFC4X3_ADD2_IfcOwnerHistory_type; +extern entity* IFC4X3_ADD2_IfcParameterizedProfileDef_type; +extern entity* IFC4X3_ADD2_IfcPath_type; +extern entity* IFC4X3_ADD2_IfcPavement_type; +extern entity* IFC4X3_ADD2_IfcPavementType_type; +extern entity* IFC4X3_ADD2_IfcPcurve_type; +extern entity* IFC4X3_ADD2_IfcPerformanceHistory_type; +extern entity* IFC4X3_ADD2_IfcPermeableCoveringProperties_type; +extern entity* IFC4X3_ADD2_IfcPermit_type; +extern entity* IFC4X3_ADD2_IfcPerson_type; +extern entity* IFC4X3_ADD2_IfcPersonAndOrganization_type; +extern entity* IFC4X3_ADD2_IfcPhysicalComplexQuantity_type; +extern entity* IFC4X3_ADD2_IfcPhysicalQuantity_type; +extern entity* IFC4X3_ADD2_IfcPhysicalSimpleQuantity_type; +extern entity* IFC4X3_ADD2_IfcPile_type; +extern entity* IFC4X3_ADD2_IfcPileType_type; +extern entity* IFC4X3_ADD2_IfcPipeFitting_type; +extern entity* IFC4X3_ADD2_IfcPipeFittingType_type; +extern entity* IFC4X3_ADD2_IfcPipeSegment_type; +extern entity* IFC4X3_ADD2_IfcPipeSegmentType_type; +extern entity* IFC4X3_ADD2_IfcPixelTexture_type; +extern entity* IFC4X3_ADD2_IfcPlacement_type; +extern entity* IFC4X3_ADD2_IfcPlanarBox_type; +extern entity* IFC4X3_ADD2_IfcPlanarExtent_type; +extern entity* IFC4X3_ADD2_IfcPlane_type; +extern entity* IFC4X3_ADD2_IfcPlate_type; +extern entity* IFC4X3_ADD2_IfcPlateType_type; +extern entity* IFC4X3_ADD2_IfcPoint_type; +extern entity* IFC4X3_ADD2_IfcPointByDistanceExpression_type; +extern entity* IFC4X3_ADD2_IfcPointOnCurve_type; +extern entity* IFC4X3_ADD2_IfcPointOnSurface_type; +extern entity* IFC4X3_ADD2_IfcPolyLoop_type; +extern entity* IFC4X3_ADD2_IfcPolygonalBoundedHalfSpace_type; +extern entity* IFC4X3_ADD2_IfcPolygonalFaceSet_type; +extern entity* IFC4X3_ADD2_IfcPolyline_type; +extern entity* IFC4X3_ADD2_IfcPolynomialCurve_type; +extern entity* IFC4X3_ADD2_IfcPort_type; +extern entity* IFC4X3_ADD2_IfcPositioningElement_type; +extern entity* IFC4X3_ADD2_IfcPostalAddress_type; +extern entity* IFC4X3_ADD2_IfcPreDefinedColour_type; +extern entity* IFC4X3_ADD2_IfcPreDefinedCurveFont_type; +extern entity* IFC4X3_ADD2_IfcPreDefinedItem_type; +extern entity* IFC4X3_ADD2_IfcPreDefinedProperties_type; +extern entity* IFC4X3_ADD2_IfcPreDefinedPropertySet_type; +extern entity* IFC4X3_ADD2_IfcPreDefinedTextFont_type; +extern entity* IFC4X3_ADD2_IfcPresentationItem_type; +extern entity* IFC4X3_ADD2_IfcPresentationLayerAssignment_type; +extern entity* IFC4X3_ADD2_IfcPresentationLayerWithStyle_type; +extern entity* IFC4X3_ADD2_IfcPresentationStyle_type; +extern entity* IFC4X3_ADD2_IfcProcedure_type; +extern entity* IFC4X3_ADD2_IfcProcedureType_type; +extern entity* IFC4X3_ADD2_IfcProcess_type; +extern entity* IFC4X3_ADD2_IfcProduct_type; +extern entity* IFC4X3_ADD2_IfcProductDefinitionShape_type; +extern entity* IFC4X3_ADD2_IfcProductRepresentation_type; +extern entity* IFC4X3_ADD2_IfcProfileDef_type; +extern entity* IFC4X3_ADD2_IfcProfileProperties_type; +extern entity* IFC4X3_ADD2_IfcProject_type; +extern entity* IFC4X3_ADD2_IfcProjectLibrary_type; +extern entity* IFC4X3_ADD2_IfcProjectOrder_type; +extern entity* IFC4X3_ADD2_IfcProjectedCRS_type; +extern entity* IFC4X3_ADD2_IfcProjectionElement_type; +extern entity* IFC4X3_ADD2_IfcProperty_type; +extern entity* IFC4X3_ADD2_IfcPropertyAbstraction_type; +extern entity* IFC4X3_ADD2_IfcPropertyBoundedValue_type; +extern entity* IFC4X3_ADD2_IfcPropertyDefinition_type; +extern entity* IFC4X3_ADD2_IfcPropertyDependencyRelationship_type; +extern entity* IFC4X3_ADD2_IfcPropertyEnumeratedValue_type; +extern entity* IFC4X3_ADD2_IfcPropertyEnumeration_type; +extern entity* IFC4X3_ADD2_IfcPropertyListValue_type; +extern entity* IFC4X3_ADD2_IfcPropertyReferenceValue_type; +extern entity* IFC4X3_ADD2_IfcPropertySet_type; +extern entity* IFC4X3_ADD2_IfcPropertySetDefinition_type; +extern entity* IFC4X3_ADD2_IfcPropertySetTemplate_type; +extern entity* IFC4X3_ADD2_IfcPropertySingleValue_type; +extern entity* IFC4X3_ADD2_IfcPropertyTableValue_type; +extern entity* IFC4X3_ADD2_IfcPropertyTemplate_type; +extern entity* IFC4X3_ADD2_IfcPropertyTemplateDefinition_type; +extern entity* IFC4X3_ADD2_IfcProtectiveDevice_type; +extern entity* IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnit_type; +extern entity* IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnitType_type; +extern entity* IFC4X3_ADD2_IfcProtectiveDeviceType_type; +extern entity* IFC4X3_ADD2_IfcPump_type; +extern entity* IFC4X3_ADD2_IfcPumpType_type; +extern entity* IFC4X3_ADD2_IfcQuantityArea_type; +extern entity* IFC4X3_ADD2_IfcQuantityCount_type; +extern entity* IFC4X3_ADD2_IfcQuantityLength_type; +extern entity* IFC4X3_ADD2_IfcQuantityNumber_type; +extern entity* IFC4X3_ADD2_IfcQuantitySet_type; +extern entity* IFC4X3_ADD2_IfcQuantityTime_type; +extern entity* IFC4X3_ADD2_IfcQuantityVolume_type; +extern entity* IFC4X3_ADD2_IfcQuantityWeight_type; +extern entity* IFC4X3_ADD2_IfcRail_type; +extern entity* IFC4X3_ADD2_IfcRailType_type; +extern entity* IFC4X3_ADD2_IfcRailing_type; +extern entity* IFC4X3_ADD2_IfcRailingType_type; +extern entity* IFC4X3_ADD2_IfcRailway_type; +extern entity* IFC4X3_ADD2_IfcRailwayPart_type; +extern entity* IFC4X3_ADD2_IfcRamp_type; +extern entity* IFC4X3_ADD2_IfcRampFlight_type; +extern entity* IFC4X3_ADD2_IfcRampFlightType_type; +extern entity* IFC4X3_ADD2_IfcRampType_type; +extern entity* IFC4X3_ADD2_IfcRationalBSplineCurveWithKnots_type; +extern entity* IFC4X3_ADD2_IfcRationalBSplineSurfaceWithKnots_type; +extern entity* IFC4X3_ADD2_IfcRectangleHollowProfileDef_type; +extern entity* IFC4X3_ADD2_IfcRectangleProfileDef_type; +extern entity* IFC4X3_ADD2_IfcRectangularPyramid_type; +extern entity* IFC4X3_ADD2_IfcRectangularTrimmedSurface_type; +extern entity* IFC4X3_ADD2_IfcRecurrencePattern_type; +extern entity* IFC4X3_ADD2_IfcReference_type; +extern entity* IFC4X3_ADD2_IfcReferent_type; +extern entity* IFC4X3_ADD2_IfcRegularTimeSeries_type; +extern entity* IFC4X3_ADD2_IfcReinforcedSoil_type; +extern entity* IFC4X3_ADD2_IfcReinforcementBarProperties_type; +extern entity* IFC4X3_ADD2_IfcReinforcementDefinitionProperties_type; +extern entity* IFC4X3_ADD2_IfcReinforcingBar_type; +extern entity* IFC4X3_ADD2_IfcReinforcingBarType_type; +extern entity* IFC4X3_ADD2_IfcReinforcingElement_type; +extern entity* IFC4X3_ADD2_IfcReinforcingElementType_type; +extern entity* IFC4X3_ADD2_IfcReinforcingMesh_type; +extern entity* IFC4X3_ADD2_IfcReinforcingMeshType_type; +extern entity* IFC4X3_ADD2_IfcRelAdheresToElement_type; +extern entity* IFC4X3_ADD2_IfcRelAggregates_type; +extern entity* IFC4X3_ADD2_IfcRelAssigns_type; +extern entity* IFC4X3_ADD2_IfcRelAssignsToActor_type; +extern entity* IFC4X3_ADD2_IfcRelAssignsToControl_type; +extern entity* IFC4X3_ADD2_IfcRelAssignsToGroup_type; +extern entity* IFC4X3_ADD2_IfcRelAssignsToGroupByFactor_type; +extern entity* IFC4X3_ADD2_IfcRelAssignsToProcess_type; +extern entity* IFC4X3_ADD2_IfcRelAssignsToProduct_type; +extern entity* IFC4X3_ADD2_IfcRelAssignsToResource_type; +extern entity* IFC4X3_ADD2_IfcRelAssociates_type; +extern entity* IFC4X3_ADD2_IfcRelAssociatesApproval_type; +extern entity* IFC4X3_ADD2_IfcRelAssociatesClassification_type; +extern entity* IFC4X3_ADD2_IfcRelAssociatesConstraint_type; +extern entity* IFC4X3_ADD2_IfcRelAssociatesDocument_type; +extern entity* IFC4X3_ADD2_IfcRelAssociatesLibrary_type; +extern entity* IFC4X3_ADD2_IfcRelAssociatesMaterial_type; +extern entity* IFC4X3_ADD2_IfcRelAssociatesProfileDef_type; +extern entity* IFC4X3_ADD2_IfcRelConnects_type; +extern entity* IFC4X3_ADD2_IfcRelConnectsElements_type; +extern entity* IFC4X3_ADD2_IfcRelConnectsPathElements_type; +extern entity* IFC4X3_ADD2_IfcRelConnectsPortToElement_type; +extern entity* IFC4X3_ADD2_IfcRelConnectsPorts_type; +extern entity* IFC4X3_ADD2_IfcRelConnectsStructuralActivity_type; +extern entity* IFC4X3_ADD2_IfcRelConnectsStructuralMember_type; +extern entity* IFC4X3_ADD2_IfcRelConnectsWithEccentricity_type; +extern entity* IFC4X3_ADD2_IfcRelConnectsWithRealizingElements_type; +extern entity* IFC4X3_ADD2_IfcRelContainedInSpatialStructure_type; +extern entity* IFC4X3_ADD2_IfcRelCoversBldgElements_type; +extern entity* IFC4X3_ADD2_IfcRelCoversSpaces_type; +extern entity* IFC4X3_ADD2_IfcRelDeclares_type; +extern entity* IFC4X3_ADD2_IfcRelDecomposes_type; +extern entity* IFC4X3_ADD2_IfcRelDefines_type; +extern entity* IFC4X3_ADD2_IfcRelDefinesByObject_type; +extern entity* IFC4X3_ADD2_IfcRelDefinesByProperties_type; +extern entity* IFC4X3_ADD2_IfcRelDefinesByTemplate_type; +extern entity* IFC4X3_ADD2_IfcRelDefinesByType_type; +extern entity* IFC4X3_ADD2_IfcRelFillsElement_type; +extern entity* IFC4X3_ADD2_IfcRelFlowControlElements_type; +extern entity* IFC4X3_ADD2_IfcRelInterferesElements_type; +extern entity* IFC4X3_ADD2_IfcRelNests_type; +extern entity* IFC4X3_ADD2_IfcRelPositions_type; +extern entity* IFC4X3_ADD2_IfcRelProjectsElement_type; +extern entity* IFC4X3_ADD2_IfcRelReferencedInSpatialStructure_type; +extern entity* IFC4X3_ADD2_IfcRelSequence_type; +extern entity* IFC4X3_ADD2_IfcRelServicesBuildings_type; +extern entity* IFC4X3_ADD2_IfcRelSpaceBoundary_type; +extern entity* IFC4X3_ADD2_IfcRelSpaceBoundary1stLevel_type; +extern entity* IFC4X3_ADD2_IfcRelSpaceBoundary2ndLevel_type; +extern entity* IFC4X3_ADD2_IfcRelVoidsElement_type; +extern entity* IFC4X3_ADD2_IfcRelationship_type; +extern entity* IFC4X3_ADD2_IfcReparametrisedCompositeCurveSegment_type; +extern entity* IFC4X3_ADD2_IfcRepresentation_type; +extern entity* IFC4X3_ADD2_IfcRepresentationContext_type; +extern entity* IFC4X3_ADD2_IfcRepresentationItem_type; +extern entity* IFC4X3_ADD2_IfcRepresentationMap_type; +extern entity* IFC4X3_ADD2_IfcResource_type; +extern entity* IFC4X3_ADD2_IfcResourceApprovalRelationship_type; +extern entity* IFC4X3_ADD2_IfcResourceConstraintRelationship_type; +extern entity* IFC4X3_ADD2_IfcResourceLevelRelationship_type; +extern entity* IFC4X3_ADD2_IfcResourceTime_type; +extern entity* IFC4X3_ADD2_IfcRevolvedAreaSolid_type; +extern entity* IFC4X3_ADD2_IfcRevolvedAreaSolidTapered_type; +extern entity* IFC4X3_ADD2_IfcRightCircularCone_type; +extern entity* IFC4X3_ADD2_IfcRightCircularCylinder_type; +extern entity* IFC4X3_ADD2_IfcRigidOperation_type; +extern entity* IFC4X3_ADD2_IfcRoad_type; +extern entity* IFC4X3_ADD2_IfcRoadPart_type; +extern entity* IFC4X3_ADD2_IfcRoof_type; +extern entity* IFC4X3_ADD2_IfcRoofType_type; +extern entity* IFC4X3_ADD2_IfcRoot_type; +extern entity* IFC4X3_ADD2_IfcRoundedRectangleProfileDef_type; +extern entity* IFC4X3_ADD2_IfcSIUnit_type; +extern entity* IFC4X3_ADD2_IfcSanitaryTerminal_type; +extern entity* IFC4X3_ADD2_IfcSanitaryTerminalType_type; +extern entity* IFC4X3_ADD2_IfcSchedulingTime_type; +extern entity* IFC4X3_ADD2_IfcSeamCurve_type; +extern entity* IFC4X3_ADD2_IfcSecondOrderPolynomialSpiral_type; +extern entity* IFC4X3_ADD2_IfcSectionProperties_type; +extern entity* IFC4X3_ADD2_IfcSectionReinforcementProperties_type; +extern entity* IFC4X3_ADD2_IfcSectionedSolid_type; +extern entity* IFC4X3_ADD2_IfcSectionedSolidHorizontal_type; +extern entity* IFC4X3_ADD2_IfcSectionedSpine_type; +extern entity* IFC4X3_ADD2_IfcSectionedSurface_type; +extern entity* IFC4X3_ADD2_IfcSegment_type; +extern entity* IFC4X3_ADD2_IfcSegmentedReferenceCurve_type; +extern entity* IFC4X3_ADD2_IfcSensor_type; +extern entity* IFC4X3_ADD2_IfcSensorType_type; +extern entity* IFC4X3_ADD2_IfcSeventhOrderPolynomialSpiral_type; +extern entity* IFC4X3_ADD2_IfcShadingDevice_type; +extern entity* IFC4X3_ADD2_IfcShadingDeviceType_type; +extern entity* IFC4X3_ADD2_IfcShapeAspect_type; +extern entity* IFC4X3_ADD2_IfcShapeModel_type; +extern entity* IFC4X3_ADD2_IfcShapeRepresentation_type; +extern entity* IFC4X3_ADD2_IfcShellBasedSurfaceModel_type; +extern entity* IFC4X3_ADD2_IfcSign_type; +extern entity* IFC4X3_ADD2_IfcSignType_type; +extern entity* IFC4X3_ADD2_IfcSignal_type; +extern entity* IFC4X3_ADD2_IfcSignalType_type; +extern entity* IFC4X3_ADD2_IfcSimpleProperty_type; +extern entity* IFC4X3_ADD2_IfcSimplePropertyTemplate_type; +extern entity* IFC4X3_ADD2_IfcSineSpiral_type; +extern entity* IFC4X3_ADD2_IfcSite_type; +extern entity* IFC4X3_ADD2_IfcSlab_type; +extern entity* IFC4X3_ADD2_IfcSlabType_type; +extern entity* IFC4X3_ADD2_IfcSlippageConnectionCondition_type; +extern entity* IFC4X3_ADD2_IfcSolarDevice_type; +extern entity* IFC4X3_ADD2_IfcSolarDeviceType_type; +extern entity* IFC4X3_ADD2_IfcSolidModel_type; +extern entity* IFC4X3_ADD2_IfcSpace_type; +extern entity* IFC4X3_ADD2_IfcSpaceHeater_type; +extern entity* IFC4X3_ADD2_IfcSpaceHeaterType_type; +extern entity* IFC4X3_ADD2_IfcSpaceType_type; +extern entity* IFC4X3_ADD2_IfcSpatialElement_type; +extern entity* IFC4X3_ADD2_IfcSpatialElementType_type; +extern entity* IFC4X3_ADD2_IfcSpatialStructureElement_type; +extern entity* IFC4X3_ADD2_IfcSpatialStructureElementType_type; +extern entity* IFC4X3_ADD2_IfcSpatialZone_type; +extern entity* IFC4X3_ADD2_IfcSpatialZoneType_type; +extern entity* IFC4X3_ADD2_IfcSphere_type; +extern entity* IFC4X3_ADD2_IfcSphericalSurface_type; +extern entity* IFC4X3_ADD2_IfcSpiral_type; +extern entity* IFC4X3_ADD2_IfcStackTerminal_type; +extern entity* IFC4X3_ADD2_IfcStackTerminalType_type; +extern entity* IFC4X3_ADD2_IfcStair_type; +extern entity* IFC4X3_ADD2_IfcStairFlight_type; +extern entity* IFC4X3_ADD2_IfcStairFlightType_type; +extern entity* IFC4X3_ADD2_IfcStairType_type; +extern entity* IFC4X3_ADD2_IfcStructuralAction_type; +extern entity* IFC4X3_ADD2_IfcStructuralActivity_type; +extern entity* IFC4X3_ADD2_IfcStructuralAnalysisModel_type; +extern entity* IFC4X3_ADD2_IfcStructuralConnection_type; +extern entity* IFC4X3_ADD2_IfcStructuralConnectionCondition_type; +extern entity* IFC4X3_ADD2_IfcStructuralCurveAction_type; +extern entity* IFC4X3_ADD2_IfcStructuralCurveConnection_type; +extern entity* IFC4X3_ADD2_IfcStructuralCurveMember_type; +extern entity* IFC4X3_ADD2_IfcStructuralCurveMemberVarying_type; +extern entity* IFC4X3_ADD2_IfcStructuralCurveReaction_type; +extern entity* IFC4X3_ADD2_IfcStructuralItem_type; +extern entity* IFC4X3_ADD2_IfcStructuralLinearAction_type; +extern entity* IFC4X3_ADD2_IfcStructuralLoad_type; +extern entity* IFC4X3_ADD2_IfcStructuralLoadCase_type; +extern entity* IFC4X3_ADD2_IfcStructuralLoadConfiguration_type; +extern entity* IFC4X3_ADD2_IfcStructuralLoadGroup_type; +extern entity* IFC4X3_ADD2_IfcStructuralLoadLinearForce_type; +extern entity* IFC4X3_ADD2_IfcStructuralLoadOrResult_type; +extern entity* IFC4X3_ADD2_IfcStructuralLoadPlanarForce_type; +extern entity* IFC4X3_ADD2_IfcStructuralLoadSingleDisplacement_type; +extern entity* IFC4X3_ADD2_IfcStructuralLoadSingleDisplacementDistortion_type; +extern entity* IFC4X3_ADD2_IfcStructuralLoadSingleForce_type; +extern entity* IFC4X3_ADD2_IfcStructuralLoadSingleForceWarping_type; +extern entity* IFC4X3_ADD2_IfcStructuralLoadStatic_type; +extern entity* IFC4X3_ADD2_IfcStructuralLoadTemperature_type; +extern entity* IFC4X3_ADD2_IfcStructuralMember_type; +extern entity* IFC4X3_ADD2_IfcStructuralPlanarAction_type; +extern entity* IFC4X3_ADD2_IfcStructuralPointAction_type; +extern entity* IFC4X3_ADD2_IfcStructuralPointConnection_type; +extern entity* IFC4X3_ADD2_IfcStructuralPointReaction_type; +extern entity* IFC4X3_ADD2_IfcStructuralReaction_type; +extern entity* IFC4X3_ADD2_IfcStructuralResultGroup_type; +extern entity* IFC4X3_ADD2_IfcStructuralSurfaceAction_type; +extern entity* IFC4X3_ADD2_IfcStructuralSurfaceConnection_type; +extern entity* IFC4X3_ADD2_IfcStructuralSurfaceMember_type; +extern entity* IFC4X3_ADD2_IfcStructuralSurfaceMemberVarying_type; +extern entity* IFC4X3_ADD2_IfcStructuralSurfaceReaction_type; +extern entity* IFC4X3_ADD2_IfcStyleModel_type; +extern entity* IFC4X3_ADD2_IfcStyledItem_type; +extern entity* IFC4X3_ADD2_IfcStyledRepresentation_type; +extern entity* IFC4X3_ADD2_IfcSubContractResource_type; +extern entity* IFC4X3_ADD2_IfcSubContractResourceType_type; +extern entity* IFC4X3_ADD2_IfcSubedge_type; +extern entity* IFC4X3_ADD2_IfcSurface_type; +extern entity* IFC4X3_ADD2_IfcSurfaceCurve_type; +extern entity* IFC4X3_ADD2_IfcSurfaceCurveSweptAreaSolid_type; +extern entity* IFC4X3_ADD2_IfcSurfaceFeature_type; +extern entity* IFC4X3_ADD2_IfcSurfaceOfLinearExtrusion_type; +extern entity* IFC4X3_ADD2_IfcSurfaceOfRevolution_type; +extern entity* IFC4X3_ADD2_IfcSurfaceReinforcementArea_type; +extern entity* IFC4X3_ADD2_IfcSurfaceStyle_type; +extern entity* IFC4X3_ADD2_IfcSurfaceStyleLighting_type; +extern entity* IFC4X3_ADD2_IfcSurfaceStyleRefraction_type; +extern entity* IFC4X3_ADD2_IfcSurfaceStyleRendering_type; +extern entity* IFC4X3_ADD2_IfcSurfaceStyleShading_type; +extern entity* IFC4X3_ADD2_IfcSurfaceStyleWithTextures_type; +extern entity* IFC4X3_ADD2_IfcSurfaceTexture_type; +extern entity* IFC4X3_ADD2_IfcSweptAreaSolid_type; +extern entity* IFC4X3_ADD2_IfcSweptDiskSolid_type; +extern entity* IFC4X3_ADD2_IfcSweptDiskSolidPolygonal_type; +extern entity* IFC4X3_ADD2_IfcSweptSurface_type; +extern entity* IFC4X3_ADD2_IfcSwitchingDevice_type; +extern entity* IFC4X3_ADD2_IfcSwitchingDeviceType_type; +extern entity* IFC4X3_ADD2_IfcSystem_type; +extern entity* IFC4X3_ADD2_IfcSystemFurnitureElement_type; +extern entity* IFC4X3_ADD2_IfcSystemFurnitureElementType_type; +extern entity* IFC4X3_ADD2_IfcTShapeProfileDef_type; +extern entity* IFC4X3_ADD2_IfcTable_type; +extern entity* IFC4X3_ADD2_IfcTableColumn_type; +extern entity* IFC4X3_ADD2_IfcTableRow_type; +extern entity* IFC4X3_ADD2_IfcTank_type; +extern entity* IFC4X3_ADD2_IfcTankType_type; +extern entity* IFC4X3_ADD2_IfcTask_type; +extern entity* IFC4X3_ADD2_IfcTaskTime_type; +extern entity* IFC4X3_ADD2_IfcTaskTimeRecurring_type; +extern entity* IFC4X3_ADD2_IfcTaskType_type; +extern entity* IFC4X3_ADD2_IfcTelecomAddress_type; +extern entity* IFC4X3_ADD2_IfcTendon_type; +extern entity* IFC4X3_ADD2_IfcTendonAnchor_type; +extern entity* IFC4X3_ADD2_IfcTendonAnchorType_type; +extern entity* IFC4X3_ADD2_IfcTendonConduit_type; +extern entity* IFC4X3_ADD2_IfcTendonConduitType_type; +extern entity* IFC4X3_ADD2_IfcTendonType_type; +extern entity* IFC4X3_ADD2_IfcTessellatedFaceSet_type; +extern entity* IFC4X3_ADD2_IfcTessellatedItem_type; +extern entity* IFC4X3_ADD2_IfcTextLiteral_type; +extern entity* IFC4X3_ADD2_IfcTextLiteralWithExtent_type; +extern entity* IFC4X3_ADD2_IfcTextStyle_type; +extern entity* IFC4X3_ADD2_IfcTextStyleFontModel_type; +extern entity* IFC4X3_ADD2_IfcTextStyleForDefinedFont_type; +extern entity* IFC4X3_ADD2_IfcTextStyleTextModel_type; +extern entity* IFC4X3_ADD2_IfcTextureCoordinate_type; +extern entity* IFC4X3_ADD2_IfcTextureCoordinateGenerator_type; +extern entity* IFC4X3_ADD2_IfcTextureCoordinateIndices_type; +extern entity* IFC4X3_ADD2_IfcTextureCoordinateIndicesWithVoids_type; +extern entity* IFC4X3_ADD2_IfcTextureMap_type; +extern entity* IFC4X3_ADD2_IfcTextureVertex_type; +extern entity* IFC4X3_ADD2_IfcTextureVertexList_type; +extern entity* IFC4X3_ADD2_IfcThirdOrderPolynomialSpiral_type; +extern entity* IFC4X3_ADD2_IfcTimePeriod_type; +extern entity* IFC4X3_ADD2_IfcTimeSeries_type; +extern entity* IFC4X3_ADD2_IfcTimeSeriesValue_type; +extern entity* IFC4X3_ADD2_IfcTopologicalRepresentationItem_type; +extern entity* IFC4X3_ADD2_IfcTopologyRepresentation_type; +extern entity* IFC4X3_ADD2_IfcToroidalSurface_type; +extern entity* IFC4X3_ADD2_IfcTrackElement_type; +extern entity* IFC4X3_ADD2_IfcTrackElementType_type; +extern entity* IFC4X3_ADD2_IfcTransformer_type; +extern entity* IFC4X3_ADD2_IfcTransformerType_type; +extern entity* IFC4X3_ADD2_IfcTransportElement_type; +extern entity* IFC4X3_ADD2_IfcTransportElementType_type; +extern entity* IFC4X3_ADD2_IfcTransportationDevice_type; +extern entity* IFC4X3_ADD2_IfcTransportationDeviceType_type; +extern entity* IFC4X3_ADD2_IfcTrapeziumProfileDef_type; +extern entity* IFC4X3_ADD2_IfcTriangulatedFaceSet_type; +extern entity* IFC4X3_ADD2_IfcTriangulatedIrregularNetwork_type; +extern entity* IFC4X3_ADD2_IfcTrimmedCurve_type; +extern entity* IFC4X3_ADD2_IfcTubeBundle_type; +extern entity* IFC4X3_ADD2_IfcTubeBundleType_type; +extern entity* IFC4X3_ADD2_IfcTypeObject_type; +extern entity* IFC4X3_ADD2_IfcTypeProcess_type; +extern entity* IFC4X3_ADD2_IfcTypeProduct_type; +extern entity* IFC4X3_ADD2_IfcTypeResource_type; +extern entity* IFC4X3_ADD2_IfcUShapeProfileDef_type; +extern entity* IFC4X3_ADD2_IfcUnitAssignment_type; +extern entity* IFC4X3_ADD2_IfcUnitaryControlElement_type; +extern entity* IFC4X3_ADD2_IfcUnitaryControlElementType_type; +extern entity* IFC4X3_ADD2_IfcUnitaryEquipment_type; +extern entity* IFC4X3_ADD2_IfcUnitaryEquipmentType_type; +extern entity* IFC4X3_ADD2_IfcValve_type; +extern entity* IFC4X3_ADD2_IfcValveType_type; +extern entity* IFC4X3_ADD2_IfcVector_type; +extern entity* IFC4X3_ADD2_IfcVehicle_type; +extern entity* IFC4X3_ADD2_IfcVehicleType_type; +extern entity* IFC4X3_ADD2_IfcVertex_type; +extern entity* IFC4X3_ADD2_IfcVertexLoop_type; +extern entity* IFC4X3_ADD2_IfcVertexPoint_type; +extern entity* IFC4X3_ADD2_IfcVibrationDamper_type; +extern entity* IFC4X3_ADD2_IfcVibrationDamperType_type; +extern entity* IFC4X3_ADD2_IfcVibrationIsolator_type; +extern entity* IFC4X3_ADD2_IfcVibrationIsolatorType_type; +extern entity* IFC4X3_ADD2_IfcVirtualElement_type; +extern entity* IFC4X3_ADD2_IfcVirtualGridIntersection_type; +extern entity* IFC4X3_ADD2_IfcVoidingFeature_type; +extern entity* IFC4X3_ADD2_IfcWall_type; +extern entity* IFC4X3_ADD2_IfcWallStandardCase_type; +extern entity* IFC4X3_ADD2_IfcWallType_type; +extern entity* IFC4X3_ADD2_IfcWasteTerminal_type; +extern entity* IFC4X3_ADD2_IfcWasteTerminalType_type; +extern entity* IFC4X3_ADD2_IfcWellKnownText_type; +extern entity* IFC4X3_ADD2_IfcWindow_type; +extern entity* IFC4X3_ADD2_IfcWindowLiningProperties_type; +extern entity* IFC4X3_ADD2_IfcWindowPanelProperties_type; +extern entity* IFC4X3_ADD2_IfcWindowType_type; +extern entity* IFC4X3_ADD2_IfcWorkCalendar_type; +extern entity* IFC4X3_ADD2_IfcWorkControl_type; +extern entity* IFC4X3_ADD2_IfcWorkPlan_type; +extern entity* IFC4X3_ADD2_IfcWorkSchedule_type; +extern entity* IFC4X3_ADD2_IfcWorkTime_type; +extern entity* IFC4X3_ADD2_IfcZShapeProfileDef_type; +extern entity* IFC4X3_ADD2_IfcZone_type; +extern type_declaration* IFC4X3_ADD2_IfcAbsorbedDoseMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcAccelerationMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcAmountOfSubstanceMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcAngularVelocityMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcArcIndex_type; +extern type_declaration* IFC4X3_ADD2_IfcAreaDensityMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcAreaMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcBinary_type; +extern type_declaration* IFC4X3_ADD2_IfcBoolean_type; +extern type_declaration* IFC4X3_ADD2_IfcBoxAlignment_type; +extern type_declaration* IFC4X3_ADD2_IfcCardinalPointReference_type; +extern type_declaration* IFC4X3_ADD2_IfcComplexNumber_type; +extern type_declaration* IFC4X3_ADD2_IfcCompoundPlaneAngleMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcContextDependentMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcCountMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcCurvatureMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcDate_type; +extern type_declaration* IFC4X3_ADD2_IfcDateTime_type; +extern type_declaration* IFC4X3_ADD2_IfcDayInMonthNumber_type; +extern type_declaration* IFC4X3_ADD2_IfcDayInWeekNumber_type; +extern type_declaration* IFC4X3_ADD2_IfcDescriptiveMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcDimensionCount_type; +extern type_declaration* IFC4X3_ADD2_IfcDoseEquivalentMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcDuration_type; +extern type_declaration* IFC4X3_ADD2_IfcDynamicViscosityMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcElectricCapacitanceMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcElectricChargeMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcElectricConductanceMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcElectricCurrentMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcElectricResistanceMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcElectricVoltageMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcEnergyMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcFontStyle_type; +extern type_declaration* IFC4X3_ADD2_IfcFontVariant_type; +extern type_declaration* IFC4X3_ADD2_IfcFontWeight_type; +extern type_declaration* IFC4X3_ADD2_IfcForceMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcFrequencyMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcGloballyUniqueId_type; +extern type_declaration* IFC4X3_ADD2_IfcHeatFluxDensityMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcHeatingValueMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcIdentifier_type; +extern type_declaration* IFC4X3_ADD2_IfcIlluminanceMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcInductanceMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcInteger_type; +extern type_declaration* IFC4X3_ADD2_IfcIntegerCountRateMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcIonConcentrationMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcIsothermalMoistureCapacityMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcKinematicViscosityMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcLabel_type; +extern type_declaration* IFC4X3_ADD2_IfcLanguageId_type; +extern type_declaration* IFC4X3_ADD2_IfcLengthMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcLineIndex_type; +extern type_declaration* IFC4X3_ADD2_IfcLinearForceMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcLinearMomentMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcLinearStiffnessMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcLinearVelocityMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcLogical_type; +extern type_declaration* IFC4X3_ADD2_IfcLuminousFluxMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcLuminousIntensityDistributionMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcLuminousIntensityMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcMagneticFluxDensityMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcMagneticFluxMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcMassDensityMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcMassFlowRateMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcMassMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcMassPerLengthMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcModulusOfElasticityMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcModulusOfLinearSubgradeReactionMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcModulusOfRotationalSubgradeReactionMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcModulusOfSubgradeReactionMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcMoistureDiffusivityMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcMolecularWeightMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcMomentOfInertiaMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcMonetaryMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcMonthInYearNumber_type; +extern type_declaration* IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcNormalisedRatioMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcNumericMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcPHMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcParameterValue_type; +extern type_declaration* IFC4X3_ADD2_IfcPlanarForceMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcPlaneAngleMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcPositiveInteger_type; +extern type_declaration* IFC4X3_ADD2_IfcPositiveLengthMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcPositivePlaneAngleMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcPositiveRatioMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcPowerMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcPresentableText_type; +extern type_declaration* IFC4X3_ADD2_IfcPressureMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcPropertySetDefinitionSet_type; +extern type_declaration* IFC4X3_ADD2_IfcRadioActivityMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcRatioMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcReal_type; +extern type_declaration* IFC4X3_ADD2_IfcRotationalFrequencyMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcRotationalMassMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcRotationalStiffnessMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcSectionModulusMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcSectionalAreaIntegralMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcShearModulusMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcSolidAngleMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcSoundPowerLevelMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcSoundPowerMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcSoundPressureLevelMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcSoundPressureMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcSpecificHeatCapacityMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcSpecularExponent_type; +extern type_declaration* IFC4X3_ADD2_IfcSpecularRoughness_type; +extern type_declaration* IFC4X3_ADD2_IfcStrippedOptional_type; +extern type_declaration* IFC4X3_ADD2_IfcTemperatureGradientMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcTemperatureRateOfChangeMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcText_type; +extern type_declaration* IFC4X3_ADD2_IfcTextAlignment_type; +extern type_declaration* IFC4X3_ADD2_IfcTextDecoration_type; +extern type_declaration* IFC4X3_ADD2_IfcTextFontName_type; +extern type_declaration* IFC4X3_ADD2_IfcTextTransformation_type; +extern type_declaration* IFC4X3_ADD2_IfcThermalAdmittanceMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcThermalConductivityMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcThermalExpansionCoefficientMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcThermalResistanceMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcThermalTransmittanceMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcThermodynamicTemperatureMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcTime_type; +extern type_declaration* IFC4X3_ADD2_IfcTimeMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcTimeStamp_type; +extern type_declaration* IFC4X3_ADD2_IfcTorqueMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcURIReference_type; +extern type_declaration* IFC4X3_ADD2_IfcVaporPermeabilityMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcVolumeMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcVolumetricFlowRateMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcWarpingConstantMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcWarpingMomentMeasure_type; +extern type_declaration* IFC4X3_ADD2_IfcWellKnownTextLiteral_type; +extern enumeration_type* IFC4X3_ADD2_IfcActionRequestTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcActionSourceTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcActionTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcActuatorTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcAddressTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcAirTerminalBoxTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcAirTerminalTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcAirToAirHeatRecoveryTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcAlarmTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcAlignmentCantSegmentTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcAlignmentHorizontalSegmentTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcAlignmentTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcAlignmentVerticalSegmentTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcAnalysisModelTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcAnalysisTheoryTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcAnnotationTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcArithmeticOperatorEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcAssemblyPlaceEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcAudioVisualApplianceTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcBSplineCurveForm_type; +extern enumeration_type* IFC4X3_ADD2_IfcBSplineSurfaceForm_type; +extern enumeration_type* IFC4X3_ADD2_IfcBeamTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcBearingTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcBenchmarkEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcBoilerTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcBooleanOperator_type; +extern enumeration_type* IFC4X3_ADD2_IfcBridgePartTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcBridgeTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcBuildingElementPartTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcBuildingElementProxyTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcBuildingSystemTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcBuiltSystemTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcBurnerTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcCableCarrierFittingTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcCableCarrierSegmentTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcCableFittingTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcCableSegmentTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcCaissonFoundationTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcChangeActionEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcChillerTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcChimneyTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcCoilTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcColumnTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcCommunicationsApplianceTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcComplexPropertyTemplateTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcCompressorTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcCondenserTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcConnectionTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcConstraintEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcConstructionEquipmentResourceTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcConstructionMaterialResourceTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcConstructionProductResourceTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcControllerTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcConveyorSegmentTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcCooledBeamTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcCoolingTowerTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcCostItemTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcCostScheduleTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcCourseTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcCoveringTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcCrewResourceTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcCurtainWallTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcCurveInterpolationEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcDamperTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcDataOriginEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcDerivedUnitEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcDirectionSenseEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcDiscreteAccessoryTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcDistributionBoardTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcDistributionChamberElementTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcDistributionPortTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcDistributionSystemEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcDocumentConfidentialityEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcDocumentStatusEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcDoorPanelOperationEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcDoorPanelPositionEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcDoorTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcDoorTypeOperationEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcDuctFittingTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcDuctSegmentTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcDuctSilencerTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcEarthworksCutTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcEarthworksFillTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcElectricApplianceTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcElectricDistributionBoardTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcElectricFlowStorageDeviceTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcElectricFlowTreatmentDeviceTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcElectricGeneratorTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcElectricMotorTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcElectricTimeControlTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcElementAssemblyTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcElementCompositionEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcEngineTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcEvaporativeCoolerTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcEvaporatorTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcEventTriggerTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcEventTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcExternalSpatialElementTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcFacilityPartCommonTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcFacilityUsageEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcFanTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcFastenerTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcFilterTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcFireSuppressionTerminalTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcFlowDirectionEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcFlowInstrumentTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcFlowMeterTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcFootingTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcFurnitureTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcGeographicElementTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcGeometricProjectionEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcGeotechnicalStratumTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcGlobalOrLocalEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcGridTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcHeatExchangerTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcHumidifierTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcImpactProtectionDeviceTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcInterceptorTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcInternalOrExternalEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcInventoryTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcJunctionBoxTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcKerbTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcKnotType_type; +extern enumeration_type* IFC4X3_ADD2_IfcLaborResourceTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcLampTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcLayerSetDirectionEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcLightDistributionCurveEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcLightEmissionSourceEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcLightFixtureTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcLiquidTerminalTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcLoadGroupTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcLogicalOperatorEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcMarineFacilityTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcMarinePartTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcMechanicalFastenerTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcMedicalDeviceTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcMemberTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcMobileTelecommunicationsApplianceTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcMooringDeviceTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcMotorConnectionTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcNavigationElementTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcObjectiveEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcOccupantTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcOpeningElementTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcOutletTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcPavementTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcPerformanceHistoryTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcPermeableCoveringOperationEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcPermitTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcPhysicalOrVirtualEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcPileConstructionEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcPileTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcPipeFittingTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcPipeSegmentTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcPlateTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcPreferredSurfaceCurveRepresentation_type; +extern enumeration_type* IFC4X3_ADD2_IfcProcedureTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcProfileTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcProjectOrderTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcProjectedOrTrueLengthEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcProjectionElementTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcPropertySetTemplateTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnitTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcProtectiveDeviceTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcPumpTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcRailTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcRailingTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcRailwayPartTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcRailwayTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcRampFlightTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcRampTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcRecurrenceTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcReferentTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcReflectanceMethodEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcReinforcedSoilTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcReinforcingBarRoleEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcReinforcingBarSurfaceEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcReinforcingBarTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcReinforcingMeshTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcRoadPartTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcRoadTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcRoleEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcRoofTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcSIPrefix_type; +extern enumeration_type* IFC4X3_ADD2_IfcSIUnitName_type; +extern enumeration_type* IFC4X3_ADD2_IfcSanitaryTerminalTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcSectionTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcSensorTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcSequenceEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcShadingDeviceTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcSignTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcSignalTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcSimplePropertyTemplateTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcSlabTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcSolarDeviceTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcSpaceHeaterTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcSpaceTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcSpatialZoneTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcStackTerminalTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcStairFlightTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcStairTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcStateEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcStructuralCurveActivityTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcStructuralCurveMemberTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcStructuralSurfaceActivityTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcStructuralSurfaceMemberTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcSubContractResourceTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcSurfaceFeatureTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcSurfaceSide_type; +extern enumeration_type* IFC4X3_ADD2_IfcSwitchingDeviceTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcSystemFurnitureElementTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcTankTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcTaskDurationEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcTaskTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcTendonAnchorTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcTendonConduitTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcTendonTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcTextPath_type; +extern enumeration_type* IFC4X3_ADD2_IfcTimeSeriesDataTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcTrackElementTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcTransformerTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcTransitionCode_type; +extern enumeration_type* IFC4X3_ADD2_IfcTransportElementTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcTrimmingPreference_type; +extern enumeration_type* IFC4X3_ADD2_IfcTubeBundleTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcUnitEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcUnitaryControlElementTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcUnitaryEquipmentTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcValveTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcVehicleTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcVibrationDamperTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcVibrationIsolatorTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcVirtualElementTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcVoidingFeatureTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcWallTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcWasteTerminalTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcWindowPanelOperationEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcWindowPanelPositionEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcWindowTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcWindowTypePartitioningEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcWorkCalendarTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcWorkPlanTypeEnum_type; +extern enumeration_type* IFC4X3_ADD2_IfcWorkScheduleTypeEnum_type; +extern select_type* IFC4X3_ADD2_IfcActorSelect_type; +extern select_type* IFC4X3_ADD2_IfcAppliedValueSelect_type; +extern select_type* IFC4X3_ADD2_IfcAxis2Placement_type; +extern select_type* IFC4X3_ADD2_IfcBendingParameterSelect_type; +extern select_type* IFC4X3_ADD2_IfcBooleanOperand_type; +extern select_type* IFC4X3_ADD2_IfcClassificationReferenceSelect_type; +extern select_type* IFC4X3_ADD2_IfcClassificationSelect_type; +extern select_type* IFC4X3_ADD2_IfcColour_type; +extern select_type* IFC4X3_ADD2_IfcColourOrFactor_type; +extern select_type* IFC4X3_ADD2_IfcCoordinateReferenceSystemSelect_type; +extern select_type* IFC4X3_ADD2_IfcCsgSelect_type; +extern select_type* IFC4X3_ADD2_IfcCurveFontOrScaledCurveFontSelect_type; +extern select_type* IFC4X3_ADD2_IfcCurveMeasureSelect_type; +extern select_type* IFC4X3_ADD2_IfcCurveOnSurface_type; +extern select_type* IFC4X3_ADD2_IfcCurveOrEdgeCurve_type; +extern select_type* IFC4X3_ADD2_IfcCurveStyleFontSelect_type; +extern select_type* IFC4X3_ADD2_IfcDefinitionSelect_type; +extern select_type* IFC4X3_ADD2_IfcDerivedMeasureValue_type; +extern select_type* IFC4X3_ADD2_IfcDocumentSelect_type; +extern select_type* IFC4X3_ADD2_IfcFillStyleSelect_type; +extern select_type* IFC4X3_ADD2_IfcGeometricSetSelect_type; +extern select_type* IFC4X3_ADD2_IfcGridPlacementDirectionSelect_type; +extern select_type* IFC4X3_ADD2_IfcHatchLineDistanceSelect_type; +extern select_type* IFC4X3_ADD2_IfcInterferenceSelect_type; +extern select_type* IFC4X3_ADD2_IfcLayeredItem_type; +extern select_type* IFC4X3_ADD2_IfcLibrarySelect_type; +extern select_type* IFC4X3_ADD2_IfcLightDistributionDataSourceSelect_type; +extern select_type* IFC4X3_ADD2_IfcMaterialSelect_type; +extern select_type* IFC4X3_ADD2_IfcMeasureValue_type; +extern select_type* IFC4X3_ADD2_IfcMetricValueSelect_type; +extern select_type* IFC4X3_ADD2_IfcModulusOfRotationalSubgradeReactionSelect_type; +extern select_type* IFC4X3_ADD2_IfcModulusOfSubgradeReactionSelect_type; +extern select_type* IFC4X3_ADD2_IfcModulusOfTranslationalSubgradeReactionSelect_type; +extern select_type* IFC4X3_ADD2_IfcObjectReferenceSelect_type; +extern select_type* IFC4X3_ADD2_IfcPointOrVertexPoint_type; +extern select_type* IFC4X3_ADD2_IfcProcessSelect_type; +extern select_type* IFC4X3_ADD2_IfcProductRepresentationSelect_type; +extern select_type* IFC4X3_ADD2_IfcProductSelect_type; +extern select_type* IFC4X3_ADD2_IfcPropertySetDefinitionSelect_type; +extern select_type* IFC4X3_ADD2_IfcResourceObjectSelect_type; +extern select_type* IFC4X3_ADD2_IfcResourceSelect_type; +extern select_type* IFC4X3_ADD2_IfcRotationalStiffnessSelect_type; +extern select_type* IFC4X3_ADD2_IfcSegmentIndexSelect_type; +extern select_type* IFC4X3_ADD2_IfcShell_type; +extern select_type* IFC4X3_ADD2_IfcSimpleValue_type; +extern select_type* IFC4X3_ADD2_IfcSizeSelect_type; +extern select_type* IFC4X3_ADD2_IfcSolidOrShell_type; +extern select_type* IFC4X3_ADD2_IfcSpaceBoundarySelect_type; +extern select_type* IFC4X3_ADD2_IfcSpatialReferenceSelect_type; +extern select_type* IFC4X3_ADD2_IfcSpecularHighlightSelect_type; +extern select_type* IFC4X3_ADD2_IfcStructuralActivityAssignmentSelect_type; +extern select_type* IFC4X3_ADD2_IfcSurfaceOrFaceSurface_type; +extern select_type* IFC4X3_ADD2_IfcSurfaceStyleElementSelect_type; +extern select_type* IFC4X3_ADD2_IfcTextFontSelect_type; +extern select_type* IFC4X3_ADD2_IfcTimeOrRatioSelect_type; +extern select_type* IFC4X3_ADD2_IfcTranslationalStiffnessSelect_type; +extern select_type* IFC4X3_ADD2_IfcTrimmingSelect_type; +extern select_type* IFC4X3_ADD2_IfcUnit_type; +extern select_type* IFC4X3_ADD2_IfcValue_type; +extern select_type* IFC4X3_ADD2_IfcVectorOrDirection_type; +extern select_type* IFC4X3_ADD2_IfcWarpingStiffnessSelect_type; + + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcActionRequestTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcActionRequestTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcActionRequestTypeEnum::Class() { return *IFC4X3_ADD2_IfcActionRequestTypeEnum_type; } + +Ifc4x3_add2::IfcActionRequestTypeEnum::IfcActionRequestTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcActionRequestTypeEnum::IfcActionRequestTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcActionRequestTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcActionRequestTypeEnum::IfcActionRequestTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcActionRequestTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcActionRequestTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 7 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "EMAIL", "FAX", "PHONE", "POST", "VERBAL", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcActionRequestTypeEnum::Value Ifc4x3_add2::IfcActionRequestTypeEnum::FromString(const std::string& s) { + if (s == "EMAIL") return ::Ifc4x3_add2::IfcActionRequestTypeEnum::IfcActionRequestType_EMAIL; + if (s == "FAX") return ::Ifc4x3_add2::IfcActionRequestTypeEnum::IfcActionRequestType_FAX; + if (s == "PHONE") return ::Ifc4x3_add2::IfcActionRequestTypeEnum::IfcActionRequestType_PHONE; + if (s == "POST") return ::Ifc4x3_add2::IfcActionRequestTypeEnum::IfcActionRequestType_POST; + if (s == "VERBAL") return ::Ifc4x3_add2::IfcActionRequestTypeEnum::IfcActionRequestType_VERBAL; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcActionRequestTypeEnum::IfcActionRequestType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcActionRequestTypeEnum::IfcActionRequestType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcActionRequestTypeEnum::operator Ifc4x3_add2::IfcActionRequestTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcActionSourceTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcActionSourceTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcActionSourceTypeEnum::Class() { return *IFC4X3_ADD2_IfcActionSourceTypeEnum_type; } + +Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcActionSourceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcActionSourceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcActionSourceTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 27 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BRAKES", "BUOYANCY", "COMPLETION_G1", "CREEP", "CURRENT", "DEAD_LOAD_G", "EARTHQUAKE_E", "ERECTION", "FIRE", "ICE", "IMPACT", "IMPULSE", "LACK_OF_FIT", "LIVE_LOAD_Q", "PRESTRESSING_P", "PROPPING", "RAIN", "SETTLEMENT_U", "SHRINKAGE", "SNOW_S", "SYSTEM_IMPERFECTION", "TEMPERATURE_T", "TRANSPORT", "WAVE", "WIND_W", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcActionSourceTypeEnum::Value Ifc4x3_add2::IfcActionSourceTypeEnum::FromString(const std::string& s) { + if (s == "BRAKES") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_BRAKES; + if (s == "BUOYANCY") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_BUOYANCY; + if (s == "COMPLETION_G1") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_COMPLETION_G1; + if (s == "CREEP") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_CREEP; + if (s == "CURRENT") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_CURRENT; + if (s == "DEAD_LOAD_G") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_DEAD_LOAD_G; + if (s == "EARTHQUAKE_E") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_EARTHQUAKE_E; + if (s == "ERECTION") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_ERECTION; + if (s == "FIRE") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_FIRE; + if (s == "ICE") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_ICE; + if (s == "IMPACT") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_IMPACT; + if (s == "IMPULSE") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_IMPULSE; + if (s == "LACK_OF_FIT") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_LACK_OF_FIT; + if (s == "LIVE_LOAD_Q") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_LIVE_LOAD_Q; + if (s == "PRESTRESSING_P") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_PRESTRESSING_P; + if (s == "PROPPING") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_PROPPING; + if (s == "RAIN") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_RAIN; + if (s == "SETTLEMENT_U") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_SETTLEMENT_U; + if (s == "SHRINKAGE") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_SHRINKAGE; + if (s == "SNOW_S") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_SNOW_S; + if (s == "SYSTEM_IMPERFECTION") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_SYSTEM_IMPERFECTION; + if (s == "TEMPERATURE_T") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_TEMPERATURE_T; + if (s == "TRANSPORT") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_TRANSPORT; + if (s == "WAVE") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_WAVE; + if (s == "WIND_W") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_WIND_W; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcActionSourceTypeEnum::IfcActionSourceType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcActionSourceTypeEnum::operator Ifc4x3_add2::IfcActionSourceTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcActionTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcActionTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcActionTypeEnum::Class() { return *IFC4X3_ADD2_IfcActionTypeEnum_type; } + +Ifc4x3_add2::IfcActionTypeEnum::IfcActionTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcActionTypeEnum::IfcActionTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcActionTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcActionTypeEnum::IfcActionTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcActionTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcActionTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "EXTRAORDINARY_A", "PERMANENT_G", "VARIABLE_Q", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcActionTypeEnum::Value Ifc4x3_add2::IfcActionTypeEnum::FromString(const std::string& s) { + if (s == "EXTRAORDINARY_A") return ::Ifc4x3_add2::IfcActionTypeEnum::IfcActionType_EXTRAORDINARY_A; + if (s == "PERMANENT_G") return ::Ifc4x3_add2::IfcActionTypeEnum::IfcActionType_PERMANENT_G; + if (s == "VARIABLE_Q") return ::Ifc4x3_add2::IfcActionTypeEnum::IfcActionType_VARIABLE_Q; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcActionTypeEnum::IfcActionType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcActionTypeEnum::IfcActionType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcActionTypeEnum::operator Ifc4x3_add2::IfcActionTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcActuatorTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcActuatorTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcActuatorTypeEnum::Class() { return *IFC4X3_ADD2_IfcActuatorTypeEnum_type; } + +Ifc4x3_add2::IfcActuatorTypeEnum::IfcActuatorTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcActuatorTypeEnum::IfcActuatorTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcActuatorTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcActuatorTypeEnum::IfcActuatorTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcActuatorTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcActuatorTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 7 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ELECTRICACTUATOR", "HANDOPERATEDACTUATOR", "HYDRAULICACTUATOR", "PNEUMATICACTUATOR", "THERMOSTATICACTUATOR", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcActuatorTypeEnum::Value Ifc4x3_add2::IfcActuatorTypeEnum::FromString(const std::string& s) { + if (s == "ELECTRICACTUATOR") return ::Ifc4x3_add2::IfcActuatorTypeEnum::IfcActuatorType_ELECTRICACTUATOR; + if (s == "HANDOPERATEDACTUATOR") return ::Ifc4x3_add2::IfcActuatorTypeEnum::IfcActuatorType_HANDOPERATEDACTUATOR; + if (s == "HYDRAULICACTUATOR") return ::Ifc4x3_add2::IfcActuatorTypeEnum::IfcActuatorType_HYDRAULICACTUATOR; + if (s == "PNEUMATICACTUATOR") return ::Ifc4x3_add2::IfcActuatorTypeEnum::IfcActuatorType_PNEUMATICACTUATOR; + if (s == "THERMOSTATICACTUATOR") return ::Ifc4x3_add2::IfcActuatorTypeEnum::IfcActuatorType_THERMOSTATICACTUATOR; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcActuatorTypeEnum::IfcActuatorType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcActuatorTypeEnum::IfcActuatorType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcActuatorTypeEnum::operator Ifc4x3_add2::IfcActuatorTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAddressTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcAddressTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAddressTypeEnum::Class() { return *IFC4X3_ADD2_IfcAddressTypeEnum_type; } + +Ifc4x3_add2::IfcAddressTypeEnum::IfcAddressTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcAddressTypeEnum::IfcAddressTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAddressTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcAddressTypeEnum::IfcAddressTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAddressTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcAddressTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "DISTRIBUTIONPOINT", "HOME", "OFFICE", "SITE", "USERDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcAddressTypeEnum::Value Ifc4x3_add2::IfcAddressTypeEnum::FromString(const std::string& s) { + if (s == "DISTRIBUTIONPOINT") return ::Ifc4x3_add2::IfcAddressTypeEnum::IfcAddressType_DISTRIBUTIONPOINT; + if (s == "HOME") return ::Ifc4x3_add2::IfcAddressTypeEnum::IfcAddressType_HOME; + if (s == "OFFICE") return ::Ifc4x3_add2::IfcAddressTypeEnum::IfcAddressType_OFFICE; + if (s == "SITE") return ::Ifc4x3_add2::IfcAddressTypeEnum::IfcAddressType_SITE; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcAddressTypeEnum::IfcAddressType_USERDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcAddressTypeEnum::operator Ifc4x3_add2::IfcAddressTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcAirTerminalBoxTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::Class() { return *IFC4X3_ADD2_IfcAirTerminalBoxTypeEnum_type; } + +Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::IfcAirTerminalBoxTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::IfcAirTerminalBoxTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAirTerminalBoxTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::IfcAirTerminalBoxTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAirTerminalBoxTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CONSTANTFLOW", "VARIABLEFLOWPRESSUREDEPENDANT", "VARIABLEFLOWPRESSUREINDEPENDANT", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::Value Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::FromString(const std::string& s) { + if (s == "CONSTANTFLOW") return ::Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::IfcAirTerminalBoxType_CONSTANTFLOW; + if (s == "VARIABLEFLOWPRESSUREDEPENDANT") return ::Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::IfcAirTerminalBoxType_VARIABLEFLOWPRESSUREDEPENDANT; + if (s == "VARIABLEFLOWPRESSUREINDEPENDANT") return ::Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::IfcAirTerminalBoxType_VARIABLEFLOWPRESSUREINDEPENDANT; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::IfcAirTerminalBoxType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::IfcAirTerminalBoxType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::operator Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAirTerminalTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcAirTerminalTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAirTerminalTypeEnum::Class() { return *IFC4X3_ADD2_IfcAirTerminalTypeEnum_type; } + +Ifc4x3_add2::IfcAirTerminalTypeEnum::IfcAirTerminalTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcAirTerminalTypeEnum::IfcAirTerminalTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAirTerminalTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcAirTerminalTypeEnum::IfcAirTerminalTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAirTerminalTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcAirTerminalTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 6 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "DIFFUSER", "GRILLE", "LOUVRE", "REGISTER", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcAirTerminalTypeEnum::Value Ifc4x3_add2::IfcAirTerminalTypeEnum::FromString(const std::string& s) { + if (s == "DIFFUSER") return ::Ifc4x3_add2::IfcAirTerminalTypeEnum::IfcAirTerminalType_DIFFUSER; + if (s == "GRILLE") return ::Ifc4x3_add2::IfcAirTerminalTypeEnum::IfcAirTerminalType_GRILLE; + if (s == "LOUVRE") return ::Ifc4x3_add2::IfcAirTerminalTypeEnum::IfcAirTerminalType_LOUVRE; + if (s == "REGISTER") return ::Ifc4x3_add2::IfcAirTerminalTypeEnum::IfcAirTerminalType_REGISTER; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcAirTerminalTypeEnum::IfcAirTerminalType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcAirTerminalTypeEnum::IfcAirTerminalType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcAirTerminalTypeEnum::operator Ifc4x3_add2::IfcAirTerminalTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcAirToAirHeatRecoveryTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::Class() { return *IFC4X3_ADD2_IfcAirToAirHeatRecoveryTypeEnum_type; } + +Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::IfcAirToAirHeatRecoveryTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::IfcAirToAirHeatRecoveryTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAirToAirHeatRecoveryTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::IfcAirToAirHeatRecoveryTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAirToAirHeatRecoveryTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 11 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "FIXEDPLATECOUNTERFLOWEXCHANGER", "FIXEDPLATECROSSFLOWEXCHANGER", "FIXEDPLATEPARALLELFLOWEXCHANGER", "HEATPIPE", "ROTARYWHEEL", "RUNAROUNDCOILLOOP", "THERMOSIPHONCOILTYPEHEATEXCHANGERS", "THERMOSIPHONSEALEDTUBEHEATEXCHANGERS", "TWINTOWERENTHALPYRECOVERYLOOPS", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::Value Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::FromString(const std::string& s) { + if (s == "FIXEDPLATECOUNTERFLOWEXCHANGER") return ::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::IfcAirToAirHeatRecoveryType_FIXEDPLATECOUNTERFLOWEXCHANGER; + if (s == "FIXEDPLATECROSSFLOWEXCHANGER") return ::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::IfcAirToAirHeatRecoveryType_FIXEDPLATECROSSFLOWEXCHANGER; + if (s == "FIXEDPLATEPARALLELFLOWEXCHANGER") return ::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::IfcAirToAirHeatRecoveryType_FIXEDPLATEPARALLELFLOWEXCHANGER; + if (s == "HEATPIPE") return ::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::IfcAirToAirHeatRecoveryType_HEATPIPE; + if (s == "ROTARYWHEEL") return ::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::IfcAirToAirHeatRecoveryType_ROTARYWHEEL; + if (s == "RUNAROUNDCOILLOOP") return ::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::IfcAirToAirHeatRecoveryType_RUNAROUNDCOILLOOP; + if (s == "THERMOSIPHONCOILTYPEHEATEXCHANGERS") return ::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::IfcAirToAirHeatRecoveryType_THERMOSIPHONCOILTYPEHEATEXCHANGERS; + if (s == "THERMOSIPHONSEALEDTUBEHEATEXCHANGERS") return ::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::IfcAirToAirHeatRecoveryType_THERMOSIPHONSEALEDTUBEHEATEXCHANGERS; + if (s == "TWINTOWERENTHALPYRECOVERYLOOPS") return ::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::IfcAirToAirHeatRecoveryType_TWINTOWERENTHALPYRECOVERYLOOPS; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::IfcAirToAirHeatRecoveryType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::IfcAirToAirHeatRecoveryType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::operator Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAlarmTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcAlarmTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAlarmTypeEnum::Class() { return *IFC4X3_ADD2_IfcAlarmTypeEnum_type; } + +Ifc4x3_add2::IfcAlarmTypeEnum::IfcAlarmTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcAlarmTypeEnum::IfcAlarmTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAlarmTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcAlarmTypeEnum::IfcAlarmTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAlarmTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcAlarmTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 10 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BELL", "BREAKGLASSBUTTON", "LIGHT", "MANUALPULLBOX", "RAILWAYCROCODILE", "RAILWAYDETONATOR", "SIREN", "WHISTLE", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcAlarmTypeEnum::Value Ifc4x3_add2::IfcAlarmTypeEnum::FromString(const std::string& s) { + if (s == "BELL") return ::Ifc4x3_add2::IfcAlarmTypeEnum::IfcAlarmType_BELL; + if (s == "BREAKGLASSBUTTON") return ::Ifc4x3_add2::IfcAlarmTypeEnum::IfcAlarmType_BREAKGLASSBUTTON; + if (s == "LIGHT") return ::Ifc4x3_add2::IfcAlarmTypeEnum::IfcAlarmType_LIGHT; + if (s == "MANUALPULLBOX") return ::Ifc4x3_add2::IfcAlarmTypeEnum::IfcAlarmType_MANUALPULLBOX; + if (s == "RAILWAYCROCODILE") return ::Ifc4x3_add2::IfcAlarmTypeEnum::IfcAlarmType_RAILWAYCROCODILE; + if (s == "RAILWAYDETONATOR") return ::Ifc4x3_add2::IfcAlarmTypeEnum::IfcAlarmType_RAILWAYDETONATOR; + if (s == "SIREN") return ::Ifc4x3_add2::IfcAlarmTypeEnum::IfcAlarmType_SIREN; + if (s == "WHISTLE") return ::Ifc4x3_add2::IfcAlarmTypeEnum::IfcAlarmType_WHISTLE; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcAlarmTypeEnum::IfcAlarmType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcAlarmTypeEnum::IfcAlarmType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcAlarmTypeEnum::operator Ifc4x3_add2::IfcAlarmTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcAlignmentCantSegmentTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::Class() { return *IFC4X3_ADD2_IfcAlignmentCantSegmentTypeEnum_type; } + +Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::IfcAlignmentCantSegmentTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::IfcAlignmentCantSegmentTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAlignmentCantSegmentTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::IfcAlignmentCantSegmentTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAlignmentCantSegmentTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 7 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BLOSSCURVE", "CONSTANTCANT", "COSINECURVE", "HELMERTCURVE", "LINEARTRANSITION", "SINECURVE", "VIENNESEBEND" }; + return names[v]; +} + +Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::Value Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::FromString(const std::string& s) { + if (s == "BLOSSCURVE") return ::Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::IfcAlignmentCantSegmentType_BLOSSCURVE; + if (s == "CONSTANTCANT") return ::Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::IfcAlignmentCantSegmentType_CONSTANTCANT; + if (s == "COSINECURVE") return ::Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::IfcAlignmentCantSegmentType_COSINECURVE; + if (s == "HELMERTCURVE") return ::Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::IfcAlignmentCantSegmentType_HELMERTCURVE; + if (s == "LINEARTRANSITION") return ::Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::IfcAlignmentCantSegmentType_LINEARTRANSITION; + if (s == "SINECURVE") return ::Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::IfcAlignmentCantSegmentType_SINECURVE; + if (s == "VIENNESEBEND") return ::Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::IfcAlignmentCantSegmentType_VIENNESEBEND; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::operator Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcAlignmentHorizontalSegmentTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::Class() { return *IFC4X3_ADD2_IfcAlignmentHorizontalSegmentTypeEnum_type; } + +Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::IfcAlignmentHorizontalSegmentTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::IfcAlignmentHorizontalSegmentTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAlignmentHorizontalSegmentTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::IfcAlignmentHorizontalSegmentTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAlignmentHorizontalSegmentTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 9 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BLOSSCURVE", "CIRCULARARC", "CLOTHOID", "COSINECURVE", "CUBIC", "HELMERTCURVE", "LINE", "SINECURVE", "VIENNESEBEND" }; + return names[v]; +} + +Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::Value Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::FromString(const std::string& s) { + if (s == "BLOSSCURVE") return ::Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::IfcAlignmentHorizontalSegmentType_BLOSSCURVE; + if (s == "CIRCULARARC") return ::Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::IfcAlignmentHorizontalSegmentType_CIRCULARARC; + if (s == "CLOTHOID") return ::Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::IfcAlignmentHorizontalSegmentType_CLOTHOID; + if (s == "COSINECURVE") return ::Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::IfcAlignmentHorizontalSegmentType_COSINECURVE; + if (s == "CUBIC") return ::Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::IfcAlignmentHorizontalSegmentType_CUBIC; + if (s == "HELMERTCURVE") return ::Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::IfcAlignmentHorizontalSegmentType_HELMERTCURVE; + if (s == "LINE") return ::Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::IfcAlignmentHorizontalSegmentType_LINE; + if (s == "SINECURVE") return ::Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::IfcAlignmentHorizontalSegmentType_SINECURVE; + if (s == "VIENNESEBEND") return ::Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::IfcAlignmentHorizontalSegmentType_VIENNESEBEND; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::operator Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAlignmentTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcAlignmentTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAlignmentTypeEnum::Class() { return *IFC4X3_ADD2_IfcAlignmentTypeEnum_type; } + +Ifc4x3_add2::IfcAlignmentTypeEnum::IfcAlignmentTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcAlignmentTypeEnum::IfcAlignmentTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAlignmentTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcAlignmentTypeEnum::IfcAlignmentTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAlignmentTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcAlignmentTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 2 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcAlignmentTypeEnum::Value Ifc4x3_add2::IfcAlignmentTypeEnum::FromString(const std::string& s) { + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcAlignmentTypeEnum::IfcAlignmentType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcAlignmentTypeEnum::IfcAlignmentType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcAlignmentTypeEnum::operator Ifc4x3_add2::IfcAlignmentTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAlignmentVerticalSegmentTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcAlignmentVerticalSegmentTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAlignmentVerticalSegmentTypeEnum::Class() { return *IFC4X3_ADD2_IfcAlignmentVerticalSegmentTypeEnum_type; } + +Ifc4x3_add2::IfcAlignmentVerticalSegmentTypeEnum::IfcAlignmentVerticalSegmentTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcAlignmentVerticalSegmentTypeEnum::IfcAlignmentVerticalSegmentTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAlignmentVerticalSegmentTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcAlignmentVerticalSegmentTypeEnum::IfcAlignmentVerticalSegmentTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAlignmentVerticalSegmentTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcAlignmentVerticalSegmentTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CIRCULARARC", "CLOTHOID", "CONSTANTGRADIENT", "PARABOLICARC" }; + return names[v]; +} + +Ifc4x3_add2::IfcAlignmentVerticalSegmentTypeEnum::Value Ifc4x3_add2::IfcAlignmentVerticalSegmentTypeEnum::FromString(const std::string& s) { + if (s == "CIRCULARARC") return ::Ifc4x3_add2::IfcAlignmentVerticalSegmentTypeEnum::IfcAlignmentVerticalSegmentType_CIRCULARARC; + if (s == "CLOTHOID") return ::Ifc4x3_add2::IfcAlignmentVerticalSegmentTypeEnum::IfcAlignmentVerticalSegmentType_CLOTHOID; + if (s == "CONSTANTGRADIENT") return ::Ifc4x3_add2::IfcAlignmentVerticalSegmentTypeEnum::IfcAlignmentVerticalSegmentType_CONSTANTGRADIENT; + if (s == "PARABOLICARC") return ::Ifc4x3_add2::IfcAlignmentVerticalSegmentTypeEnum::IfcAlignmentVerticalSegmentType_PARABOLICARC; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcAlignmentVerticalSegmentTypeEnum::operator Ifc4x3_add2::IfcAlignmentVerticalSegmentTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAnalysisModelTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcAnalysisModelTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAnalysisModelTypeEnum::Class() { return *IFC4X3_ADD2_IfcAnalysisModelTypeEnum_type; } + +Ifc4x3_add2::IfcAnalysisModelTypeEnum::IfcAnalysisModelTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcAnalysisModelTypeEnum::IfcAnalysisModelTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAnalysisModelTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcAnalysisModelTypeEnum::IfcAnalysisModelTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAnalysisModelTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcAnalysisModelTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "IN_PLANE_LOADING_2D", "LOADING_3D", "OUT_PLANE_LOADING_2D", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcAnalysisModelTypeEnum::Value Ifc4x3_add2::IfcAnalysisModelTypeEnum::FromString(const std::string& s) { + if (s == "IN_PLANE_LOADING_2D") return ::Ifc4x3_add2::IfcAnalysisModelTypeEnum::IfcAnalysisModelType_IN_PLANE_LOADING_2D; + if (s == "LOADING_3D") return ::Ifc4x3_add2::IfcAnalysisModelTypeEnum::IfcAnalysisModelType_LOADING_3D; + if (s == "OUT_PLANE_LOADING_2D") return ::Ifc4x3_add2::IfcAnalysisModelTypeEnum::IfcAnalysisModelType_OUT_PLANE_LOADING_2D; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcAnalysisModelTypeEnum::IfcAnalysisModelType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcAnalysisModelTypeEnum::IfcAnalysisModelType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcAnalysisModelTypeEnum::operator Ifc4x3_add2::IfcAnalysisModelTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAnalysisTheoryTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcAnalysisTheoryTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAnalysisTheoryTypeEnum::Class() { return *IFC4X3_ADD2_IfcAnalysisTheoryTypeEnum_type; } + +Ifc4x3_add2::IfcAnalysisTheoryTypeEnum::IfcAnalysisTheoryTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcAnalysisTheoryTypeEnum::IfcAnalysisTheoryTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAnalysisTheoryTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcAnalysisTheoryTypeEnum::IfcAnalysisTheoryTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAnalysisTheoryTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcAnalysisTheoryTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 6 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "FIRST_ORDER_THEORY", "FULL_NONLINEAR_THEORY", "SECOND_ORDER_THEORY", "THIRD_ORDER_THEORY", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcAnalysisTheoryTypeEnum::Value Ifc4x3_add2::IfcAnalysisTheoryTypeEnum::FromString(const std::string& s) { + if (s == "FIRST_ORDER_THEORY") return ::Ifc4x3_add2::IfcAnalysisTheoryTypeEnum::IfcAnalysisTheoryType_FIRST_ORDER_THEORY; + if (s == "FULL_NONLINEAR_THEORY") return ::Ifc4x3_add2::IfcAnalysisTheoryTypeEnum::IfcAnalysisTheoryType_FULL_NONLINEAR_THEORY; + if (s == "SECOND_ORDER_THEORY") return ::Ifc4x3_add2::IfcAnalysisTheoryTypeEnum::IfcAnalysisTheoryType_SECOND_ORDER_THEORY; + if (s == "THIRD_ORDER_THEORY") return ::Ifc4x3_add2::IfcAnalysisTheoryTypeEnum::IfcAnalysisTheoryType_THIRD_ORDER_THEORY; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcAnalysisTheoryTypeEnum::IfcAnalysisTheoryType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcAnalysisTheoryTypeEnum::IfcAnalysisTheoryType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcAnalysisTheoryTypeEnum::operator Ifc4x3_add2::IfcAnalysisTheoryTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAnnotationTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcAnnotationTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAnnotationTypeEnum::Class() { return *IFC4X3_ADD2_IfcAnnotationTypeEnum_type; } + +Ifc4x3_add2::IfcAnnotationTypeEnum::IfcAnnotationTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcAnnotationTypeEnum::IfcAnnotationTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAnnotationTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcAnnotationTypeEnum::IfcAnnotationTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAnnotationTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcAnnotationTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 11 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CONTOURLINE", "DIMENSION", "ISOBAR", "ISOLUX", "ISOTHERM", "LEADER", "SURVEY", "SYMBOL", "TEXT", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcAnnotationTypeEnum::Value Ifc4x3_add2::IfcAnnotationTypeEnum::FromString(const std::string& s) { + if (s == "CONTOURLINE") return ::Ifc4x3_add2::IfcAnnotationTypeEnum::IfcAnnotationType_CONTOURLINE; + if (s == "DIMENSION") return ::Ifc4x3_add2::IfcAnnotationTypeEnum::IfcAnnotationType_DIMENSION; + if (s == "ISOBAR") return ::Ifc4x3_add2::IfcAnnotationTypeEnum::IfcAnnotationType_ISOBAR; + if (s == "ISOLUX") return ::Ifc4x3_add2::IfcAnnotationTypeEnum::IfcAnnotationType_ISOLUX; + if (s == "ISOTHERM") return ::Ifc4x3_add2::IfcAnnotationTypeEnum::IfcAnnotationType_ISOTHERM; + if (s == "LEADER") return ::Ifc4x3_add2::IfcAnnotationTypeEnum::IfcAnnotationType_LEADER; + if (s == "SURVEY") return ::Ifc4x3_add2::IfcAnnotationTypeEnum::IfcAnnotationType_SURVEY; + if (s == "SYMBOL") return ::Ifc4x3_add2::IfcAnnotationTypeEnum::IfcAnnotationType_SYMBOL; + if (s == "TEXT") return ::Ifc4x3_add2::IfcAnnotationTypeEnum::IfcAnnotationType_TEXT; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcAnnotationTypeEnum::IfcAnnotationType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcAnnotationTypeEnum::IfcAnnotationType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcAnnotationTypeEnum::operator Ifc4x3_add2::IfcAnnotationTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcArithmeticOperatorEnum::declaration() const { return *IFC4X3_ADD2_IfcArithmeticOperatorEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcArithmeticOperatorEnum::Class() { return *IFC4X3_ADD2_IfcArithmeticOperatorEnum_type; } + +Ifc4x3_add2::IfcArithmeticOperatorEnum::IfcArithmeticOperatorEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcArithmeticOperatorEnum::IfcArithmeticOperatorEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcArithmeticOperatorEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcArithmeticOperatorEnum::IfcArithmeticOperatorEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcArithmeticOperatorEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcArithmeticOperatorEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ADD", "DIVIDE", "MODULO", "MULTIPLY", "SUBTRACT" }; + return names[v]; +} + +Ifc4x3_add2::IfcArithmeticOperatorEnum::Value Ifc4x3_add2::IfcArithmeticOperatorEnum::FromString(const std::string& s) { + if (s == "ADD") return ::Ifc4x3_add2::IfcArithmeticOperatorEnum::IfcArithmeticOperator_ADD; + if (s == "DIVIDE") return ::Ifc4x3_add2::IfcArithmeticOperatorEnum::IfcArithmeticOperator_DIVIDE; + if (s == "MODULO") return ::Ifc4x3_add2::IfcArithmeticOperatorEnum::IfcArithmeticOperator_MODULO; + if (s == "MULTIPLY") return ::Ifc4x3_add2::IfcArithmeticOperatorEnum::IfcArithmeticOperator_MULTIPLY; + if (s == "SUBTRACT") return ::Ifc4x3_add2::IfcArithmeticOperatorEnum::IfcArithmeticOperator_SUBTRACT; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcArithmeticOperatorEnum::operator Ifc4x3_add2::IfcArithmeticOperatorEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAssemblyPlaceEnum::declaration() const { return *IFC4X3_ADD2_IfcAssemblyPlaceEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAssemblyPlaceEnum::Class() { return *IFC4X3_ADD2_IfcAssemblyPlaceEnum_type; } + +Ifc4x3_add2::IfcAssemblyPlaceEnum::IfcAssemblyPlaceEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcAssemblyPlaceEnum::IfcAssemblyPlaceEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAssemblyPlaceEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcAssemblyPlaceEnum::IfcAssemblyPlaceEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAssemblyPlaceEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcAssemblyPlaceEnum::ToString(Value v) { + if ( v < 0 || v >= 3 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "FACTORY", "SITE", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcAssemblyPlaceEnum::Value Ifc4x3_add2::IfcAssemblyPlaceEnum::FromString(const std::string& s) { + if (s == "FACTORY") return ::Ifc4x3_add2::IfcAssemblyPlaceEnum::IfcAssemblyPlace_FACTORY; + if (s == "SITE") return ::Ifc4x3_add2::IfcAssemblyPlaceEnum::IfcAssemblyPlace_SITE; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcAssemblyPlaceEnum::IfcAssemblyPlace_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcAssemblyPlaceEnum::operator Ifc4x3_add2::IfcAssemblyPlaceEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcAudioVisualApplianceTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::Class() { return *IFC4X3_ADD2_IfcAudioVisualApplianceTypeEnum_type; } + +Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::IfcAudioVisualApplianceTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::IfcAudioVisualApplianceTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAudioVisualApplianceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::IfcAudioVisualApplianceTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAudioVisualApplianceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 15 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "AMPLIFIER", "CAMERA", "COMMUNICATIONTERMINAL", "DISPLAY", "MICROPHONE", "PLAYER", "PROJECTOR", "RECEIVER", "RECORDINGEQUIPMENT", "SPEAKER", "SWITCHER", "TELEPHONE", "TUNER", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::Value Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::FromString(const std::string& s) { + if (s == "AMPLIFIER") return ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::IfcAudioVisualApplianceType_AMPLIFIER; + if (s == "CAMERA") return ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::IfcAudioVisualApplianceType_CAMERA; + if (s == "COMMUNICATIONTERMINAL") return ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::IfcAudioVisualApplianceType_COMMUNICATIONTERMINAL; + if (s == "DISPLAY") return ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::IfcAudioVisualApplianceType_DISPLAY; + if (s == "MICROPHONE") return ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::IfcAudioVisualApplianceType_MICROPHONE; + if (s == "PLAYER") return ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::IfcAudioVisualApplianceType_PLAYER; + if (s == "PROJECTOR") return ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::IfcAudioVisualApplianceType_PROJECTOR; + if (s == "RECEIVER") return ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::IfcAudioVisualApplianceType_RECEIVER; + if (s == "RECORDINGEQUIPMENT") return ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::IfcAudioVisualApplianceType_RECORDINGEQUIPMENT; + if (s == "SPEAKER") return ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::IfcAudioVisualApplianceType_SPEAKER; + if (s == "SWITCHER") return ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::IfcAudioVisualApplianceType_SWITCHER; + if (s == "TELEPHONE") return ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::IfcAudioVisualApplianceType_TELEPHONE; + if (s == "TUNER") return ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::IfcAudioVisualApplianceType_TUNER; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::IfcAudioVisualApplianceType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::IfcAudioVisualApplianceType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::operator Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBSplineCurveForm::declaration() const { return *IFC4X3_ADD2_IfcBSplineCurveForm_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBSplineCurveForm::Class() { return *IFC4X3_ADD2_IfcBSplineCurveForm_type; } + +Ifc4x3_add2::IfcBSplineCurveForm::IfcBSplineCurveForm(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcBSplineCurveForm::IfcBSplineCurveForm(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBSplineCurveForm_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcBSplineCurveForm::IfcBSplineCurveForm(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBSplineCurveForm_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcBSplineCurveForm::ToString(Value v) { + if ( v < 0 || v >= 6 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CIRCULAR_ARC", "ELLIPTIC_ARC", "HYPERBOLIC_ARC", "PARABOLIC_ARC", "POLYLINE_FORM", "UNSPECIFIED" }; + return names[v]; +} + +Ifc4x3_add2::IfcBSplineCurveForm::Value Ifc4x3_add2::IfcBSplineCurveForm::FromString(const std::string& s) { + if (s == "CIRCULAR_ARC") return ::Ifc4x3_add2::IfcBSplineCurveForm::IfcBSplineCurveForm_CIRCULAR_ARC; + if (s == "ELLIPTIC_ARC") return ::Ifc4x3_add2::IfcBSplineCurveForm::IfcBSplineCurveForm_ELLIPTIC_ARC; + if (s == "HYPERBOLIC_ARC") return ::Ifc4x3_add2::IfcBSplineCurveForm::IfcBSplineCurveForm_HYPERBOLIC_ARC; + if (s == "PARABOLIC_ARC") return ::Ifc4x3_add2::IfcBSplineCurveForm::IfcBSplineCurveForm_PARABOLIC_ARC; + if (s == "POLYLINE_FORM") return ::Ifc4x3_add2::IfcBSplineCurveForm::IfcBSplineCurveForm_POLYLINE_FORM; + if (s == "UNSPECIFIED") return ::Ifc4x3_add2::IfcBSplineCurveForm::IfcBSplineCurveForm_UNSPECIFIED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcBSplineCurveForm::operator Ifc4x3_add2::IfcBSplineCurveForm::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBSplineSurfaceForm::declaration() const { return *IFC4X3_ADD2_IfcBSplineSurfaceForm_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBSplineSurfaceForm::Class() { return *IFC4X3_ADD2_IfcBSplineSurfaceForm_type; } + +Ifc4x3_add2::IfcBSplineSurfaceForm::IfcBSplineSurfaceForm(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcBSplineSurfaceForm::IfcBSplineSurfaceForm(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBSplineSurfaceForm_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcBSplineSurfaceForm::IfcBSplineSurfaceForm(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBSplineSurfaceForm_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcBSplineSurfaceForm::ToString(Value v) { + if ( v < 0 || v >= 11 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CONICAL_SURF", "CYLINDRICAL_SURF", "GENERALISED_CONE", "PLANE_SURF", "QUADRIC_SURF", "RULED_SURF", "SPHERICAL_SURF", "SURF_OF_LINEAR_EXTRUSION", "SURF_OF_REVOLUTION", "TOROIDAL_SURF", "UNSPECIFIED" }; + return names[v]; +} + +Ifc4x3_add2::IfcBSplineSurfaceForm::Value Ifc4x3_add2::IfcBSplineSurfaceForm::FromString(const std::string& s) { + if (s == "CONICAL_SURF") return ::Ifc4x3_add2::IfcBSplineSurfaceForm::IfcBSplineSurfaceForm_CONICAL_SURF; + if (s == "CYLINDRICAL_SURF") return ::Ifc4x3_add2::IfcBSplineSurfaceForm::IfcBSplineSurfaceForm_CYLINDRICAL_SURF; + if (s == "GENERALISED_CONE") return ::Ifc4x3_add2::IfcBSplineSurfaceForm::IfcBSplineSurfaceForm_GENERALISED_CONE; + if (s == "PLANE_SURF") return ::Ifc4x3_add2::IfcBSplineSurfaceForm::IfcBSplineSurfaceForm_PLANE_SURF; + if (s == "QUADRIC_SURF") return ::Ifc4x3_add2::IfcBSplineSurfaceForm::IfcBSplineSurfaceForm_QUADRIC_SURF; + if (s == "RULED_SURF") return ::Ifc4x3_add2::IfcBSplineSurfaceForm::IfcBSplineSurfaceForm_RULED_SURF; + if (s == "SPHERICAL_SURF") return ::Ifc4x3_add2::IfcBSplineSurfaceForm::IfcBSplineSurfaceForm_SPHERICAL_SURF; + if (s == "SURF_OF_LINEAR_EXTRUSION") return ::Ifc4x3_add2::IfcBSplineSurfaceForm::IfcBSplineSurfaceForm_SURF_OF_LINEAR_EXTRUSION; + if (s == "SURF_OF_REVOLUTION") return ::Ifc4x3_add2::IfcBSplineSurfaceForm::IfcBSplineSurfaceForm_SURF_OF_REVOLUTION; + if (s == "TOROIDAL_SURF") return ::Ifc4x3_add2::IfcBSplineSurfaceForm::IfcBSplineSurfaceForm_TOROIDAL_SURF; + if (s == "UNSPECIFIED") return ::Ifc4x3_add2::IfcBSplineSurfaceForm::IfcBSplineSurfaceForm_UNSPECIFIED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcBSplineSurfaceForm::operator Ifc4x3_add2::IfcBSplineSurfaceForm::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBeamTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcBeamTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBeamTypeEnum::Class() { return *IFC4X3_ADD2_IfcBeamTypeEnum_type; } + +Ifc4x3_add2::IfcBeamTypeEnum::IfcBeamTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcBeamTypeEnum::IfcBeamTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBeamTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcBeamTypeEnum::IfcBeamTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBeamTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcBeamTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 14 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BEAM", "CORNICE", "DIAPHRAGM", "EDGEBEAM", "GIRDER_SEGMENT", "HATSTONE", "HOLLOWCORE", "JOIST", "LINTEL", "PIERCAP", "SPANDREL", "T_BEAM", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcBeamTypeEnum::Value Ifc4x3_add2::IfcBeamTypeEnum::FromString(const std::string& s) { + if (s == "BEAM") return ::Ifc4x3_add2::IfcBeamTypeEnum::IfcBeamType_BEAM; + if (s == "CORNICE") return ::Ifc4x3_add2::IfcBeamTypeEnum::IfcBeamType_CORNICE; + if (s == "DIAPHRAGM") return ::Ifc4x3_add2::IfcBeamTypeEnum::IfcBeamType_DIAPHRAGM; + if (s == "EDGEBEAM") return ::Ifc4x3_add2::IfcBeamTypeEnum::IfcBeamType_EDGEBEAM; + if (s == "GIRDER_SEGMENT") return ::Ifc4x3_add2::IfcBeamTypeEnum::IfcBeamType_GIRDER_SEGMENT; + if (s == "HATSTONE") return ::Ifc4x3_add2::IfcBeamTypeEnum::IfcBeamType_HATSTONE; + if (s == "HOLLOWCORE") return ::Ifc4x3_add2::IfcBeamTypeEnum::IfcBeamType_HOLLOWCORE; + if (s == "JOIST") return ::Ifc4x3_add2::IfcBeamTypeEnum::IfcBeamType_JOIST; + if (s == "LINTEL") return ::Ifc4x3_add2::IfcBeamTypeEnum::IfcBeamType_LINTEL; + if (s == "PIERCAP") return ::Ifc4x3_add2::IfcBeamTypeEnum::IfcBeamType_PIERCAP; + if (s == "SPANDREL") return ::Ifc4x3_add2::IfcBeamTypeEnum::IfcBeamType_SPANDREL; + if (s == "T_BEAM") return ::Ifc4x3_add2::IfcBeamTypeEnum::IfcBeamType_T_BEAM; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcBeamTypeEnum::IfcBeamType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcBeamTypeEnum::IfcBeamType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcBeamTypeEnum::operator Ifc4x3_add2::IfcBeamTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBearingTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcBearingTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBearingTypeEnum::Class() { return *IFC4X3_ADD2_IfcBearingTypeEnum_type; } + +Ifc4x3_add2::IfcBearingTypeEnum::IfcBearingTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcBearingTypeEnum::IfcBearingTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBearingTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcBearingTypeEnum::IfcBearingTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBearingTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcBearingTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 10 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CYLINDRICAL", "DISK", "ELASTOMERIC", "GUIDE", "POT", "ROCKER", "ROLLER", "SPHERICAL", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcBearingTypeEnum::Value Ifc4x3_add2::IfcBearingTypeEnum::FromString(const std::string& s) { + if (s == "CYLINDRICAL") return ::Ifc4x3_add2::IfcBearingTypeEnum::IfcBearingType_CYLINDRICAL; + if (s == "DISK") return ::Ifc4x3_add2::IfcBearingTypeEnum::IfcBearingType_DISK; + if (s == "ELASTOMERIC") return ::Ifc4x3_add2::IfcBearingTypeEnum::IfcBearingType_ELASTOMERIC; + if (s == "GUIDE") return ::Ifc4x3_add2::IfcBearingTypeEnum::IfcBearingType_GUIDE; + if (s == "POT") return ::Ifc4x3_add2::IfcBearingTypeEnum::IfcBearingType_POT; + if (s == "ROCKER") return ::Ifc4x3_add2::IfcBearingTypeEnum::IfcBearingType_ROCKER; + if (s == "ROLLER") return ::Ifc4x3_add2::IfcBearingTypeEnum::IfcBearingType_ROLLER; + if (s == "SPHERICAL") return ::Ifc4x3_add2::IfcBearingTypeEnum::IfcBearingType_SPHERICAL; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcBearingTypeEnum::IfcBearingType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcBearingTypeEnum::IfcBearingType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcBearingTypeEnum::operator Ifc4x3_add2::IfcBearingTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBenchmarkEnum::declaration() const { return *IFC4X3_ADD2_IfcBenchmarkEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBenchmarkEnum::Class() { return *IFC4X3_ADD2_IfcBenchmarkEnum_type; } + +Ifc4x3_add2::IfcBenchmarkEnum::IfcBenchmarkEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcBenchmarkEnum::IfcBenchmarkEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBenchmarkEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcBenchmarkEnum::IfcBenchmarkEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBenchmarkEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcBenchmarkEnum::ToString(Value v) { + if ( v < 0 || v >= 10 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "EQUALTO", "GREATERTHAN", "GREATERTHANOREQUALTO", "INCLUDEDIN", "INCLUDES", "LESSTHAN", "LESSTHANOREQUALTO", "NOTEQUALTO", "NOTINCLUDEDIN", "NOTINCLUDES" }; + return names[v]; +} + +Ifc4x3_add2::IfcBenchmarkEnum::Value Ifc4x3_add2::IfcBenchmarkEnum::FromString(const std::string& s) { + if (s == "EQUALTO") return ::Ifc4x3_add2::IfcBenchmarkEnum::IfcBenchmark_EQUALTO; + if (s == "GREATERTHAN") return ::Ifc4x3_add2::IfcBenchmarkEnum::IfcBenchmark_GREATERTHAN; + if (s == "GREATERTHANOREQUALTO") return ::Ifc4x3_add2::IfcBenchmarkEnum::IfcBenchmark_GREATERTHANOREQUALTO; + if (s == "INCLUDEDIN") return ::Ifc4x3_add2::IfcBenchmarkEnum::IfcBenchmark_INCLUDEDIN; + if (s == "INCLUDES") return ::Ifc4x3_add2::IfcBenchmarkEnum::IfcBenchmark_INCLUDES; + if (s == "LESSTHAN") return ::Ifc4x3_add2::IfcBenchmarkEnum::IfcBenchmark_LESSTHAN; + if (s == "LESSTHANOREQUALTO") return ::Ifc4x3_add2::IfcBenchmarkEnum::IfcBenchmark_LESSTHANOREQUALTO; + if (s == "NOTEQUALTO") return ::Ifc4x3_add2::IfcBenchmarkEnum::IfcBenchmark_NOTEQUALTO; + if (s == "NOTINCLUDEDIN") return ::Ifc4x3_add2::IfcBenchmarkEnum::IfcBenchmark_NOTINCLUDEDIN; + if (s == "NOTINCLUDES") return ::Ifc4x3_add2::IfcBenchmarkEnum::IfcBenchmark_NOTINCLUDES; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcBenchmarkEnum::operator Ifc4x3_add2::IfcBenchmarkEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBoilerTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcBoilerTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBoilerTypeEnum::Class() { return *IFC4X3_ADD2_IfcBoilerTypeEnum_type; } + +Ifc4x3_add2::IfcBoilerTypeEnum::IfcBoilerTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcBoilerTypeEnum::IfcBoilerTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBoilerTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcBoilerTypeEnum::IfcBoilerTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBoilerTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcBoilerTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "STEAM", "WATER", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcBoilerTypeEnum::Value Ifc4x3_add2::IfcBoilerTypeEnum::FromString(const std::string& s) { + if (s == "STEAM") return ::Ifc4x3_add2::IfcBoilerTypeEnum::IfcBoilerType_STEAM; + if (s == "WATER") return ::Ifc4x3_add2::IfcBoilerTypeEnum::IfcBoilerType_WATER; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcBoilerTypeEnum::IfcBoilerType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcBoilerTypeEnum::IfcBoilerType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcBoilerTypeEnum::operator Ifc4x3_add2::IfcBoilerTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBooleanOperator::declaration() const { return *IFC4X3_ADD2_IfcBooleanOperator_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBooleanOperator::Class() { return *IFC4X3_ADD2_IfcBooleanOperator_type; } + +Ifc4x3_add2::IfcBooleanOperator::IfcBooleanOperator(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcBooleanOperator::IfcBooleanOperator(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBooleanOperator_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcBooleanOperator::IfcBooleanOperator(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBooleanOperator_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcBooleanOperator::ToString(Value v) { + if ( v < 0 || v >= 3 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "DIFFERENCE", "INTERSECTION", "UNION" }; + return names[v]; +} + +Ifc4x3_add2::IfcBooleanOperator::Value Ifc4x3_add2::IfcBooleanOperator::FromString(const std::string& s) { + if (s == "DIFFERENCE") return ::Ifc4x3_add2::IfcBooleanOperator::IfcBooleanOperator_DIFFERENCE; + if (s == "INTERSECTION") return ::Ifc4x3_add2::IfcBooleanOperator::IfcBooleanOperator_INTERSECTION; + if (s == "UNION") return ::Ifc4x3_add2::IfcBooleanOperator::IfcBooleanOperator_UNION; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcBooleanOperator::operator Ifc4x3_add2::IfcBooleanOperator::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBridgePartTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcBridgePartTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBridgePartTypeEnum::Class() { return *IFC4X3_ADD2_IfcBridgePartTypeEnum_type; } + +Ifc4x3_add2::IfcBridgePartTypeEnum::IfcBridgePartTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcBridgePartTypeEnum::IfcBridgePartTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBridgePartTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcBridgePartTypeEnum::IfcBridgePartTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBridgePartTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcBridgePartTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 12 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ABUTMENT", "DECK", "DECK_SEGMENT", "FOUNDATION", "PIER", "PIER_SEGMENT", "PYLON", "SUBSTRUCTURE", "SUPERSTRUCTURE", "SURFACESTRUCTURE", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcBridgePartTypeEnum::Value Ifc4x3_add2::IfcBridgePartTypeEnum::FromString(const std::string& s) { + if (s == "ABUTMENT") return ::Ifc4x3_add2::IfcBridgePartTypeEnum::IfcBridgePartType_ABUTMENT; + if (s == "DECK") return ::Ifc4x3_add2::IfcBridgePartTypeEnum::IfcBridgePartType_DECK; + if (s == "DECK_SEGMENT") return ::Ifc4x3_add2::IfcBridgePartTypeEnum::IfcBridgePartType_DECK_SEGMENT; + if (s == "FOUNDATION") return ::Ifc4x3_add2::IfcBridgePartTypeEnum::IfcBridgePartType_FOUNDATION; + if (s == "PIER") return ::Ifc4x3_add2::IfcBridgePartTypeEnum::IfcBridgePartType_PIER; + if (s == "PIER_SEGMENT") return ::Ifc4x3_add2::IfcBridgePartTypeEnum::IfcBridgePartType_PIER_SEGMENT; + if (s == "PYLON") return ::Ifc4x3_add2::IfcBridgePartTypeEnum::IfcBridgePartType_PYLON; + if (s == "SUBSTRUCTURE") return ::Ifc4x3_add2::IfcBridgePartTypeEnum::IfcBridgePartType_SUBSTRUCTURE; + if (s == "SUPERSTRUCTURE") return ::Ifc4x3_add2::IfcBridgePartTypeEnum::IfcBridgePartType_SUPERSTRUCTURE; + if (s == "SURFACESTRUCTURE") return ::Ifc4x3_add2::IfcBridgePartTypeEnum::IfcBridgePartType_SURFACESTRUCTURE; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcBridgePartTypeEnum::IfcBridgePartType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcBridgePartTypeEnum::IfcBridgePartType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcBridgePartTypeEnum::operator Ifc4x3_add2::IfcBridgePartTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBridgeTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcBridgeTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBridgeTypeEnum::Class() { return *IFC4X3_ADD2_IfcBridgeTypeEnum_type; } + +Ifc4x3_add2::IfcBridgeTypeEnum::IfcBridgeTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcBridgeTypeEnum::IfcBridgeTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBridgeTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcBridgeTypeEnum::IfcBridgeTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBridgeTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcBridgeTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 10 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ARCHED", "CABLE_STAYED", "CANTILEVER", "CULVERT", "FRAMEWORK", "GIRDER", "SUSPENSION", "TRUSS", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcBridgeTypeEnum::Value Ifc4x3_add2::IfcBridgeTypeEnum::FromString(const std::string& s) { + if (s == "ARCHED") return ::Ifc4x3_add2::IfcBridgeTypeEnum::IfcBridgeType_ARCHED; + if (s == "CABLE_STAYED") return ::Ifc4x3_add2::IfcBridgeTypeEnum::IfcBridgeType_CABLE_STAYED; + if (s == "CANTILEVER") return ::Ifc4x3_add2::IfcBridgeTypeEnum::IfcBridgeType_CANTILEVER; + if (s == "CULVERT") return ::Ifc4x3_add2::IfcBridgeTypeEnum::IfcBridgeType_CULVERT; + if (s == "FRAMEWORK") return ::Ifc4x3_add2::IfcBridgeTypeEnum::IfcBridgeType_FRAMEWORK; + if (s == "GIRDER") return ::Ifc4x3_add2::IfcBridgeTypeEnum::IfcBridgeType_GIRDER; + if (s == "SUSPENSION") return ::Ifc4x3_add2::IfcBridgeTypeEnum::IfcBridgeType_SUSPENSION; + if (s == "TRUSS") return ::Ifc4x3_add2::IfcBridgeTypeEnum::IfcBridgeType_TRUSS; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcBridgeTypeEnum::IfcBridgeType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcBridgeTypeEnum::IfcBridgeType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcBridgeTypeEnum::operator Ifc4x3_add2::IfcBridgeTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBuildingElementPartTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcBuildingElementPartTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBuildingElementPartTypeEnum::Class() { return *IFC4X3_ADD2_IfcBuildingElementPartTypeEnum_type; } + +Ifc4x3_add2::IfcBuildingElementPartTypeEnum::IfcBuildingElementPartTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcBuildingElementPartTypeEnum::IfcBuildingElementPartTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBuildingElementPartTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcBuildingElementPartTypeEnum::IfcBuildingElementPartTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBuildingElementPartTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcBuildingElementPartTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 7 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "APRON", "ARMOURUNIT", "INSULATION", "PRECASTPANEL", "SAFETYCAGE", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcBuildingElementPartTypeEnum::Value Ifc4x3_add2::IfcBuildingElementPartTypeEnum::FromString(const std::string& s) { + if (s == "APRON") return ::Ifc4x3_add2::IfcBuildingElementPartTypeEnum::IfcBuildingElementPartType_APRON; + if (s == "ARMOURUNIT") return ::Ifc4x3_add2::IfcBuildingElementPartTypeEnum::IfcBuildingElementPartType_ARMOURUNIT; + if (s == "INSULATION") return ::Ifc4x3_add2::IfcBuildingElementPartTypeEnum::IfcBuildingElementPartType_INSULATION; + if (s == "PRECASTPANEL") return ::Ifc4x3_add2::IfcBuildingElementPartTypeEnum::IfcBuildingElementPartType_PRECASTPANEL; + if (s == "SAFETYCAGE") return ::Ifc4x3_add2::IfcBuildingElementPartTypeEnum::IfcBuildingElementPartType_SAFETYCAGE; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcBuildingElementPartTypeEnum::IfcBuildingElementPartType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcBuildingElementPartTypeEnum::IfcBuildingElementPartType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcBuildingElementPartTypeEnum::operator Ifc4x3_add2::IfcBuildingElementPartTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcBuildingElementProxyTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::Class() { return *IFC4X3_ADD2_IfcBuildingElementProxyTypeEnum_type; } + +Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::IfcBuildingElementProxyTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::IfcBuildingElementProxyTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBuildingElementProxyTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::IfcBuildingElementProxyTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBuildingElementProxyTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 7 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "COMPLEX", "ELEMENT", "PARTIAL", "PROVISIONFORSPACE", "PROVISIONFORVOID", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::Value Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::FromString(const std::string& s) { + if (s == "COMPLEX") return ::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::IfcBuildingElementProxyType_COMPLEX; + if (s == "ELEMENT") return ::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::IfcBuildingElementProxyType_ELEMENT; + if (s == "PARTIAL") return ::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::IfcBuildingElementProxyType_PARTIAL; + if (s == "PROVISIONFORSPACE") return ::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::IfcBuildingElementProxyType_PROVISIONFORSPACE; + if (s == "PROVISIONFORVOID") return ::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::IfcBuildingElementProxyType_PROVISIONFORVOID; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::IfcBuildingElementProxyType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::IfcBuildingElementProxyType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::operator Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBuildingSystemTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcBuildingSystemTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBuildingSystemTypeEnum::Class() { return *IFC4X3_ADD2_IfcBuildingSystemTypeEnum_type; } + +Ifc4x3_add2::IfcBuildingSystemTypeEnum::IfcBuildingSystemTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcBuildingSystemTypeEnum::IfcBuildingSystemTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBuildingSystemTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcBuildingSystemTypeEnum::IfcBuildingSystemTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBuildingSystemTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcBuildingSystemTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 8 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "FENESTRATION", "FOUNDATION", "LOADBEARING", "OUTERSHELL", "SHADING", "TRANSPORT", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcBuildingSystemTypeEnum::Value Ifc4x3_add2::IfcBuildingSystemTypeEnum::FromString(const std::string& s) { + if (s == "FENESTRATION") return ::Ifc4x3_add2::IfcBuildingSystemTypeEnum::IfcBuildingSystemType_FENESTRATION; + if (s == "FOUNDATION") return ::Ifc4x3_add2::IfcBuildingSystemTypeEnum::IfcBuildingSystemType_FOUNDATION; + if (s == "LOADBEARING") return ::Ifc4x3_add2::IfcBuildingSystemTypeEnum::IfcBuildingSystemType_LOADBEARING; + if (s == "OUTERSHELL") return ::Ifc4x3_add2::IfcBuildingSystemTypeEnum::IfcBuildingSystemType_OUTERSHELL; + if (s == "SHADING") return ::Ifc4x3_add2::IfcBuildingSystemTypeEnum::IfcBuildingSystemType_SHADING; + if (s == "TRANSPORT") return ::Ifc4x3_add2::IfcBuildingSystemTypeEnum::IfcBuildingSystemType_TRANSPORT; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcBuildingSystemTypeEnum::IfcBuildingSystemType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcBuildingSystemTypeEnum::IfcBuildingSystemType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcBuildingSystemTypeEnum::operator Ifc4x3_add2::IfcBuildingSystemTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBuiltSystemTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcBuiltSystemTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBuiltSystemTypeEnum::Class() { return *IFC4X3_ADD2_IfcBuiltSystemTypeEnum_type; } + +Ifc4x3_add2::IfcBuiltSystemTypeEnum::IfcBuiltSystemTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcBuiltSystemTypeEnum::IfcBuiltSystemTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBuiltSystemTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcBuiltSystemTypeEnum::IfcBuiltSystemTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBuiltSystemTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcBuiltSystemTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 15 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "EROSIONPREVENTION", "FENESTRATION", "FOUNDATION", "LOADBEARING", "MOORING", "OUTERSHELL", "PRESTRESSING", "RAILWAYLINE", "RAILWAYTRACK", "REINFORCING", "SHADING", "TRACKCIRCUIT", "TRANSPORT", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcBuiltSystemTypeEnum::Value Ifc4x3_add2::IfcBuiltSystemTypeEnum::FromString(const std::string& s) { + if (s == "EROSIONPREVENTION") return ::Ifc4x3_add2::IfcBuiltSystemTypeEnum::IfcBuiltSystemType_EROSIONPREVENTION; + if (s == "FENESTRATION") return ::Ifc4x3_add2::IfcBuiltSystemTypeEnum::IfcBuiltSystemType_FENESTRATION; + if (s == "FOUNDATION") return ::Ifc4x3_add2::IfcBuiltSystemTypeEnum::IfcBuiltSystemType_FOUNDATION; + if (s == "LOADBEARING") return ::Ifc4x3_add2::IfcBuiltSystemTypeEnum::IfcBuiltSystemType_LOADBEARING; + if (s == "MOORING") return ::Ifc4x3_add2::IfcBuiltSystemTypeEnum::IfcBuiltSystemType_MOORING; + if (s == "OUTERSHELL") return ::Ifc4x3_add2::IfcBuiltSystemTypeEnum::IfcBuiltSystemType_OUTERSHELL; + if (s == "PRESTRESSING") return ::Ifc4x3_add2::IfcBuiltSystemTypeEnum::IfcBuiltSystemType_PRESTRESSING; + if (s == "RAILWAYLINE") return ::Ifc4x3_add2::IfcBuiltSystemTypeEnum::IfcBuiltSystemType_RAILWAYLINE; + if (s == "RAILWAYTRACK") return ::Ifc4x3_add2::IfcBuiltSystemTypeEnum::IfcBuiltSystemType_RAILWAYTRACK; + if (s == "REINFORCING") return ::Ifc4x3_add2::IfcBuiltSystemTypeEnum::IfcBuiltSystemType_REINFORCING; + if (s == "SHADING") return ::Ifc4x3_add2::IfcBuiltSystemTypeEnum::IfcBuiltSystemType_SHADING; + if (s == "TRACKCIRCUIT") return ::Ifc4x3_add2::IfcBuiltSystemTypeEnum::IfcBuiltSystemType_TRACKCIRCUIT; + if (s == "TRANSPORT") return ::Ifc4x3_add2::IfcBuiltSystemTypeEnum::IfcBuiltSystemType_TRANSPORT; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcBuiltSystemTypeEnum::IfcBuiltSystemType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcBuiltSystemTypeEnum::IfcBuiltSystemType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcBuiltSystemTypeEnum::operator Ifc4x3_add2::IfcBuiltSystemTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBurnerTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcBurnerTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcBurnerTypeEnum::Class() { return *IFC4X3_ADD2_IfcBurnerTypeEnum_type; } + +Ifc4x3_add2::IfcBurnerTypeEnum::IfcBurnerTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcBurnerTypeEnum::IfcBurnerTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBurnerTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcBurnerTypeEnum::IfcBurnerTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBurnerTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcBurnerTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 2 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcBurnerTypeEnum::Value Ifc4x3_add2::IfcBurnerTypeEnum::FromString(const std::string& s) { + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcBurnerTypeEnum::IfcBurnerType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcBurnerTypeEnum::IfcBurnerType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcBurnerTypeEnum::operator Ifc4x3_add2::IfcBurnerTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcCableCarrierFittingTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::Class() { return *IFC4X3_ADD2_IfcCableCarrierFittingTypeEnum_type; } + +Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::IfcCableCarrierFittingTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::IfcCableCarrierFittingTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCableCarrierFittingTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::IfcCableCarrierFittingTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCableCarrierFittingTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 9 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BEND", "CONNECTOR", "CROSS", "JUNCTION", "REDUCER", "TEE", "TRANSITION", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::Value Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::FromString(const std::string& s) { + if (s == "BEND") return ::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::IfcCableCarrierFittingType_BEND; + if (s == "CONNECTOR") return ::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::IfcCableCarrierFittingType_CONNECTOR; + if (s == "CROSS") return ::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::IfcCableCarrierFittingType_CROSS; + if (s == "JUNCTION") return ::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::IfcCableCarrierFittingType_JUNCTION; + if (s == "REDUCER") return ::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::IfcCableCarrierFittingType_REDUCER; + if (s == "TEE") return ::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::IfcCableCarrierFittingType_TEE; + if (s == "TRANSITION") return ::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::IfcCableCarrierFittingType_TRANSITION; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::IfcCableCarrierFittingType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::IfcCableCarrierFittingType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::operator Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcCableCarrierSegmentTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::Class() { return *IFC4X3_ADD2_IfcCableCarrierSegmentTypeEnum_type; } + +Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::IfcCableCarrierSegmentTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::IfcCableCarrierSegmentTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCableCarrierSegmentTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::IfcCableCarrierSegmentTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCableCarrierSegmentTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 9 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CABLEBRACKET", "CABLELADDERSEGMENT", "CABLETRAYSEGMENT", "CABLETRUNKINGSEGMENT", "CATENARYWIRE", "CONDUITSEGMENT", "DROPPER", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::Value Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::FromString(const std::string& s) { + if (s == "CABLEBRACKET") return ::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::IfcCableCarrierSegmentType_CABLEBRACKET; + if (s == "CABLELADDERSEGMENT") return ::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::IfcCableCarrierSegmentType_CABLELADDERSEGMENT; + if (s == "CABLETRAYSEGMENT") return ::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::IfcCableCarrierSegmentType_CABLETRAYSEGMENT; + if (s == "CABLETRUNKINGSEGMENT") return ::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::IfcCableCarrierSegmentType_CABLETRUNKINGSEGMENT; + if (s == "CATENARYWIRE") return ::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::IfcCableCarrierSegmentType_CATENARYWIRE; + if (s == "CONDUITSEGMENT") return ::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::IfcCableCarrierSegmentType_CONDUITSEGMENT; + if (s == "DROPPER") return ::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::IfcCableCarrierSegmentType_DROPPER; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::IfcCableCarrierSegmentType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::IfcCableCarrierSegmentType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::operator Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCableFittingTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcCableFittingTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCableFittingTypeEnum::Class() { return *IFC4X3_ADD2_IfcCableFittingTypeEnum_type; } + +Ifc4x3_add2::IfcCableFittingTypeEnum::IfcCableFittingTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcCableFittingTypeEnum::IfcCableFittingTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCableFittingTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcCableFittingTypeEnum::IfcCableFittingTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCableFittingTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcCableFittingTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 8 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CONNECTOR", "ENTRY", "EXIT", "FANOUT", "JUNCTION", "TRANSITION", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcCableFittingTypeEnum::Value Ifc4x3_add2::IfcCableFittingTypeEnum::FromString(const std::string& s) { + if (s == "CONNECTOR") return ::Ifc4x3_add2::IfcCableFittingTypeEnum::IfcCableFittingType_CONNECTOR; + if (s == "ENTRY") return ::Ifc4x3_add2::IfcCableFittingTypeEnum::IfcCableFittingType_ENTRY; + if (s == "EXIT") return ::Ifc4x3_add2::IfcCableFittingTypeEnum::IfcCableFittingType_EXIT; + if (s == "FANOUT") return ::Ifc4x3_add2::IfcCableFittingTypeEnum::IfcCableFittingType_FANOUT; + if (s == "JUNCTION") return ::Ifc4x3_add2::IfcCableFittingTypeEnum::IfcCableFittingType_JUNCTION; + if (s == "TRANSITION") return ::Ifc4x3_add2::IfcCableFittingTypeEnum::IfcCableFittingType_TRANSITION; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcCableFittingTypeEnum::IfcCableFittingType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcCableFittingTypeEnum::IfcCableFittingType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcCableFittingTypeEnum::operator Ifc4x3_add2::IfcCableFittingTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCableSegmentTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcCableSegmentTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCableSegmentTypeEnum::Class() { return *IFC4X3_ADD2_IfcCableSegmentTypeEnum_type; } + +Ifc4x3_add2::IfcCableSegmentTypeEnum::IfcCableSegmentTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcCableSegmentTypeEnum::IfcCableSegmentTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCableSegmentTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcCableSegmentTypeEnum::IfcCableSegmentTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCableSegmentTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcCableSegmentTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 12 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BUSBARSEGMENT", "CABLESEGMENT", "CONDUCTORSEGMENT", "CONTACTWIRESEGMENT", "CORESEGMENT", "FIBERSEGMENT", "FIBERTUBE", "OPTICALCABLESEGMENT", "STITCHWIRE", "WIREPAIRSEGMENT", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcCableSegmentTypeEnum::Value Ifc4x3_add2::IfcCableSegmentTypeEnum::FromString(const std::string& s) { + if (s == "BUSBARSEGMENT") return ::Ifc4x3_add2::IfcCableSegmentTypeEnum::IfcCableSegmentType_BUSBARSEGMENT; + if (s == "CABLESEGMENT") return ::Ifc4x3_add2::IfcCableSegmentTypeEnum::IfcCableSegmentType_CABLESEGMENT; + if (s == "CONDUCTORSEGMENT") return ::Ifc4x3_add2::IfcCableSegmentTypeEnum::IfcCableSegmentType_CONDUCTORSEGMENT; + if (s == "CONTACTWIRESEGMENT") return ::Ifc4x3_add2::IfcCableSegmentTypeEnum::IfcCableSegmentType_CONTACTWIRESEGMENT; + if (s == "CORESEGMENT") return ::Ifc4x3_add2::IfcCableSegmentTypeEnum::IfcCableSegmentType_CORESEGMENT; + if (s == "FIBERSEGMENT") return ::Ifc4x3_add2::IfcCableSegmentTypeEnum::IfcCableSegmentType_FIBERSEGMENT; + if (s == "FIBERTUBE") return ::Ifc4x3_add2::IfcCableSegmentTypeEnum::IfcCableSegmentType_FIBERTUBE; + if (s == "OPTICALCABLESEGMENT") return ::Ifc4x3_add2::IfcCableSegmentTypeEnum::IfcCableSegmentType_OPTICALCABLESEGMENT; + if (s == "STITCHWIRE") return ::Ifc4x3_add2::IfcCableSegmentTypeEnum::IfcCableSegmentType_STITCHWIRE; + if (s == "WIREPAIRSEGMENT") return ::Ifc4x3_add2::IfcCableSegmentTypeEnum::IfcCableSegmentType_WIREPAIRSEGMENT; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcCableSegmentTypeEnum::IfcCableSegmentType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcCableSegmentTypeEnum::IfcCableSegmentType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcCableSegmentTypeEnum::operator Ifc4x3_add2::IfcCableSegmentTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCaissonFoundationTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcCaissonFoundationTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCaissonFoundationTypeEnum::Class() { return *IFC4X3_ADD2_IfcCaissonFoundationTypeEnum_type; } + +Ifc4x3_add2::IfcCaissonFoundationTypeEnum::IfcCaissonFoundationTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcCaissonFoundationTypeEnum::IfcCaissonFoundationTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCaissonFoundationTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcCaissonFoundationTypeEnum::IfcCaissonFoundationTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCaissonFoundationTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcCaissonFoundationTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CAISSON", "WELL", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcCaissonFoundationTypeEnum::Value Ifc4x3_add2::IfcCaissonFoundationTypeEnum::FromString(const std::string& s) { + if (s == "CAISSON") return ::Ifc4x3_add2::IfcCaissonFoundationTypeEnum::IfcCaissonFoundationType_CAISSON; + if (s == "WELL") return ::Ifc4x3_add2::IfcCaissonFoundationTypeEnum::IfcCaissonFoundationType_WELL; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcCaissonFoundationTypeEnum::IfcCaissonFoundationType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcCaissonFoundationTypeEnum::IfcCaissonFoundationType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcCaissonFoundationTypeEnum::operator Ifc4x3_add2::IfcCaissonFoundationTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcChangeActionEnum::declaration() const { return *IFC4X3_ADD2_IfcChangeActionEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcChangeActionEnum::Class() { return *IFC4X3_ADD2_IfcChangeActionEnum_type; } + +Ifc4x3_add2::IfcChangeActionEnum::IfcChangeActionEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcChangeActionEnum::IfcChangeActionEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcChangeActionEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcChangeActionEnum::IfcChangeActionEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcChangeActionEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcChangeActionEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ADDED", "DELETED", "MODIFIED", "NOCHANGE", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcChangeActionEnum::Value Ifc4x3_add2::IfcChangeActionEnum::FromString(const std::string& s) { + if (s == "ADDED") return ::Ifc4x3_add2::IfcChangeActionEnum::IfcChangeAction_ADDED; + if (s == "DELETED") return ::Ifc4x3_add2::IfcChangeActionEnum::IfcChangeAction_DELETED; + if (s == "MODIFIED") return ::Ifc4x3_add2::IfcChangeActionEnum::IfcChangeAction_MODIFIED; + if (s == "NOCHANGE") return ::Ifc4x3_add2::IfcChangeActionEnum::IfcChangeAction_NOCHANGE; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcChangeActionEnum::IfcChangeAction_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcChangeActionEnum::operator Ifc4x3_add2::IfcChangeActionEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcChillerTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcChillerTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcChillerTypeEnum::Class() { return *IFC4X3_ADD2_IfcChillerTypeEnum_type; } + +Ifc4x3_add2::IfcChillerTypeEnum::IfcChillerTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcChillerTypeEnum::IfcChillerTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcChillerTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcChillerTypeEnum::IfcChillerTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcChillerTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcChillerTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "AIRCOOLED", "HEATRECOVERY", "WATERCOOLED", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcChillerTypeEnum::Value Ifc4x3_add2::IfcChillerTypeEnum::FromString(const std::string& s) { + if (s == "AIRCOOLED") return ::Ifc4x3_add2::IfcChillerTypeEnum::IfcChillerType_AIRCOOLED; + if (s == "HEATRECOVERY") return ::Ifc4x3_add2::IfcChillerTypeEnum::IfcChillerType_HEATRECOVERY; + if (s == "WATERCOOLED") return ::Ifc4x3_add2::IfcChillerTypeEnum::IfcChillerType_WATERCOOLED; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcChillerTypeEnum::IfcChillerType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcChillerTypeEnum::IfcChillerType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcChillerTypeEnum::operator Ifc4x3_add2::IfcChillerTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcChimneyTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcChimneyTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcChimneyTypeEnum::Class() { return *IFC4X3_ADD2_IfcChimneyTypeEnum_type; } + +Ifc4x3_add2::IfcChimneyTypeEnum::IfcChimneyTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcChimneyTypeEnum::IfcChimneyTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcChimneyTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcChimneyTypeEnum::IfcChimneyTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcChimneyTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcChimneyTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 2 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcChimneyTypeEnum::Value Ifc4x3_add2::IfcChimneyTypeEnum::FromString(const std::string& s) { + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcChimneyTypeEnum::IfcChimneyType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcChimneyTypeEnum::IfcChimneyType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcChimneyTypeEnum::operator Ifc4x3_add2::IfcChimneyTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCoilTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcCoilTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCoilTypeEnum::Class() { return *IFC4X3_ADD2_IfcCoilTypeEnum_type; } + +Ifc4x3_add2::IfcCoilTypeEnum::IfcCoilTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcCoilTypeEnum::IfcCoilTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCoilTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcCoilTypeEnum::IfcCoilTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCoilTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcCoilTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 9 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "DXCOOLINGCOIL", "ELECTRICHEATINGCOIL", "GASHEATINGCOIL", "HYDRONICCOIL", "STEAMHEATINGCOIL", "WATERCOOLINGCOIL", "WATERHEATINGCOIL", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcCoilTypeEnum::Value Ifc4x3_add2::IfcCoilTypeEnum::FromString(const std::string& s) { + if (s == "DXCOOLINGCOIL") return ::Ifc4x3_add2::IfcCoilTypeEnum::IfcCoilType_DXCOOLINGCOIL; + if (s == "ELECTRICHEATINGCOIL") return ::Ifc4x3_add2::IfcCoilTypeEnum::IfcCoilType_ELECTRICHEATINGCOIL; + if (s == "GASHEATINGCOIL") return ::Ifc4x3_add2::IfcCoilTypeEnum::IfcCoilType_GASHEATINGCOIL; + if (s == "HYDRONICCOIL") return ::Ifc4x3_add2::IfcCoilTypeEnum::IfcCoilType_HYDRONICCOIL; + if (s == "STEAMHEATINGCOIL") return ::Ifc4x3_add2::IfcCoilTypeEnum::IfcCoilType_STEAMHEATINGCOIL; + if (s == "WATERCOOLINGCOIL") return ::Ifc4x3_add2::IfcCoilTypeEnum::IfcCoilType_WATERCOOLINGCOIL; + if (s == "WATERHEATINGCOIL") return ::Ifc4x3_add2::IfcCoilTypeEnum::IfcCoilType_WATERHEATINGCOIL; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcCoilTypeEnum::IfcCoilType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcCoilTypeEnum::IfcCoilType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcCoilTypeEnum::operator Ifc4x3_add2::IfcCoilTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcColumnTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcColumnTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcColumnTypeEnum::Class() { return *IFC4X3_ADD2_IfcColumnTypeEnum_type; } + +Ifc4x3_add2::IfcColumnTypeEnum::IfcColumnTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcColumnTypeEnum::IfcColumnTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcColumnTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcColumnTypeEnum::IfcColumnTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcColumnTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcColumnTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 7 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "COLUMN", "PIERSTEM", "PIERSTEM_SEGMENT", "PILASTER", "STANDCOLUMN", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcColumnTypeEnum::Value Ifc4x3_add2::IfcColumnTypeEnum::FromString(const std::string& s) { + if (s == "COLUMN") return ::Ifc4x3_add2::IfcColumnTypeEnum::IfcColumnType_COLUMN; + if (s == "PIERSTEM") return ::Ifc4x3_add2::IfcColumnTypeEnum::IfcColumnType_PIERSTEM; + if (s == "PIERSTEM_SEGMENT") return ::Ifc4x3_add2::IfcColumnTypeEnum::IfcColumnType_PIERSTEM_SEGMENT; + if (s == "PILASTER") return ::Ifc4x3_add2::IfcColumnTypeEnum::IfcColumnType_PILASTER; + if (s == "STANDCOLUMN") return ::Ifc4x3_add2::IfcColumnTypeEnum::IfcColumnType_STANDCOLUMN; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcColumnTypeEnum::IfcColumnType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcColumnTypeEnum::IfcColumnType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcColumnTypeEnum::operator Ifc4x3_add2::IfcColumnTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcCommunicationsApplianceTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::Class() { return *IFC4X3_ADD2_IfcCommunicationsApplianceTypeEnum_type; } + +Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCommunicationsApplianceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCommunicationsApplianceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 26 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ANTENNA", "AUTOMATON", "COMPUTER", "FAX", "GATEWAY", "INTELLIGENTPERIPHERAL", "IPNETWORKEQUIPMENT", "LINESIDEELECTRONICUNIT", "MODEM", "NETWORKAPPLIANCE", "NETWORKBRIDGE", "NETWORKHUB", "OPTICALLINETERMINAL", "OPTICALNETWORKUNIT", "PRINTER", "RADIOBLOCKCENTER", "REPEATER", "ROUTER", "SCANNER", "TELECOMMAND", "TELEPHONYEXCHANGE", "TRANSITIONCOMPONENT", "TRANSPONDER", "TRANSPORTEQUIPMENT", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::Value Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::FromString(const std::string& s) { + if (s == "ANTENNA") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_ANTENNA; + if (s == "AUTOMATON") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_AUTOMATON; + if (s == "COMPUTER") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_COMPUTER; + if (s == "FAX") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_FAX; + if (s == "GATEWAY") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_GATEWAY; + if (s == "INTELLIGENTPERIPHERAL") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_INTELLIGENTPERIPHERAL; + if (s == "IPNETWORKEQUIPMENT") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_IPNETWORKEQUIPMENT; + if (s == "LINESIDEELECTRONICUNIT") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_LINESIDEELECTRONICUNIT; + if (s == "MODEM") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_MODEM; + if (s == "NETWORKAPPLIANCE") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_NETWORKAPPLIANCE; + if (s == "NETWORKBRIDGE") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_NETWORKBRIDGE; + if (s == "NETWORKHUB") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_NETWORKHUB; + if (s == "OPTICALLINETERMINAL") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_OPTICALLINETERMINAL; + if (s == "OPTICALNETWORKUNIT") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_OPTICALNETWORKUNIT; + if (s == "PRINTER") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_PRINTER; + if (s == "RADIOBLOCKCENTER") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_RADIOBLOCKCENTER; + if (s == "REPEATER") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_REPEATER; + if (s == "ROUTER") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_ROUTER; + if (s == "SCANNER") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_SCANNER; + if (s == "TELECOMMAND") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_TELECOMMAND; + if (s == "TELEPHONYEXCHANGE") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_TELEPHONYEXCHANGE; + if (s == "TRANSITIONCOMPONENT") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_TRANSITIONCOMPONENT; + if (s == "TRANSPONDER") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_TRANSPONDER; + if (s == "TRANSPORTEQUIPMENT") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_TRANSPORTEQUIPMENT; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::IfcCommunicationsApplianceType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::operator Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcComplexPropertyTemplateTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcComplexPropertyTemplateTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcComplexPropertyTemplateTypeEnum::Class() { return *IFC4X3_ADD2_IfcComplexPropertyTemplateTypeEnum_type; } + +Ifc4x3_add2::IfcComplexPropertyTemplateTypeEnum::IfcComplexPropertyTemplateTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcComplexPropertyTemplateTypeEnum::IfcComplexPropertyTemplateTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcComplexPropertyTemplateTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcComplexPropertyTemplateTypeEnum::IfcComplexPropertyTemplateTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcComplexPropertyTemplateTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcComplexPropertyTemplateTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 2 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "P_COMPLEX", "Q_COMPLEX" }; + return names[v]; +} + +Ifc4x3_add2::IfcComplexPropertyTemplateTypeEnum::Value Ifc4x3_add2::IfcComplexPropertyTemplateTypeEnum::FromString(const std::string& s) { + if (s == "P_COMPLEX") return ::Ifc4x3_add2::IfcComplexPropertyTemplateTypeEnum::IfcComplexPropertyTemplateType_P_COMPLEX; + if (s == "Q_COMPLEX") return ::Ifc4x3_add2::IfcComplexPropertyTemplateTypeEnum::IfcComplexPropertyTemplateType_Q_COMPLEX; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcComplexPropertyTemplateTypeEnum::operator Ifc4x3_add2::IfcComplexPropertyTemplateTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCompressorTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcCompressorTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCompressorTypeEnum::Class() { return *IFC4X3_ADD2_IfcCompressorTypeEnum_type; } + +Ifc4x3_add2::IfcCompressorTypeEnum::IfcCompressorTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcCompressorTypeEnum::IfcCompressorTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCompressorTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcCompressorTypeEnum::IfcCompressorTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCompressorTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcCompressorTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 17 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BOOSTER", "DYNAMIC", "HERMETIC", "OPENTYPE", "RECIPROCATING", "ROLLINGPISTON", "ROTARY", "ROTARYVANE", "SCROLL", "SEMIHERMETIC", "SINGLESCREW", "SINGLESTAGE", "TROCHOIDAL", "TWINSCREW", "WELDEDSHELLHERMETIC", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcCompressorTypeEnum::Value Ifc4x3_add2::IfcCompressorTypeEnum::FromString(const std::string& s) { + if (s == "BOOSTER") return ::Ifc4x3_add2::IfcCompressorTypeEnum::IfcCompressorType_BOOSTER; + if (s == "DYNAMIC") return ::Ifc4x3_add2::IfcCompressorTypeEnum::IfcCompressorType_DYNAMIC; + if (s == "HERMETIC") return ::Ifc4x3_add2::IfcCompressorTypeEnum::IfcCompressorType_HERMETIC; + if (s == "OPENTYPE") return ::Ifc4x3_add2::IfcCompressorTypeEnum::IfcCompressorType_OPENTYPE; + if (s == "RECIPROCATING") return ::Ifc4x3_add2::IfcCompressorTypeEnum::IfcCompressorType_RECIPROCATING; + if (s == "ROLLINGPISTON") return ::Ifc4x3_add2::IfcCompressorTypeEnum::IfcCompressorType_ROLLINGPISTON; + if (s == "ROTARY") return ::Ifc4x3_add2::IfcCompressorTypeEnum::IfcCompressorType_ROTARY; + if (s == "ROTARYVANE") return ::Ifc4x3_add2::IfcCompressorTypeEnum::IfcCompressorType_ROTARYVANE; + if (s == "SCROLL") return ::Ifc4x3_add2::IfcCompressorTypeEnum::IfcCompressorType_SCROLL; + if (s == "SEMIHERMETIC") return ::Ifc4x3_add2::IfcCompressorTypeEnum::IfcCompressorType_SEMIHERMETIC; + if (s == "SINGLESCREW") return ::Ifc4x3_add2::IfcCompressorTypeEnum::IfcCompressorType_SINGLESCREW; + if (s == "SINGLESTAGE") return ::Ifc4x3_add2::IfcCompressorTypeEnum::IfcCompressorType_SINGLESTAGE; + if (s == "TROCHOIDAL") return ::Ifc4x3_add2::IfcCompressorTypeEnum::IfcCompressorType_TROCHOIDAL; + if (s == "TWINSCREW") return ::Ifc4x3_add2::IfcCompressorTypeEnum::IfcCompressorType_TWINSCREW; + if (s == "WELDEDSHELLHERMETIC") return ::Ifc4x3_add2::IfcCompressorTypeEnum::IfcCompressorType_WELDEDSHELLHERMETIC; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcCompressorTypeEnum::IfcCompressorType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcCompressorTypeEnum::IfcCompressorType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcCompressorTypeEnum::operator Ifc4x3_add2::IfcCompressorTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCondenserTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcCondenserTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCondenserTypeEnum::Class() { return *IFC4X3_ADD2_IfcCondenserTypeEnum_type; } + +Ifc4x3_add2::IfcCondenserTypeEnum::IfcCondenserTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcCondenserTypeEnum::IfcCondenserTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCondenserTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcCondenserTypeEnum::IfcCondenserTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCondenserTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcCondenserTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 9 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "AIRCOOLED", "EVAPORATIVECOOLED", "WATERCOOLED", "WATERCOOLEDBRAZEDPLATE", "WATERCOOLEDSHELLCOIL", "WATERCOOLEDSHELLTUBE", "WATERCOOLEDTUBEINTUBE", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcCondenserTypeEnum::Value Ifc4x3_add2::IfcCondenserTypeEnum::FromString(const std::string& s) { + if (s == "AIRCOOLED") return ::Ifc4x3_add2::IfcCondenserTypeEnum::IfcCondenserType_AIRCOOLED; + if (s == "EVAPORATIVECOOLED") return ::Ifc4x3_add2::IfcCondenserTypeEnum::IfcCondenserType_EVAPORATIVECOOLED; + if (s == "WATERCOOLED") return ::Ifc4x3_add2::IfcCondenserTypeEnum::IfcCondenserType_WATERCOOLED; + if (s == "WATERCOOLEDBRAZEDPLATE") return ::Ifc4x3_add2::IfcCondenserTypeEnum::IfcCondenserType_WATERCOOLEDBRAZEDPLATE; + if (s == "WATERCOOLEDSHELLCOIL") return ::Ifc4x3_add2::IfcCondenserTypeEnum::IfcCondenserType_WATERCOOLEDSHELLCOIL; + if (s == "WATERCOOLEDSHELLTUBE") return ::Ifc4x3_add2::IfcCondenserTypeEnum::IfcCondenserType_WATERCOOLEDSHELLTUBE; + if (s == "WATERCOOLEDTUBEINTUBE") return ::Ifc4x3_add2::IfcCondenserTypeEnum::IfcCondenserType_WATERCOOLEDTUBEINTUBE; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcCondenserTypeEnum::IfcCondenserType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcCondenserTypeEnum::IfcCondenserType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcCondenserTypeEnum::operator Ifc4x3_add2::IfcCondenserTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcConnectionTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcConnectionTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcConnectionTypeEnum::Class() { return *IFC4X3_ADD2_IfcConnectionTypeEnum_type; } + +Ifc4x3_add2::IfcConnectionTypeEnum::IfcConnectionTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcConnectionTypeEnum::IfcConnectionTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConnectionTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcConnectionTypeEnum::IfcConnectionTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConnectionTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcConnectionTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ATEND", "ATPATH", "ATSTART", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcConnectionTypeEnum::Value Ifc4x3_add2::IfcConnectionTypeEnum::FromString(const std::string& s) { + if (s == "ATEND") return ::Ifc4x3_add2::IfcConnectionTypeEnum::IfcConnectionType_ATEND; + if (s == "ATPATH") return ::Ifc4x3_add2::IfcConnectionTypeEnum::IfcConnectionType_ATPATH; + if (s == "ATSTART") return ::Ifc4x3_add2::IfcConnectionTypeEnum::IfcConnectionType_ATSTART; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcConnectionTypeEnum::IfcConnectionType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcConnectionTypeEnum::operator Ifc4x3_add2::IfcConnectionTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcConstraintEnum::declaration() const { return *IFC4X3_ADD2_IfcConstraintEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcConstraintEnum::Class() { return *IFC4X3_ADD2_IfcConstraintEnum_type; } + +Ifc4x3_add2::IfcConstraintEnum::IfcConstraintEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcConstraintEnum::IfcConstraintEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConstraintEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcConstraintEnum::IfcConstraintEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConstraintEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcConstraintEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ADVISORY", "HARD", "SOFT", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcConstraintEnum::Value Ifc4x3_add2::IfcConstraintEnum::FromString(const std::string& s) { + if (s == "ADVISORY") return ::Ifc4x3_add2::IfcConstraintEnum::IfcConstraint_ADVISORY; + if (s == "HARD") return ::Ifc4x3_add2::IfcConstraintEnum::IfcConstraint_HARD; + if (s == "SOFT") return ::Ifc4x3_add2::IfcConstraintEnum::IfcConstraint_SOFT; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcConstraintEnum::IfcConstraint_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcConstraintEnum::IfcConstraint_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcConstraintEnum::operator Ifc4x3_add2::IfcConstraintEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcConstructionEquipmentResourceTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::Class() { return *IFC4X3_ADD2_IfcConstructionEquipmentResourceTypeEnum_type; } + +Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::IfcConstructionEquipmentResourceTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::IfcConstructionEquipmentResourceTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConstructionEquipmentResourceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::IfcConstructionEquipmentResourceTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConstructionEquipmentResourceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 10 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "DEMOLISHING", "EARTHMOVING", "ERECTING", "HEATING", "LIGHTING", "PAVING", "PUMPING", "TRANSPORTING", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::Value Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::FromString(const std::string& s) { + if (s == "DEMOLISHING") return ::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::IfcConstructionEquipmentResourceType_DEMOLISHING; + if (s == "EARTHMOVING") return ::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::IfcConstructionEquipmentResourceType_EARTHMOVING; + if (s == "ERECTING") return ::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::IfcConstructionEquipmentResourceType_ERECTING; + if (s == "HEATING") return ::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::IfcConstructionEquipmentResourceType_HEATING; + if (s == "LIGHTING") return ::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::IfcConstructionEquipmentResourceType_LIGHTING; + if (s == "PAVING") return ::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::IfcConstructionEquipmentResourceType_PAVING; + if (s == "PUMPING") return ::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::IfcConstructionEquipmentResourceType_PUMPING; + if (s == "TRANSPORTING") return ::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::IfcConstructionEquipmentResourceType_TRANSPORTING; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::IfcConstructionEquipmentResourceType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::IfcConstructionEquipmentResourceType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::operator Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcConstructionMaterialResourceTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::Class() { return *IFC4X3_ADD2_IfcConstructionMaterialResourceTypeEnum_type; } + +Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::IfcConstructionMaterialResourceTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::IfcConstructionMaterialResourceTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConstructionMaterialResourceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::IfcConstructionMaterialResourceTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConstructionMaterialResourceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 11 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "AGGREGATES", "CONCRETE", "DRYWALL", "FUEL", "GYPSUM", "MASONRY", "METAL", "PLASTIC", "WOOD", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::Value Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::FromString(const std::string& s) { + if (s == "AGGREGATES") return ::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::IfcConstructionMaterialResourceType_AGGREGATES; + if (s == "CONCRETE") return ::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::IfcConstructionMaterialResourceType_CONCRETE; + if (s == "DRYWALL") return ::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::IfcConstructionMaterialResourceType_DRYWALL; + if (s == "FUEL") return ::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::IfcConstructionMaterialResourceType_FUEL; + if (s == "GYPSUM") return ::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::IfcConstructionMaterialResourceType_GYPSUM; + if (s == "MASONRY") return ::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::IfcConstructionMaterialResourceType_MASONRY; + if (s == "METAL") return ::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::IfcConstructionMaterialResourceType_METAL; + if (s == "PLASTIC") return ::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::IfcConstructionMaterialResourceType_PLASTIC; + if (s == "WOOD") return ::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::IfcConstructionMaterialResourceType_WOOD; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::IfcConstructionMaterialResourceType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::IfcConstructionMaterialResourceType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::operator Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcConstructionProductResourceTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::Class() { return *IFC4X3_ADD2_IfcConstructionProductResourceTypeEnum_type; } + +Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::IfcConstructionProductResourceTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::IfcConstructionProductResourceTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConstructionProductResourceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::IfcConstructionProductResourceTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConstructionProductResourceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ASSEMBLY", "FORMWORK", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::Value Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::FromString(const std::string& s) { + if (s == "ASSEMBLY") return ::Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::IfcConstructionProductResourceType_ASSEMBLY; + if (s == "FORMWORK") return ::Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::IfcConstructionProductResourceType_FORMWORK; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::IfcConstructionProductResourceType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::IfcConstructionProductResourceType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::operator Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcControllerTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcControllerTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcControllerTypeEnum::Class() { return *IFC4X3_ADD2_IfcControllerTypeEnum_type; } + +Ifc4x3_add2::IfcControllerTypeEnum::IfcControllerTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcControllerTypeEnum::IfcControllerTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcControllerTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcControllerTypeEnum::IfcControllerTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcControllerTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcControllerTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 7 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "FLOATING", "MULTIPOSITION", "PROGRAMMABLE", "PROPORTIONAL", "TWOPOSITION", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcControllerTypeEnum::Value Ifc4x3_add2::IfcControllerTypeEnum::FromString(const std::string& s) { + if (s == "FLOATING") return ::Ifc4x3_add2::IfcControllerTypeEnum::IfcControllerType_FLOATING; + if (s == "MULTIPOSITION") return ::Ifc4x3_add2::IfcControllerTypeEnum::IfcControllerType_MULTIPOSITION; + if (s == "PROGRAMMABLE") return ::Ifc4x3_add2::IfcControllerTypeEnum::IfcControllerType_PROGRAMMABLE; + if (s == "PROPORTIONAL") return ::Ifc4x3_add2::IfcControllerTypeEnum::IfcControllerType_PROPORTIONAL; + if (s == "TWOPOSITION") return ::Ifc4x3_add2::IfcControllerTypeEnum::IfcControllerType_TWOPOSITION; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcControllerTypeEnum::IfcControllerType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcControllerTypeEnum::IfcControllerType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcControllerTypeEnum::operator Ifc4x3_add2::IfcControllerTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcConveyorSegmentTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcConveyorSegmentTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcConveyorSegmentTypeEnum::Class() { return *IFC4X3_ADD2_IfcConveyorSegmentTypeEnum_type; } + +Ifc4x3_add2::IfcConveyorSegmentTypeEnum::IfcConveyorSegmentTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcConveyorSegmentTypeEnum::IfcConveyorSegmentTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConveyorSegmentTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcConveyorSegmentTypeEnum::IfcConveyorSegmentTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConveyorSegmentTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcConveyorSegmentTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 6 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BELTCONVEYOR", "BUCKETCONVEYOR", "CHUTECONVEYOR", "SCREWCONVEYOR", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcConveyorSegmentTypeEnum::Value Ifc4x3_add2::IfcConveyorSegmentTypeEnum::FromString(const std::string& s) { + if (s == "BELTCONVEYOR") return ::Ifc4x3_add2::IfcConveyorSegmentTypeEnum::IfcConveyorSegmentType_BELTCONVEYOR; + if (s == "BUCKETCONVEYOR") return ::Ifc4x3_add2::IfcConveyorSegmentTypeEnum::IfcConveyorSegmentType_BUCKETCONVEYOR; + if (s == "CHUTECONVEYOR") return ::Ifc4x3_add2::IfcConveyorSegmentTypeEnum::IfcConveyorSegmentType_CHUTECONVEYOR; + if (s == "SCREWCONVEYOR") return ::Ifc4x3_add2::IfcConveyorSegmentTypeEnum::IfcConveyorSegmentType_SCREWCONVEYOR; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcConveyorSegmentTypeEnum::IfcConveyorSegmentType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcConveyorSegmentTypeEnum::IfcConveyorSegmentType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcConveyorSegmentTypeEnum::operator Ifc4x3_add2::IfcConveyorSegmentTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCooledBeamTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcCooledBeamTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCooledBeamTypeEnum::Class() { return *IFC4X3_ADD2_IfcCooledBeamTypeEnum_type; } + +Ifc4x3_add2::IfcCooledBeamTypeEnum::IfcCooledBeamTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcCooledBeamTypeEnum::IfcCooledBeamTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCooledBeamTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcCooledBeamTypeEnum::IfcCooledBeamTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCooledBeamTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcCooledBeamTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ACTIVE", "PASSIVE", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcCooledBeamTypeEnum::Value Ifc4x3_add2::IfcCooledBeamTypeEnum::FromString(const std::string& s) { + if (s == "ACTIVE") return ::Ifc4x3_add2::IfcCooledBeamTypeEnum::IfcCooledBeamType_ACTIVE; + if (s == "PASSIVE") return ::Ifc4x3_add2::IfcCooledBeamTypeEnum::IfcCooledBeamType_PASSIVE; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcCooledBeamTypeEnum::IfcCooledBeamType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcCooledBeamTypeEnum::IfcCooledBeamType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcCooledBeamTypeEnum::operator Ifc4x3_add2::IfcCooledBeamTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCoolingTowerTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcCoolingTowerTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCoolingTowerTypeEnum::Class() { return *IFC4X3_ADD2_IfcCoolingTowerTypeEnum_type; } + +Ifc4x3_add2::IfcCoolingTowerTypeEnum::IfcCoolingTowerTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcCoolingTowerTypeEnum::IfcCoolingTowerTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCoolingTowerTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcCoolingTowerTypeEnum::IfcCoolingTowerTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCoolingTowerTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcCoolingTowerTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "MECHANICALFORCEDDRAFT", "MECHANICALINDUCEDDRAFT", "NATURALDRAFT", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcCoolingTowerTypeEnum::Value Ifc4x3_add2::IfcCoolingTowerTypeEnum::FromString(const std::string& s) { + if (s == "MECHANICALFORCEDDRAFT") return ::Ifc4x3_add2::IfcCoolingTowerTypeEnum::IfcCoolingTowerType_MECHANICALFORCEDDRAFT; + if (s == "MECHANICALINDUCEDDRAFT") return ::Ifc4x3_add2::IfcCoolingTowerTypeEnum::IfcCoolingTowerType_MECHANICALINDUCEDDRAFT; + if (s == "NATURALDRAFT") return ::Ifc4x3_add2::IfcCoolingTowerTypeEnum::IfcCoolingTowerType_NATURALDRAFT; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcCoolingTowerTypeEnum::IfcCoolingTowerType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcCoolingTowerTypeEnum::IfcCoolingTowerType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcCoolingTowerTypeEnum::operator Ifc4x3_add2::IfcCoolingTowerTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCostItemTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcCostItemTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCostItemTypeEnum::Class() { return *IFC4X3_ADD2_IfcCostItemTypeEnum_type; } + +Ifc4x3_add2::IfcCostItemTypeEnum::IfcCostItemTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcCostItemTypeEnum::IfcCostItemTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCostItemTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcCostItemTypeEnum::IfcCostItemTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCostItemTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcCostItemTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 2 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcCostItemTypeEnum::Value Ifc4x3_add2::IfcCostItemTypeEnum::FromString(const std::string& s) { + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcCostItemTypeEnum::IfcCostItemType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcCostItemTypeEnum::IfcCostItemType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcCostItemTypeEnum::operator Ifc4x3_add2::IfcCostItemTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCostScheduleTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcCostScheduleTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCostScheduleTypeEnum::Class() { return *IFC4X3_ADD2_IfcCostScheduleTypeEnum_type; } + +Ifc4x3_add2::IfcCostScheduleTypeEnum::IfcCostScheduleTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcCostScheduleTypeEnum::IfcCostScheduleTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCostScheduleTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcCostScheduleTypeEnum::IfcCostScheduleTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCostScheduleTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcCostScheduleTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 9 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BUDGET", "COSTPLAN", "ESTIMATE", "PRICEDBILLOFQUANTITIES", "SCHEDULEOFRATES", "TENDER", "UNPRICEDBILLOFQUANTITIES", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcCostScheduleTypeEnum::Value Ifc4x3_add2::IfcCostScheduleTypeEnum::FromString(const std::string& s) { + if (s == "BUDGET") return ::Ifc4x3_add2::IfcCostScheduleTypeEnum::IfcCostScheduleType_BUDGET; + if (s == "COSTPLAN") return ::Ifc4x3_add2::IfcCostScheduleTypeEnum::IfcCostScheduleType_COSTPLAN; + if (s == "ESTIMATE") return ::Ifc4x3_add2::IfcCostScheduleTypeEnum::IfcCostScheduleType_ESTIMATE; + if (s == "PRICEDBILLOFQUANTITIES") return ::Ifc4x3_add2::IfcCostScheduleTypeEnum::IfcCostScheduleType_PRICEDBILLOFQUANTITIES; + if (s == "SCHEDULEOFRATES") return ::Ifc4x3_add2::IfcCostScheduleTypeEnum::IfcCostScheduleType_SCHEDULEOFRATES; + if (s == "TENDER") return ::Ifc4x3_add2::IfcCostScheduleTypeEnum::IfcCostScheduleType_TENDER; + if (s == "UNPRICEDBILLOFQUANTITIES") return ::Ifc4x3_add2::IfcCostScheduleTypeEnum::IfcCostScheduleType_UNPRICEDBILLOFQUANTITIES; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcCostScheduleTypeEnum::IfcCostScheduleType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcCostScheduleTypeEnum::IfcCostScheduleType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcCostScheduleTypeEnum::operator Ifc4x3_add2::IfcCostScheduleTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCourseTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcCourseTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCourseTypeEnum::Class() { return *IFC4X3_ADD2_IfcCourseTypeEnum_type; } + +Ifc4x3_add2::IfcCourseTypeEnum::IfcCourseTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcCourseTypeEnum::IfcCourseTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCourseTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcCourseTypeEnum::IfcCourseTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCourseTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcCourseTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 8 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ARMOUR", "BALLASTBED", "CORE", "FILTER", "PAVEMENT", "PROTECTION", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcCourseTypeEnum::Value Ifc4x3_add2::IfcCourseTypeEnum::FromString(const std::string& s) { + if (s == "ARMOUR") return ::Ifc4x3_add2::IfcCourseTypeEnum::IfcCourseType_ARMOUR; + if (s == "BALLASTBED") return ::Ifc4x3_add2::IfcCourseTypeEnum::IfcCourseType_BALLASTBED; + if (s == "CORE") return ::Ifc4x3_add2::IfcCourseTypeEnum::IfcCourseType_CORE; + if (s == "FILTER") return ::Ifc4x3_add2::IfcCourseTypeEnum::IfcCourseType_FILTER; + if (s == "PAVEMENT") return ::Ifc4x3_add2::IfcCourseTypeEnum::IfcCourseType_PAVEMENT; + if (s == "PROTECTION") return ::Ifc4x3_add2::IfcCourseTypeEnum::IfcCourseType_PROTECTION; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcCourseTypeEnum::IfcCourseType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcCourseTypeEnum::IfcCourseType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcCourseTypeEnum::operator Ifc4x3_add2::IfcCourseTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCoveringTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcCoveringTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCoveringTypeEnum::Class() { return *IFC4X3_ADD2_IfcCoveringTypeEnum_type; } + +Ifc4x3_add2::IfcCoveringTypeEnum::IfcCoveringTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcCoveringTypeEnum::IfcCoveringTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCoveringTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcCoveringTypeEnum::IfcCoveringTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCoveringTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcCoveringTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 14 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CEILING", "CLADDING", "COPING", "FLOORING", "INSULATION", "MEMBRANE", "MOLDING", "ROOFING", "SKIRTINGBOARD", "SLEEVING", "TOPPING", "WRAPPING", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcCoveringTypeEnum::Value Ifc4x3_add2::IfcCoveringTypeEnum::FromString(const std::string& s) { + if (s == "CEILING") return ::Ifc4x3_add2::IfcCoveringTypeEnum::IfcCoveringType_CEILING; + if (s == "CLADDING") return ::Ifc4x3_add2::IfcCoveringTypeEnum::IfcCoveringType_CLADDING; + if (s == "COPING") return ::Ifc4x3_add2::IfcCoveringTypeEnum::IfcCoveringType_COPING; + if (s == "FLOORING") return ::Ifc4x3_add2::IfcCoveringTypeEnum::IfcCoveringType_FLOORING; + if (s == "INSULATION") return ::Ifc4x3_add2::IfcCoveringTypeEnum::IfcCoveringType_INSULATION; + if (s == "MEMBRANE") return ::Ifc4x3_add2::IfcCoveringTypeEnum::IfcCoveringType_MEMBRANE; + if (s == "MOLDING") return ::Ifc4x3_add2::IfcCoveringTypeEnum::IfcCoveringType_MOLDING; + if (s == "ROOFING") return ::Ifc4x3_add2::IfcCoveringTypeEnum::IfcCoveringType_ROOFING; + if (s == "SKIRTINGBOARD") return ::Ifc4x3_add2::IfcCoveringTypeEnum::IfcCoveringType_SKIRTINGBOARD; + if (s == "SLEEVING") return ::Ifc4x3_add2::IfcCoveringTypeEnum::IfcCoveringType_SLEEVING; + if (s == "TOPPING") return ::Ifc4x3_add2::IfcCoveringTypeEnum::IfcCoveringType_TOPPING; + if (s == "WRAPPING") return ::Ifc4x3_add2::IfcCoveringTypeEnum::IfcCoveringType_WRAPPING; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcCoveringTypeEnum::IfcCoveringType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcCoveringTypeEnum::IfcCoveringType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcCoveringTypeEnum::operator Ifc4x3_add2::IfcCoveringTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCrewResourceTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcCrewResourceTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCrewResourceTypeEnum::Class() { return *IFC4X3_ADD2_IfcCrewResourceTypeEnum_type; } + +Ifc4x3_add2::IfcCrewResourceTypeEnum::IfcCrewResourceTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcCrewResourceTypeEnum::IfcCrewResourceTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCrewResourceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcCrewResourceTypeEnum::IfcCrewResourceTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCrewResourceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcCrewResourceTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "OFFICE", "SITE", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcCrewResourceTypeEnum::Value Ifc4x3_add2::IfcCrewResourceTypeEnum::FromString(const std::string& s) { + if (s == "OFFICE") return ::Ifc4x3_add2::IfcCrewResourceTypeEnum::IfcCrewResourceType_OFFICE; + if (s == "SITE") return ::Ifc4x3_add2::IfcCrewResourceTypeEnum::IfcCrewResourceType_SITE; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcCrewResourceTypeEnum::IfcCrewResourceType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcCrewResourceTypeEnum::IfcCrewResourceType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcCrewResourceTypeEnum::operator Ifc4x3_add2::IfcCrewResourceTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCurtainWallTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcCurtainWallTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCurtainWallTypeEnum::Class() { return *IFC4X3_ADD2_IfcCurtainWallTypeEnum_type; } + +Ifc4x3_add2::IfcCurtainWallTypeEnum::IfcCurtainWallTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcCurtainWallTypeEnum::IfcCurtainWallTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCurtainWallTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcCurtainWallTypeEnum::IfcCurtainWallTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCurtainWallTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcCurtainWallTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 2 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcCurtainWallTypeEnum::Value Ifc4x3_add2::IfcCurtainWallTypeEnum::FromString(const std::string& s) { + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcCurtainWallTypeEnum::IfcCurtainWallType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcCurtainWallTypeEnum::IfcCurtainWallType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcCurtainWallTypeEnum::operator Ifc4x3_add2::IfcCurtainWallTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCurveInterpolationEnum::declaration() const { return *IFC4X3_ADD2_IfcCurveInterpolationEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcCurveInterpolationEnum::Class() { return *IFC4X3_ADD2_IfcCurveInterpolationEnum_type; } + +Ifc4x3_add2::IfcCurveInterpolationEnum::IfcCurveInterpolationEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcCurveInterpolationEnum::IfcCurveInterpolationEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCurveInterpolationEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcCurveInterpolationEnum::IfcCurveInterpolationEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCurveInterpolationEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcCurveInterpolationEnum::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "LINEAR", "LOG_LINEAR", "LOG_LOG", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcCurveInterpolationEnum::Value Ifc4x3_add2::IfcCurveInterpolationEnum::FromString(const std::string& s) { + if (s == "LINEAR") return ::Ifc4x3_add2::IfcCurveInterpolationEnum::IfcCurveInterpolation_LINEAR; + if (s == "LOG_LINEAR") return ::Ifc4x3_add2::IfcCurveInterpolationEnum::IfcCurveInterpolation_LOG_LINEAR; + if (s == "LOG_LOG") return ::Ifc4x3_add2::IfcCurveInterpolationEnum::IfcCurveInterpolation_LOG_LOG; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcCurveInterpolationEnum::IfcCurveInterpolation_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcCurveInterpolationEnum::operator Ifc4x3_add2::IfcCurveInterpolationEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDamperTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcDamperTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDamperTypeEnum::Class() { return *IFC4X3_ADD2_IfcDamperTypeEnum_type; } + +Ifc4x3_add2::IfcDamperTypeEnum::IfcDamperTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcDamperTypeEnum::IfcDamperTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDamperTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcDamperTypeEnum::IfcDamperTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDamperTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcDamperTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 13 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BACKDRAFTDAMPER", "BALANCINGDAMPER", "BLASTDAMPER", "CONTROLDAMPER", "FIREDAMPER", "FIRESMOKEDAMPER", "FUMEHOODEXHAUST", "GRAVITYDAMPER", "GRAVITYRELIEFDAMPER", "RELIEFDAMPER", "SMOKEDAMPER", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcDamperTypeEnum::Value Ifc4x3_add2::IfcDamperTypeEnum::FromString(const std::string& s) { + if (s == "BACKDRAFTDAMPER") return ::Ifc4x3_add2::IfcDamperTypeEnum::IfcDamperType_BACKDRAFTDAMPER; + if (s == "BALANCINGDAMPER") return ::Ifc4x3_add2::IfcDamperTypeEnum::IfcDamperType_BALANCINGDAMPER; + if (s == "BLASTDAMPER") return ::Ifc4x3_add2::IfcDamperTypeEnum::IfcDamperType_BLASTDAMPER; + if (s == "CONTROLDAMPER") return ::Ifc4x3_add2::IfcDamperTypeEnum::IfcDamperType_CONTROLDAMPER; + if (s == "FIREDAMPER") return ::Ifc4x3_add2::IfcDamperTypeEnum::IfcDamperType_FIREDAMPER; + if (s == "FIRESMOKEDAMPER") return ::Ifc4x3_add2::IfcDamperTypeEnum::IfcDamperType_FIRESMOKEDAMPER; + if (s == "FUMEHOODEXHAUST") return ::Ifc4x3_add2::IfcDamperTypeEnum::IfcDamperType_FUMEHOODEXHAUST; + if (s == "GRAVITYDAMPER") return ::Ifc4x3_add2::IfcDamperTypeEnum::IfcDamperType_GRAVITYDAMPER; + if (s == "GRAVITYRELIEFDAMPER") return ::Ifc4x3_add2::IfcDamperTypeEnum::IfcDamperType_GRAVITYRELIEFDAMPER; + if (s == "RELIEFDAMPER") return ::Ifc4x3_add2::IfcDamperTypeEnum::IfcDamperType_RELIEFDAMPER; + if (s == "SMOKEDAMPER") return ::Ifc4x3_add2::IfcDamperTypeEnum::IfcDamperType_SMOKEDAMPER; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcDamperTypeEnum::IfcDamperType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcDamperTypeEnum::IfcDamperType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcDamperTypeEnum::operator Ifc4x3_add2::IfcDamperTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDataOriginEnum::declaration() const { return *IFC4X3_ADD2_IfcDataOriginEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDataOriginEnum::Class() { return *IFC4X3_ADD2_IfcDataOriginEnum_type; } + +Ifc4x3_add2::IfcDataOriginEnum::IfcDataOriginEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcDataOriginEnum::IfcDataOriginEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDataOriginEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcDataOriginEnum::IfcDataOriginEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDataOriginEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcDataOriginEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "MEASURED", "PREDICTED", "SIMULATED", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcDataOriginEnum::Value Ifc4x3_add2::IfcDataOriginEnum::FromString(const std::string& s) { + if (s == "MEASURED") return ::Ifc4x3_add2::IfcDataOriginEnum::IfcDataOrigin_MEASURED; + if (s == "PREDICTED") return ::Ifc4x3_add2::IfcDataOriginEnum::IfcDataOrigin_PREDICTED; + if (s == "SIMULATED") return ::Ifc4x3_add2::IfcDataOriginEnum::IfcDataOrigin_SIMULATED; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcDataOriginEnum::IfcDataOrigin_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcDataOriginEnum::IfcDataOrigin_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcDataOriginEnum::operator Ifc4x3_add2::IfcDataOriginEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDerivedUnitEnum::declaration() const { return *IFC4X3_ADD2_IfcDerivedUnitEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDerivedUnitEnum::Class() { return *IFC4X3_ADD2_IfcDerivedUnitEnum_type; } + +Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnitEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnitEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDerivedUnitEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnitEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDerivedUnitEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcDerivedUnitEnum::ToString(Value v) { + if ( v < 0 || v >= 53 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ACCELERATIONUNIT", "ANGULARVELOCITYUNIT", "AREADENSITYUNIT", "COMPOUNDPLANEANGLEUNIT", "CURVATUREUNIT", "DYNAMICVISCOSITYUNIT", "HEATFLUXDENSITYUNIT", "HEATINGVALUEUNIT", "INTEGERCOUNTRATEUNIT", "IONCONCENTRATIONUNIT", "ISOTHERMALMOISTURECAPACITYUNIT", "KINEMATICVISCOSITYUNIT", "LINEARFORCEUNIT", "LINEARMOMENTUNIT", "LINEARSTIFFNESSUNIT", "LINEARVELOCITYUNIT", "LUMINOUSINTENSITYDISTRIBUTIONUNIT", "MASSDENSITYUNIT", "MASSFLOWRATEUNIT", "MASSPERLENGTHUNIT", "MODULUSOFELASTICITYUNIT", "MODULUSOFLINEARSUBGRADEREACTIONUNIT", "MODULUSOFROTATIONALSUBGRADEREACTIONUNIT", "MODULUSOFSUBGRADEREACTIONUNIT", "MOISTUREDIFFUSIVITYUNIT", "MOLECULARWEIGHTUNIT", "MOMENTOFINERTIAUNIT", "PHUNIT", "PLANARFORCEUNIT", "ROTATIONALFREQUENCYUNIT", "ROTATIONALMASSUNIT", "ROTATIONALSTIFFNESSUNIT", "SECTIONAREAINTEGRALUNIT", "SECTIONMODULUSUNIT", "SHEARMODULUSUNIT", "SOUNDPOWERLEVELUNIT", "SOUNDPOWERUNIT", "SOUNDPRESSURELEVELUNIT", "SOUNDPRESSUREUNIT", "SPECIFICHEATCAPACITYUNIT", "TEMPERATUREGRADIENTUNIT", "TEMPERATURERATEOFCHANGEUNIT", "THERMALADMITTANCEUNIT", "THERMALCONDUCTANCEUNIT", "THERMALEXPANSIONCOEFFICIENTUNIT", "THERMALRESISTANCEUNIT", "THERMALTRANSMITTANCEUNIT", "TORQUEUNIT", "VAPORPERMEABILITYUNIT", "VOLUMETRICFLOWRATEUNIT", "WARPINGCONSTANTUNIT", "WARPINGMOMENTUNIT", "USERDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcDerivedUnitEnum::Value Ifc4x3_add2::IfcDerivedUnitEnum::FromString(const std::string& s) { + if (s == "ACCELERATIONUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_ACCELERATIONUNIT; + if (s == "ANGULARVELOCITYUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_ANGULARVELOCITYUNIT; + if (s == "AREADENSITYUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_AREADENSITYUNIT; + if (s == "COMPOUNDPLANEANGLEUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_COMPOUNDPLANEANGLEUNIT; + if (s == "CURVATUREUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_CURVATUREUNIT; + if (s == "DYNAMICVISCOSITYUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_DYNAMICVISCOSITYUNIT; + if (s == "HEATFLUXDENSITYUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_HEATFLUXDENSITYUNIT; + if (s == "HEATINGVALUEUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_HEATINGVALUEUNIT; + if (s == "INTEGERCOUNTRATEUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_INTEGERCOUNTRATEUNIT; + if (s == "IONCONCENTRATIONUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_IONCONCENTRATIONUNIT; + if (s == "ISOTHERMALMOISTURECAPACITYUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_ISOTHERMALMOISTURECAPACITYUNIT; + if (s == "KINEMATICVISCOSITYUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_KINEMATICVISCOSITYUNIT; + if (s == "LINEARFORCEUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_LINEARFORCEUNIT; + if (s == "LINEARMOMENTUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_LINEARMOMENTUNIT; + if (s == "LINEARSTIFFNESSUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_LINEARSTIFFNESSUNIT; + if (s == "LINEARVELOCITYUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_LINEARVELOCITYUNIT; + if (s == "LUMINOUSINTENSITYDISTRIBUTIONUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_LUMINOUSINTENSITYDISTRIBUTIONUNIT; + if (s == "MASSDENSITYUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_MASSDENSITYUNIT; + if (s == "MASSFLOWRATEUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_MASSFLOWRATEUNIT; + if (s == "MASSPERLENGTHUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_MASSPERLENGTHUNIT; + if (s == "MODULUSOFELASTICITYUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_MODULUSOFELASTICITYUNIT; + if (s == "MODULUSOFLINEARSUBGRADEREACTIONUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_MODULUSOFLINEARSUBGRADEREACTIONUNIT; + if (s == "MODULUSOFROTATIONALSUBGRADEREACTIONUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_MODULUSOFROTATIONALSUBGRADEREACTIONUNIT; + if (s == "MODULUSOFSUBGRADEREACTIONUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_MODULUSOFSUBGRADEREACTIONUNIT; + if (s == "MOISTUREDIFFUSIVITYUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_MOISTUREDIFFUSIVITYUNIT; + if (s == "MOLECULARWEIGHTUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_MOLECULARWEIGHTUNIT; + if (s == "MOMENTOFINERTIAUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_MOMENTOFINERTIAUNIT; + if (s == "PHUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_PHUNIT; + if (s == "PLANARFORCEUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_PLANARFORCEUNIT; + if (s == "ROTATIONALFREQUENCYUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_ROTATIONALFREQUENCYUNIT; + if (s == "ROTATIONALMASSUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_ROTATIONALMASSUNIT; + if (s == "ROTATIONALSTIFFNESSUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_ROTATIONALSTIFFNESSUNIT; + if (s == "SECTIONAREAINTEGRALUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_SECTIONAREAINTEGRALUNIT; + if (s == "SECTIONMODULUSUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_SECTIONMODULUSUNIT; + if (s == "SHEARMODULUSUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_SHEARMODULUSUNIT; + if (s == "SOUNDPOWERLEVELUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_SOUNDPOWERLEVELUNIT; + if (s == "SOUNDPOWERUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_SOUNDPOWERUNIT; + if (s == "SOUNDPRESSURELEVELUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_SOUNDPRESSURELEVELUNIT; + if (s == "SOUNDPRESSUREUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_SOUNDPRESSUREUNIT; + if (s == "SPECIFICHEATCAPACITYUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_SPECIFICHEATCAPACITYUNIT; + if (s == "TEMPERATUREGRADIENTUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_TEMPERATUREGRADIENTUNIT; + if (s == "TEMPERATURERATEOFCHANGEUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_TEMPERATURERATEOFCHANGEUNIT; + if (s == "THERMALADMITTANCEUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_THERMALADMITTANCEUNIT; + if (s == "THERMALCONDUCTANCEUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_THERMALCONDUCTANCEUNIT; + if (s == "THERMALEXPANSIONCOEFFICIENTUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_THERMALEXPANSIONCOEFFICIENTUNIT; + if (s == "THERMALRESISTANCEUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_THERMALRESISTANCEUNIT; + if (s == "THERMALTRANSMITTANCEUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_THERMALTRANSMITTANCEUNIT; + if (s == "TORQUEUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_TORQUEUNIT; + if (s == "VAPORPERMEABILITYUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_VAPORPERMEABILITYUNIT; + if (s == "VOLUMETRICFLOWRATEUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_VOLUMETRICFLOWRATEUNIT; + if (s == "WARPINGCONSTANTUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_WARPINGCONSTANTUNIT; + if (s == "WARPINGMOMENTUNIT") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_WARPINGMOMENTUNIT; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcDerivedUnitEnum::IfcDerivedUnit_USERDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcDerivedUnitEnum::operator Ifc4x3_add2::IfcDerivedUnitEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDirectionSenseEnum::declaration() const { return *IFC4X3_ADD2_IfcDirectionSenseEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDirectionSenseEnum::Class() { return *IFC4X3_ADD2_IfcDirectionSenseEnum_type; } + +Ifc4x3_add2::IfcDirectionSenseEnum::IfcDirectionSenseEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcDirectionSenseEnum::IfcDirectionSenseEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDirectionSenseEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcDirectionSenseEnum::IfcDirectionSenseEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDirectionSenseEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcDirectionSenseEnum::ToString(Value v) { + if ( v < 0 || v >= 2 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "NEGATIVE", "POSITIVE" }; + return names[v]; +} + +Ifc4x3_add2::IfcDirectionSenseEnum::Value Ifc4x3_add2::IfcDirectionSenseEnum::FromString(const std::string& s) { + if (s == "NEGATIVE") return ::Ifc4x3_add2::IfcDirectionSenseEnum::IfcDirectionSense_NEGATIVE; + if (s == "POSITIVE") return ::Ifc4x3_add2::IfcDirectionSenseEnum::IfcDirectionSense_POSITIVE; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcDirectionSenseEnum::operator Ifc4x3_add2::IfcDirectionSenseEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcDiscreteAccessoryTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::Class() { return *IFC4X3_ADD2_IfcDiscreteAccessoryTypeEnum_type; } + +Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDiscreteAccessoryTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDiscreteAccessoryTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 23 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ANCHORPLATE", "BIRDPROTECTION", "BRACKET", "CABLEARRANGER", "ELASTIC_CUSHION", "EXPANSION_JOINT_DEVICE", "FILLER", "FLASHING", "INSULATOR", "LOCK", "PANEL_STRENGTHENING", "POINTMACHINEMOUNTINGDEVICE", "POINT_MACHINE_LOCKING_DEVICE", "RAILBRACE", "RAILPAD", "RAIL_LUBRICATION", "RAIL_MECHANICAL_EQUIPMENT", "SHOE", "SLIDINGCHAIR", "SOUNDABSORPTION", "TENSIONINGEQUIPMENT", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::Value Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::FromString(const std::string& s) { + if (s == "ANCHORPLATE") return ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryType_ANCHORPLATE; + if (s == "BIRDPROTECTION") return ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryType_BIRDPROTECTION; + if (s == "BRACKET") return ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryType_BRACKET; + if (s == "CABLEARRANGER") return ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryType_CABLEARRANGER; + if (s == "ELASTIC_CUSHION") return ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryType_ELASTIC_CUSHION; + if (s == "EXPANSION_JOINT_DEVICE") return ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryType_EXPANSION_JOINT_DEVICE; + if (s == "FILLER") return ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryType_FILLER; + if (s == "FLASHING") return ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryType_FLASHING; + if (s == "INSULATOR") return ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryType_INSULATOR; + if (s == "LOCK") return ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryType_LOCK; + if (s == "PANEL_STRENGTHENING") return ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryType_PANEL_STRENGTHENING; + if (s == "POINTMACHINEMOUNTINGDEVICE") return ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryType_POINTMACHINEMOUNTINGDEVICE; + if (s == "POINT_MACHINE_LOCKING_DEVICE") return ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryType_POINT_MACHINE_LOCKING_DEVICE; + if (s == "RAILBRACE") return ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryType_RAILBRACE; + if (s == "RAILPAD") return ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryType_RAILPAD; + if (s == "RAIL_LUBRICATION") return ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryType_RAIL_LUBRICATION; + if (s == "RAIL_MECHANICAL_EQUIPMENT") return ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryType_RAIL_MECHANICAL_EQUIPMENT; + if (s == "SHOE") return ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryType_SHOE; + if (s == "SLIDINGCHAIR") return ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryType_SLIDINGCHAIR; + if (s == "SOUNDABSORPTION") return ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryType_SOUNDABSORPTION; + if (s == "TENSIONINGEQUIPMENT") return ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryType_TENSIONINGEQUIPMENT; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::IfcDiscreteAccessoryType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::operator Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDistributionBoardTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcDistributionBoardTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDistributionBoardTypeEnum::Class() { return *IFC4X3_ADD2_IfcDistributionBoardTypeEnum_type; } + +Ifc4x3_add2::IfcDistributionBoardTypeEnum::IfcDistributionBoardTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcDistributionBoardTypeEnum::IfcDistributionBoardTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDistributionBoardTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcDistributionBoardTypeEnum::IfcDistributionBoardTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDistributionBoardTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcDistributionBoardTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 8 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CONSUMERUNIT", "DISPATCHINGBOARD", "DISTRIBUTIONBOARD", "DISTRIBUTIONFRAME", "MOTORCONTROLCENTRE", "SWITCHBOARD", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcDistributionBoardTypeEnum::Value Ifc4x3_add2::IfcDistributionBoardTypeEnum::FromString(const std::string& s) { + if (s == "CONSUMERUNIT") return ::Ifc4x3_add2::IfcDistributionBoardTypeEnum::IfcDistributionBoardType_CONSUMERUNIT; + if (s == "DISPATCHINGBOARD") return ::Ifc4x3_add2::IfcDistributionBoardTypeEnum::IfcDistributionBoardType_DISPATCHINGBOARD; + if (s == "DISTRIBUTIONBOARD") return ::Ifc4x3_add2::IfcDistributionBoardTypeEnum::IfcDistributionBoardType_DISTRIBUTIONBOARD; + if (s == "DISTRIBUTIONFRAME") return ::Ifc4x3_add2::IfcDistributionBoardTypeEnum::IfcDistributionBoardType_DISTRIBUTIONFRAME; + if (s == "MOTORCONTROLCENTRE") return ::Ifc4x3_add2::IfcDistributionBoardTypeEnum::IfcDistributionBoardType_MOTORCONTROLCENTRE; + if (s == "SWITCHBOARD") return ::Ifc4x3_add2::IfcDistributionBoardTypeEnum::IfcDistributionBoardType_SWITCHBOARD; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcDistributionBoardTypeEnum::IfcDistributionBoardType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcDistributionBoardTypeEnum::IfcDistributionBoardType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcDistributionBoardTypeEnum::operator Ifc4x3_add2::IfcDistributionBoardTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcDistributionChamberElementTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::Class() { return *IFC4X3_ADD2_IfcDistributionChamberElementTypeEnum_type; } + +Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::IfcDistributionChamberElementTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::IfcDistributionChamberElementTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDistributionChamberElementTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::IfcDistributionChamberElementTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDistributionChamberElementTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 10 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "FORMEDDUCT", "INSPECTIONCHAMBER", "INSPECTIONPIT", "MANHOLE", "METERCHAMBER", "SUMP", "TRENCH", "VALVECHAMBER", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::Value Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::FromString(const std::string& s) { + if (s == "FORMEDDUCT") return ::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::IfcDistributionChamberElementType_FORMEDDUCT; + if (s == "INSPECTIONCHAMBER") return ::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::IfcDistributionChamberElementType_INSPECTIONCHAMBER; + if (s == "INSPECTIONPIT") return ::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::IfcDistributionChamberElementType_INSPECTIONPIT; + if (s == "MANHOLE") return ::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::IfcDistributionChamberElementType_MANHOLE; + if (s == "METERCHAMBER") return ::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::IfcDistributionChamberElementType_METERCHAMBER; + if (s == "SUMP") return ::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::IfcDistributionChamberElementType_SUMP; + if (s == "TRENCH") return ::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::IfcDistributionChamberElementType_TRENCH; + if (s == "VALVECHAMBER") return ::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::IfcDistributionChamberElementType_VALVECHAMBER; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::IfcDistributionChamberElementType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::IfcDistributionChamberElementType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::operator Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDistributionPortTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcDistributionPortTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDistributionPortTypeEnum::Class() { return *IFC4X3_ADD2_IfcDistributionPortTypeEnum_type; } + +Ifc4x3_add2::IfcDistributionPortTypeEnum::IfcDistributionPortTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcDistributionPortTypeEnum::IfcDistributionPortTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDistributionPortTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcDistributionPortTypeEnum::IfcDistributionPortTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDistributionPortTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcDistributionPortTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 7 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CABLE", "CABLECARRIER", "DUCT", "PIPE", "WIRELESS", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcDistributionPortTypeEnum::Value Ifc4x3_add2::IfcDistributionPortTypeEnum::FromString(const std::string& s) { + if (s == "CABLE") return ::Ifc4x3_add2::IfcDistributionPortTypeEnum::IfcDistributionPortType_CABLE; + if (s == "CABLECARRIER") return ::Ifc4x3_add2::IfcDistributionPortTypeEnum::IfcDistributionPortType_CABLECARRIER; + if (s == "DUCT") return ::Ifc4x3_add2::IfcDistributionPortTypeEnum::IfcDistributionPortType_DUCT; + if (s == "PIPE") return ::Ifc4x3_add2::IfcDistributionPortTypeEnum::IfcDistributionPortType_PIPE; + if (s == "WIRELESS") return ::Ifc4x3_add2::IfcDistributionPortTypeEnum::IfcDistributionPortType_WIRELESS; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcDistributionPortTypeEnum::IfcDistributionPortType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcDistributionPortTypeEnum::IfcDistributionPortType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcDistributionPortTypeEnum::operator Ifc4x3_add2::IfcDistributionPortTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDistributionSystemEnum::declaration() const { return *IFC4X3_ADD2_IfcDistributionSystemEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDistributionSystemEnum::Class() { return *IFC4X3_ADD2_IfcDistributionSystemEnum_type; } + +Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystemEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystemEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDistributionSystemEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystemEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDistributionSystemEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcDistributionSystemEnum::ToString(Value v) { + if ( v < 0 || v >= 51 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "AIRCONDITIONING", "AUDIOVISUAL", "CATENARY_SYSTEM", "CHEMICAL", "CHILLEDWATER", "COMMUNICATION", "COMPRESSEDAIR", "CONDENSERWATER", "CONTROL", "CONVEYING", "DATA", "DISPOSAL", "DOMESTICCOLDWATER", "DOMESTICHOTWATER", "DRAINAGE", "EARTHING", "ELECTRICAL", "ELECTROACOUSTIC", "EXHAUST", "FIREPROTECTION", "FIXEDTRANSMISSIONNETWORK", "FUEL", "GAS", "HAZARDOUS", "HEATING", "LIGHTING", "LIGHTNINGPROTECTION", "MOBILENETWORK", "MONITORINGSYSTEM", "MUNICIPALSOLIDWASTE", "OIL", "OPERATIONAL", "OPERATIONALTELEPHONYSYSTEM", "OVERHEAD_CONTACTLINE_SYSTEM", "POWERGENERATION", "RAINWATER", "REFRIGERATION", "RETURN_CIRCUIT", "SECURITY", "SEWAGE", "SIGNAL", "STORMWATER", "TELEPHONE", "TV", "VACUUM", "VENT", "VENTILATION", "WASTEWATER", "WATERSUPPLY", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcDistributionSystemEnum::Value Ifc4x3_add2::IfcDistributionSystemEnum::FromString(const std::string& s) { + if (s == "AIRCONDITIONING") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_AIRCONDITIONING; + if (s == "AUDIOVISUAL") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_AUDIOVISUAL; + if (s == "CATENARY_SYSTEM") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_CATENARY_SYSTEM; + if (s == "CHEMICAL") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_CHEMICAL; + if (s == "CHILLEDWATER") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_CHILLEDWATER; + if (s == "COMMUNICATION") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_COMMUNICATION; + if (s == "COMPRESSEDAIR") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_COMPRESSEDAIR; + if (s == "CONDENSERWATER") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_CONDENSERWATER; + if (s == "CONTROL") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_CONTROL; + if (s == "CONVEYING") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_CONVEYING; + if (s == "DATA") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_DATA; + if (s == "DISPOSAL") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_DISPOSAL; + if (s == "DOMESTICCOLDWATER") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_DOMESTICCOLDWATER; + if (s == "DOMESTICHOTWATER") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_DOMESTICHOTWATER; + if (s == "DRAINAGE") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_DRAINAGE; + if (s == "EARTHING") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_EARTHING; + if (s == "ELECTRICAL") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_ELECTRICAL; + if (s == "ELECTROACOUSTIC") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_ELECTROACOUSTIC; + if (s == "EXHAUST") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_EXHAUST; + if (s == "FIREPROTECTION") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_FIREPROTECTION; + if (s == "FIXEDTRANSMISSIONNETWORK") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_FIXEDTRANSMISSIONNETWORK; + if (s == "FUEL") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_FUEL; + if (s == "GAS") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_GAS; + if (s == "HAZARDOUS") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_HAZARDOUS; + if (s == "HEATING") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_HEATING; + if (s == "LIGHTING") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_LIGHTING; + if (s == "LIGHTNINGPROTECTION") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_LIGHTNINGPROTECTION; + if (s == "MOBILENETWORK") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_MOBILENETWORK; + if (s == "MONITORINGSYSTEM") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_MONITORINGSYSTEM; + if (s == "MUNICIPALSOLIDWASTE") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_MUNICIPALSOLIDWASTE; + if (s == "OIL") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_OIL; + if (s == "OPERATIONAL") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_OPERATIONAL; + if (s == "OPERATIONALTELEPHONYSYSTEM") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_OPERATIONALTELEPHONYSYSTEM; + if (s == "OVERHEAD_CONTACTLINE_SYSTEM") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_OVERHEAD_CONTACTLINE_SYSTEM; + if (s == "POWERGENERATION") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_POWERGENERATION; + if (s == "RAINWATER") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_RAINWATER; + if (s == "REFRIGERATION") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_REFRIGERATION; + if (s == "RETURN_CIRCUIT") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_RETURN_CIRCUIT; + if (s == "SECURITY") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_SECURITY; + if (s == "SEWAGE") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_SEWAGE; + if (s == "SIGNAL") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_SIGNAL; + if (s == "STORMWATER") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_STORMWATER; + if (s == "TELEPHONE") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_TELEPHONE; + if (s == "TV") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_TV; + if (s == "VACUUM") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_VACUUM; + if (s == "VENT") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_VENT; + if (s == "VENTILATION") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_VENTILATION; + if (s == "WASTEWATER") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_WASTEWATER; + if (s == "WATERSUPPLY") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_WATERSUPPLY; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcDistributionSystemEnum::IfcDistributionSystem_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcDistributionSystemEnum::operator Ifc4x3_add2::IfcDistributionSystemEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDocumentConfidentialityEnum::declaration() const { return *IFC4X3_ADD2_IfcDocumentConfidentialityEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDocumentConfidentialityEnum::Class() { return *IFC4X3_ADD2_IfcDocumentConfidentialityEnum_type; } + +Ifc4x3_add2::IfcDocumentConfidentialityEnum::IfcDocumentConfidentialityEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcDocumentConfidentialityEnum::IfcDocumentConfidentialityEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDocumentConfidentialityEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcDocumentConfidentialityEnum::IfcDocumentConfidentialityEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDocumentConfidentialityEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcDocumentConfidentialityEnum::ToString(Value v) { + if ( v < 0 || v >= 6 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CONFIDENTIAL", "PERSONAL", "PUBLIC", "RESTRICTED", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcDocumentConfidentialityEnum::Value Ifc4x3_add2::IfcDocumentConfidentialityEnum::FromString(const std::string& s) { + if (s == "CONFIDENTIAL") return ::Ifc4x3_add2::IfcDocumentConfidentialityEnum::IfcDocumentConfidentiality_CONFIDENTIAL; + if (s == "PERSONAL") return ::Ifc4x3_add2::IfcDocumentConfidentialityEnum::IfcDocumentConfidentiality_PERSONAL; + if (s == "PUBLIC") return ::Ifc4x3_add2::IfcDocumentConfidentialityEnum::IfcDocumentConfidentiality_PUBLIC; + if (s == "RESTRICTED") return ::Ifc4x3_add2::IfcDocumentConfidentialityEnum::IfcDocumentConfidentiality_RESTRICTED; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcDocumentConfidentialityEnum::IfcDocumentConfidentiality_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcDocumentConfidentialityEnum::IfcDocumentConfidentiality_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcDocumentConfidentialityEnum::operator Ifc4x3_add2::IfcDocumentConfidentialityEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDocumentStatusEnum::declaration() const { return *IFC4X3_ADD2_IfcDocumentStatusEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDocumentStatusEnum::Class() { return *IFC4X3_ADD2_IfcDocumentStatusEnum_type; } + +Ifc4x3_add2::IfcDocumentStatusEnum::IfcDocumentStatusEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcDocumentStatusEnum::IfcDocumentStatusEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDocumentStatusEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcDocumentStatusEnum::IfcDocumentStatusEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDocumentStatusEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcDocumentStatusEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "DRAFT", "FINAL", "FINALDRAFT", "REVISION", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcDocumentStatusEnum::Value Ifc4x3_add2::IfcDocumentStatusEnum::FromString(const std::string& s) { + if (s == "DRAFT") return ::Ifc4x3_add2::IfcDocumentStatusEnum::IfcDocumentStatus_DRAFT; + if (s == "FINAL") return ::Ifc4x3_add2::IfcDocumentStatusEnum::IfcDocumentStatus_FINAL; + if (s == "FINALDRAFT") return ::Ifc4x3_add2::IfcDocumentStatusEnum::IfcDocumentStatus_FINALDRAFT; + if (s == "REVISION") return ::Ifc4x3_add2::IfcDocumentStatusEnum::IfcDocumentStatus_REVISION; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcDocumentStatusEnum::IfcDocumentStatus_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcDocumentStatusEnum::operator Ifc4x3_add2::IfcDocumentStatusEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDoorPanelOperationEnum::declaration() const { return *IFC4X3_ADD2_IfcDoorPanelOperationEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDoorPanelOperationEnum::Class() { return *IFC4X3_ADD2_IfcDoorPanelOperationEnum_type; } + +Ifc4x3_add2::IfcDoorPanelOperationEnum::IfcDoorPanelOperationEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcDoorPanelOperationEnum::IfcDoorPanelOperationEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDoorPanelOperationEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcDoorPanelOperationEnum::IfcDoorPanelOperationEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDoorPanelOperationEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcDoorPanelOperationEnum::ToString(Value v) { + if ( v < 0 || v >= 9 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "DOUBLE_ACTING", "FIXEDPANEL", "FOLDING", "REVOLVING", "ROLLINGUP", "SLIDING", "SWINGING", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcDoorPanelOperationEnum::Value Ifc4x3_add2::IfcDoorPanelOperationEnum::FromString(const std::string& s) { + if (s == "DOUBLE_ACTING") return ::Ifc4x3_add2::IfcDoorPanelOperationEnum::IfcDoorPanelOperation_DOUBLE_ACTING; + if (s == "FIXEDPANEL") return ::Ifc4x3_add2::IfcDoorPanelOperationEnum::IfcDoorPanelOperation_FIXEDPANEL; + if (s == "FOLDING") return ::Ifc4x3_add2::IfcDoorPanelOperationEnum::IfcDoorPanelOperation_FOLDING; + if (s == "REVOLVING") return ::Ifc4x3_add2::IfcDoorPanelOperationEnum::IfcDoorPanelOperation_REVOLVING; + if (s == "ROLLINGUP") return ::Ifc4x3_add2::IfcDoorPanelOperationEnum::IfcDoorPanelOperation_ROLLINGUP; + if (s == "SLIDING") return ::Ifc4x3_add2::IfcDoorPanelOperationEnum::IfcDoorPanelOperation_SLIDING; + if (s == "SWINGING") return ::Ifc4x3_add2::IfcDoorPanelOperationEnum::IfcDoorPanelOperation_SWINGING; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcDoorPanelOperationEnum::IfcDoorPanelOperation_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcDoorPanelOperationEnum::IfcDoorPanelOperation_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcDoorPanelOperationEnum::operator Ifc4x3_add2::IfcDoorPanelOperationEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDoorPanelPositionEnum::declaration() const { return *IFC4X3_ADD2_IfcDoorPanelPositionEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDoorPanelPositionEnum::Class() { return *IFC4X3_ADD2_IfcDoorPanelPositionEnum_type; } + +Ifc4x3_add2::IfcDoorPanelPositionEnum::IfcDoorPanelPositionEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcDoorPanelPositionEnum::IfcDoorPanelPositionEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDoorPanelPositionEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcDoorPanelPositionEnum::IfcDoorPanelPositionEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDoorPanelPositionEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcDoorPanelPositionEnum::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "LEFT", "MIDDLE", "RIGHT", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcDoorPanelPositionEnum::Value Ifc4x3_add2::IfcDoorPanelPositionEnum::FromString(const std::string& s) { + if (s == "LEFT") return ::Ifc4x3_add2::IfcDoorPanelPositionEnum::IfcDoorPanelPosition_LEFT; + if (s == "MIDDLE") return ::Ifc4x3_add2::IfcDoorPanelPositionEnum::IfcDoorPanelPosition_MIDDLE; + if (s == "RIGHT") return ::Ifc4x3_add2::IfcDoorPanelPositionEnum::IfcDoorPanelPosition_RIGHT; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcDoorPanelPositionEnum::IfcDoorPanelPosition_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcDoorPanelPositionEnum::operator Ifc4x3_add2::IfcDoorPanelPositionEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDoorTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcDoorTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDoorTypeEnum::Class() { return *IFC4X3_ADD2_IfcDoorTypeEnum_type; } + +Ifc4x3_add2::IfcDoorTypeEnum::IfcDoorTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcDoorTypeEnum::IfcDoorTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDoorTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcDoorTypeEnum::IfcDoorTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDoorTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcDoorTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 7 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BOOM_BARRIER", "DOOR", "GATE", "TRAPDOOR", "TURNSTILE", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcDoorTypeEnum::Value Ifc4x3_add2::IfcDoorTypeEnum::FromString(const std::string& s) { + if (s == "BOOM_BARRIER") return ::Ifc4x3_add2::IfcDoorTypeEnum::IfcDoorType_BOOM_BARRIER; + if (s == "DOOR") return ::Ifc4x3_add2::IfcDoorTypeEnum::IfcDoorType_DOOR; + if (s == "GATE") return ::Ifc4x3_add2::IfcDoorTypeEnum::IfcDoorType_GATE; + if (s == "TRAPDOOR") return ::Ifc4x3_add2::IfcDoorTypeEnum::IfcDoorType_TRAPDOOR; + if (s == "TURNSTILE") return ::Ifc4x3_add2::IfcDoorTypeEnum::IfcDoorType_TURNSTILE; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcDoorTypeEnum::IfcDoorType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcDoorTypeEnum::IfcDoorType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcDoorTypeEnum::operator Ifc4x3_add2::IfcDoorTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDoorTypeOperationEnum::declaration() const { return *IFC4X3_ADD2_IfcDoorTypeOperationEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDoorTypeOperationEnum::Class() { return *IFC4X3_ADD2_IfcDoorTypeOperationEnum_type; } + +Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperationEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperationEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDoorTypeOperationEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperationEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDoorTypeOperationEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcDoorTypeOperationEnum::ToString(Value v) { + if ( v < 0 || v >= 25 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "DOUBLE_DOOR_DOUBLE_SWING", "DOUBLE_DOOR_FOLDING", "DOUBLE_DOOR_LIFTING_VERTICAL", "DOUBLE_DOOR_SINGLE_SWING", "DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT", "DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT", "DOUBLE_DOOR_SLIDING", "DOUBLE_SWING_LEFT", "DOUBLE_SWING_RIGHT", "FOLDING_TO_LEFT", "FOLDING_TO_RIGHT", "LIFTING_HORIZONTAL", "LIFTING_VERTICAL_LEFT", "LIFTING_VERTICAL_RIGHT", "REVOLVING", "REVOLVING_VERTICAL", "ROLLINGUP", "SINGLE_SWING_LEFT", "SINGLE_SWING_RIGHT", "SLIDING_TO_LEFT", "SLIDING_TO_RIGHT", "SWING_FIXED_LEFT", "SWING_FIXED_RIGHT", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcDoorTypeOperationEnum::Value Ifc4x3_add2::IfcDoorTypeOperationEnum::FromString(const std::string& s) { + if (s == "DOUBLE_DOOR_DOUBLE_SWING") return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperation_DOUBLE_DOOR_DOUBLE_SWING; + if (s == "DOUBLE_DOOR_FOLDING") return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperation_DOUBLE_DOOR_FOLDING; + if (s == "DOUBLE_DOOR_LIFTING_VERTICAL") return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperation_DOUBLE_DOOR_LIFTING_VERTICAL; + if (s == "DOUBLE_DOOR_SINGLE_SWING") return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperation_DOUBLE_DOOR_SINGLE_SWING; + if (s == "DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT") return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperation_DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_LEFT; + if (s == "DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT") return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperation_DOUBLE_DOOR_SINGLE_SWING_OPPOSITE_RIGHT; + if (s == "DOUBLE_DOOR_SLIDING") return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperation_DOUBLE_DOOR_SLIDING; + if (s == "DOUBLE_SWING_LEFT") return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperation_DOUBLE_SWING_LEFT; + if (s == "DOUBLE_SWING_RIGHT") return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperation_DOUBLE_SWING_RIGHT; + if (s == "FOLDING_TO_LEFT") return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperation_FOLDING_TO_LEFT; + if (s == "FOLDING_TO_RIGHT") return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperation_FOLDING_TO_RIGHT; + if (s == "LIFTING_HORIZONTAL") return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperation_LIFTING_HORIZONTAL; + if (s == "LIFTING_VERTICAL_LEFT") return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperation_LIFTING_VERTICAL_LEFT; + if (s == "LIFTING_VERTICAL_RIGHT") return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperation_LIFTING_VERTICAL_RIGHT; + if (s == "REVOLVING") return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperation_REVOLVING; + if (s == "REVOLVING_VERTICAL") return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperation_REVOLVING_VERTICAL; + if (s == "ROLLINGUP") return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperation_ROLLINGUP; + if (s == "SINGLE_SWING_LEFT") return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperation_SINGLE_SWING_LEFT; + if (s == "SINGLE_SWING_RIGHT") return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperation_SINGLE_SWING_RIGHT; + if (s == "SLIDING_TO_LEFT") return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperation_SLIDING_TO_LEFT; + if (s == "SLIDING_TO_RIGHT") return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperation_SLIDING_TO_RIGHT; + if (s == "SWING_FIXED_LEFT") return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperation_SWING_FIXED_LEFT; + if (s == "SWING_FIXED_RIGHT") return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperation_SWING_FIXED_RIGHT; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperation_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::IfcDoorTypeOperation_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcDoorTypeOperationEnum::operator Ifc4x3_add2::IfcDoorTypeOperationEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDuctFittingTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcDuctFittingTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDuctFittingTypeEnum::Class() { return *IFC4X3_ADD2_IfcDuctFittingTypeEnum_type; } + +Ifc4x3_add2::IfcDuctFittingTypeEnum::IfcDuctFittingTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcDuctFittingTypeEnum::IfcDuctFittingTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDuctFittingTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcDuctFittingTypeEnum::IfcDuctFittingTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDuctFittingTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcDuctFittingTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 9 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BEND", "CONNECTOR", "ENTRY", "EXIT", "JUNCTION", "OBSTRUCTION", "TRANSITION", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcDuctFittingTypeEnum::Value Ifc4x3_add2::IfcDuctFittingTypeEnum::FromString(const std::string& s) { + if (s == "BEND") return ::Ifc4x3_add2::IfcDuctFittingTypeEnum::IfcDuctFittingType_BEND; + if (s == "CONNECTOR") return ::Ifc4x3_add2::IfcDuctFittingTypeEnum::IfcDuctFittingType_CONNECTOR; + if (s == "ENTRY") return ::Ifc4x3_add2::IfcDuctFittingTypeEnum::IfcDuctFittingType_ENTRY; + if (s == "EXIT") return ::Ifc4x3_add2::IfcDuctFittingTypeEnum::IfcDuctFittingType_EXIT; + if (s == "JUNCTION") return ::Ifc4x3_add2::IfcDuctFittingTypeEnum::IfcDuctFittingType_JUNCTION; + if (s == "OBSTRUCTION") return ::Ifc4x3_add2::IfcDuctFittingTypeEnum::IfcDuctFittingType_OBSTRUCTION; + if (s == "TRANSITION") return ::Ifc4x3_add2::IfcDuctFittingTypeEnum::IfcDuctFittingType_TRANSITION; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcDuctFittingTypeEnum::IfcDuctFittingType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcDuctFittingTypeEnum::IfcDuctFittingType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcDuctFittingTypeEnum::operator Ifc4x3_add2::IfcDuctFittingTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDuctSegmentTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcDuctSegmentTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDuctSegmentTypeEnum::Class() { return *IFC4X3_ADD2_IfcDuctSegmentTypeEnum_type; } + +Ifc4x3_add2::IfcDuctSegmentTypeEnum::IfcDuctSegmentTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcDuctSegmentTypeEnum::IfcDuctSegmentTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDuctSegmentTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcDuctSegmentTypeEnum::IfcDuctSegmentTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDuctSegmentTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcDuctSegmentTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "FLEXIBLESEGMENT", "RIGIDSEGMENT", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcDuctSegmentTypeEnum::Value Ifc4x3_add2::IfcDuctSegmentTypeEnum::FromString(const std::string& s) { + if (s == "FLEXIBLESEGMENT") return ::Ifc4x3_add2::IfcDuctSegmentTypeEnum::IfcDuctSegmentType_FLEXIBLESEGMENT; + if (s == "RIGIDSEGMENT") return ::Ifc4x3_add2::IfcDuctSegmentTypeEnum::IfcDuctSegmentType_RIGIDSEGMENT; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcDuctSegmentTypeEnum::IfcDuctSegmentType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcDuctSegmentTypeEnum::IfcDuctSegmentType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcDuctSegmentTypeEnum::operator Ifc4x3_add2::IfcDuctSegmentTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDuctSilencerTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcDuctSilencerTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcDuctSilencerTypeEnum::Class() { return *IFC4X3_ADD2_IfcDuctSilencerTypeEnum_type; } + +Ifc4x3_add2::IfcDuctSilencerTypeEnum::IfcDuctSilencerTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcDuctSilencerTypeEnum::IfcDuctSilencerTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDuctSilencerTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcDuctSilencerTypeEnum::IfcDuctSilencerTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDuctSilencerTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcDuctSilencerTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "FLATOVAL", "RECTANGULAR", "ROUND", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcDuctSilencerTypeEnum::Value Ifc4x3_add2::IfcDuctSilencerTypeEnum::FromString(const std::string& s) { + if (s == "FLATOVAL") return ::Ifc4x3_add2::IfcDuctSilencerTypeEnum::IfcDuctSilencerType_FLATOVAL; + if (s == "RECTANGULAR") return ::Ifc4x3_add2::IfcDuctSilencerTypeEnum::IfcDuctSilencerType_RECTANGULAR; + if (s == "ROUND") return ::Ifc4x3_add2::IfcDuctSilencerTypeEnum::IfcDuctSilencerType_ROUND; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcDuctSilencerTypeEnum::IfcDuctSilencerType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcDuctSilencerTypeEnum::IfcDuctSilencerType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcDuctSilencerTypeEnum::operator Ifc4x3_add2::IfcDuctSilencerTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcEarthworksCutTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcEarthworksCutTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcEarthworksCutTypeEnum::Class() { return *IFC4X3_ADD2_IfcEarthworksCutTypeEnum_type; } + +Ifc4x3_add2::IfcEarthworksCutTypeEnum::IfcEarthworksCutTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcEarthworksCutTypeEnum::IfcEarthworksCutTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEarthworksCutTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcEarthworksCutTypeEnum::IfcEarthworksCutTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEarthworksCutTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcEarthworksCutTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 11 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BASE_EXCAVATION", "CUT", "DREDGING", "EXCAVATION", "OVEREXCAVATION", "PAVEMENTMILLING", "STEPEXCAVATION", "TOPSOILREMOVAL", "TRENCH", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcEarthworksCutTypeEnum::Value Ifc4x3_add2::IfcEarthworksCutTypeEnum::FromString(const std::string& s) { + if (s == "BASE_EXCAVATION") return ::Ifc4x3_add2::IfcEarthworksCutTypeEnum::IfcEarthworksCutType_BASE_EXCAVATION; + if (s == "CUT") return ::Ifc4x3_add2::IfcEarthworksCutTypeEnum::IfcEarthworksCutType_CUT; + if (s == "DREDGING") return ::Ifc4x3_add2::IfcEarthworksCutTypeEnum::IfcEarthworksCutType_DREDGING; + if (s == "EXCAVATION") return ::Ifc4x3_add2::IfcEarthworksCutTypeEnum::IfcEarthworksCutType_EXCAVATION; + if (s == "OVEREXCAVATION") return ::Ifc4x3_add2::IfcEarthworksCutTypeEnum::IfcEarthworksCutType_OVEREXCAVATION; + if (s == "PAVEMENTMILLING") return ::Ifc4x3_add2::IfcEarthworksCutTypeEnum::IfcEarthworksCutType_PAVEMENTMILLING; + if (s == "STEPEXCAVATION") return ::Ifc4x3_add2::IfcEarthworksCutTypeEnum::IfcEarthworksCutType_STEPEXCAVATION; + if (s == "TOPSOILREMOVAL") return ::Ifc4x3_add2::IfcEarthworksCutTypeEnum::IfcEarthworksCutType_TOPSOILREMOVAL; + if (s == "TRENCH") return ::Ifc4x3_add2::IfcEarthworksCutTypeEnum::IfcEarthworksCutType_TRENCH; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcEarthworksCutTypeEnum::IfcEarthworksCutType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcEarthworksCutTypeEnum::IfcEarthworksCutType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcEarthworksCutTypeEnum::operator Ifc4x3_add2::IfcEarthworksCutTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcEarthworksFillTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcEarthworksFillTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcEarthworksFillTypeEnum::Class() { return *IFC4X3_ADD2_IfcEarthworksFillTypeEnum_type; } + +Ifc4x3_add2::IfcEarthworksFillTypeEnum::IfcEarthworksFillTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcEarthworksFillTypeEnum::IfcEarthworksFillTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEarthworksFillTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcEarthworksFillTypeEnum::IfcEarthworksFillTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEarthworksFillTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcEarthworksFillTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 9 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BACKFILL", "COUNTERWEIGHT", "EMBANKMENT", "SLOPEFILL", "SUBGRADE", "SUBGRADEBED", "TRANSITIONSECTION", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcEarthworksFillTypeEnum::Value Ifc4x3_add2::IfcEarthworksFillTypeEnum::FromString(const std::string& s) { + if (s == "BACKFILL") return ::Ifc4x3_add2::IfcEarthworksFillTypeEnum::IfcEarthworksFillType_BACKFILL; + if (s == "COUNTERWEIGHT") return ::Ifc4x3_add2::IfcEarthworksFillTypeEnum::IfcEarthworksFillType_COUNTERWEIGHT; + if (s == "EMBANKMENT") return ::Ifc4x3_add2::IfcEarthworksFillTypeEnum::IfcEarthworksFillType_EMBANKMENT; + if (s == "SLOPEFILL") return ::Ifc4x3_add2::IfcEarthworksFillTypeEnum::IfcEarthworksFillType_SLOPEFILL; + if (s == "SUBGRADE") return ::Ifc4x3_add2::IfcEarthworksFillTypeEnum::IfcEarthworksFillType_SUBGRADE; + if (s == "SUBGRADEBED") return ::Ifc4x3_add2::IfcEarthworksFillTypeEnum::IfcEarthworksFillType_SUBGRADEBED; + if (s == "TRANSITIONSECTION") return ::Ifc4x3_add2::IfcEarthworksFillTypeEnum::IfcEarthworksFillType_TRANSITIONSECTION; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcEarthworksFillTypeEnum::IfcEarthworksFillType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcEarthworksFillTypeEnum::IfcEarthworksFillType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcEarthworksFillTypeEnum::operator Ifc4x3_add2::IfcEarthworksFillTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcElectricApplianceTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcElectricApplianceTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcElectricApplianceTypeEnum::Class() { return *IFC4X3_ADD2_IfcElectricApplianceTypeEnum_type; } + +Ifc4x3_add2::IfcElectricApplianceTypeEnum::IfcElectricApplianceTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcElectricApplianceTypeEnum::IfcElectricApplianceTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricApplianceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcElectricApplianceTypeEnum::IfcElectricApplianceTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricApplianceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcElectricApplianceTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 18 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "DISHWASHER", "ELECTRICCOOKER", "FREESTANDINGELECTRICHEATER", "FREESTANDINGFAN", "FREESTANDINGWATERCOOLER", "FREESTANDINGWATERHEATER", "FREEZER", "FRIDGE_FREEZER", "HANDDRYER", "KITCHENMACHINE", "MICROWAVE", "PHOTOCOPIER", "REFRIGERATOR", "TUMBLEDRYER", "VENDINGMACHINE", "WASHINGMACHINE", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcElectricApplianceTypeEnum::Value Ifc4x3_add2::IfcElectricApplianceTypeEnum::FromString(const std::string& s) { + if (s == "DISHWASHER") return ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::IfcElectricApplianceType_DISHWASHER; + if (s == "ELECTRICCOOKER") return ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::IfcElectricApplianceType_ELECTRICCOOKER; + if (s == "FREESTANDINGELECTRICHEATER") return ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::IfcElectricApplianceType_FREESTANDINGELECTRICHEATER; + if (s == "FREESTANDINGFAN") return ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::IfcElectricApplianceType_FREESTANDINGFAN; + if (s == "FREESTANDINGWATERCOOLER") return ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::IfcElectricApplianceType_FREESTANDINGWATERCOOLER; + if (s == "FREESTANDINGWATERHEATER") return ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::IfcElectricApplianceType_FREESTANDINGWATERHEATER; + if (s == "FREEZER") return ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::IfcElectricApplianceType_FREEZER; + if (s == "FRIDGE_FREEZER") return ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::IfcElectricApplianceType_FRIDGE_FREEZER; + if (s == "HANDDRYER") return ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::IfcElectricApplianceType_HANDDRYER; + if (s == "KITCHENMACHINE") return ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::IfcElectricApplianceType_KITCHENMACHINE; + if (s == "MICROWAVE") return ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::IfcElectricApplianceType_MICROWAVE; + if (s == "PHOTOCOPIER") return ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::IfcElectricApplianceType_PHOTOCOPIER; + if (s == "REFRIGERATOR") return ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::IfcElectricApplianceType_REFRIGERATOR; + if (s == "TUMBLEDRYER") return ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::IfcElectricApplianceType_TUMBLEDRYER; + if (s == "VENDINGMACHINE") return ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::IfcElectricApplianceType_VENDINGMACHINE; + if (s == "WASHINGMACHINE") return ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::IfcElectricApplianceType_WASHINGMACHINE; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::IfcElectricApplianceType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::IfcElectricApplianceType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcElectricApplianceTypeEnum::operator Ifc4x3_add2::IfcElectricApplianceTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcElectricDistributionBoardTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::Class() { return *IFC4X3_ADD2_IfcElectricDistributionBoardTypeEnum_type; } + +Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::IfcElectricDistributionBoardTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::IfcElectricDistributionBoardTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricDistributionBoardTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::IfcElectricDistributionBoardTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricDistributionBoardTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 6 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CONSUMERUNIT", "DISTRIBUTIONBOARD", "MOTORCONTROLCENTRE", "SWITCHBOARD", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::Value Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::FromString(const std::string& s) { + if (s == "CONSUMERUNIT") return ::Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::IfcElectricDistributionBoardType_CONSUMERUNIT; + if (s == "DISTRIBUTIONBOARD") return ::Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::IfcElectricDistributionBoardType_DISTRIBUTIONBOARD; + if (s == "MOTORCONTROLCENTRE") return ::Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::IfcElectricDistributionBoardType_MOTORCONTROLCENTRE; + if (s == "SWITCHBOARD") return ::Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::IfcElectricDistributionBoardType_SWITCHBOARD; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::IfcElectricDistributionBoardType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::IfcElectricDistributionBoardType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::operator Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcElectricFlowStorageDeviceTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::Class() { return *IFC4X3_ADD2_IfcElectricFlowStorageDeviceTypeEnum_type; } + +Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::IfcElectricFlowStorageDeviceTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::IfcElectricFlowStorageDeviceTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricFlowStorageDeviceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::IfcElectricFlowStorageDeviceTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricFlowStorageDeviceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 11 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BATTERY", "CAPACITOR", "CAPACITORBANK", "COMPENSATOR", "HARMONICFILTER", "INDUCTOR", "INDUCTORBANK", "RECHARGER", "UPS", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::Value Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::FromString(const std::string& s) { + if (s == "BATTERY") return ::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::IfcElectricFlowStorageDeviceType_BATTERY; + if (s == "CAPACITOR") return ::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::IfcElectricFlowStorageDeviceType_CAPACITOR; + if (s == "CAPACITORBANK") return ::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::IfcElectricFlowStorageDeviceType_CAPACITORBANK; + if (s == "COMPENSATOR") return ::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::IfcElectricFlowStorageDeviceType_COMPENSATOR; + if (s == "HARMONICFILTER") return ::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::IfcElectricFlowStorageDeviceType_HARMONICFILTER; + if (s == "INDUCTOR") return ::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::IfcElectricFlowStorageDeviceType_INDUCTOR; + if (s == "INDUCTORBANK") return ::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::IfcElectricFlowStorageDeviceType_INDUCTORBANK; + if (s == "RECHARGER") return ::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::IfcElectricFlowStorageDeviceType_RECHARGER; + if (s == "UPS") return ::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::IfcElectricFlowStorageDeviceType_UPS; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::IfcElectricFlowStorageDeviceType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::IfcElectricFlowStorageDeviceType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::operator Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcElectricFlowTreatmentDeviceTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::Class() { return *IFC4X3_ADD2_IfcElectricFlowTreatmentDeviceTypeEnum_type; } + +Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::IfcElectricFlowTreatmentDeviceTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::IfcElectricFlowTreatmentDeviceTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricFlowTreatmentDeviceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::IfcElectricFlowTreatmentDeviceTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricFlowTreatmentDeviceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 3 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ELECTRONICFILTER", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::Value Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::FromString(const std::string& s) { + if (s == "ELECTRONICFILTER") return ::Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::IfcElectricFlowTreatmentDeviceType_ELECTRONICFILTER; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::IfcElectricFlowTreatmentDeviceType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::IfcElectricFlowTreatmentDeviceType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::operator Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcElectricGeneratorTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcElectricGeneratorTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcElectricGeneratorTypeEnum::Class() { return *IFC4X3_ADD2_IfcElectricGeneratorTypeEnum_type; } + +Ifc4x3_add2::IfcElectricGeneratorTypeEnum::IfcElectricGeneratorTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcElectricGeneratorTypeEnum::IfcElectricGeneratorTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricGeneratorTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcElectricGeneratorTypeEnum::IfcElectricGeneratorTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricGeneratorTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcElectricGeneratorTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CHP", "ENGINEGENERATOR", "STANDALONE", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcElectricGeneratorTypeEnum::Value Ifc4x3_add2::IfcElectricGeneratorTypeEnum::FromString(const std::string& s) { + if (s == "CHP") return ::Ifc4x3_add2::IfcElectricGeneratorTypeEnum::IfcElectricGeneratorType_CHP; + if (s == "ENGINEGENERATOR") return ::Ifc4x3_add2::IfcElectricGeneratorTypeEnum::IfcElectricGeneratorType_ENGINEGENERATOR; + if (s == "STANDALONE") return ::Ifc4x3_add2::IfcElectricGeneratorTypeEnum::IfcElectricGeneratorType_STANDALONE; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcElectricGeneratorTypeEnum::IfcElectricGeneratorType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcElectricGeneratorTypeEnum::IfcElectricGeneratorType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcElectricGeneratorTypeEnum::operator Ifc4x3_add2::IfcElectricGeneratorTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcElectricMotorTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcElectricMotorTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcElectricMotorTypeEnum::Class() { return *IFC4X3_ADD2_IfcElectricMotorTypeEnum_type; } + +Ifc4x3_add2::IfcElectricMotorTypeEnum::IfcElectricMotorTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcElectricMotorTypeEnum::IfcElectricMotorTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricMotorTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcElectricMotorTypeEnum::IfcElectricMotorTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricMotorTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcElectricMotorTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 7 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "DC", "INDUCTION", "POLYPHASE", "RELUCTANCESYNCHRONOUS", "SYNCHRONOUS", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcElectricMotorTypeEnum::Value Ifc4x3_add2::IfcElectricMotorTypeEnum::FromString(const std::string& s) { + if (s == "DC") return ::Ifc4x3_add2::IfcElectricMotorTypeEnum::IfcElectricMotorType_DC; + if (s == "INDUCTION") return ::Ifc4x3_add2::IfcElectricMotorTypeEnum::IfcElectricMotorType_INDUCTION; + if (s == "POLYPHASE") return ::Ifc4x3_add2::IfcElectricMotorTypeEnum::IfcElectricMotorType_POLYPHASE; + if (s == "RELUCTANCESYNCHRONOUS") return ::Ifc4x3_add2::IfcElectricMotorTypeEnum::IfcElectricMotorType_RELUCTANCESYNCHRONOUS; + if (s == "SYNCHRONOUS") return ::Ifc4x3_add2::IfcElectricMotorTypeEnum::IfcElectricMotorType_SYNCHRONOUS; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcElectricMotorTypeEnum::IfcElectricMotorType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcElectricMotorTypeEnum::IfcElectricMotorType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcElectricMotorTypeEnum::operator Ifc4x3_add2::IfcElectricMotorTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcElectricTimeControlTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcElectricTimeControlTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcElectricTimeControlTypeEnum::Class() { return *IFC4X3_ADD2_IfcElectricTimeControlTypeEnum_type; } + +Ifc4x3_add2::IfcElectricTimeControlTypeEnum::IfcElectricTimeControlTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcElectricTimeControlTypeEnum::IfcElectricTimeControlTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricTimeControlTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcElectricTimeControlTypeEnum::IfcElectricTimeControlTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricTimeControlTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcElectricTimeControlTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "RELAY", "TIMECLOCK", "TIMEDELAY", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcElectricTimeControlTypeEnum::Value Ifc4x3_add2::IfcElectricTimeControlTypeEnum::FromString(const std::string& s) { + if (s == "RELAY") return ::Ifc4x3_add2::IfcElectricTimeControlTypeEnum::IfcElectricTimeControlType_RELAY; + if (s == "TIMECLOCK") return ::Ifc4x3_add2::IfcElectricTimeControlTypeEnum::IfcElectricTimeControlType_TIMECLOCK; + if (s == "TIMEDELAY") return ::Ifc4x3_add2::IfcElectricTimeControlTypeEnum::IfcElectricTimeControlType_TIMEDELAY; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcElectricTimeControlTypeEnum::IfcElectricTimeControlType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcElectricTimeControlTypeEnum::IfcElectricTimeControlType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcElectricTimeControlTypeEnum::operator Ifc4x3_add2::IfcElectricTimeControlTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcElementAssemblyTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcElementAssemblyTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcElementAssemblyTypeEnum::Class() { return *IFC4X3_ADD2_IfcElementAssemblyTypeEnum_type; } + +Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElementAssemblyTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElementAssemblyTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcElementAssemblyTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 30 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ABUTMENT", "ACCESSORY_ASSEMBLY", "ARCH", "BEAM_GRID", "BRACED_FRAME", "CROSS_BRACING", "DECK", "DILATATIONPANEL", "ENTRANCEWORKS", "GIRDER", "GRID", "MAST", "PIER", "PYLON", "RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY", "REINFORCEMENT_UNIT", "RIGID_FRAME", "SHELTER", "SIGNALASSEMBLY", "SLAB_FIELD", "SUMPBUSTER", "SUPPORTINGASSEMBLY", "SUSPENSIONASSEMBLY", "TRACKPANEL", "TRACTION_SWITCHING_ASSEMBLY", "TRAFFIC_CALMING_DEVICE", "TRUSS", "TURNOUTPANEL", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcElementAssemblyTypeEnum::Value Ifc4x3_add2::IfcElementAssemblyTypeEnum::FromString(const std::string& s) { + if (s == "ABUTMENT") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_ABUTMENT; + if (s == "ACCESSORY_ASSEMBLY") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_ACCESSORY_ASSEMBLY; + if (s == "ARCH") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_ARCH; + if (s == "BEAM_GRID") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_BEAM_GRID; + if (s == "BRACED_FRAME") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_BRACED_FRAME; + if (s == "CROSS_BRACING") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_CROSS_BRACING; + if (s == "DECK") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_DECK; + if (s == "DILATATIONPANEL") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_DILATATIONPANEL; + if (s == "ENTRANCEWORKS") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_ENTRANCEWORKS; + if (s == "GIRDER") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_GIRDER; + if (s == "GRID") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_GRID; + if (s == "MAST") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_MAST; + if (s == "PIER") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_PIER; + if (s == "PYLON") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_PYLON; + if (s == "RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_RAIL_MECHANICAL_EQUIPMENT_ASSEMBLY; + if (s == "REINFORCEMENT_UNIT") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_REINFORCEMENT_UNIT; + if (s == "RIGID_FRAME") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_RIGID_FRAME; + if (s == "SHELTER") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_SHELTER; + if (s == "SIGNALASSEMBLY") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_SIGNALASSEMBLY; + if (s == "SLAB_FIELD") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_SLAB_FIELD; + if (s == "SUMPBUSTER") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_SUMPBUSTER; + if (s == "SUPPORTINGASSEMBLY") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_SUPPORTINGASSEMBLY; + if (s == "SUSPENSIONASSEMBLY") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_SUSPENSIONASSEMBLY; + if (s == "TRACKPANEL") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_TRACKPANEL; + if (s == "TRACTION_SWITCHING_ASSEMBLY") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_TRACTION_SWITCHING_ASSEMBLY; + if (s == "TRAFFIC_CALMING_DEVICE") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_TRAFFIC_CALMING_DEVICE; + if (s == "TRUSS") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_TRUSS; + if (s == "TURNOUTPANEL") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_TURNOUTPANEL; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::IfcElementAssemblyType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcElementAssemblyTypeEnum::operator Ifc4x3_add2::IfcElementAssemblyTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcElementCompositionEnum::declaration() const { return *IFC4X3_ADD2_IfcElementCompositionEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcElementCompositionEnum::Class() { return *IFC4X3_ADD2_IfcElementCompositionEnum_type; } + +Ifc4x3_add2::IfcElementCompositionEnum::IfcElementCompositionEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcElementCompositionEnum::IfcElementCompositionEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElementCompositionEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcElementCompositionEnum::IfcElementCompositionEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElementCompositionEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcElementCompositionEnum::ToString(Value v) { + if ( v < 0 || v >= 3 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "COMPLEX", "ELEMENT", "PARTIAL" }; + return names[v]; +} + +Ifc4x3_add2::IfcElementCompositionEnum::Value Ifc4x3_add2::IfcElementCompositionEnum::FromString(const std::string& s) { + if (s == "COMPLEX") return ::Ifc4x3_add2::IfcElementCompositionEnum::IfcElementComposition_COMPLEX; + if (s == "ELEMENT") return ::Ifc4x3_add2::IfcElementCompositionEnum::IfcElementComposition_ELEMENT; + if (s == "PARTIAL") return ::Ifc4x3_add2::IfcElementCompositionEnum::IfcElementComposition_PARTIAL; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcElementCompositionEnum::operator Ifc4x3_add2::IfcElementCompositionEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcEngineTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcEngineTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcEngineTypeEnum::Class() { return *IFC4X3_ADD2_IfcEngineTypeEnum_type; } + +Ifc4x3_add2::IfcEngineTypeEnum::IfcEngineTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcEngineTypeEnum::IfcEngineTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEngineTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcEngineTypeEnum::IfcEngineTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEngineTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcEngineTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "EXTERNALCOMBUSTION", "INTERNALCOMBUSTION", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcEngineTypeEnum::Value Ifc4x3_add2::IfcEngineTypeEnum::FromString(const std::string& s) { + if (s == "EXTERNALCOMBUSTION") return ::Ifc4x3_add2::IfcEngineTypeEnum::IfcEngineType_EXTERNALCOMBUSTION; + if (s == "INTERNALCOMBUSTION") return ::Ifc4x3_add2::IfcEngineTypeEnum::IfcEngineType_INTERNALCOMBUSTION; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcEngineTypeEnum::IfcEngineType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcEngineTypeEnum::IfcEngineType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcEngineTypeEnum::operator Ifc4x3_add2::IfcEngineTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcEvaporativeCoolerTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::Class() { return *IFC4X3_ADD2_IfcEvaporativeCoolerTypeEnum_type; } + +Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::IfcEvaporativeCoolerTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::IfcEvaporativeCoolerTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEvaporativeCoolerTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::IfcEvaporativeCoolerTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEvaporativeCoolerTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 11 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "DIRECTEVAPORATIVEAIRWASHER", "DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER", "DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER", "DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER", "DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER", "INDIRECTDIRECTCOMBINATION", "INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER", "INDIRECTEVAPORATIVEPACKAGEAIRCOOLER", "INDIRECTEVAPORATIVEWETCOIL", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::Value Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::FromString(const std::string& s) { + if (s == "DIRECTEVAPORATIVEAIRWASHER") return ::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::IfcEvaporativeCoolerType_DIRECTEVAPORATIVEAIRWASHER; + if (s == "DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER") return ::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::IfcEvaporativeCoolerType_DIRECTEVAPORATIVEPACKAGEDROTARYAIRCOOLER; + if (s == "DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER") return ::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::IfcEvaporativeCoolerType_DIRECTEVAPORATIVERANDOMMEDIAAIRCOOLER; + if (s == "DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER") return ::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::IfcEvaporativeCoolerType_DIRECTEVAPORATIVERIGIDMEDIAAIRCOOLER; + if (s == "DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER") return ::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::IfcEvaporativeCoolerType_DIRECTEVAPORATIVESLINGERSPACKAGEDAIRCOOLER; + if (s == "INDIRECTDIRECTCOMBINATION") return ::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::IfcEvaporativeCoolerType_INDIRECTDIRECTCOMBINATION; + if (s == "INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER") return ::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::IfcEvaporativeCoolerType_INDIRECTEVAPORATIVECOOLINGTOWERORCOILCOOLER; + if (s == "INDIRECTEVAPORATIVEPACKAGEAIRCOOLER") return ::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::IfcEvaporativeCoolerType_INDIRECTEVAPORATIVEPACKAGEAIRCOOLER; + if (s == "INDIRECTEVAPORATIVEWETCOIL") return ::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::IfcEvaporativeCoolerType_INDIRECTEVAPORATIVEWETCOIL; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::IfcEvaporativeCoolerType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::IfcEvaporativeCoolerType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::operator Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcEvaporatorTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcEvaporatorTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcEvaporatorTypeEnum::Class() { return *IFC4X3_ADD2_IfcEvaporatorTypeEnum_type; } + +Ifc4x3_add2::IfcEvaporatorTypeEnum::IfcEvaporatorTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcEvaporatorTypeEnum::IfcEvaporatorTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEvaporatorTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcEvaporatorTypeEnum::IfcEvaporatorTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEvaporatorTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcEvaporatorTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 8 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "DIRECTEXPANSION", "DIRECTEXPANSIONBRAZEDPLATE", "DIRECTEXPANSIONSHELLANDTUBE", "DIRECTEXPANSIONTUBEINTUBE", "FLOODEDSHELLANDTUBE", "SHELLANDCOIL", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcEvaporatorTypeEnum::Value Ifc4x3_add2::IfcEvaporatorTypeEnum::FromString(const std::string& s) { + if (s == "DIRECTEXPANSION") return ::Ifc4x3_add2::IfcEvaporatorTypeEnum::IfcEvaporatorType_DIRECTEXPANSION; + if (s == "DIRECTEXPANSIONBRAZEDPLATE") return ::Ifc4x3_add2::IfcEvaporatorTypeEnum::IfcEvaporatorType_DIRECTEXPANSIONBRAZEDPLATE; + if (s == "DIRECTEXPANSIONSHELLANDTUBE") return ::Ifc4x3_add2::IfcEvaporatorTypeEnum::IfcEvaporatorType_DIRECTEXPANSIONSHELLANDTUBE; + if (s == "DIRECTEXPANSIONTUBEINTUBE") return ::Ifc4x3_add2::IfcEvaporatorTypeEnum::IfcEvaporatorType_DIRECTEXPANSIONTUBEINTUBE; + if (s == "FLOODEDSHELLANDTUBE") return ::Ifc4x3_add2::IfcEvaporatorTypeEnum::IfcEvaporatorType_FLOODEDSHELLANDTUBE; + if (s == "SHELLANDCOIL") return ::Ifc4x3_add2::IfcEvaporatorTypeEnum::IfcEvaporatorType_SHELLANDCOIL; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcEvaporatorTypeEnum::IfcEvaporatorType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcEvaporatorTypeEnum::IfcEvaporatorType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcEvaporatorTypeEnum::operator Ifc4x3_add2::IfcEvaporatorTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcEventTriggerTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcEventTriggerTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcEventTriggerTypeEnum::Class() { return *IFC4X3_ADD2_IfcEventTriggerTypeEnum_type; } + +Ifc4x3_add2::IfcEventTriggerTypeEnum::IfcEventTriggerTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcEventTriggerTypeEnum::IfcEventTriggerTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEventTriggerTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcEventTriggerTypeEnum::IfcEventTriggerTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEventTriggerTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcEventTriggerTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 6 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "EVENTCOMPLEX", "EVENTMESSAGE", "EVENTRULE", "EVENTTIME", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcEventTriggerTypeEnum::Value Ifc4x3_add2::IfcEventTriggerTypeEnum::FromString(const std::string& s) { + if (s == "EVENTCOMPLEX") return ::Ifc4x3_add2::IfcEventTriggerTypeEnum::IfcEventTriggerType_EVENTCOMPLEX; + if (s == "EVENTMESSAGE") return ::Ifc4x3_add2::IfcEventTriggerTypeEnum::IfcEventTriggerType_EVENTMESSAGE; + if (s == "EVENTRULE") return ::Ifc4x3_add2::IfcEventTriggerTypeEnum::IfcEventTriggerType_EVENTRULE; + if (s == "EVENTTIME") return ::Ifc4x3_add2::IfcEventTriggerTypeEnum::IfcEventTriggerType_EVENTTIME; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcEventTriggerTypeEnum::IfcEventTriggerType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcEventTriggerTypeEnum::IfcEventTriggerType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcEventTriggerTypeEnum::operator Ifc4x3_add2::IfcEventTriggerTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcEventTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcEventTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcEventTypeEnum::Class() { return *IFC4X3_ADD2_IfcEventTypeEnum_type; } + +Ifc4x3_add2::IfcEventTypeEnum::IfcEventTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcEventTypeEnum::IfcEventTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEventTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcEventTypeEnum::IfcEventTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEventTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcEventTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ENDEVENT", "INTERMEDIATEEVENT", "STARTEVENT", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcEventTypeEnum::Value Ifc4x3_add2::IfcEventTypeEnum::FromString(const std::string& s) { + if (s == "ENDEVENT") return ::Ifc4x3_add2::IfcEventTypeEnum::IfcEventType_ENDEVENT; + if (s == "INTERMEDIATEEVENT") return ::Ifc4x3_add2::IfcEventTypeEnum::IfcEventType_INTERMEDIATEEVENT; + if (s == "STARTEVENT") return ::Ifc4x3_add2::IfcEventTypeEnum::IfcEventType_STARTEVENT; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcEventTypeEnum::IfcEventType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcEventTypeEnum::IfcEventType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcEventTypeEnum::operator Ifc4x3_add2::IfcEventTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcExternalSpatialElementTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcExternalSpatialElementTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcExternalSpatialElementTypeEnum::Class() { return *IFC4X3_ADD2_IfcExternalSpatialElementTypeEnum_type; } + +Ifc4x3_add2::IfcExternalSpatialElementTypeEnum::IfcExternalSpatialElementTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcExternalSpatialElementTypeEnum::IfcExternalSpatialElementTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcExternalSpatialElementTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcExternalSpatialElementTypeEnum::IfcExternalSpatialElementTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcExternalSpatialElementTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcExternalSpatialElementTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 6 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "EXTERNAL", "EXTERNAL_EARTH", "EXTERNAL_FIRE", "EXTERNAL_WATER", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcExternalSpatialElementTypeEnum::Value Ifc4x3_add2::IfcExternalSpatialElementTypeEnum::FromString(const std::string& s) { + if (s == "EXTERNAL") return ::Ifc4x3_add2::IfcExternalSpatialElementTypeEnum::IfcExternalSpatialElementType_EXTERNAL; + if (s == "EXTERNAL_EARTH") return ::Ifc4x3_add2::IfcExternalSpatialElementTypeEnum::IfcExternalSpatialElementType_EXTERNAL_EARTH; + if (s == "EXTERNAL_FIRE") return ::Ifc4x3_add2::IfcExternalSpatialElementTypeEnum::IfcExternalSpatialElementType_EXTERNAL_FIRE; + if (s == "EXTERNAL_WATER") return ::Ifc4x3_add2::IfcExternalSpatialElementTypeEnum::IfcExternalSpatialElementType_EXTERNAL_WATER; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcExternalSpatialElementTypeEnum::IfcExternalSpatialElementType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcExternalSpatialElementTypeEnum::IfcExternalSpatialElementType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcExternalSpatialElementTypeEnum::operator Ifc4x3_add2::IfcExternalSpatialElementTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcFacilityPartCommonTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::Class() { return *IFC4X3_ADD2_IfcFacilityPartCommonTypeEnum_type; } + +Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::IfcFacilityPartCommonTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::IfcFacilityPartCommonTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFacilityPartCommonTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::IfcFacilityPartCommonTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFacilityPartCommonTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 10 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ABOVEGROUND", "BELOWGROUND", "JUNCTION", "LEVELCROSSING", "SEGMENT", "SUBSTRUCTURE", "SUPERSTRUCTURE", "TERMINAL", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::Value Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::FromString(const std::string& s) { + if (s == "ABOVEGROUND") return ::Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::IfcFacilityPartCommonType_ABOVEGROUND; + if (s == "BELOWGROUND") return ::Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::IfcFacilityPartCommonType_BELOWGROUND; + if (s == "JUNCTION") return ::Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::IfcFacilityPartCommonType_JUNCTION; + if (s == "LEVELCROSSING") return ::Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::IfcFacilityPartCommonType_LEVELCROSSING; + if (s == "SEGMENT") return ::Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::IfcFacilityPartCommonType_SEGMENT; + if (s == "SUBSTRUCTURE") return ::Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::IfcFacilityPartCommonType_SUBSTRUCTURE; + if (s == "SUPERSTRUCTURE") return ::Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::IfcFacilityPartCommonType_SUPERSTRUCTURE; + if (s == "TERMINAL") return ::Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::IfcFacilityPartCommonType_TERMINAL; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::IfcFacilityPartCommonType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::IfcFacilityPartCommonType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::operator Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcFacilityUsageEnum::declaration() const { return *IFC4X3_ADD2_IfcFacilityUsageEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcFacilityUsageEnum::Class() { return *IFC4X3_ADD2_IfcFacilityUsageEnum_type; } + +Ifc4x3_add2::IfcFacilityUsageEnum::IfcFacilityUsageEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcFacilityUsageEnum::IfcFacilityUsageEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFacilityUsageEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcFacilityUsageEnum::IfcFacilityUsageEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFacilityUsageEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcFacilityUsageEnum::ToString(Value v) { + if ( v < 0 || v >= 6 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "LATERAL", "LONGITUDINAL", "REGION", "VERTICAL", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcFacilityUsageEnum::Value Ifc4x3_add2::IfcFacilityUsageEnum::FromString(const std::string& s) { + if (s == "LATERAL") return ::Ifc4x3_add2::IfcFacilityUsageEnum::IfcFacilityUsage_LATERAL; + if (s == "LONGITUDINAL") return ::Ifc4x3_add2::IfcFacilityUsageEnum::IfcFacilityUsage_LONGITUDINAL; + if (s == "REGION") return ::Ifc4x3_add2::IfcFacilityUsageEnum::IfcFacilityUsage_REGION; + if (s == "VERTICAL") return ::Ifc4x3_add2::IfcFacilityUsageEnum::IfcFacilityUsage_VERTICAL; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcFacilityUsageEnum::IfcFacilityUsage_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcFacilityUsageEnum::IfcFacilityUsage_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcFacilityUsageEnum::operator Ifc4x3_add2::IfcFacilityUsageEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcFanTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcFanTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcFanTypeEnum::Class() { return *IFC4X3_ADD2_IfcFanTypeEnum_type; } + +Ifc4x3_add2::IfcFanTypeEnum::IfcFanTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcFanTypeEnum::IfcFanTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFanTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcFanTypeEnum::IfcFanTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFanTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcFanTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 9 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CENTRIFUGALAIRFOIL", "CENTRIFUGALBACKWARDINCLINEDCURVED", "CENTRIFUGALFORWARDCURVED", "CENTRIFUGALRADIAL", "PROPELLORAXIAL", "TUBEAXIAL", "VANEAXIAL", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcFanTypeEnum::Value Ifc4x3_add2::IfcFanTypeEnum::FromString(const std::string& s) { + if (s == "CENTRIFUGALAIRFOIL") return ::Ifc4x3_add2::IfcFanTypeEnum::IfcFanType_CENTRIFUGALAIRFOIL; + if (s == "CENTRIFUGALBACKWARDINCLINEDCURVED") return ::Ifc4x3_add2::IfcFanTypeEnum::IfcFanType_CENTRIFUGALBACKWARDINCLINEDCURVED; + if (s == "CENTRIFUGALFORWARDCURVED") return ::Ifc4x3_add2::IfcFanTypeEnum::IfcFanType_CENTRIFUGALFORWARDCURVED; + if (s == "CENTRIFUGALRADIAL") return ::Ifc4x3_add2::IfcFanTypeEnum::IfcFanType_CENTRIFUGALRADIAL; + if (s == "PROPELLORAXIAL") return ::Ifc4x3_add2::IfcFanTypeEnum::IfcFanType_PROPELLORAXIAL; + if (s == "TUBEAXIAL") return ::Ifc4x3_add2::IfcFanTypeEnum::IfcFanType_TUBEAXIAL; + if (s == "VANEAXIAL") return ::Ifc4x3_add2::IfcFanTypeEnum::IfcFanType_VANEAXIAL; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcFanTypeEnum::IfcFanType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcFanTypeEnum::IfcFanType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcFanTypeEnum::operator Ifc4x3_add2::IfcFanTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcFastenerTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcFastenerTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcFastenerTypeEnum::Class() { return *IFC4X3_ADD2_IfcFastenerTypeEnum_type; } + +Ifc4x3_add2::IfcFastenerTypeEnum::IfcFastenerTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcFastenerTypeEnum::IfcFastenerTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFastenerTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcFastenerTypeEnum::IfcFastenerTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFastenerTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcFastenerTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "GLUE", "MORTAR", "WELD", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcFastenerTypeEnum::Value Ifc4x3_add2::IfcFastenerTypeEnum::FromString(const std::string& s) { + if (s == "GLUE") return ::Ifc4x3_add2::IfcFastenerTypeEnum::IfcFastenerType_GLUE; + if (s == "MORTAR") return ::Ifc4x3_add2::IfcFastenerTypeEnum::IfcFastenerType_MORTAR; + if (s == "WELD") return ::Ifc4x3_add2::IfcFastenerTypeEnum::IfcFastenerType_WELD; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcFastenerTypeEnum::IfcFastenerType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcFastenerTypeEnum::IfcFastenerType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcFastenerTypeEnum::operator Ifc4x3_add2::IfcFastenerTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcFilterTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcFilterTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcFilterTypeEnum::Class() { return *IFC4X3_ADD2_IfcFilterTypeEnum_type; } + +Ifc4x3_add2::IfcFilterTypeEnum::IfcFilterTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcFilterTypeEnum::IfcFilterTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFilterTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcFilterTypeEnum::IfcFilterTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFilterTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcFilterTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 8 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "AIRPARTICLEFILTER", "COMPRESSEDAIRFILTER", "ODORFILTER", "OILFILTER", "STRAINER", "WATERFILTER", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcFilterTypeEnum::Value Ifc4x3_add2::IfcFilterTypeEnum::FromString(const std::string& s) { + if (s == "AIRPARTICLEFILTER") return ::Ifc4x3_add2::IfcFilterTypeEnum::IfcFilterType_AIRPARTICLEFILTER; + if (s == "COMPRESSEDAIRFILTER") return ::Ifc4x3_add2::IfcFilterTypeEnum::IfcFilterType_COMPRESSEDAIRFILTER; + if (s == "ODORFILTER") return ::Ifc4x3_add2::IfcFilterTypeEnum::IfcFilterType_ODORFILTER; + if (s == "OILFILTER") return ::Ifc4x3_add2::IfcFilterTypeEnum::IfcFilterType_OILFILTER; + if (s == "STRAINER") return ::Ifc4x3_add2::IfcFilterTypeEnum::IfcFilterType_STRAINER; + if (s == "WATERFILTER") return ::Ifc4x3_add2::IfcFilterTypeEnum::IfcFilterType_WATERFILTER; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcFilterTypeEnum::IfcFilterType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcFilterTypeEnum::IfcFilterType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcFilterTypeEnum::operator Ifc4x3_add2::IfcFilterTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcFireSuppressionTerminalTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::Class() { return *IFC4X3_ADD2_IfcFireSuppressionTerminalTypeEnum_type; } + +Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::IfcFireSuppressionTerminalTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::IfcFireSuppressionTerminalTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFireSuppressionTerminalTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::IfcFireSuppressionTerminalTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFireSuppressionTerminalTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 8 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BREECHINGINLET", "FIREHYDRANT", "FIREMONITOR", "HOSEREEL", "SPRINKLER", "SPRINKLERDEFLECTOR", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::Value Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::FromString(const std::string& s) { + if (s == "BREECHINGINLET") return ::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::IfcFireSuppressionTerminalType_BREECHINGINLET; + if (s == "FIREHYDRANT") return ::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::IfcFireSuppressionTerminalType_FIREHYDRANT; + if (s == "FIREMONITOR") return ::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::IfcFireSuppressionTerminalType_FIREMONITOR; + if (s == "HOSEREEL") return ::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::IfcFireSuppressionTerminalType_HOSEREEL; + if (s == "SPRINKLER") return ::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::IfcFireSuppressionTerminalType_SPRINKLER; + if (s == "SPRINKLERDEFLECTOR") return ::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::IfcFireSuppressionTerminalType_SPRINKLERDEFLECTOR; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::IfcFireSuppressionTerminalType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::IfcFireSuppressionTerminalType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::operator Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcFlowDirectionEnum::declaration() const { return *IFC4X3_ADD2_IfcFlowDirectionEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcFlowDirectionEnum::Class() { return *IFC4X3_ADD2_IfcFlowDirectionEnum_type; } + +Ifc4x3_add2::IfcFlowDirectionEnum::IfcFlowDirectionEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcFlowDirectionEnum::IfcFlowDirectionEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFlowDirectionEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcFlowDirectionEnum::IfcFlowDirectionEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFlowDirectionEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcFlowDirectionEnum::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "SINK", "SOURCE", "SOURCEANDSINK", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcFlowDirectionEnum::Value Ifc4x3_add2::IfcFlowDirectionEnum::FromString(const std::string& s) { + if (s == "SINK") return ::Ifc4x3_add2::IfcFlowDirectionEnum::IfcFlowDirection_SINK; + if (s == "SOURCE") return ::Ifc4x3_add2::IfcFlowDirectionEnum::IfcFlowDirection_SOURCE; + if (s == "SOURCEANDSINK") return ::Ifc4x3_add2::IfcFlowDirectionEnum::IfcFlowDirection_SOURCEANDSINK; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcFlowDirectionEnum::IfcFlowDirection_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcFlowDirectionEnum::operator Ifc4x3_add2::IfcFlowDirectionEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcFlowInstrumentTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcFlowInstrumentTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcFlowInstrumentTypeEnum::Class() { return *IFC4X3_ADD2_IfcFlowInstrumentTypeEnum_type; } + +Ifc4x3_add2::IfcFlowInstrumentTypeEnum::IfcFlowInstrumentTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcFlowInstrumentTypeEnum::IfcFlowInstrumentTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFlowInstrumentTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcFlowInstrumentTypeEnum::IfcFlowInstrumentTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFlowInstrumentTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcFlowInstrumentTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 12 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "AMMETER", "COMBINED", "FREQUENCYMETER", "PHASEANGLEMETER", "POWERFACTORMETER", "PRESSUREGAUGE", "THERMOMETER", "VOLTMETER", "VOLTMETER_PEAK", "VOLTMETER_RMS", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcFlowInstrumentTypeEnum::Value Ifc4x3_add2::IfcFlowInstrumentTypeEnum::FromString(const std::string& s) { + if (s == "AMMETER") return ::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::IfcFlowInstrumentType_AMMETER; + if (s == "COMBINED") return ::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::IfcFlowInstrumentType_COMBINED; + if (s == "FREQUENCYMETER") return ::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::IfcFlowInstrumentType_FREQUENCYMETER; + if (s == "PHASEANGLEMETER") return ::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::IfcFlowInstrumentType_PHASEANGLEMETER; + if (s == "POWERFACTORMETER") return ::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::IfcFlowInstrumentType_POWERFACTORMETER; + if (s == "PRESSUREGAUGE") return ::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::IfcFlowInstrumentType_PRESSUREGAUGE; + if (s == "THERMOMETER") return ::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::IfcFlowInstrumentType_THERMOMETER; + if (s == "VOLTMETER") return ::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::IfcFlowInstrumentType_VOLTMETER; + if (s == "VOLTMETER_PEAK") return ::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::IfcFlowInstrumentType_VOLTMETER_PEAK; + if (s == "VOLTMETER_RMS") return ::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::IfcFlowInstrumentType_VOLTMETER_RMS; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::IfcFlowInstrumentType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::IfcFlowInstrumentType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcFlowInstrumentTypeEnum::operator Ifc4x3_add2::IfcFlowInstrumentTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcFlowMeterTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcFlowMeterTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcFlowMeterTypeEnum::Class() { return *IFC4X3_ADD2_IfcFlowMeterTypeEnum_type; } + +Ifc4x3_add2::IfcFlowMeterTypeEnum::IfcFlowMeterTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcFlowMeterTypeEnum::IfcFlowMeterTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFlowMeterTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcFlowMeterTypeEnum::IfcFlowMeterTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFlowMeterTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcFlowMeterTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 6 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ENERGYMETER", "GASMETER", "OILMETER", "WATERMETER", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcFlowMeterTypeEnum::Value Ifc4x3_add2::IfcFlowMeterTypeEnum::FromString(const std::string& s) { + if (s == "ENERGYMETER") return ::Ifc4x3_add2::IfcFlowMeterTypeEnum::IfcFlowMeterType_ENERGYMETER; + if (s == "GASMETER") return ::Ifc4x3_add2::IfcFlowMeterTypeEnum::IfcFlowMeterType_GASMETER; + if (s == "OILMETER") return ::Ifc4x3_add2::IfcFlowMeterTypeEnum::IfcFlowMeterType_OILMETER; + if (s == "WATERMETER") return ::Ifc4x3_add2::IfcFlowMeterTypeEnum::IfcFlowMeterType_WATERMETER; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcFlowMeterTypeEnum::IfcFlowMeterType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcFlowMeterTypeEnum::IfcFlowMeterType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcFlowMeterTypeEnum::operator Ifc4x3_add2::IfcFlowMeterTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcFootingTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcFootingTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcFootingTypeEnum::Class() { return *IFC4X3_ADD2_IfcFootingTypeEnum_type; } + +Ifc4x3_add2::IfcFootingTypeEnum::IfcFootingTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcFootingTypeEnum::IfcFootingTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFootingTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcFootingTypeEnum::IfcFootingTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFootingTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcFootingTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 7 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CAISSON_FOUNDATION", "FOOTING_BEAM", "PAD_FOOTING", "PILE_CAP", "STRIP_FOOTING", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcFootingTypeEnum::Value Ifc4x3_add2::IfcFootingTypeEnum::FromString(const std::string& s) { + if (s == "CAISSON_FOUNDATION") return ::Ifc4x3_add2::IfcFootingTypeEnum::IfcFootingType_CAISSON_FOUNDATION; + if (s == "FOOTING_BEAM") return ::Ifc4x3_add2::IfcFootingTypeEnum::IfcFootingType_FOOTING_BEAM; + if (s == "PAD_FOOTING") return ::Ifc4x3_add2::IfcFootingTypeEnum::IfcFootingType_PAD_FOOTING; + if (s == "PILE_CAP") return ::Ifc4x3_add2::IfcFootingTypeEnum::IfcFootingType_PILE_CAP; + if (s == "STRIP_FOOTING") return ::Ifc4x3_add2::IfcFootingTypeEnum::IfcFootingType_STRIP_FOOTING; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcFootingTypeEnum::IfcFootingType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcFootingTypeEnum::IfcFootingType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcFootingTypeEnum::operator Ifc4x3_add2::IfcFootingTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcFurnitureTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcFurnitureTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcFurnitureTypeEnum::Class() { return *IFC4X3_ADD2_IfcFurnitureTypeEnum_type; } + +Ifc4x3_add2::IfcFurnitureTypeEnum::IfcFurnitureTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcFurnitureTypeEnum::IfcFurnitureTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFurnitureTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcFurnitureTypeEnum::IfcFurnitureTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFurnitureTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcFurnitureTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 10 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BED", "CHAIR", "DESK", "FILECABINET", "SHELF", "SOFA", "TABLE", "TECHNICALCABINET", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcFurnitureTypeEnum::Value Ifc4x3_add2::IfcFurnitureTypeEnum::FromString(const std::string& s) { + if (s == "BED") return ::Ifc4x3_add2::IfcFurnitureTypeEnum::IfcFurnitureType_BED; + if (s == "CHAIR") return ::Ifc4x3_add2::IfcFurnitureTypeEnum::IfcFurnitureType_CHAIR; + if (s == "DESK") return ::Ifc4x3_add2::IfcFurnitureTypeEnum::IfcFurnitureType_DESK; + if (s == "FILECABINET") return ::Ifc4x3_add2::IfcFurnitureTypeEnum::IfcFurnitureType_FILECABINET; + if (s == "SHELF") return ::Ifc4x3_add2::IfcFurnitureTypeEnum::IfcFurnitureType_SHELF; + if (s == "SOFA") return ::Ifc4x3_add2::IfcFurnitureTypeEnum::IfcFurnitureType_SOFA; + if (s == "TABLE") return ::Ifc4x3_add2::IfcFurnitureTypeEnum::IfcFurnitureType_TABLE; + if (s == "TECHNICALCABINET") return ::Ifc4x3_add2::IfcFurnitureTypeEnum::IfcFurnitureType_TECHNICALCABINET; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcFurnitureTypeEnum::IfcFurnitureType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcFurnitureTypeEnum::IfcFurnitureType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcFurnitureTypeEnum::operator Ifc4x3_add2::IfcFurnitureTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcGeographicElementTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcGeographicElementTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcGeographicElementTypeEnum::Class() { return *IFC4X3_ADD2_IfcGeographicElementTypeEnum_type; } + +Ifc4x3_add2::IfcGeographicElementTypeEnum::IfcGeographicElementTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcGeographicElementTypeEnum::IfcGeographicElementTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGeographicElementTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcGeographicElementTypeEnum::IfcGeographicElementTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGeographicElementTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcGeographicElementTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "SOIL_BORING_POINT", "TERRAIN", "VEGETATION", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcGeographicElementTypeEnum::Value Ifc4x3_add2::IfcGeographicElementTypeEnum::FromString(const std::string& s) { + if (s == "SOIL_BORING_POINT") return ::Ifc4x3_add2::IfcGeographicElementTypeEnum::IfcGeographicElementType_SOIL_BORING_POINT; + if (s == "TERRAIN") return ::Ifc4x3_add2::IfcGeographicElementTypeEnum::IfcGeographicElementType_TERRAIN; + if (s == "VEGETATION") return ::Ifc4x3_add2::IfcGeographicElementTypeEnum::IfcGeographicElementType_VEGETATION; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcGeographicElementTypeEnum::IfcGeographicElementType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcGeographicElementTypeEnum::IfcGeographicElementType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcGeographicElementTypeEnum::operator Ifc4x3_add2::IfcGeographicElementTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcGeometricProjectionEnum::declaration() const { return *IFC4X3_ADD2_IfcGeometricProjectionEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcGeometricProjectionEnum::Class() { return *IFC4X3_ADD2_IfcGeometricProjectionEnum_type; } + +Ifc4x3_add2::IfcGeometricProjectionEnum::IfcGeometricProjectionEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcGeometricProjectionEnum::IfcGeometricProjectionEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGeometricProjectionEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcGeometricProjectionEnum::IfcGeometricProjectionEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGeometricProjectionEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcGeometricProjectionEnum::ToString(Value v) { + if ( v < 0 || v >= 9 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ELEVATION_VIEW", "GRAPH_VIEW", "MODEL_VIEW", "PLAN_VIEW", "REFLECTED_PLAN_VIEW", "SECTION_VIEW", "SKETCH_VIEW", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcGeometricProjectionEnum::Value Ifc4x3_add2::IfcGeometricProjectionEnum::FromString(const std::string& s) { + if (s == "ELEVATION_VIEW") return ::Ifc4x3_add2::IfcGeometricProjectionEnum::IfcGeometricProjection_ELEVATION_VIEW; + if (s == "GRAPH_VIEW") return ::Ifc4x3_add2::IfcGeometricProjectionEnum::IfcGeometricProjection_GRAPH_VIEW; + if (s == "MODEL_VIEW") return ::Ifc4x3_add2::IfcGeometricProjectionEnum::IfcGeometricProjection_MODEL_VIEW; + if (s == "PLAN_VIEW") return ::Ifc4x3_add2::IfcGeometricProjectionEnum::IfcGeometricProjection_PLAN_VIEW; + if (s == "REFLECTED_PLAN_VIEW") return ::Ifc4x3_add2::IfcGeometricProjectionEnum::IfcGeometricProjection_REFLECTED_PLAN_VIEW; + if (s == "SECTION_VIEW") return ::Ifc4x3_add2::IfcGeometricProjectionEnum::IfcGeometricProjection_SECTION_VIEW; + if (s == "SKETCH_VIEW") return ::Ifc4x3_add2::IfcGeometricProjectionEnum::IfcGeometricProjection_SKETCH_VIEW; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcGeometricProjectionEnum::IfcGeometricProjection_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcGeometricProjectionEnum::IfcGeometricProjection_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcGeometricProjectionEnum::operator Ifc4x3_add2::IfcGeometricProjectionEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcGeotechnicalStratumTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcGeotechnicalStratumTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcGeotechnicalStratumTypeEnum::Class() { return *IFC4X3_ADD2_IfcGeotechnicalStratumTypeEnum_type; } + +Ifc4x3_add2::IfcGeotechnicalStratumTypeEnum::IfcGeotechnicalStratumTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcGeotechnicalStratumTypeEnum::IfcGeotechnicalStratumTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGeotechnicalStratumTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcGeotechnicalStratumTypeEnum::IfcGeotechnicalStratumTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGeotechnicalStratumTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcGeotechnicalStratumTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "SOLID", "VOID", "WATER", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcGeotechnicalStratumTypeEnum::Value Ifc4x3_add2::IfcGeotechnicalStratumTypeEnum::FromString(const std::string& s) { + if (s == "SOLID") return ::Ifc4x3_add2::IfcGeotechnicalStratumTypeEnum::IfcGeotechnicalStratumType_SOLID; + if (s == "VOID") return ::Ifc4x3_add2::IfcGeotechnicalStratumTypeEnum::IfcGeotechnicalStratumType_VOID; + if (s == "WATER") return ::Ifc4x3_add2::IfcGeotechnicalStratumTypeEnum::IfcGeotechnicalStratumType_WATER; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcGeotechnicalStratumTypeEnum::IfcGeotechnicalStratumType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcGeotechnicalStratumTypeEnum::IfcGeotechnicalStratumType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcGeotechnicalStratumTypeEnum::operator Ifc4x3_add2::IfcGeotechnicalStratumTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcGlobalOrLocalEnum::declaration() const { return *IFC4X3_ADD2_IfcGlobalOrLocalEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcGlobalOrLocalEnum::Class() { return *IFC4X3_ADD2_IfcGlobalOrLocalEnum_type; } + +Ifc4x3_add2::IfcGlobalOrLocalEnum::IfcGlobalOrLocalEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcGlobalOrLocalEnum::IfcGlobalOrLocalEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGlobalOrLocalEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcGlobalOrLocalEnum::IfcGlobalOrLocalEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGlobalOrLocalEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcGlobalOrLocalEnum::ToString(Value v) { + if ( v < 0 || v >= 2 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "GLOBAL_COORDS", "LOCAL_COORDS" }; + return names[v]; +} + +Ifc4x3_add2::IfcGlobalOrLocalEnum::Value Ifc4x3_add2::IfcGlobalOrLocalEnum::FromString(const std::string& s) { + if (s == "GLOBAL_COORDS") return ::Ifc4x3_add2::IfcGlobalOrLocalEnum::IfcGlobalOrLocal_GLOBAL_COORDS; + if (s == "LOCAL_COORDS") return ::Ifc4x3_add2::IfcGlobalOrLocalEnum::IfcGlobalOrLocal_LOCAL_COORDS; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcGlobalOrLocalEnum::operator Ifc4x3_add2::IfcGlobalOrLocalEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcGridTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcGridTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcGridTypeEnum::Class() { return *IFC4X3_ADD2_IfcGridTypeEnum_type; } + +Ifc4x3_add2::IfcGridTypeEnum::IfcGridTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcGridTypeEnum::IfcGridTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGridTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcGridTypeEnum::IfcGridTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGridTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcGridTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 6 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "IRREGULAR", "RADIAL", "RECTANGULAR", "TRIANGULAR", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcGridTypeEnum::Value Ifc4x3_add2::IfcGridTypeEnum::FromString(const std::string& s) { + if (s == "IRREGULAR") return ::Ifc4x3_add2::IfcGridTypeEnum::IfcGridType_IRREGULAR; + if (s == "RADIAL") return ::Ifc4x3_add2::IfcGridTypeEnum::IfcGridType_RADIAL; + if (s == "RECTANGULAR") return ::Ifc4x3_add2::IfcGridTypeEnum::IfcGridType_RECTANGULAR; + if (s == "TRIANGULAR") return ::Ifc4x3_add2::IfcGridTypeEnum::IfcGridType_TRIANGULAR; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcGridTypeEnum::IfcGridType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcGridTypeEnum::IfcGridType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcGridTypeEnum::operator Ifc4x3_add2::IfcGridTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcHeatExchangerTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcHeatExchangerTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcHeatExchangerTypeEnum::Class() { return *IFC4X3_ADD2_IfcHeatExchangerTypeEnum_type; } + +Ifc4x3_add2::IfcHeatExchangerTypeEnum::IfcHeatExchangerTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcHeatExchangerTypeEnum::IfcHeatExchangerTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcHeatExchangerTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcHeatExchangerTypeEnum::IfcHeatExchangerTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcHeatExchangerTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcHeatExchangerTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "PLATE", "SHELLANDTUBE", "TURNOUTHEATING", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcHeatExchangerTypeEnum::Value Ifc4x3_add2::IfcHeatExchangerTypeEnum::FromString(const std::string& s) { + if (s == "PLATE") return ::Ifc4x3_add2::IfcHeatExchangerTypeEnum::IfcHeatExchangerType_PLATE; + if (s == "SHELLANDTUBE") return ::Ifc4x3_add2::IfcHeatExchangerTypeEnum::IfcHeatExchangerType_SHELLANDTUBE; + if (s == "TURNOUTHEATING") return ::Ifc4x3_add2::IfcHeatExchangerTypeEnum::IfcHeatExchangerType_TURNOUTHEATING; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcHeatExchangerTypeEnum::IfcHeatExchangerType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcHeatExchangerTypeEnum::IfcHeatExchangerType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcHeatExchangerTypeEnum::operator Ifc4x3_add2::IfcHeatExchangerTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcHumidifierTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcHumidifierTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcHumidifierTypeEnum::Class() { return *IFC4X3_ADD2_IfcHumidifierTypeEnum_type; } + +Ifc4x3_add2::IfcHumidifierTypeEnum::IfcHumidifierTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcHumidifierTypeEnum::IfcHumidifierTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcHumidifierTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcHumidifierTypeEnum::IfcHumidifierTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcHumidifierTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcHumidifierTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 15 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ADIABATICAIRWASHER", "ADIABATICATOMIZING", "ADIABATICCOMPRESSEDAIRNOZZLE", "ADIABATICPAN", "ADIABATICRIGIDMEDIA", "ADIABATICULTRASONIC", "ADIABATICWETTEDELEMENT", "ASSISTEDBUTANE", "ASSISTEDELECTRIC", "ASSISTEDNATURALGAS", "ASSISTEDPROPANE", "ASSISTEDSTEAM", "STEAMINJECTION", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcHumidifierTypeEnum::Value Ifc4x3_add2::IfcHumidifierTypeEnum::FromString(const std::string& s) { + if (s == "ADIABATICAIRWASHER") return ::Ifc4x3_add2::IfcHumidifierTypeEnum::IfcHumidifierType_ADIABATICAIRWASHER; + if (s == "ADIABATICATOMIZING") return ::Ifc4x3_add2::IfcHumidifierTypeEnum::IfcHumidifierType_ADIABATICATOMIZING; + if (s == "ADIABATICCOMPRESSEDAIRNOZZLE") return ::Ifc4x3_add2::IfcHumidifierTypeEnum::IfcHumidifierType_ADIABATICCOMPRESSEDAIRNOZZLE; + if (s == "ADIABATICPAN") return ::Ifc4x3_add2::IfcHumidifierTypeEnum::IfcHumidifierType_ADIABATICPAN; + if (s == "ADIABATICRIGIDMEDIA") return ::Ifc4x3_add2::IfcHumidifierTypeEnum::IfcHumidifierType_ADIABATICRIGIDMEDIA; + if (s == "ADIABATICULTRASONIC") return ::Ifc4x3_add2::IfcHumidifierTypeEnum::IfcHumidifierType_ADIABATICULTRASONIC; + if (s == "ADIABATICWETTEDELEMENT") return ::Ifc4x3_add2::IfcHumidifierTypeEnum::IfcHumidifierType_ADIABATICWETTEDELEMENT; + if (s == "ASSISTEDBUTANE") return ::Ifc4x3_add2::IfcHumidifierTypeEnum::IfcHumidifierType_ASSISTEDBUTANE; + if (s == "ASSISTEDELECTRIC") return ::Ifc4x3_add2::IfcHumidifierTypeEnum::IfcHumidifierType_ASSISTEDELECTRIC; + if (s == "ASSISTEDNATURALGAS") return ::Ifc4x3_add2::IfcHumidifierTypeEnum::IfcHumidifierType_ASSISTEDNATURALGAS; + if (s == "ASSISTEDPROPANE") return ::Ifc4x3_add2::IfcHumidifierTypeEnum::IfcHumidifierType_ASSISTEDPROPANE; + if (s == "ASSISTEDSTEAM") return ::Ifc4x3_add2::IfcHumidifierTypeEnum::IfcHumidifierType_ASSISTEDSTEAM; + if (s == "STEAMINJECTION") return ::Ifc4x3_add2::IfcHumidifierTypeEnum::IfcHumidifierType_STEAMINJECTION; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcHumidifierTypeEnum::IfcHumidifierType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcHumidifierTypeEnum::IfcHumidifierType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcHumidifierTypeEnum::operator Ifc4x3_add2::IfcHumidifierTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcImpactProtectionDeviceTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::Class() { return *IFC4X3_ADD2_IfcImpactProtectionDeviceTypeEnum_type; } + +Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::IfcImpactProtectionDeviceTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::IfcImpactProtectionDeviceTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcImpactProtectionDeviceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::IfcImpactProtectionDeviceTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcImpactProtectionDeviceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 6 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BUMPER", "CRASHCUSHION", "DAMPINGSYSTEM", "FENDER", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::Value Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::FromString(const std::string& s) { + if (s == "BUMPER") return ::Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::IfcImpactProtectionDeviceType_BUMPER; + if (s == "CRASHCUSHION") return ::Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::IfcImpactProtectionDeviceType_CRASHCUSHION; + if (s == "DAMPINGSYSTEM") return ::Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::IfcImpactProtectionDeviceType_DAMPINGSYSTEM; + if (s == "FENDER") return ::Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::IfcImpactProtectionDeviceType_FENDER; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::IfcImpactProtectionDeviceType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::IfcImpactProtectionDeviceType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::operator Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcInterceptorTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcInterceptorTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcInterceptorTypeEnum::Class() { return *IFC4X3_ADD2_IfcInterceptorTypeEnum_type; } + +Ifc4x3_add2::IfcInterceptorTypeEnum::IfcInterceptorTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcInterceptorTypeEnum::IfcInterceptorTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcInterceptorTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcInterceptorTypeEnum::IfcInterceptorTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcInterceptorTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcInterceptorTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 6 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CYCLONIC", "GREASE", "OIL", "PETROL", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcInterceptorTypeEnum::Value Ifc4x3_add2::IfcInterceptorTypeEnum::FromString(const std::string& s) { + if (s == "CYCLONIC") return ::Ifc4x3_add2::IfcInterceptorTypeEnum::IfcInterceptorType_CYCLONIC; + if (s == "GREASE") return ::Ifc4x3_add2::IfcInterceptorTypeEnum::IfcInterceptorType_GREASE; + if (s == "OIL") return ::Ifc4x3_add2::IfcInterceptorTypeEnum::IfcInterceptorType_OIL; + if (s == "PETROL") return ::Ifc4x3_add2::IfcInterceptorTypeEnum::IfcInterceptorType_PETROL; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcInterceptorTypeEnum::IfcInterceptorType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcInterceptorTypeEnum::IfcInterceptorType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcInterceptorTypeEnum::operator Ifc4x3_add2::IfcInterceptorTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcInternalOrExternalEnum::declaration() const { return *IFC4X3_ADD2_IfcInternalOrExternalEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcInternalOrExternalEnum::Class() { return *IFC4X3_ADD2_IfcInternalOrExternalEnum_type; } + +Ifc4x3_add2::IfcInternalOrExternalEnum::IfcInternalOrExternalEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcInternalOrExternalEnum::IfcInternalOrExternalEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcInternalOrExternalEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcInternalOrExternalEnum::IfcInternalOrExternalEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcInternalOrExternalEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcInternalOrExternalEnum::ToString(Value v) { + if ( v < 0 || v >= 6 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "EXTERNAL", "EXTERNAL_EARTH", "EXTERNAL_FIRE", "EXTERNAL_WATER", "INTERNAL", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcInternalOrExternalEnum::Value Ifc4x3_add2::IfcInternalOrExternalEnum::FromString(const std::string& s) { + if (s == "EXTERNAL") return ::Ifc4x3_add2::IfcInternalOrExternalEnum::IfcInternalOrExternal_EXTERNAL; + if (s == "EXTERNAL_EARTH") return ::Ifc4x3_add2::IfcInternalOrExternalEnum::IfcInternalOrExternal_EXTERNAL_EARTH; + if (s == "EXTERNAL_FIRE") return ::Ifc4x3_add2::IfcInternalOrExternalEnum::IfcInternalOrExternal_EXTERNAL_FIRE; + if (s == "EXTERNAL_WATER") return ::Ifc4x3_add2::IfcInternalOrExternalEnum::IfcInternalOrExternal_EXTERNAL_WATER; + if (s == "INTERNAL") return ::Ifc4x3_add2::IfcInternalOrExternalEnum::IfcInternalOrExternal_INTERNAL; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcInternalOrExternalEnum::IfcInternalOrExternal_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcInternalOrExternalEnum::operator Ifc4x3_add2::IfcInternalOrExternalEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcInventoryTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcInventoryTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcInventoryTypeEnum::Class() { return *IFC4X3_ADD2_IfcInventoryTypeEnum_type; } + +Ifc4x3_add2::IfcInventoryTypeEnum::IfcInventoryTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcInventoryTypeEnum::IfcInventoryTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcInventoryTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcInventoryTypeEnum::IfcInventoryTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcInventoryTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcInventoryTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ASSETINVENTORY", "FURNITUREINVENTORY", "SPACEINVENTORY", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcInventoryTypeEnum::Value Ifc4x3_add2::IfcInventoryTypeEnum::FromString(const std::string& s) { + if (s == "ASSETINVENTORY") return ::Ifc4x3_add2::IfcInventoryTypeEnum::IfcInventoryType_ASSETINVENTORY; + if (s == "FURNITUREINVENTORY") return ::Ifc4x3_add2::IfcInventoryTypeEnum::IfcInventoryType_FURNITUREINVENTORY; + if (s == "SPACEINVENTORY") return ::Ifc4x3_add2::IfcInventoryTypeEnum::IfcInventoryType_SPACEINVENTORY; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcInventoryTypeEnum::IfcInventoryType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcInventoryTypeEnum::IfcInventoryType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcInventoryTypeEnum::operator Ifc4x3_add2::IfcInventoryTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcJunctionBoxTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcJunctionBoxTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcJunctionBoxTypeEnum::Class() { return *IFC4X3_ADD2_IfcJunctionBoxTypeEnum_type; } + +Ifc4x3_add2::IfcJunctionBoxTypeEnum::IfcJunctionBoxTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcJunctionBoxTypeEnum::IfcJunctionBoxTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcJunctionBoxTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcJunctionBoxTypeEnum::IfcJunctionBoxTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcJunctionBoxTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcJunctionBoxTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "DATA", "POWER", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcJunctionBoxTypeEnum::Value Ifc4x3_add2::IfcJunctionBoxTypeEnum::FromString(const std::string& s) { + if (s == "DATA") return ::Ifc4x3_add2::IfcJunctionBoxTypeEnum::IfcJunctionBoxType_DATA; + if (s == "POWER") return ::Ifc4x3_add2::IfcJunctionBoxTypeEnum::IfcJunctionBoxType_POWER; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcJunctionBoxTypeEnum::IfcJunctionBoxType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcJunctionBoxTypeEnum::IfcJunctionBoxType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcJunctionBoxTypeEnum::operator Ifc4x3_add2::IfcJunctionBoxTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcKerbTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcKerbTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcKerbTypeEnum::Class() { return *IFC4X3_ADD2_IfcKerbTypeEnum_type; } + +Ifc4x3_add2::IfcKerbTypeEnum::IfcKerbTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcKerbTypeEnum::IfcKerbTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcKerbTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcKerbTypeEnum::IfcKerbTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcKerbTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcKerbTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 2 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcKerbTypeEnum::Value Ifc4x3_add2::IfcKerbTypeEnum::FromString(const std::string& s) { + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcKerbTypeEnum::IfcKerbType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcKerbTypeEnum::IfcKerbType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcKerbTypeEnum::operator Ifc4x3_add2::IfcKerbTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcKnotType::declaration() const { return *IFC4X3_ADD2_IfcKnotType_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcKnotType::Class() { return *IFC4X3_ADD2_IfcKnotType_type; } + +Ifc4x3_add2::IfcKnotType::IfcKnotType(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcKnotType::IfcKnotType(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcKnotType_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcKnotType::IfcKnotType(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcKnotType_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcKnotType::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "PIECEWISE_BEZIER_KNOTS", "QUASI_UNIFORM_KNOTS", "UNIFORM_KNOTS", "UNSPECIFIED" }; + return names[v]; +} + +Ifc4x3_add2::IfcKnotType::Value Ifc4x3_add2::IfcKnotType::FromString(const std::string& s) { + if (s == "PIECEWISE_BEZIER_KNOTS") return ::Ifc4x3_add2::IfcKnotType::IfcKnotType_PIECEWISE_BEZIER_KNOTS; + if (s == "QUASI_UNIFORM_KNOTS") return ::Ifc4x3_add2::IfcKnotType::IfcKnotType_QUASI_UNIFORM_KNOTS; + if (s == "UNIFORM_KNOTS") return ::Ifc4x3_add2::IfcKnotType::IfcKnotType_UNIFORM_KNOTS; + if (s == "UNSPECIFIED") return ::Ifc4x3_add2::IfcKnotType::IfcKnotType_UNSPECIFIED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcKnotType::operator Ifc4x3_add2::IfcKnotType::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcLaborResourceTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcLaborResourceTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcLaborResourceTypeEnum::Class() { return *IFC4X3_ADD2_IfcLaborResourceTypeEnum_type; } + +Ifc4x3_add2::IfcLaborResourceTypeEnum::IfcLaborResourceTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcLaborResourceTypeEnum::IfcLaborResourceTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLaborResourceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcLaborResourceTypeEnum::IfcLaborResourceTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLaborResourceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcLaborResourceTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 21 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ADMINISTRATION", "CARPENTRY", "CLEANING", "CONCRETE", "DRYWALL", "ELECTRIC", "FINISHING", "FLOORING", "GENERAL", "HVAC", "LANDSCAPING", "MASONRY", "PAINTING", "PAVING", "PLUMBING", "ROOFING", "SITEGRADING", "STEELWORK", "SURVEYING", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcLaborResourceTypeEnum::Value Ifc4x3_add2::IfcLaborResourceTypeEnum::FromString(const std::string& s) { + if (s == "ADMINISTRATION") return ::Ifc4x3_add2::IfcLaborResourceTypeEnum::IfcLaborResourceType_ADMINISTRATION; + if (s == "CARPENTRY") return ::Ifc4x3_add2::IfcLaborResourceTypeEnum::IfcLaborResourceType_CARPENTRY; + if (s == "CLEANING") return ::Ifc4x3_add2::IfcLaborResourceTypeEnum::IfcLaborResourceType_CLEANING; + if (s == "CONCRETE") return ::Ifc4x3_add2::IfcLaborResourceTypeEnum::IfcLaborResourceType_CONCRETE; + if (s == "DRYWALL") return ::Ifc4x3_add2::IfcLaborResourceTypeEnum::IfcLaborResourceType_DRYWALL; + if (s == "ELECTRIC") return ::Ifc4x3_add2::IfcLaborResourceTypeEnum::IfcLaborResourceType_ELECTRIC; + if (s == "FINISHING") return ::Ifc4x3_add2::IfcLaborResourceTypeEnum::IfcLaborResourceType_FINISHING; + if (s == "FLOORING") return ::Ifc4x3_add2::IfcLaborResourceTypeEnum::IfcLaborResourceType_FLOORING; + if (s == "GENERAL") return ::Ifc4x3_add2::IfcLaborResourceTypeEnum::IfcLaborResourceType_GENERAL; + if (s == "HVAC") return ::Ifc4x3_add2::IfcLaborResourceTypeEnum::IfcLaborResourceType_HVAC; + if (s == "LANDSCAPING") return ::Ifc4x3_add2::IfcLaborResourceTypeEnum::IfcLaborResourceType_LANDSCAPING; + if (s == "MASONRY") return ::Ifc4x3_add2::IfcLaborResourceTypeEnum::IfcLaborResourceType_MASONRY; + if (s == "PAINTING") return ::Ifc4x3_add2::IfcLaborResourceTypeEnum::IfcLaborResourceType_PAINTING; + if (s == "PAVING") return ::Ifc4x3_add2::IfcLaborResourceTypeEnum::IfcLaborResourceType_PAVING; + if (s == "PLUMBING") return ::Ifc4x3_add2::IfcLaborResourceTypeEnum::IfcLaborResourceType_PLUMBING; + if (s == "ROOFING") return ::Ifc4x3_add2::IfcLaborResourceTypeEnum::IfcLaborResourceType_ROOFING; + if (s == "SITEGRADING") return ::Ifc4x3_add2::IfcLaborResourceTypeEnum::IfcLaborResourceType_SITEGRADING; + if (s == "STEELWORK") return ::Ifc4x3_add2::IfcLaborResourceTypeEnum::IfcLaborResourceType_STEELWORK; + if (s == "SURVEYING") return ::Ifc4x3_add2::IfcLaborResourceTypeEnum::IfcLaborResourceType_SURVEYING; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcLaborResourceTypeEnum::IfcLaborResourceType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcLaborResourceTypeEnum::IfcLaborResourceType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcLaborResourceTypeEnum::operator Ifc4x3_add2::IfcLaborResourceTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcLampTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcLampTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcLampTypeEnum::Class() { return *IFC4X3_ADD2_IfcLampTypeEnum_type; } + +Ifc4x3_add2::IfcLampTypeEnum::IfcLampTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcLampTypeEnum::IfcLampTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLampTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcLampTypeEnum::IfcLampTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLampTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcLampTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 11 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "COMPACTFLUORESCENT", "FLUORESCENT", "HALOGEN", "HIGHPRESSUREMERCURY", "HIGHPRESSURESODIUM", "LED", "METALHALIDE", "OLED", "TUNGSTENFILAMENT", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcLampTypeEnum::Value Ifc4x3_add2::IfcLampTypeEnum::FromString(const std::string& s) { + if (s == "COMPACTFLUORESCENT") return ::Ifc4x3_add2::IfcLampTypeEnum::IfcLampType_COMPACTFLUORESCENT; + if (s == "FLUORESCENT") return ::Ifc4x3_add2::IfcLampTypeEnum::IfcLampType_FLUORESCENT; + if (s == "HALOGEN") return ::Ifc4x3_add2::IfcLampTypeEnum::IfcLampType_HALOGEN; + if (s == "HIGHPRESSUREMERCURY") return ::Ifc4x3_add2::IfcLampTypeEnum::IfcLampType_HIGHPRESSUREMERCURY; + if (s == "HIGHPRESSURESODIUM") return ::Ifc4x3_add2::IfcLampTypeEnum::IfcLampType_HIGHPRESSURESODIUM; + if (s == "LED") return ::Ifc4x3_add2::IfcLampTypeEnum::IfcLampType_LED; + if (s == "METALHALIDE") return ::Ifc4x3_add2::IfcLampTypeEnum::IfcLampType_METALHALIDE; + if (s == "OLED") return ::Ifc4x3_add2::IfcLampTypeEnum::IfcLampType_OLED; + if (s == "TUNGSTENFILAMENT") return ::Ifc4x3_add2::IfcLampTypeEnum::IfcLampType_TUNGSTENFILAMENT; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcLampTypeEnum::IfcLampType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcLampTypeEnum::IfcLampType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcLampTypeEnum::operator Ifc4x3_add2::IfcLampTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcLayerSetDirectionEnum::declaration() const { return *IFC4X3_ADD2_IfcLayerSetDirectionEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcLayerSetDirectionEnum::Class() { return *IFC4X3_ADD2_IfcLayerSetDirectionEnum_type; } + +Ifc4x3_add2::IfcLayerSetDirectionEnum::IfcLayerSetDirectionEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcLayerSetDirectionEnum::IfcLayerSetDirectionEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLayerSetDirectionEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcLayerSetDirectionEnum::IfcLayerSetDirectionEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLayerSetDirectionEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcLayerSetDirectionEnum::ToString(Value v) { + if ( v < 0 || v >= 3 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "AXIS1", "AXIS2", "AXIS3" }; + return names[v]; +} + +Ifc4x3_add2::IfcLayerSetDirectionEnum::Value Ifc4x3_add2::IfcLayerSetDirectionEnum::FromString(const std::string& s) { + if (s == "AXIS1") return ::Ifc4x3_add2::IfcLayerSetDirectionEnum::IfcLayerSetDirection_AXIS1; + if (s == "AXIS2") return ::Ifc4x3_add2::IfcLayerSetDirectionEnum::IfcLayerSetDirection_AXIS2; + if (s == "AXIS3") return ::Ifc4x3_add2::IfcLayerSetDirectionEnum::IfcLayerSetDirection_AXIS3; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcLayerSetDirectionEnum::operator Ifc4x3_add2::IfcLayerSetDirectionEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcLightDistributionCurveEnum::declaration() const { return *IFC4X3_ADD2_IfcLightDistributionCurveEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcLightDistributionCurveEnum::Class() { return *IFC4X3_ADD2_IfcLightDistributionCurveEnum_type; } + +Ifc4x3_add2::IfcLightDistributionCurveEnum::IfcLightDistributionCurveEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcLightDistributionCurveEnum::IfcLightDistributionCurveEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLightDistributionCurveEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcLightDistributionCurveEnum::IfcLightDistributionCurveEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLightDistributionCurveEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcLightDistributionCurveEnum::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "TYPE_A", "TYPE_B", "TYPE_C", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcLightDistributionCurveEnum::Value Ifc4x3_add2::IfcLightDistributionCurveEnum::FromString(const std::string& s) { + if (s == "TYPE_A") return ::Ifc4x3_add2::IfcLightDistributionCurveEnum::IfcLightDistributionCurve_TYPE_A; + if (s == "TYPE_B") return ::Ifc4x3_add2::IfcLightDistributionCurveEnum::IfcLightDistributionCurve_TYPE_B; + if (s == "TYPE_C") return ::Ifc4x3_add2::IfcLightDistributionCurveEnum::IfcLightDistributionCurve_TYPE_C; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcLightDistributionCurveEnum::IfcLightDistributionCurve_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcLightDistributionCurveEnum::operator Ifc4x3_add2::IfcLightDistributionCurveEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcLightEmissionSourceEnum::declaration() const { return *IFC4X3_ADD2_IfcLightEmissionSourceEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcLightEmissionSourceEnum::Class() { return *IFC4X3_ADD2_IfcLightEmissionSourceEnum_type; } + +Ifc4x3_add2::IfcLightEmissionSourceEnum::IfcLightEmissionSourceEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcLightEmissionSourceEnum::IfcLightEmissionSourceEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLightEmissionSourceEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcLightEmissionSourceEnum::IfcLightEmissionSourceEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLightEmissionSourceEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcLightEmissionSourceEnum::ToString(Value v) { + if ( v < 0 || v >= 11 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "COMPACTFLUORESCENT", "FLUORESCENT", "HIGHPRESSUREMERCURY", "HIGHPRESSURESODIUM", "LIGHTEMITTINGDIODE", "LOWPRESSURESODIUM", "LOWVOLTAGEHALOGEN", "MAINVOLTAGEHALOGEN", "METALHALIDE", "TUNGSTENFILAMENT", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcLightEmissionSourceEnum::Value Ifc4x3_add2::IfcLightEmissionSourceEnum::FromString(const std::string& s) { + if (s == "COMPACTFLUORESCENT") return ::Ifc4x3_add2::IfcLightEmissionSourceEnum::IfcLightEmissionSource_COMPACTFLUORESCENT; + if (s == "FLUORESCENT") return ::Ifc4x3_add2::IfcLightEmissionSourceEnum::IfcLightEmissionSource_FLUORESCENT; + if (s == "HIGHPRESSUREMERCURY") return ::Ifc4x3_add2::IfcLightEmissionSourceEnum::IfcLightEmissionSource_HIGHPRESSUREMERCURY; + if (s == "HIGHPRESSURESODIUM") return ::Ifc4x3_add2::IfcLightEmissionSourceEnum::IfcLightEmissionSource_HIGHPRESSURESODIUM; + if (s == "LIGHTEMITTINGDIODE") return ::Ifc4x3_add2::IfcLightEmissionSourceEnum::IfcLightEmissionSource_LIGHTEMITTINGDIODE; + if (s == "LOWPRESSURESODIUM") return ::Ifc4x3_add2::IfcLightEmissionSourceEnum::IfcLightEmissionSource_LOWPRESSURESODIUM; + if (s == "LOWVOLTAGEHALOGEN") return ::Ifc4x3_add2::IfcLightEmissionSourceEnum::IfcLightEmissionSource_LOWVOLTAGEHALOGEN; + if (s == "MAINVOLTAGEHALOGEN") return ::Ifc4x3_add2::IfcLightEmissionSourceEnum::IfcLightEmissionSource_MAINVOLTAGEHALOGEN; + if (s == "METALHALIDE") return ::Ifc4x3_add2::IfcLightEmissionSourceEnum::IfcLightEmissionSource_METALHALIDE; + if (s == "TUNGSTENFILAMENT") return ::Ifc4x3_add2::IfcLightEmissionSourceEnum::IfcLightEmissionSource_TUNGSTENFILAMENT; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcLightEmissionSourceEnum::IfcLightEmissionSource_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcLightEmissionSourceEnum::operator Ifc4x3_add2::IfcLightEmissionSourceEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcLightFixtureTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcLightFixtureTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcLightFixtureTypeEnum::Class() { return *IFC4X3_ADD2_IfcLightFixtureTypeEnum_type; } + +Ifc4x3_add2::IfcLightFixtureTypeEnum::IfcLightFixtureTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcLightFixtureTypeEnum::IfcLightFixtureTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLightFixtureTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcLightFixtureTypeEnum::IfcLightFixtureTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLightFixtureTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcLightFixtureTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "DIRECTIONSOURCE", "POINTSOURCE", "SECURITYLIGHTING", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcLightFixtureTypeEnum::Value Ifc4x3_add2::IfcLightFixtureTypeEnum::FromString(const std::string& s) { + if (s == "DIRECTIONSOURCE") return ::Ifc4x3_add2::IfcLightFixtureTypeEnum::IfcLightFixtureType_DIRECTIONSOURCE; + if (s == "POINTSOURCE") return ::Ifc4x3_add2::IfcLightFixtureTypeEnum::IfcLightFixtureType_POINTSOURCE; + if (s == "SECURITYLIGHTING") return ::Ifc4x3_add2::IfcLightFixtureTypeEnum::IfcLightFixtureType_SECURITYLIGHTING; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcLightFixtureTypeEnum::IfcLightFixtureType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcLightFixtureTypeEnum::IfcLightFixtureType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcLightFixtureTypeEnum::operator Ifc4x3_add2::IfcLightFixtureTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcLiquidTerminalTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcLiquidTerminalTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcLiquidTerminalTypeEnum::Class() { return *IFC4X3_ADD2_IfcLiquidTerminalTypeEnum_type; } + +Ifc4x3_add2::IfcLiquidTerminalTypeEnum::IfcLiquidTerminalTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcLiquidTerminalTypeEnum::IfcLiquidTerminalTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLiquidTerminalTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcLiquidTerminalTypeEnum::IfcLiquidTerminalTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLiquidTerminalTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcLiquidTerminalTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "HOSEREEL", "LOADINGARM", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcLiquidTerminalTypeEnum::Value Ifc4x3_add2::IfcLiquidTerminalTypeEnum::FromString(const std::string& s) { + if (s == "HOSEREEL") return ::Ifc4x3_add2::IfcLiquidTerminalTypeEnum::IfcLiquidTerminalType_HOSEREEL; + if (s == "LOADINGARM") return ::Ifc4x3_add2::IfcLiquidTerminalTypeEnum::IfcLiquidTerminalType_LOADINGARM; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcLiquidTerminalTypeEnum::IfcLiquidTerminalType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcLiquidTerminalTypeEnum::IfcLiquidTerminalType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcLiquidTerminalTypeEnum::operator Ifc4x3_add2::IfcLiquidTerminalTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcLoadGroupTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcLoadGroupTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcLoadGroupTypeEnum::Class() { return *IFC4X3_ADD2_IfcLoadGroupTypeEnum_type; } + +Ifc4x3_add2::IfcLoadGroupTypeEnum::IfcLoadGroupTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcLoadGroupTypeEnum::IfcLoadGroupTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLoadGroupTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcLoadGroupTypeEnum::IfcLoadGroupTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLoadGroupTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcLoadGroupTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "LOAD_CASE", "LOAD_COMBINATION", "LOAD_GROUP", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcLoadGroupTypeEnum::Value Ifc4x3_add2::IfcLoadGroupTypeEnum::FromString(const std::string& s) { + if (s == "LOAD_CASE") return ::Ifc4x3_add2::IfcLoadGroupTypeEnum::IfcLoadGroupType_LOAD_CASE; + if (s == "LOAD_COMBINATION") return ::Ifc4x3_add2::IfcLoadGroupTypeEnum::IfcLoadGroupType_LOAD_COMBINATION; + if (s == "LOAD_GROUP") return ::Ifc4x3_add2::IfcLoadGroupTypeEnum::IfcLoadGroupType_LOAD_GROUP; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcLoadGroupTypeEnum::IfcLoadGroupType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcLoadGroupTypeEnum::IfcLoadGroupType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcLoadGroupTypeEnum::operator Ifc4x3_add2::IfcLoadGroupTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcLogicalOperatorEnum::declaration() const { return *IFC4X3_ADD2_IfcLogicalOperatorEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcLogicalOperatorEnum::Class() { return *IFC4X3_ADD2_IfcLogicalOperatorEnum_type; } + +Ifc4x3_add2::IfcLogicalOperatorEnum::IfcLogicalOperatorEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcLogicalOperatorEnum::IfcLogicalOperatorEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLogicalOperatorEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcLogicalOperatorEnum::IfcLogicalOperatorEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLogicalOperatorEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcLogicalOperatorEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "LOGICALAND", "LOGICALNOTAND", "LOGICALNOTOR", "LOGICALOR", "LOGICALXOR" }; + return names[v]; +} + +Ifc4x3_add2::IfcLogicalOperatorEnum::Value Ifc4x3_add2::IfcLogicalOperatorEnum::FromString(const std::string& s) { + if (s == "LOGICALAND") return ::Ifc4x3_add2::IfcLogicalOperatorEnum::IfcLogicalOperator_LOGICALAND; + if (s == "LOGICALNOTAND") return ::Ifc4x3_add2::IfcLogicalOperatorEnum::IfcLogicalOperator_LOGICALNOTAND; + if (s == "LOGICALNOTOR") return ::Ifc4x3_add2::IfcLogicalOperatorEnum::IfcLogicalOperator_LOGICALNOTOR; + if (s == "LOGICALOR") return ::Ifc4x3_add2::IfcLogicalOperatorEnum::IfcLogicalOperator_LOGICALOR; + if (s == "LOGICALXOR") return ::Ifc4x3_add2::IfcLogicalOperatorEnum::IfcLogicalOperator_LOGICALXOR; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcLogicalOperatorEnum::operator Ifc4x3_add2::IfcLogicalOperatorEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcMarineFacilityTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcMarineFacilityTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcMarineFacilityTypeEnum::Class() { return *IFC4X3_ADD2_IfcMarineFacilityTypeEnum_type; } + +Ifc4x3_add2::IfcMarineFacilityTypeEnum::IfcMarineFacilityTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcMarineFacilityTypeEnum::IfcMarineFacilityTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMarineFacilityTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcMarineFacilityTypeEnum::IfcMarineFacilityTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMarineFacilityTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcMarineFacilityTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 21 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BARRIERBEACH", "BREAKWATER", "CANAL", "DRYDOCK", "FLOATINGDOCK", "HYDROLIFT", "JETTY", "LAUNCHRECOVERY", "MARINEDEFENCE", "NAVIGATIONALCHANNEL", "PORT", "QUAY", "REVETMENT", "SHIPLIFT", "SHIPLOCK", "SHIPYARD", "SLIPWAY", "WATERWAY", "WATERWAYSHIPLIFT", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcMarineFacilityTypeEnum::Value Ifc4x3_add2::IfcMarineFacilityTypeEnum::FromString(const std::string& s) { + if (s == "BARRIERBEACH") return ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::IfcMarineFacilityType_BARRIERBEACH; + if (s == "BREAKWATER") return ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::IfcMarineFacilityType_BREAKWATER; + if (s == "CANAL") return ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::IfcMarineFacilityType_CANAL; + if (s == "DRYDOCK") return ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::IfcMarineFacilityType_DRYDOCK; + if (s == "FLOATINGDOCK") return ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::IfcMarineFacilityType_FLOATINGDOCK; + if (s == "HYDROLIFT") return ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::IfcMarineFacilityType_HYDROLIFT; + if (s == "JETTY") return ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::IfcMarineFacilityType_JETTY; + if (s == "LAUNCHRECOVERY") return ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::IfcMarineFacilityType_LAUNCHRECOVERY; + if (s == "MARINEDEFENCE") return ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::IfcMarineFacilityType_MARINEDEFENCE; + if (s == "NAVIGATIONALCHANNEL") return ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::IfcMarineFacilityType_NAVIGATIONALCHANNEL; + if (s == "PORT") return ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::IfcMarineFacilityType_PORT; + if (s == "QUAY") return ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::IfcMarineFacilityType_QUAY; + if (s == "REVETMENT") return ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::IfcMarineFacilityType_REVETMENT; + if (s == "SHIPLIFT") return ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::IfcMarineFacilityType_SHIPLIFT; + if (s == "SHIPLOCK") return ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::IfcMarineFacilityType_SHIPLOCK; + if (s == "SHIPYARD") return ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::IfcMarineFacilityType_SHIPYARD; + if (s == "SLIPWAY") return ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::IfcMarineFacilityType_SLIPWAY; + if (s == "WATERWAY") return ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::IfcMarineFacilityType_WATERWAY; + if (s == "WATERWAYSHIPLIFT") return ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::IfcMarineFacilityType_WATERWAYSHIPLIFT; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::IfcMarineFacilityType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::IfcMarineFacilityType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcMarineFacilityTypeEnum::operator Ifc4x3_add2::IfcMarineFacilityTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcMarinePartTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcMarinePartTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcMarinePartTypeEnum::Class() { return *IFC4X3_ADD2_IfcMarinePartTypeEnum_type; } + +Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMarinePartTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMarinePartTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcMarinePartTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 26 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ABOVEWATERLINE", "ANCHORAGE", "APPROACHCHANNEL", "BELOWWATERLINE", "BERTHINGSTRUCTURE", "CHAMBER", "CILL_LEVEL", "COPELEVEL", "CORE", "CREST", "GATEHEAD", "GUDINGSTRUCTURE", "HIGHWATERLINE", "LANDFIELD", "LEEWARDSIDE", "LOWWATERLINE", "MANUFACTURING", "NAVIGATIONALAREA", "PROTECTION", "SHIPTRANSFER", "STORAGEAREA", "VEHICLESERVICING", "WATERFIELD", "WEATHERSIDE", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcMarinePartTypeEnum::Value Ifc4x3_add2::IfcMarinePartTypeEnum::FromString(const std::string& s) { + if (s == "ABOVEWATERLINE") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_ABOVEWATERLINE; + if (s == "ANCHORAGE") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_ANCHORAGE; + if (s == "APPROACHCHANNEL") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_APPROACHCHANNEL; + if (s == "BELOWWATERLINE") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_BELOWWATERLINE; + if (s == "BERTHINGSTRUCTURE") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_BERTHINGSTRUCTURE; + if (s == "CHAMBER") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_CHAMBER; + if (s == "CILL_LEVEL") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_CILL_LEVEL; + if (s == "COPELEVEL") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_COPELEVEL; + if (s == "CORE") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_CORE; + if (s == "CREST") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_CREST; + if (s == "GATEHEAD") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_GATEHEAD; + if (s == "GUDINGSTRUCTURE") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_GUDINGSTRUCTURE; + if (s == "HIGHWATERLINE") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_HIGHWATERLINE; + if (s == "LANDFIELD") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_LANDFIELD; + if (s == "LEEWARDSIDE") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_LEEWARDSIDE; + if (s == "LOWWATERLINE") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_LOWWATERLINE; + if (s == "MANUFACTURING") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_MANUFACTURING; + if (s == "NAVIGATIONALAREA") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_NAVIGATIONALAREA; + if (s == "PROTECTION") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_PROTECTION; + if (s == "SHIPTRANSFER") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_SHIPTRANSFER; + if (s == "STORAGEAREA") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_STORAGEAREA; + if (s == "VEHICLESERVICING") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_VEHICLESERVICING; + if (s == "WATERFIELD") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_WATERFIELD; + if (s == "WEATHERSIDE") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_WEATHERSIDE; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcMarinePartTypeEnum::IfcMarinePartType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcMarinePartTypeEnum::operator Ifc4x3_add2::IfcMarinePartTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcMechanicalFastenerTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::Class() { return *IFC4X3_ADD2_IfcMechanicalFastenerTypeEnum_type; } + +Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::IfcMechanicalFastenerTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::IfcMechanicalFastenerTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMechanicalFastenerTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::IfcMechanicalFastenerTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMechanicalFastenerTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 17 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ANCHORBOLT", "BOLT", "CHAIN", "COUPLER", "DOWEL", "NAIL", "NAILPLATE", "RAILFASTENING", "RAILJOINT", "RIVET", "ROPE", "SCREW", "SHEARCONNECTOR", "STAPLE", "STUDSHEARCONNECTOR", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::Value Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::FromString(const std::string& s) { + if (s == "ANCHORBOLT") return ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::IfcMechanicalFastenerType_ANCHORBOLT; + if (s == "BOLT") return ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::IfcMechanicalFastenerType_BOLT; + if (s == "CHAIN") return ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::IfcMechanicalFastenerType_CHAIN; + if (s == "COUPLER") return ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::IfcMechanicalFastenerType_COUPLER; + if (s == "DOWEL") return ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::IfcMechanicalFastenerType_DOWEL; + if (s == "NAIL") return ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::IfcMechanicalFastenerType_NAIL; + if (s == "NAILPLATE") return ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::IfcMechanicalFastenerType_NAILPLATE; + if (s == "RAILFASTENING") return ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::IfcMechanicalFastenerType_RAILFASTENING; + if (s == "RAILJOINT") return ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::IfcMechanicalFastenerType_RAILJOINT; + if (s == "RIVET") return ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::IfcMechanicalFastenerType_RIVET; + if (s == "ROPE") return ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::IfcMechanicalFastenerType_ROPE; + if (s == "SCREW") return ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::IfcMechanicalFastenerType_SCREW; + if (s == "SHEARCONNECTOR") return ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::IfcMechanicalFastenerType_SHEARCONNECTOR; + if (s == "STAPLE") return ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::IfcMechanicalFastenerType_STAPLE; + if (s == "STUDSHEARCONNECTOR") return ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::IfcMechanicalFastenerType_STUDSHEARCONNECTOR; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::IfcMechanicalFastenerType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::IfcMechanicalFastenerType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::operator Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcMedicalDeviceTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcMedicalDeviceTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcMedicalDeviceTypeEnum::Class() { return *IFC4X3_ADD2_IfcMedicalDeviceTypeEnum_type; } + +Ifc4x3_add2::IfcMedicalDeviceTypeEnum::IfcMedicalDeviceTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcMedicalDeviceTypeEnum::IfcMedicalDeviceTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMedicalDeviceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcMedicalDeviceTypeEnum::IfcMedicalDeviceTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMedicalDeviceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcMedicalDeviceTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 7 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "AIRSTATION", "FEEDAIRUNIT", "OXYGENGENERATOR", "OXYGENPLANT", "VACUUMSTATION", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcMedicalDeviceTypeEnum::Value Ifc4x3_add2::IfcMedicalDeviceTypeEnum::FromString(const std::string& s) { + if (s == "AIRSTATION") return ::Ifc4x3_add2::IfcMedicalDeviceTypeEnum::IfcMedicalDeviceType_AIRSTATION; + if (s == "FEEDAIRUNIT") return ::Ifc4x3_add2::IfcMedicalDeviceTypeEnum::IfcMedicalDeviceType_FEEDAIRUNIT; + if (s == "OXYGENGENERATOR") return ::Ifc4x3_add2::IfcMedicalDeviceTypeEnum::IfcMedicalDeviceType_OXYGENGENERATOR; + if (s == "OXYGENPLANT") return ::Ifc4x3_add2::IfcMedicalDeviceTypeEnum::IfcMedicalDeviceType_OXYGENPLANT; + if (s == "VACUUMSTATION") return ::Ifc4x3_add2::IfcMedicalDeviceTypeEnum::IfcMedicalDeviceType_VACUUMSTATION; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcMedicalDeviceTypeEnum::IfcMedicalDeviceType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcMedicalDeviceTypeEnum::IfcMedicalDeviceType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcMedicalDeviceTypeEnum::operator Ifc4x3_add2::IfcMedicalDeviceTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcMemberTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcMemberTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcMemberTypeEnum::Class() { return *IFC4X3_ADD2_IfcMemberTypeEnum_type; } + +Ifc4x3_add2::IfcMemberTypeEnum::IfcMemberTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcMemberTypeEnum::IfcMemberTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMemberTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcMemberTypeEnum::IfcMemberTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMemberTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcMemberTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 21 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ARCH_SEGMENT", "BRACE", "CHORD", "COLLAR", "MEMBER", "MULLION", "PLATE", "POST", "PURLIN", "RAFTER", "STAY_CABLE", "STIFFENING_RIB", "STRINGER", "STRUCTURALCABLE", "STRUT", "STUD", "SUSPENDER", "SUSPENSION_CABLE", "TIEBAR", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcMemberTypeEnum::Value Ifc4x3_add2::IfcMemberTypeEnum::FromString(const std::string& s) { + if (s == "ARCH_SEGMENT") return ::Ifc4x3_add2::IfcMemberTypeEnum::IfcMemberType_ARCH_SEGMENT; + if (s == "BRACE") return ::Ifc4x3_add2::IfcMemberTypeEnum::IfcMemberType_BRACE; + if (s == "CHORD") return ::Ifc4x3_add2::IfcMemberTypeEnum::IfcMemberType_CHORD; + if (s == "COLLAR") return ::Ifc4x3_add2::IfcMemberTypeEnum::IfcMemberType_COLLAR; + if (s == "MEMBER") return ::Ifc4x3_add2::IfcMemberTypeEnum::IfcMemberType_MEMBER; + if (s == "MULLION") return ::Ifc4x3_add2::IfcMemberTypeEnum::IfcMemberType_MULLION; + if (s == "PLATE") return ::Ifc4x3_add2::IfcMemberTypeEnum::IfcMemberType_PLATE; + if (s == "POST") return ::Ifc4x3_add2::IfcMemberTypeEnum::IfcMemberType_POST; + if (s == "PURLIN") return ::Ifc4x3_add2::IfcMemberTypeEnum::IfcMemberType_PURLIN; + if (s == "RAFTER") return ::Ifc4x3_add2::IfcMemberTypeEnum::IfcMemberType_RAFTER; + if (s == "STAY_CABLE") return ::Ifc4x3_add2::IfcMemberTypeEnum::IfcMemberType_STAY_CABLE; + if (s == "STIFFENING_RIB") return ::Ifc4x3_add2::IfcMemberTypeEnum::IfcMemberType_STIFFENING_RIB; + if (s == "STRINGER") return ::Ifc4x3_add2::IfcMemberTypeEnum::IfcMemberType_STRINGER; + if (s == "STRUCTURALCABLE") return ::Ifc4x3_add2::IfcMemberTypeEnum::IfcMemberType_STRUCTURALCABLE; + if (s == "STRUT") return ::Ifc4x3_add2::IfcMemberTypeEnum::IfcMemberType_STRUT; + if (s == "STUD") return ::Ifc4x3_add2::IfcMemberTypeEnum::IfcMemberType_STUD; + if (s == "SUSPENDER") return ::Ifc4x3_add2::IfcMemberTypeEnum::IfcMemberType_SUSPENDER; + if (s == "SUSPENSION_CABLE") return ::Ifc4x3_add2::IfcMemberTypeEnum::IfcMemberType_SUSPENSION_CABLE; + if (s == "TIEBAR") return ::Ifc4x3_add2::IfcMemberTypeEnum::IfcMemberType_TIEBAR; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcMemberTypeEnum::IfcMemberType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcMemberTypeEnum::IfcMemberType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcMemberTypeEnum::operator Ifc4x3_add2::IfcMemberTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcMobileTelecommunicationsApplianceTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::Class() { return *IFC4X3_ADD2_IfcMobileTelecommunicationsApplianceTypeEnum_type; } + +Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::IfcMobileTelecommunicationsApplianceTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::IfcMobileTelecommunicationsApplianceTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMobileTelecommunicationsApplianceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::IfcMobileTelecommunicationsApplianceTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMobileTelecommunicationsApplianceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 15 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ACCESSPOINT", "BASEBANDUNIT", "BASETRANSCEIVERSTATION", "E_UTRAN_NODE_B", "GATEWAY_GPRS_SUPPORT_NODE", "MASTERUNIT", "MOBILESWITCHINGCENTER", "MSCSERVER", "PACKETCONTROLUNIT", "REMOTERADIOUNIT", "REMOTEUNIT", "SERVICE_GPRS_SUPPORT_NODE", "SUBSCRIBERSERVER", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::Value Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::FromString(const std::string& s) { + if (s == "ACCESSPOINT") return ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::IfcMobileTelecommunicationsApplianceType_ACCESSPOINT; + if (s == "BASEBANDUNIT") return ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::IfcMobileTelecommunicationsApplianceType_BASEBANDUNIT; + if (s == "BASETRANSCEIVERSTATION") return ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::IfcMobileTelecommunicationsApplianceType_BASETRANSCEIVERSTATION; + if (s == "E_UTRAN_NODE_B") return ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::IfcMobileTelecommunicationsApplianceType_E_UTRAN_NODE_B; + if (s == "GATEWAY_GPRS_SUPPORT_NODE") return ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::IfcMobileTelecommunicationsApplianceType_GATEWAY_GPRS_SUPPORT_NODE; + if (s == "MASTERUNIT") return ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::IfcMobileTelecommunicationsApplianceType_MASTERUNIT; + if (s == "MOBILESWITCHINGCENTER") return ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::IfcMobileTelecommunicationsApplianceType_MOBILESWITCHINGCENTER; + if (s == "MSCSERVER") return ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::IfcMobileTelecommunicationsApplianceType_MSCSERVER; + if (s == "PACKETCONTROLUNIT") return ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::IfcMobileTelecommunicationsApplianceType_PACKETCONTROLUNIT; + if (s == "REMOTERADIOUNIT") return ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::IfcMobileTelecommunicationsApplianceType_REMOTERADIOUNIT; + if (s == "REMOTEUNIT") return ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::IfcMobileTelecommunicationsApplianceType_REMOTEUNIT; + if (s == "SERVICE_GPRS_SUPPORT_NODE") return ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::IfcMobileTelecommunicationsApplianceType_SERVICE_GPRS_SUPPORT_NODE; + if (s == "SUBSCRIBERSERVER") return ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::IfcMobileTelecommunicationsApplianceType_SUBSCRIBERSERVER; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::IfcMobileTelecommunicationsApplianceType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::IfcMobileTelecommunicationsApplianceType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::operator Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcMooringDeviceTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcMooringDeviceTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcMooringDeviceTypeEnum::Class() { return *IFC4X3_ADD2_IfcMooringDeviceTypeEnum_type; } + +Ifc4x3_add2::IfcMooringDeviceTypeEnum::IfcMooringDeviceTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcMooringDeviceTypeEnum::IfcMooringDeviceTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMooringDeviceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcMooringDeviceTypeEnum::IfcMooringDeviceTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMooringDeviceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcMooringDeviceTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 7 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BOLLARD", "LINETENSIONER", "MAGNETICDEVICE", "MOORINGHOOKS", "VACUUMDEVICE", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcMooringDeviceTypeEnum::Value Ifc4x3_add2::IfcMooringDeviceTypeEnum::FromString(const std::string& s) { + if (s == "BOLLARD") return ::Ifc4x3_add2::IfcMooringDeviceTypeEnum::IfcMooringDeviceType_BOLLARD; + if (s == "LINETENSIONER") return ::Ifc4x3_add2::IfcMooringDeviceTypeEnum::IfcMooringDeviceType_LINETENSIONER; + if (s == "MAGNETICDEVICE") return ::Ifc4x3_add2::IfcMooringDeviceTypeEnum::IfcMooringDeviceType_MAGNETICDEVICE; + if (s == "MOORINGHOOKS") return ::Ifc4x3_add2::IfcMooringDeviceTypeEnum::IfcMooringDeviceType_MOORINGHOOKS; + if (s == "VACUUMDEVICE") return ::Ifc4x3_add2::IfcMooringDeviceTypeEnum::IfcMooringDeviceType_VACUUMDEVICE; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcMooringDeviceTypeEnum::IfcMooringDeviceType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcMooringDeviceTypeEnum::IfcMooringDeviceType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcMooringDeviceTypeEnum::operator Ifc4x3_add2::IfcMooringDeviceTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcMotorConnectionTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcMotorConnectionTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcMotorConnectionTypeEnum::Class() { return *IFC4X3_ADD2_IfcMotorConnectionTypeEnum_type; } + +Ifc4x3_add2::IfcMotorConnectionTypeEnum::IfcMotorConnectionTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcMotorConnectionTypeEnum::IfcMotorConnectionTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMotorConnectionTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcMotorConnectionTypeEnum::IfcMotorConnectionTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMotorConnectionTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcMotorConnectionTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BELTDRIVE", "COUPLING", "DIRECTDRIVE", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcMotorConnectionTypeEnum::Value Ifc4x3_add2::IfcMotorConnectionTypeEnum::FromString(const std::string& s) { + if (s == "BELTDRIVE") return ::Ifc4x3_add2::IfcMotorConnectionTypeEnum::IfcMotorConnectionType_BELTDRIVE; + if (s == "COUPLING") return ::Ifc4x3_add2::IfcMotorConnectionTypeEnum::IfcMotorConnectionType_COUPLING; + if (s == "DIRECTDRIVE") return ::Ifc4x3_add2::IfcMotorConnectionTypeEnum::IfcMotorConnectionType_DIRECTDRIVE; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcMotorConnectionTypeEnum::IfcMotorConnectionType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcMotorConnectionTypeEnum::IfcMotorConnectionType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcMotorConnectionTypeEnum::operator Ifc4x3_add2::IfcMotorConnectionTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcNavigationElementTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcNavigationElementTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcNavigationElementTypeEnum::Class() { return *IFC4X3_ADD2_IfcNavigationElementTypeEnum_type; } + +Ifc4x3_add2::IfcNavigationElementTypeEnum::IfcNavigationElementTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcNavigationElementTypeEnum::IfcNavigationElementTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcNavigationElementTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcNavigationElementTypeEnum::IfcNavigationElementTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcNavigationElementTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcNavigationElementTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BEACON", "BUOY", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcNavigationElementTypeEnum::Value Ifc4x3_add2::IfcNavigationElementTypeEnum::FromString(const std::string& s) { + if (s == "BEACON") return ::Ifc4x3_add2::IfcNavigationElementTypeEnum::IfcNavigationElementType_BEACON; + if (s == "BUOY") return ::Ifc4x3_add2::IfcNavigationElementTypeEnum::IfcNavigationElementType_BUOY; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcNavigationElementTypeEnum::IfcNavigationElementType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcNavigationElementTypeEnum::IfcNavigationElementType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcNavigationElementTypeEnum::operator Ifc4x3_add2::IfcNavigationElementTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcObjectiveEnum::declaration() const { return *IFC4X3_ADD2_IfcObjectiveEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcObjectiveEnum::Class() { return *IFC4X3_ADD2_IfcObjectiveEnum_type; } + +Ifc4x3_add2::IfcObjectiveEnum::IfcObjectiveEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcObjectiveEnum::IfcObjectiveEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcObjectiveEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcObjectiveEnum::IfcObjectiveEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcObjectiveEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcObjectiveEnum::ToString(Value v) { + if ( v < 0 || v >= 13 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CODECOMPLIANCE", "CODEWAIVER", "DESIGNINTENT", "EXTERNAL", "HEALTHANDSAFETY", "MERGECONFLICT", "MODELVIEW", "PARAMETER", "REQUIREMENT", "SPECIFICATION", "TRIGGERCONDITION", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcObjectiveEnum::Value Ifc4x3_add2::IfcObjectiveEnum::FromString(const std::string& s) { + if (s == "CODECOMPLIANCE") return ::Ifc4x3_add2::IfcObjectiveEnum::IfcObjective_CODECOMPLIANCE; + if (s == "CODEWAIVER") return ::Ifc4x3_add2::IfcObjectiveEnum::IfcObjective_CODEWAIVER; + if (s == "DESIGNINTENT") return ::Ifc4x3_add2::IfcObjectiveEnum::IfcObjective_DESIGNINTENT; + if (s == "EXTERNAL") return ::Ifc4x3_add2::IfcObjectiveEnum::IfcObjective_EXTERNAL; + if (s == "HEALTHANDSAFETY") return ::Ifc4x3_add2::IfcObjectiveEnum::IfcObjective_HEALTHANDSAFETY; + if (s == "MERGECONFLICT") return ::Ifc4x3_add2::IfcObjectiveEnum::IfcObjective_MERGECONFLICT; + if (s == "MODELVIEW") return ::Ifc4x3_add2::IfcObjectiveEnum::IfcObjective_MODELVIEW; + if (s == "PARAMETER") return ::Ifc4x3_add2::IfcObjectiveEnum::IfcObjective_PARAMETER; + if (s == "REQUIREMENT") return ::Ifc4x3_add2::IfcObjectiveEnum::IfcObjective_REQUIREMENT; + if (s == "SPECIFICATION") return ::Ifc4x3_add2::IfcObjectiveEnum::IfcObjective_SPECIFICATION; + if (s == "TRIGGERCONDITION") return ::Ifc4x3_add2::IfcObjectiveEnum::IfcObjective_TRIGGERCONDITION; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcObjectiveEnum::IfcObjective_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcObjectiveEnum::IfcObjective_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcObjectiveEnum::operator Ifc4x3_add2::IfcObjectiveEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcOccupantTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcOccupantTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcOccupantTypeEnum::Class() { return *IFC4X3_ADD2_IfcOccupantTypeEnum_type; } + +Ifc4x3_add2::IfcOccupantTypeEnum::IfcOccupantTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcOccupantTypeEnum::IfcOccupantTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcOccupantTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcOccupantTypeEnum::IfcOccupantTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcOccupantTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcOccupantTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 9 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ASSIGNEE", "ASSIGNOR", "LESSEE", "LESSOR", "LETTINGAGENT", "OWNER", "TENANT", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcOccupantTypeEnum::Value Ifc4x3_add2::IfcOccupantTypeEnum::FromString(const std::string& s) { + if (s == "ASSIGNEE") return ::Ifc4x3_add2::IfcOccupantTypeEnum::IfcOccupantType_ASSIGNEE; + if (s == "ASSIGNOR") return ::Ifc4x3_add2::IfcOccupantTypeEnum::IfcOccupantType_ASSIGNOR; + if (s == "LESSEE") return ::Ifc4x3_add2::IfcOccupantTypeEnum::IfcOccupantType_LESSEE; + if (s == "LESSOR") return ::Ifc4x3_add2::IfcOccupantTypeEnum::IfcOccupantType_LESSOR; + if (s == "LETTINGAGENT") return ::Ifc4x3_add2::IfcOccupantTypeEnum::IfcOccupantType_LETTINGAGENT; + if (s == "OWNER") return ::Ifc4x3_add2::IfcOccupantTypeEnum::IfcOccupantType_OWNER; + if (s == "TENANT") return ::Ifc4x3_add2::IfcOccupantTypeEnum::IfcOccupantType_TENANT; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcOccupantTypeEnum::IfcOccupantType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcOccupantTypeEnum::IfcOccupantType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcOccupantTypeEnum::operator Ifc4x3_add2::IfcOccupantTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcOpeningElementTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcOpeningElementTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcOpeningElementTypeEnum::Class() { return *IFC4X3_ADD2_IfcOpeningElementTypeEnum_type; } + +Ifc4x3_add2::IfcOpeningElementTypeEnum::IfcOpeningElementTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcOpeningElementTypeEnum::IfcOpeningElementTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcOpeningElementTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcOpeningElementTypeEnum::IfcOpeningElementTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcOpeningElementTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcOpeningElementTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "OPENING", "RECESS", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcOpeningElementTypeEnum::Value Ifc4x3_add2::IfcOpeningElementTypeEnum::FromString(const std::string& s) { + if (s == "OPENING") return ::Ifc4x3_add2::IfcOpeningElementTypeEnum::IfcOpeningElementType_OPENING; + if (s == "RECESS") return ::Ifc4x3_add2::IfcOpeningElementTypeEnum::IfcOpeningElementType_RECESS; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcOpeningElementTypeEnum::IfcOpeningElementType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcOpeningElementTypeEnum::IfcOpeningElementType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcOpeningElementTypeEnum::operator Ifc4x3_add2::IfcOpeningElementTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcOutletTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcOutletTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcOutletTypeEnum::Class() { return *IFC4X3_ADD2_IfcOutletTypeEnum_type; } + +Ifc4x3_add2::IfcOutletTypeEnum::IfcOutletTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcOutletTypeEnum::IfcOutletTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcOutletTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcOutletTypeEnum::IfcOutletTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcOutletTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcOutletTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 7 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "AUDIOVISUALOUTLET", "COMMUNICATIONSOUTLET", "DATAOUTLET", "POWEROUTLET", "TELEPHONEOUTLET", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcOutletTypeEnum::Value Ifc4x3_add2::IfcOutletTypeEnum::FromString(const std::string& s) { + if (s == "AUDIOVISUALOUTLET") return ::Ifc4x3_add2::IfcOutletTypeEnum::IfcOutletType_AUDIOVISUALOUTLET; + if (s == "COMMUNICATIONSOUTLET") return ::Ifc4x3_add2::IfcOutletTypeEnum::IfcOutletType_COMMUNICATIONSOUTLET; + if (s == "DATAOUTLET") return ::Ifc4x3_add2::IfcOutletTypeEnum::IfcOutletType_DATAOUTLET; + if (s == "POWEROUTLET") return ::Ifc4x3_add2::IfcOutletTypeEnum::IfcOutletType_POWEROUTLET; + if (s == "TELEPHONEOUTLET") return ::Ifc4x3_add2::IfcOutletTypeEnum::IfcOutletType_TELEPHONEOUTLET; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcOutletTypeEnum::IfcOutletType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcOutletTypeEnum::IfcOutletType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcOutletTypeEnum::operator Ifc4x3_add2::IfcOutletTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPavementTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcPavementTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPavementTypeEnum::Class() { return *IFC4X3_ADD2_IfcPavementTypeEnum_type; } + +Ifc4x3_add2::IfcPavementTypeEnum::IfcPavementTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcPavementTypeEnum::IfcPavementTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPavementTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcPavementTypeEnum::IfcPavementTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPavementTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcPavementTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "FLEXIBLE", "RIGID", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcPavementTypeEnum::Value Ifc4x3_add2::IfcPavementTypeEnum::FromString(const std::string& s) { + if (s == "FLEXIBLE") return ::Ifc4x3_add2::IfcPavementTypeEnum::IfcPavementType_FLEXIBLE; + if (s == "RIGID") return ::Ifc4x3_add2::IfcPavementTypeEnum::IfcPavementType_RIGID; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcPavementTypeEnum::IfcPavementType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcPavementTypeEnum::IfcPavementType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcPavementTypeEnum::operator Ifc4x3_add2::IfcPavementTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPerformanceHistoryTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcPerformanceHistoryTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPerformanceHistoryTypeEnum::Class() { return *IFC4X3_ADD2_IfcPerformanceHistoryTypeEnum_type; } + +Ifc4x3_add2::IfcPerformanceHistoryTypeEnum::IfcPerformanceHistoryTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcPerformanceHistoryTypeEnum::IfcPerformanceHistoryTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPerformanceHistoryTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcPerformanceHistoryTypeEnum::IfcPerformanceHistoryTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPerformanceHistoryTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcPerformanceHistoryTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 2 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcPerformanceHistoryTypeEnum::Value Ifc4x3_add2::IfcPerformanceHistoryTypeEnum::FromString(const std::string& s) { + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcPerformanceHistoryTypeEnum::IfcPerformanceHistoryType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcPerformanceHistoryTypeEnum::IfcPerformanceHistoryType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcPerformanceHistoryTypeEnum::operator Ifc4x3_add2::IfcPerformanceHistoryTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPermeableCoveringOperationEnum::declaration() const { return *IFC4X3_ADD2_IfcPermeableCoveringOperationEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPermeableCoveringOperationEnum::Class() { return *IFC4X3_ADD2_IfcPermeableCoveringOperationEnum_type; } + +Ifc4x3_add2::IfcPermeableCoveringOperationEnum::IfcPermeableCoveringOperationEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcPermeableCoveringOperationEnum::IfcPermeableCoveringOperationEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPermeableCoveringOperationEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcPermeableCoveringOperationEnum::IfcPermeableCoveringOperationEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPermeableCoveringOperationEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcPermeableCoveringOperationEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "GRILL", "LOUVER", "SCREEN", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcPermeableCoveringOperationEnum::Value Ifc4x3_add2::IfcPermeableCoveringOperationEnum::FromString(const std::string& s) { + if (s == "GRILL") return ::Ifc4x3_add2::IfcPermeableCoveringOperationEnum::IfcPermeableCoveringOperation_GRILL; + if (s == "LOUVER") return ::Ifc4x3_add2::IfcPermeableCoveringOperationEnum::IfcPermeableCoveringOperation_LOUVER; + if (s == "SCREEN") return ::Ifc4x3_add2::IfcPermeableCoveringOperationEnum::IfcPermeableCoveringOperation_SCREEN; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcPermeableCoveringOperationEnum::IfcPermeableCoveringOperation_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcPermeableCoveringOperationEnum::IfcPermeableCoveringOperation_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcPermeableCoveringOperationEnum::operator Ifc4x3_add2::IfcPermeableCoveringOperationEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPermitTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcPermitTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPermitTypeEnum::Class() { return *IFC4X3_ADD2_IfcPermitTypeEnum_type; } + +Ifc4x3_add2::IfcPermitTypeEnum::IfcPermitTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcPermitTypeEnum::IfcPermitTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPermitTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcPermitTypeEnum::IfcPermitTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPermitTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcPermitTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ACCESS", "BUILDING", "WORK", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcPermitTypeEnum::Value Ifc4x3_add2::IfcPermitTypeEnum::FromString(const std::string& s) { + if (s == "ACCESS") return ::Ifc4x3_add2::IfcPermitTypeEnum::IfcPermitType_ACCESS; + if (s == "BUILDING") return ::Ifc4x3_add2::IfcPermitTypeEnum::IfcPermitType_BUILDING; + if (s == "WORK") return ::Ifc4x3_add2::IfcPermitTypeEnum::IfcPermitType_WORK; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcPermitTypeEnum::IfcPermitType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcPermitTypeEnum::IfcPermitType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcPermitTypeEnum::operator Ifc4x3_add2::IfcPermitTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPhysicalOrVirtualEnum::declaration() const { return *IFC4X3_ADD2_IfcPhysicalOrVirtualEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPhysicalOrVirtualEnum::Class() { return *IFC4X3_ADD2_IfcPhysicalOrVirtualEnum_type; } + +Ifc4x3_add2::IfcPhysicalOrVirtualEnum::IfcPhysicalOrVirtualEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcPhysicalOrVirtualEnum::IfcPhysicalOrVirtualEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPhysicalOrVirtualEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcPhysicalOrVirtualEnum::IfcPhysicalOrVirtualEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPhysicalOrVirtualEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcPhysicalOrVirtualEnum::ToString(Value v) { + if ( v < 0 || v >= 3 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "PHYSICAL", "VIRTUAL", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcPhysicalOrVirtualEnum::Value Ifc4x3_add2::IfcPhysicalOrVirtualEnum::FromString(const std::string& s) { + if (s == "PHYSICAL") return ::Ifc4x3_add2::IfcPhysicalOrVirtualEnum::IfcPhysicalOrVirtual_PHYSICAL; + if (s == "VIRTUAL") return ::Ifc4x3_add2::IfcPhysicalOrVirtualEnum::IfcPhysicalOrVirtual_VIRTUAL; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcPhysicalOrVirtualEnum::IfcPhysicalOrVirtual_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcPhysicalOrVirtualEnum::operator Ifc4x3_add2::IfcPhysicalOrVirtualEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPileConstructionEnum::declaration() const { return *IFC4X3_ADD2_IfcPileConstructionEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPileConstructionEnum::Class() { return *IFC4X3_ADD2_IfcPileConstructionEnum_type; } + +Ifc4x3_add2::IfcPileConstructionEnum::IfcPileConstructionEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcPileConstructionEnum::IfcPileConstructionEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPileConstructionEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcPileConstructionEnum::IfcPileConstructionEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPileConstructionEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcPileConstructionEnum::ToString(Value v) { + if ( v < 0 || v >= 6 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CAST_IN_PLACE", "COMPOSITE", "PRECAST_CONCRETE", "PREFAB_STEEL", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcPileConstructionEnum::Value Ifc4x3_add2::IfcPileConstructionEnum::FromString(const std::string& s) { + if (s == "CAST_IN_PLACE") return ::Ifc4x3_add2::IfcPileConstructionEnum::IfcPileConstruction_CAST_IN_PLACE; + if (s == "COMPOSITE") return ::Ifc4x3_add2::IfcPileConstructionEnum::IfcPileConstruction_COMPOSITE; + if (s == "PRECAST_CONCRETE") return ::Ifc4x3_add2::IfcPileConstructionEnum::IfcPileConstruction_PRECAST_CONCRETE; + if (s == "PREFAB_STEEL") return ::Ifc4x3_add2::IfcPileConstructionEnum::IfcPileConstruction_PREFAB_STEEL; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcPileConstructionEnum::IfcPileConstruction_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcPileConstructionEnum::IfcPileConstruction_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcPileConstructionEnum::operator Ifc4x3_add2::IfcPileConstructionEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPileTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcPileTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPileTypeEnum::Class() { return *IFC4X3_ADD2_IfcPileTypeEnum_type; } + +Ifc4x3_add2::IfcPileTypeEnum::IfcPileTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcPileTypeEnum::IfcPileTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPileTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcPileTypeEnum::IfcPileTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPileTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcPileTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 8 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BORED", "COHESION", "DRIVEN", "FRICTION", "JETGROUTING", "SUPPORT", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcPileTypeEnum::Value Ifc4x3_add2::IfcPileTypeEnum::FromString(const std::string& s) { + if (s == "BORED") return ::Ifc4x3_add2::IfcPileTypeEnum::IfcPileType_BORED; + if (s == "COHESION") return ::Ifc4x3_add2::IfcPileTypeEnum::IfcPileType_COHESION; + if (s == "DRIVEN") return ::Ifc4x3_add2::IfcPileTypeEnum::IfcPileType_DRIVEN; + if (s == "FRICTION") return ::Ifc4x3_add2::IfcPileTypeEnum::IfcPileType_FRICTION; + if (s == "JETGROUTING") return ::Ifc4x3_add2::IfcPileTypeEnum::IfcPileType_JETGROUTING; + if (s == "SUPPORT") return ::Ifc4x3_add2::IfcPileTypeEnum::IfcPileType_SUPPORT; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcPileTypeEnum::IfcPileType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcPileTypeEnum::IfcPileType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcPileTypeEnum::operator Ifc4x3_add2::IfcPileTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPipeFittingTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcPipeFittingTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPipeFittingTypeEnum::Class() { return *IFC4X3_ADD2_IfcPipeFittingTypeEnum_type; } + +Ifc4x3_add2::IfcPipeFittingTypeEnum::IfcPipeFittingTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcPipeFittingTypeEnum::IfcPipeFittingTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPipeFittingTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcPipeFittingTypeEnum::IfcPipeFittingTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPipeFittingTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcPipeFittingTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 9 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BEND", "CONNECTOR", "ENTRY", "EXIT", "JUNCTION", "OBSTRUCTION", "TRANSITION", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcPipeFittingTypeEnum::Value Ifc4x3_add2::IfcPipeFittingTypeEnum::FromString(const std::string& s) { + if (s == "BEND") return ::Ifc4x3_add2::IfcPipeFittingTypeEnum::IfcPipeFittingType_BEND; + if (s == "CONNECTOR") return ::Ifc4x3_add2::IfcPipeFittingTypeEnum::IfcPipeFittingType_CONNECTOR; + if (s == "ENTRY") return ::Ifc4x3_add2::IfcPipeFittingTypeEnum::IfcPipeFittingType_ENTRY; + if (s == "EXIT") return ::Ifc4x3_add2::IfcPipeFittingTypeEnum::IfcPipeFittingType_EXIT; + if (s == "JUNCTION") return ::Ifc4x3_add2::IfcPipeFittingTypeEnum::IfcPipeFittingType_JUNCTION; + if (s == "OBSTRUCTION") return ::Ifc4x3_add2::IfcPipeFittingTypeEnum::IfcPipeFittingType_OBSTRUCTION; + if (s == "TRANSITION") return ::Ifc4x3_add2::IfcPipeFittingTypeEnum::IfcPipeFittingType_TRANSITION; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcPipeFittingTypeEnum::IfcPipeFittingType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcPipeFittingTypeEnum::IfcPipeFittingType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcPipeFittingTypeEnum::operator Ifc4x3_add2::IfcPipeFittingTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPipeSegmentTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcPipeSegmentTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPipeSegmentTypeEnum::Class() { return *IFC4X3_ADD2_IfcPipeSegmentTypeEnum_type; } + +Ifc4x3_add2::IfcPipeSegmentTypeEnum::IfcPipeSegmentTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcPipeSegmentTypeEnum::IfcPipeSegmentTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPipeSegmentTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcPipeSegmentTypeEnum::IfcPipeSegmentTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPipeSegmentTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcPipeSegmentTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 7 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CULVERT", "FLEXIBLESEGMENT", "GUTTER", "RIGIDSEGMENT", "SPOOL", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcPipeSegmentTypeEnum::Value Ifc4x3_add2::IfcPipeSegmentTypeEnum::FromString(const std::string& s) { + if (s == "CULVERT") return ::Ifc4x3_add2::IfcPipeSegmentTypeEnum::IfcPipeSegmentType_CULVERT; + if (s == "FLEXIBLESEGMENT") return ::Ifc4x3_add2::IfcPipeSegmentTypeEnum::IfcPipeSegmentType_FLEXIBLESEGMENT; + if (s == "GUTTER") return ::Ifc4x3_add2::IfcPipeSegmentTypeEnum::IfcPipeSegmentType_GUTTER; + if (s == "RIGIDSEGMENT") return ::Ifc4x3_add2::IfcPipeSegmentTypeEnum::IfcPipeSegmentType_RIGIDSEGMENT; + if (s == "SPOOL") return ::Ifc4x3_add2::IfcPipeSegmentTypeEnum::IfcPipeSegmentType_SPOOL; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcPipeSegmentTypeEnum::IfcPipeSegmentType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcPipeSegmentTypeEnum::IfcPipeSegmentType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcPipeSegmentTypeEnum::operator Ifc4x3_add2::IfcPipeSegmentTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPlateTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcPlateTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPlateTypeEnum::Class() { return *IFC4X3_ADD2_IfcPlateTypeEnum_type; } + +Ifc4x3_add2::IfcPlateTypeEnum::IfcPlateTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcPlateTypeEnum::IfcPlateTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPlateTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcPlateTypeEnum::IfcPlateTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPlateTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcPlateTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 11 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BASE_PLATE", "COVER_PLATE", "CURTAIN_PANEL", "FLANGE_PLATE", "GUSSET_PLATE", "SHEET", "SPLICE_PLATE", "STIFFENER_PLATE", "WEB_PLATE", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcPlateTypeEnum::Value Ifc4x3_add2::IfcPlateTypeEnum::FromString(const std::string& s) { + if (s == "BASE_PLATE") return ::Ifc4x3_add2::IfcPlateTypeEnum::IfcPlateType_BASE_PLATE; + if (s == "COVER_PLATE") return ::Ifc4x3_add2::IfcPlateTypeEnum::IfcPlateType_COVER_PLATE; + if (s == "CURTAIN_PANEL") return ::Ifc4x3_add2::IfcPlateTypeEnum::IfcPlateType_CURTAIN_PANEL; + if (s == "FLANGE_PLATE") return ::Ifc4x3_add2::IfcPlateTypeEnum::IfcPlateType_FLANGE_PLATE; + if (s == "GUSSET_PLATE") return ::Ifc4x3_add2::IfcPlateTypeEnum::IfcPlateType_GUSSET_PLATE; + if (s == "SHEET") return ::Ifc4x3_add2::IfcPlateTypeEnum::IfcPlateType_SHEET; + if (s == "SPLICE_PLATE") return ::Ifc4x3_add2::IfcPlateTypeEnum::IfcPlateType_SPLICE_PLATE; + if (s == "STIFFENER_PLATE") return ::Ifc4x3_add2::IfcPlateTypeEnum::IfcPlateType_STIFFENER_PLATE; + if (s == "WEB_PLATE") return ::Ifc4x3_add2::IfcPlateTypeEnum::IfcPlateType_WEB_PLATE; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcPlateTypeEnum::IfcPlateType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcPlateTypeEnum::IfcPlateType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcPlateTypeEnum::operator Ifc4x3_add2::IfcPlateTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::declaration() const { return *IFC4X3_ADD2_IfcPreferredSurfaceCurveRepresentation_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::Class() { return *IFC4X3_ADD2_IfcPreferredSurfaceCurveRepresentation_type; } + +Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::IfcPreferredSurfaceCurveRepresentation(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::IfcPreferredSurfaceCurveRepresentation(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPreferredSurfaceCurveRepresentation_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::IfcPreferredSurfaceCurveRepresentation(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPreferredSurfaceCurveRepresentation_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::ToString(Value v) { + if ( v < 0 || v >= 3 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CURVE3D", "PCURVE_S1", "PCURVE_S2" }; + return names[v]; +} + +Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::Value Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::FromString(const std::string& s) { + if (s == "CURVE3D") return ::Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::IfcPreferredSurfaceCurveRepresentation_CURVE3D; + if (s == "PCURVE_S1") return ::Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::IfcPreferredSurfaceCurveRepresentation_PCURVE_S1; + if (s == "PCURVE_S2") return ::Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::IfcPreferredSurfaceCurveRepresentation_PCURVE_S2; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::operator Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcProcedureTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcProcedureTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcProcedureTypeEnum::Class() { return *IFC4X3_ADD2_IfcProcedureTypeEnum_type; } + +Ifc4x3_add2::IfcProcedureTypeEnum::IfcProcedureTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcProcedureTypeEnum::IfcProcedureTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProcedureTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcProcedureTypeEnum::IfcProcedureTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProcedureTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcProcedureTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 9 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ADVICE_CAUTION", "ADVICE_NOTE", "ADVICE_WARNING", "CALIBRATION", "DIAGNOSTIC", "SHUTDOWN", "STARTUP", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcProcedureTypeEnum::Value Ifc4x3_add2::IfcProcedureTypeEnum::FromString(const std::string& s) { + if (s == "ADVICE_CAUTION") return ::Ifc4x3_add2::IfcProcedureTypeEnum::IfcProcedureType_ADVICE_CAUTION; + if (s == "ADVICE_NOTE") return ::Ifc4x3_add2::IfcProcedureTypeEnum::IfcProcedureType_ADVICE_NOTE; + if (s == "ADVICE_WARNING") return ::Ifc4x3_add2::IfcProcedureTypeEnum::IfcProcedureType_ADVICE_WARNING; + if (s == "CALIBRATION") return ::Ifc4x3_add2::IfcProcedureTypeEnum::IfcProcedureType_CALIBRATION; + if (s == "DIAGNOSTIC") return ::Ifc4x3_add2::IfcProcedureTypeEnum::IfcProcedureType_DIAGNOSTIC; + if (s == "SHUTDOWN") return ::Ifc4x3_add2::IfcProcedureTypeEnum::IfcProcedureType_SHUTDOWN; + if (s == "STARTUP") return ::Ifc4x3_add2::IfcProcedureTypeEnum::IfcProcedureType_STARTUP; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcProcedureTypeEnum::IfcProcedureType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcProcedureTypeEnum::IfcProcedureType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcProcedureTypeEnum::operator Ifc4x3_add2::IfcProcedureTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcProfileTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcProfileTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcProfileTypeEnum::Class() { return *IFC4X3_ADD2_IfcProfileTypeEnum_type; } + +Ifc4x3_add2::IfcProfileTypeEnum::IfcProfileTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcProfileTypeEnum::IfcProfileTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProfileTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcProfileTypeEnum::IfcProfileTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProfileTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcProfileTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 2 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "AREA", "CURVE" }; + return names[v]; +} + +Ifc4x3_add2::IfcProfileTypeEnum::Value Ifc4x3_add2::IfcProfileTypeEnum::FromString(const std::string& s) { + if (s == "AREA") return ::Ifc4x3_add2::IfcProfileTypeEnum::IfcProfileType_AREA; + if (s == "CURVE") return ::Ifc4x3_add2::IfcProfileTypeEnum::IfcProfileType_CURVE; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcProfileTypeEnum::operator Ifc4x3_add2::IfcProfileTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcProjectOrderTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcProjectOrderTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcProjectOrderTypeEnum::Class() { return *IFC4X3_ADD2_IfcProjectOrderTypeEnum_type; } + +Ifc4x3_add2::IfcProjectOrderTypeEnum::IfcProjectOrderTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcProjectOrderTypeEnum::IfcProjectOrderTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProjectOrderTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcProjectOrderTypeEnum::IfcProjectOrderTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProjectOrderTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcProjectOrderTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 7 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CHANGEORDER", "MAINTENANCEWORKORDER", "MOVEORDER", "PURCHASEORDER", "WORKORDER", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcProjectOrderTypeEnum::Value Ifc4x3_add2::IfcProjectOrderTypeEnum::FromString(const std::string& s) { + if (s == "CHANGEORDER") return ::Ifc4x3_add2::IfcProjectOrderTypeEnum::IfcProjectOrderType_CHANGEORDER; + if (s == "MAINTENANCEWORKORDER") return ::Ifc4x3_add2::IfcProjectOrderTypeEnum::IfcProjectOrderType_MAINTENANCEWORKORDER; + if (s == "MOVEORDER") return ::Ifc4x3_add2::IfcProjectOrderTypeEnum::IfcProjectOrderType_MOVEORDER; + if (s == "PURCHASEORDER") return ::Ifc4x3_add2::IfcProjectOrderTypeEnum::IfcProjectOrderType_PURCHASEORDER; + if (s == "WORKORDER") return ::Ifc4x3_add2::IfcProjectOrderTypeEnum::IfcProjectOrderType_WORKORDER; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcProjectOrderTypeEnum::IfcProjectOrderType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcProjectOrderTypeEnum::IfcProjectOrderType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcProjectOrderTypeEnum::operator Ifc4x3_add2::IfcProjectOrderTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::declaration() const { return *IFC4X3_ADD2_IfcProjectedOrTrueLengthEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::Class() { return *IFC4X3_ADD2_IfcProjectedOrTrueLengthEnum_type; } + +Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::IfcProjectedOrTrueLengthEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::IfcProjectedOrTrueLengthEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProjectedOrTrueLengthEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::IfcProjectedOrTrueLengthEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProjectedOrTrueLengthEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::ToString(Value v) { + if ( v < 0 || v >= 2 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "PROJECTED_LENGTH", "TRUE_LENGTH" }; + return names[v]; +} + +Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::Value Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::FromString(const std::string& s) { + if (s == "PROJECTED_LENGTH") return ::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::IfcProjectedOrTrueLength_PROJECTED_LENGTH; + if (s == "TRUE_LENGTH") return ::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::IfcProjectedOrTrueLength_TRUE_LENGTH; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::operator Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcProjectionElementTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcProjectionElementTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcProjectionElementTypeEnum::Class() { return *IFC4X3_ADD2_IfcProjectionElementTypeEnum_type; } + +Ifc4x3_add2::IfcProjectionElementTypeEnum::IfcProjectionElementTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcProjectionElementTypeEnum::IfcProjectionElementTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProjectionElementTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcProjectionElementTypeEnum::IfcProjectionElementTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProjectionElementTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcProjectionElementTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BLISTER", "DEVIATOR", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcProjectionElementTypeEnum::Value Ifc4x3_add2::IfcProjectionElementTypeEnum::FromString(const std::string& s) { + if (s == "BLISTER") return ::Ifc4x3_add2::IfcProjectionElementTypeEnum::IfcProjectionElementType_BLISTER; + if (s == "DEVIATOR") return ::Ifc4x3_add2::IfcProjectionElementTypeEnum::IfcProjectionElementType_DEVIATOR; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcProjectionElementTypeEnum::IfcProjectionElementType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcProjectionElementTypeEnum::IfcProjectionElementType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcProjectionElementTypeEnum::operator Ifc4x3_add2::IfcProjectionElementTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcPropertySetTemplateTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::Class() { return *IFC4X3_ADD2_IfcPropertySetTemplateTypeEnum_type; } + +Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::IfcPropertySetTemplateTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::IfcPropertySetTemplateTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPropertySetTemplateTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::IfcPropertySetTemplateTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPropertySetTemplateTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 10 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "PSET_MATERIALDRIVEN", "PSET_OCCURRENCEDRIVEN", "PSET_PERFORMANCEDRIVEN", "PSET_PROFILEDRIVEN", "PSET_TYPEDRIVENONLY", "PSET_TYPEDRIVENOVERRIDE", "QTO_OCCURRENCEDRIVEN", "QTO_TYPEDRIVENONLY", "QTO_TYPEDRIVENOVERRIDE", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::Value Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::FromString(const std::string& s) { + if (s == "PSET_MATERIALDRIVEN") return ::Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::IfcPropertySetTemplateType_PSET_MATERIALDRIVEN; + if (s == "PSET_OCCURRENCEDRIVEN") return ::Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::IfcPropertySetTemplateType_PSET_OCCURRENCEDRIVEN; + if (s == "PSET_PERFORMANCEDRIVEN") return ::Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::IfcPropertySetTemplateType_PSET_PERFORMANCEDRIVEN; + if (s == "PSET_PROFILEDRIVEN") return ::Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::IfcPropertySetTemplateType_PSET_PROFILEDRIVEN; + if (s == "PSET_TYPEDRIVENONLY") return ::Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::IfcPropertySetTemplateType_PSET_TYPEDRIVENONLY; + if (s == "PSET_TYPEDRIVENOVERRIDE") return ::Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::IfcPropertySetTemplateType_PSET_TYPEDRIVENOVERRIDE; + if (s == "QTO_OCCURRENCEDRIVEN") return ::Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::IfcPropertySetTemplateType_QTO_OCCURRENCEDRIVEN; + if (s == "QTO_TYPEDRIVENONLY") return ::Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::IfcPropertySetTemplateType_QTO_TYPEDRIVENONLY; + if (s == "QTO_TYPEDRIVENOVERRIDE") return ::Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::IfcPropertySetTemplateType_QTO_TYPEDRIVENOVERRIDE; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::IfcPropertySetTemplateType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::operator Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnitTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::Class() { return *IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnitTypeEnum_type; } + +Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::IfcProtectiveDeviceTrippingUnitTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::IfcProtectiveDeviceTrippingUnitTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnitTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::IfcProtectiveDeviceTrippingUnitTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnitTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 6 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ELECTROMAGNETIC", "ELECTRONIC", "RESIDUALCURRENT", "THERMAL", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::Value Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::FromString(const std::string& s) { + if (s == "ELECTROMAGNETIC") return ::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::IfcProtectiveDeviceTrippingUnitType_ELECTROMAGNETIC; + if (s == "ELECTRONIC") return ::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::IfcProtectiveDeviceTrippingUnitType_ELECTRONIC; + if (s == "RESIDUALCURRENT") return ::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::IfcProtectiveDeviceTrippingUnitType_RESIDUALCURRENT; + if (s == "THERMAL") return ::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::IfcProtectiveDeviceTrippingUnitType_THERMAL; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::IfcProtectiveDeviceTrippingUnitType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::IfcProtectiveDeviceTrippingUnitType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::operator Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcProtectiveDeviceTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::Class() { return *IFC4X3_ADD2_IfcProtectiveDeviceTypeEnum_type; } + +Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::IfcProtectiveDeviceTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::IfcProtectiveDeviceTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProtectiveDeviceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::IfcProtectiveDeviceTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProtectiveDeviceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 12 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ANTI_ARCING_DEVICE", "CIRCUITBREAKER", "EARTHINGSWITCH", "EARTHLEAKAGECIRCUITBREAKER", "FUSEDISCONNECTOR", "RESIDUALCURRENTCIRCUITBREAKER", "RESIDUALCURRENTSWITCH", "SPARKGAP", "VARISTOR", "VOLTAGELIMITER", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::Value Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::FromString(const std::string& s) { + if (s == "ANTI_ARCING_DEVICE") return ::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::IfcProtectiveDeviceType_ANTI_ARCING_DEVICE; + if (s == "CIRCUITBREAKER") return ::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::IfcProtectiveDeviceType_CIRCUITBREAKER; + if (s == "EARTHINGSWITCH") return ::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::IfcProtectiveDeviceType_EARTHINGSWITCH; + if (s == "EARTHLEAKAGECIRCUITBREAKER") return ::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::IfcProtectiveDeviceType_EARTHLEAKAGECIRCUITBREAKER; + if (s == "FUSEDISCONNECTOR") return ::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::IfcProtectiveDeviceType_FUSEDISCONNECTOR; + if (s == "RESIDUALCURRENTCIRCUITBREAKER") return ::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::IfcProtectiveDeviceType_RESIDUALCURRENTCIRCUITBREAKER; + if (s == "RESIDUALCURRENTSWITCH") return ::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::IfcProtectiveDeviceType_RESIDUALCURRENTSWITCH; + if (s == "SPARKGAP") return ::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::IfcProtectiveDeviceType_SPARKGAP; + if (s == "VARISTOR") return ::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::IfcProtectiveDeviceType_VARISTOR; + if (s == "VOLTAGELIMITER") return ::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::IfcProtectiveDeviceType_VOLTAGELIMITER; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::IfcProtectiveDeviceType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::IfcProtectiveDeviceType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::operator Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPumpTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcPumpTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcPumpTypeEnum::Class() { return *IFC4X3_ADD2_IfcPumpTypeEnum_type; } + +Ifc4x3_add2::IfcPumpTypeEnum::IfcPumpTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcPumpTypeEnum::IfcPumpTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPumpTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcPumpTypeEnum::IfcPumpTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPumpTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcPumpTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 9 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CIRCULATOR", "ENDSUCTION", "SPLITCASE", "SUBMERSIBLEPUMP", "SUMPPUMP", "VERTICALINLINE", "VERTICALTURBINE", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcPumpTypeEnum::Value Ifc4x3_add2::IfcPumpTypeEnum::FromString(const std::string& s) { + if (s == "CIRCULATOR") return ::Ifc4x3_add2::IfcPumpTypeEnum::IfcPumpType_CIRCULATOR; + if (s == "ENDSUCTION") return ::Ifc4x3_add2::IfcPumpTypeEnum::IfcPumpType_ENDSUCTION; + if (s == "SPLITCASE") return ::Ifc4x3_add2::IfcPumpTypeEnum::IfcPumpType_SPLITCASE; + if (s == "SUBMERSIBLEPUMP") return ::Ifc4x3_add2::IfcPumpTypeEnum::IfcPumpType_SUBMERSIBLEPUMP; + if (s == "SUMPPUMP") return ::Ifc4x3_add2::IfcPumpTypeEnum::IfcPumpType_SUMPPUMP; + if (s == "VERTICALINLINE") return ::Ifc4x3_add2::IfcPumpTypeEnum::IfcPumpType_VERTICALINLINE; + if (s == "VERTICALTURBINE") return ::Ifc4x3_add2::IfcPumpTypeEnum::IfcPumpType_VERTICALTURBINE; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcPumpTypeEnum::IfcPumpType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcPumpTypeEnum::IfcPumpType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcPumpTypeEnum::operator Ifc4x3_add2::IfcPumpTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcRailTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcRailTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcRailTypeEnum::Class() { return *IFC4X3_ADD2_IfcRailTypeEnum_type; } + +Ifc4x3_add2::IfcRailTypeEnum::IfcRailTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcRailTypeEnum::IfcRailTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRailTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcRailTypeEnum::IfcRailTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRailTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcRailTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 8 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BLADE", "CHECKRAIL", "GUARDRAIL", "RACKRAIL", "RAIL", "STOCKRAIL", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcRailTypeEnum::Value Ifc4x3_add2::IfcRailTypeEnum::FromString(const std::string& s) { + if (s == "BLADE") return ::Ifc4x3_add2::IfcRailTypeEnum::IfcRailType_BLADE; + if (s == "CHECKRAIL") return ::Ifc4x3_add2::IfcRailTypeEnum::IfcRailType_CHECKRAIL; + if (s == "GUARDRAIL") return ::Ifc4x3_add2::IfcRailTypeEnum::IfcRailType_GUARDRAIL; + if (s == "RACKRAIL") return ::Ifc4x3_add2::IfcRailTypeEnum::IfcRailType_RACKRAIL; + if (s == "RAIL") return ::Ifc4x3_add2::IfcRailTypeEnum::IfcRailType_RAIL; + if (s == "STOCKRAIL") return ::Ifc4x3_add2::IfcRailTypeEnum::IfcRailType_STOCKRAIL; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcRailTypeEnum::IfcRailType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcRailTypeEnum::IfcRailType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcRailTypeEnum::operator Ifc4x3_add2::IfcRailTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcRailingTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcRailingTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcRailingTypeEnum::Class() { return *IFC4X3_ADD2_IfcRailingTypeEnum_type; } + +Ifc4x3_add2::IfcRailingTypeEnum::IfcRailingTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcRailingTypeEnum::IfcRailingTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRailingTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcRailingTypeEnum::IfcRailingTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRailingTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcRailingTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 6 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BALUSTRADE", "FENCE", "GUARDRAIL", "HANDRAIL", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcRailingTypeEnum::Value Ifc4x3_add2::IfcRailingTypeEnum::FromString(const std::string& s) { + if (s == "BALUSTRADE") return ::Ifc4x3_add2::IfcRailingTypeEnum::IfcRailingType_BALUSTRADE; + if (s == "FENCE") return ::Ifc4x3_add2::IfcRailingTypeEnum::IfcRailingType_FENCE; + if (s == "GUARDRAIL") return ::Ifc4x3_add2::IfcRailingTypeEnum::IfcRailingType_GUARDRAIL; + if (s == "HANDRAIL") return ::Ifc4x3_add2::IfcRailingTypeEnum::IfcRailingType_HANDRAIL; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcRailingTypeEnum::IfcRailingType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcRailingTypeEnum::IfcRailingType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcRailingTypeEnum::operator Ifc4x3_add2::IfcRailingTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcRailwayPartTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcRailwayPartTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcRailwayPartTypeEnum::Class() { return *IFC4X3_ADD2_IfcRailwayPartTypeEnum_type; } + +Ifc4x3_add2::IfcRailwayPartTypeEnum::IfcRailwayPartTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcRailwayPartTypeEnum::IfcRailwayPartTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRailwayPartTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcRailwayPartTypeEnum::IfcRailwayPartTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRailwayPartTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcRailwayPartTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 11 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ABOVETRACK", "DILATIONTRACK", "LINESIDE", "LINESIDEPART", "PLAINTRACK", "SUBSTRUCTURE", "TRACK", "TRACKPART", "TURNOUTTRACK", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcRailwayPartTypeEnum::Value Ifc4x3_add2::IfcRailwayPartTypeEnum::FromString(const std::string& s) { + if (s == "ABOVETRACK") return ::Ifc4x3_add2::IfcRailwayPartTypeEnum::IfcRailwayPartType_ABOVETRACK; + if (s == "DILATIONTRACK") return ::Ifc4x3_add2::IfcRailwayPartTypeEnum::IfcRailwayPartType_DILATIONTRACK; + if (s == "LINESIDE") return ::Ifc4x3_add2::IfcRailwayPartTypeEnum::IfcRailwayPartType_LINESIDE; + if (s == "LINESIDEPART") return ::Ifc4x3_add2::IfcRailwayPartTypeEnum::IfcRailwayPartType_LINESIDEPART; + if (s == "PLAINTRACK") return ::Ifc4x3_add2::IfcRailwayPartTypeEnum::IfcRailwayPartType_PLAINTRACK; + if (s == "SUBSTRUCTURE") return ::Ifc4x3_add2::IfcRailwayPartTypeEnum::IfcRailwayPartType_SUBSTRUCTURE; + if (s == "TRACK") return ::Ifc4x3_add2::IfcRailwayPartTypeEnum::IfcRailwayPartType_TRACK; + if (s == "TRACKPART") return ::Ifc4x3_add2::IfcRailwayPartTypeEnum::IfcRailwayPartType_TRACKPART; + if (s == "TURNOUTTRACK") return ::Ifc4x3_add2::IfcRailwayPartTypeEnum::IfcRailwayPartType_TURNOUTTRACK; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcRailwayPartTypeEnum::IfcRailwayPartType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcRailwayPartTypeEnum::IfcRailwayPartType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcRailwayPartTypeEnum::operator Ifc4x3_add2::IfcRailwayPartTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcRailwayTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcRailwayTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcRailwayTypeEnum::Class() { return *IFC4X3_ADD2_IfcRailwayTypeEnum_type; } + +Ifc4x3_add2::IfcRailwayTypeEnum::IfcRailwayTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcRailwayTypeEnum::IfcRailwayTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRailwayTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcRailwayTypeEnum::IfcRailwayTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRailwayTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcRailwayTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 2 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcRailwayTypeEnum::Value Ifc4x3_add2::IfcRailwayTypeEnum::FromString(const std::string& s) { + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcRailwayTypeEnum::IfcRailwayType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcRailwayTypeEnum::IfcRailwayType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcRailwayTypeEnum::operator Ifc4x3_add2::IfcRailwayTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcRampFlightTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcRampFlightTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcRampFlightTypeEnum::Class() { return *IFC4X3_ADD2_IfcRampFlightTypeEnum_type; } + +Ifc4x3_add2::IfcRampFlightTypeEnum::IfcRampFlightTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcRampFlightTypeEnum::IfcRampFlightTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRampFlightTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcRampFlightTypeEnum::IfcRampFlightTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRampFlightTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcRampFlightTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "SPIRAL", "STRAIGHT", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcRampFlightTypeEnum::Value Ifc4x3_add2::IfcRampFlightTypeEnum::FromString(const std::string& s) { + if (s == "SPIRAL") return ::Ifc4x3_add2::IfcRampFlightTypeEnum::IfcRampFlightType_SPIRAL; + if (s == "STRAIGHT") return ::Ifc4x3_add2::IfcRampFlightTypeEnum::IfcRampFlightType_STRAIGHT; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcRampFlightTypeEnum::IfcRampFlightType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcRampFlightTypeEnum::IfcRampFlightType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcRampFlightTypeEnum::operator Ifc4x3_add2::IfcRampFlightTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcRampTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcRampTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcRampTypeEnum::Class() { return *IFC4X3_ADD2_IfcRampTypeEnum_type; } + +Ifc4x3_add2::IfcRampTypeEnum::IfcRampTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcRampTypeEnum::IfcRampTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRampTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcRampTypeEnum::IfcRampTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRampTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcRampTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 8 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "HALF_TURN_RAMP", "QUARTER_TURN_RAMP", "SPIRAL_RAMP", "STRAIGHT_RUN_RAMP", "TWO_QUARTER_TURN_RAMP", "TWO_STRAIGHT_RUN_RAMP", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcRampTypeEnum::Value Ifc4x3_add2::IfcRampTypeEnum::FromString(const std::string& s) { + if (s == "HALF_TURN_RAMP") return ::Ifc4x3_add2::IfcRampTypeEnum::IfcRampType_HALF_TURN_RAMP; + if (s == "QUARTER_TURN_RAMP") return ::Ifc4x3_add2::IfcRampTypeEnum::IfcRampType_QUARTER_TURN_RAMP; + if (s == "SPIRAL_RAMP") return ::Ifc4x3_add2::IfcRampTypeEnum::IfcRampType_SPIRAL_RAMP; + if (s == "STRAIGHT_RUN_RAMP") return ::Ifc4x3_add2::IfcRampTypeEnum::IfcRampType_STRAIGHT_RUN_RAMP; + if (s == "TWO_QUARTER_TURN_RAMP") return ::Ifc4x3_add2::IfcRampTypeEnum::IfcRampType_TWO_QUARTER_TURN_RAMP; + if (s == "TWO_STRAIGHT_RUN_RAMP") return ::Ifc4x3_add2::IfcRampTypeEnum::IfcRampType_TWO_STRAIGHT_RUN_RAMP; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcRampTypeEnum::IfcRampType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcRampTypeEnum::IfcRampType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcRampTypeEnum::operator Ifc4x3_add2::IfcRampTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcRecurrenceTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcRecurrenceTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcRecurrenceTypeEnum::Class() { return *IFC4X3_ADD2_IfcRecurrenceTypeEnum_type; } + +Ifc4x3_add2::IfcRecurrenceTypeEnum::IfcRecurrenceTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcRecurrenceTypeEnum::IfcRecurrenceTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRecurrenceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcRecurrenceTypeEnum::IfcRecurrenceTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRecurrenceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcRecurrenceTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 8 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BY_DAY_COUNT", "BY_WEEKDAY_COUNT", "DAILY", "MONTHLY_BY_DAY_OF_MONTH", "MONTHLY_BY_POSITION", "WEEKLY", "YEARLY_BY_DAY_OF_MONTH", "YEARLY_BY_POSITION" }; + return names[v]; +} + +Ifc4x3_add2::IfcRecurrenceTypeEnum::Value Ifc4x3_add2::IfcRecurrenceTypeEnum::FromString(const std::string& s) { + if (s == "BY_DAY_COUNT") return ::Ifc4x3_add2::IfcRecurrenceTypeEnum::IfcRecurrenceType_BY_DAY_COUNT; + if (s == "BY_WEEKDAY_COUNT") return ::Ifc4x3_add2::IfcRecurrenceTypeEnum::IfcRecurrenceType_BY_WEEKDAY_COUNT; + if (s == "DAILY") return ::Ifc4x3_add2::IfcRecurrenceTypeEnum::IfcRecurrenceType_DAILY; + if (s == "MONTHLY_BY_DAY_OF_MONTH") return ::Ifc4x3_add2::IfcRecurrenceTypeEnum::IfcRecurrenceType_MONTHLY_BY_DAY_OF_MONTH; + if (s == "MONTHLY_BY_POSITION") return ::Ifc4x3_add2::IfcRecurrenceTypeEnum::IfcRecurrenceType_MONTHLY_BY_POSITION; + if (s == "WEEKLY") return ::Ifc4x3_add2::IfcRecurrenceTypeEnum::IfcRecurrenceType_WEEKLY; + if (s == "YEARLY_BY_DAY_OF_MONTH") return ::Ifc4x3_add2::IfcRecurrenceTypeEnum::IfcRecurrenceType_YEARLY_BY_DAY_OF_MONTH; + if (s == "YEARLY_BY_POSITION") return ::Ifc4x3_add2::IfcRecurrenceTypeEnum::IfcRecurrenceType_YEARLY_BY_POSITION; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcRecurrenceTypeEnum::operator Ifc4x3_add2::IfcRecurrenceTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcReferentTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcReferentTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcReferentTypeEnum::Class() { return *IFC4X3_ADD2_IfcReferentTypeEnum_type; } + +Ifc4x3_add2::IfcReferentTypeEnum::IfcReferentTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcReferentTypeEnum::IfcReferentTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReferentTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcReferentTypeEnum::IfcReferentTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReferentTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcReferentTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 12 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BOUNDARY", "INTERSECTION", "KILOPOINT", "LANDMARK", "MILEPOINT", "POSITION", "REFERENCEMARKER", "STATION", "SUPERELEVATIONEVENT", "WIDTHEVENT", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcReferentTypeEnum::Value Ifc4x3_add2::IfcReferentTypeEnum::FromString(const std::string& s) { + if (s == "BOUNDARY") return ::Ifc4x3_add2::IfcReferentTypeEnum::IfcReferentType_BOUNDARY; + if (s == "INTERSECTION") return ::Ifc4x3_add2::IfcReferentTypeEnum::IfcReferentType_INTERSECTION; + if (s == "KILOPOINT") return ::Ifc4x3_add2::IfcReferentTypeEnum::IfcReferentType_KILOPOINT; + if (s == "LANDMARK") return ::Ifc4x3_add2::IfcReferentTypeEnum::IfcReferentType_LANDMARK; + if (s == "MILEPOINT") return ::Ifc4x3_add2::IfcReferentTypeEnum::IfcReferentType_MILEPOINT; + if (s == "POSITION") return ::Ifc4x3_add2::IfcReferentTypeEnum::IfcReferentType_POSITION; + if (s == "REFERENCEMARKER") return ::Ifc4x3_add2::IfcReferentTypeEnum::IfcReferentType_REFERENCEMARKER; + if (s == "STATION") return ::Ifc4x3_add2::IfcReferentTypeEnum::IfcReferentType_STATION; + if (s == "SUPERELEVATIONEVENT") return ::Ifc4x3_add2::IfcReferentTypeEnum::IfcReferentType_SUPERELEVATIONEVENT; + if (s == "WIDTHEVENT") return ::Ifc4x3_add2::IfcReferentTypeEnum::IfcReferentType_WIDTHEVENT; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcReferentTypeEnum::IfcReferentType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcReferentTypeEnum::IfcReferentType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcReferentTypeEnum::operator Ifc4x3_add2::IfcReferentTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcReflectanceMethodEnum::declaration() const { return *IFC4X3_ADD2_IfcReflectanceMethodEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcReflectanceMethodEnum::Class() { return *IFC4X3_ADD2_IfcReflectanceMethodEnum_type; } + +Ifc4x3_add2::IfcReflectanceMethodEnum::IfcReflectanceMethodEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcReflectanceMethodEnum::IfcReflectanceMethodEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReflectanceMethodEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcReflectanceMethodEnum::IfcReflectanceMethodEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReflectanceMethodEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcReflectanceMethodEnum::ToString(Value v) { + if ( v < 0 || v >= 11 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BLINN", "FLAT", "GLASS", "MATT", "METAL", "MIRROR", "PHONG", "PHYSICAL", "PLASTIC", "STRAUSS", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcReflectanceMethodEnum::Value Ifc4x3_add2::IfcReflectanceMethodEnum::FromString(const std::string& s) { + if (s == "BLINN") return ::Ifc4x3_add2::IfcReflectanceMethodEnum::IfcReflectanceMethod_BLINN; + if (s == "FLAT") return ::Ifc4x3_add2::IfcReflectanceMethodEnum::IfcReflectanceMethod_FLAT; + if (s == "GLASS") return ::Ifc4x3_add2::IfcReflectanceMethodEnum::IfcReflectanceMethod_GLASS; + if (s == "MATT") return ::Ifc4x3_add2::IfcReflectanceMethodEnum::IfcReflectanceMethod_MATT; + if (s == "METAL") return ::Ifc4x3_add2::IfcReflectanceMethodEnum::IfcReflectanceMethod_METAL; + if (s == "MIRROR") return ::Ifc4x3_add2::IfcReflectanceMethodEnum::IfcReflectanceMethod_MIRROR; + if (s == "PHONG") return ::Ifc4x3_add2::IfcReflectanceMethodEnum::IfcReflectanceMethod_PHONG; + if (s == "PHYSICAL") return ::Ifc4x3_add2::IfcReflectanceMethodEnum::IfcReflectanceMethod_PHYSICAL; + if (s == "PLASTIC") return ::Ifc4x3_add2::IfcReflectanceMethodEnum::IfcReflectanceMethod_PLASTIC; + if (s == "STRAUSS") return ::Ifc4x3_add2::IfcReflectanceMethodEnum::IfcReflectanceMethod_STRAUSS; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcReflectanceMethodEnum::IfcReflectanceMethod_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcReflectanceMethodEnum::operator Ifc4x3_add2::IfcReflectanceMethodEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcReinforcedSoilTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcReinforcedSoilTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcReinforcedSoilTypeEnum::Class() { return *IFC4X3_ADD2_IfcReinforcedSoilTypeEnum_type; } + +Ifc4x3_add2::IfcReinforcedSoilTypeEnum::IfcReinforcedSoilTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcReinforcedSoilTypeEnum::IfcReinforcedSoilTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReinforcedSoilTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcReinforcedSoilTypeEnum::IfcReinforcedSoilTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReinforcedSoilTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcReinforcedSoilTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 8 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "DYNAMICALLYCOMPACTED", "GROUTED", "REPLACED", "ROLLERCOMPACTED", "SURCHARGEPRELOADED", "VERTICALLYDRAINED", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcReinforcedSoilTypeEnum::Value Ifc4x3_add2::IfcReinforcedSoilTypeEnum::FromString(const std::string& s) { + if (s == "DYNAMICALLYCOMPACTED") return ::Ifc4x3_add2::IfcReinforcedSoilTypeEnum::IfcReinforcedSoilType_DYNAMICALLYCOMPACTED; + if (s == "GROUTED") return ::Ifc4x3_add2::IfcReinforcedSoilTypeEnum::IfcReinforcedSoilType_GROUTED; + if (s == "REPLACED") return ::Ifc4x3_add2::IfcReinforcedSoilTypeEnum::IfcReinforcedSoilType_REPLACED; + if (s == "ROLLERCOMPACTED") return ::Ifc4x3_add2::IfcReinforcedSoilTypeEnum::IfcReinforcedSoilType_ROLLERCOMPACTED; + if (s == "SURCHARGEPRELOADED") return ::Ifc4x3_add2::IfcReinforcedSoilTypeEnum::IfcReinforcedSoilType_SURCHARGEPRELOADED; + if (s == "VERTICALLYDRAINED") return ::Ifc4x3_add2::IfcReinforcedSoilTypeEnum::IfcReinforcedSoilType_VERTICALLYDRAINED; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcReinforcedSoilTypeEnum::IfcReinforcedSoilType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcReinforcedSoilTypeEnum::IfcReinforcedSoilType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcReinforcedSoilTypeEnum::operator Ifc4x3_add2::IfcReinforcedSoilTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcReinforcingBarRoleEnum::declaration() const { return *IFC4X3_ADD2_IfcReinforcingBarRoleEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcReinforcingBarRoleEnum::Class() { return *IFC4X3_ADD2_IfcReinforcingBarRoleEnum_type; } + +Ifc4x3_add2::IfcReinforcingBarRoleEnum::IfcReinforcingBarRoleEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcReinforcingBarRoleEnum::IfcReinforcingBarRoleEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReinforcingBarRoleEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcReinforcingBarRoleEnum::IfcReinforcingBarRoleEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReinforcingBarRoleEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcReinforcingBarRoleEnum::ToString(Value v) { + if ( v < 0 || v >= 10 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ANCHORING", "EDGE", "LIGATURE", "MAIN", "PUNCHING", "RING", "SHEAR", "STUD", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcReinforcingBarRoleEnum::Value Ifc4x3_add2::IfcReinforcingBarRoleEnum::FromString(const std::string& s) { + if (s == "ANCHORING") return ::Ifc4x3_add2::IfcReinforcingBarRoleEnum::IfcReinforcingBarRole_ANCHORING; + if (s == "EDGE") return ::Ifc4x3_add2::IfcReinforcingBarRoleEnum::IfcReinforcingBarRole_EDGE; + if (s == "LIGATURE") return ::Ifc4x3_add2::IfcReinforcingBarRoleEnum::IfcReinforcingBarRole_LIGATURE; + if (s == "MAIN") return ::Ifc4x3_add2::IfcReinforcingBarRoleEnum::IfcReinforcingBarRole_MAIN; + if (s == "PUNCHING") return ::Ifc4x3_add2::IfcReinforcingBarRoleEnum::IfcReinforcingBarRole_PUNCHING; + if (s == "RING") return ::Ifc4x3_add2::IfcReinforcingBarRoleEnum::IfcReinforcingBarRole_RING; + if (s == "SHEAR") return ::Ifc4x3_add2::IfcReinforcingBarRoleEnum::IfcReinforcingBarRole_SHEAR; + if (s == "STUD") return ::Ifc4x3_add2::IfcReinforcingBarRoleEnum::IfcReinforcingBarRole_STUD; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcReinforcingBarRoleEnum::IfcReinforcingBarRole_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcReinforcingBarRoleEnum::IfcReinforcingBarRole_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcReinforcingBarRoleEnum::operator Ifc4x3_add2::IfcReinforcingBarRoleEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::declaration() const { return *IFC4X3_ADD2_IfcReinforcingBarSurfaceEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::Class() { return *IFC4X3_ADD2_IfcReinforcingBarSurfaceEnum_type; } + +Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::IfcReinforcingBarSurfaceEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::IfcReinforcingBarSurfaceEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReinforcingBarSurfaceEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::IfcReinforcingBarSurfaceEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReinforcingBarSurfaceEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::ToString(Value v) { + if ( v < 0 || v >= 2 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "PLAIN", "TEXTURED" }; + return names[v]; +} + +Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::Value Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::FromString(const std::string& s) { + if (s == "PLAIN") return ::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::IfcReinforcingBarSurface_PLAIN; + if (s == "TEXTURED") return ::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::IfcReinforcingBarSurface_TEXTURED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::operator Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcReinforcingBarTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcReinforcingBarTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcReinforcingBarTypeEnum::Class() { return *IFC4X3_ADD2_IfcReinforcingBarTypeEnum_type; } + +Ifc4x3_add2::IfcReinforcingBarTypeEnum::IfcReinforcingBarTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcReinforcingBarTypeEnum::IfcReinforcingBarTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReinforcingBarTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcReinforcingBarTypeEnum::IfcReinforcingBarTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReinforcingBarTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcReinforcingBarTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 11 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ANCHORING", "EDGE", "LIGATURE", "MAIN", "PUNCHING", "RING", "SHEAR", "SPACEBAR", "STUD", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcReinforcingBarTypeEnum::Value Ifc4x3_add2::IfcReinforcingBarTypeEnum::FromString(const std::string& s) { + if (s == "ANCHORING") return ::Ifc4x3_add2::IfcReinforcingBarTypeEnum::IfcReinforcingBarType_ANCHORING; + if (s == "EDGE") return ::Ifc4x3_add2::IfcReinforcingBarTypeEnum::IfcReinforcingBarType_EDGE; + if (s == "LIGATURE") return ::Ifc4x3_add2::IfcReinforcingBarTypeEnum::IfcReinforcingBarType_LIGATURE; + if (s == "MAIN") return ::Ifc4x3_add2::IfcReinforcingBarTypeEnum::IfcReinforcingBarType_MAIN; + if (s == "PUNCHING") return ::Ifc4x3_add2::IfcReinforcingBarTypeEnum::IfcReinforcingBarType_PUNCHING; + if (s == "RING") return ::Ifc4x3_add2::IfcReinforcingBarTypeEnum::IfcReinforcingBarType_RING; + if (s == "SHEAR") return ::Ifc4x3_add2::IfcReinforcingBarTypeEnum::IfcReinforcingBarType_SHEAR; + if (s == "SPACEBAR") return ::Ifc4x3_add2::IfcReinforcingBarTypeEnum::IfcReinforcingBarType_SPACEBAR; + if (s == "STUD") return ::Ifc4x3_add2::IfcReinforcingBarTypeEnum::IfcReinforcingBarType_STUD; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcReinforcingBarTypeEnum::IfcReinforcingBarType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcReinforcingBarTypeEnum::IfcReinforcingBarType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcReinforcingBarTypeEnum::operator Ifc4x3_add2::IfcReinforcingBarTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcReinforcingMeshTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcReinforcingMeshTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcReinforcingMeshTypeEnum::Class() { return *IFC4X3_ADD2_IfcReinforcingMeshTypeEnum_type; } + +Ifc4x3_add2::IfcReinforcingMeshTypeEnum::IfcReinforcingMeshTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcReinforcingMeshTypeEnum::IfcReinforcingMeshTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReinforcingMeshTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcReinforcingMeshTypeEnum::IfcReinforcingMeshTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReinforcingMeshTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcReinforcingMeshTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 2 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcReinforcingMeshTypeEnum::Value Ifc4x3_add2::IfcReinforcingMeshTypeEnum::FromString(const std::string& s) { + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcReinforcingMeshTypeEnum::IfcReinforcingMeshType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcReinforcingMeshTypeEnum::IfcReinforcingMeshType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcReinforcingMeshTypeEnum::operator Ifc4x3_add2::IfcReinforcingMeshTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcRoadPartTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcRoadPartTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcRoadPartTypeEnum::Class() { return *IFC4X3_ADD2_IfcRoadPartTypeEnum_type; } + +Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRoadPartTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRoadPartTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcRoadPartTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 26 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BICYCLECROSSING", "BUS_STOP", "CARRIAGEWAY", "CENTRALISLAND", "CENTRALRESERVE", "HARDSHOULDER", "INTERSECTION", "LAYBY", "PARKINGBAY", "PASSINGBAY", "PEDESTRIAN_CROSSING", "RAILWAYCROSSING", "REFUGEISLAND", "ROADSEGMENT", "ROADSIDE", "ROADSIDEPART", "ROADWAYPLATEAU", "ROUNDABOUT", "SHOULDER", "SIDEWALK", "SOFTSHOULDER", "TOLLPLAZA", "TRAFFICISLAND", "TRAFFICLANE", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcRoadPartTypeEnum::Value Ifc4x3_add2::IfcRoadPartTypeEnum::FromString(const std::string& s) { + if (s == "BICYCLECROSSING") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_BICYCLECROSSING; + if (s == "BUS_STOP") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_BUS_STOP; + if (s == "CARRIAGEWAY") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_CARRIAGEWAY; + if (s == "CENTRALISLAND") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_CENTRALISLAND; + if (s == "CENTRALRESERVE") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_CENTRALRESERVE; + if (s == "HARDSHOULDER") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_HARDSHOULDER; + if (s == "INTERSECTION") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_INTERSECTION; + if (s == "LAYBY") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_LAYBY; + if (s == "PARKINGBAY") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_PARKINGBAY; + if (s == "PASSINGBAY") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_PASSINGBAY; + if (s == "PEDESTRIAN_CROSSING") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_PEDESTRIAN_CROSSING; + if (s == "RAILWAYCROSSING") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_RAILWAYCROSSING; + if (s == "REFUGEISLAND") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_REFUGEISLAND; + if (s == "ROADSEGMENT") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_ROADSEGMENT; + if (s == "ROADSIDE") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_ROADSIDE; + if (s == "ROADSIDEPART") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_ROADSIDEPART; + if (s == "ROADWAYPLATEAU") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_ROADWAYPLATEAU; + if (s == "ROUNDABOUT") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_ROUNDABOUT; + if (s == "SHOULDER") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_SHOULDER; + if (s == "SIDEWALK") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_SIDEWALK; + if (s == "SOFTSHOULDER") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_SOFTSHOULDER; + if (s == "TOLLPLAZA") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_TOLLPLAZA; + if (s == "TRAFFICISLAND") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_TRAFFICISLAND; + if (s == "TRAFFICLANE") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_TRAFFICLANE; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcRoadPartTypeEnum::IfcRoadPartType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcRoadPartTypeEnum::operator Ifc4x3_add2::IfcRoadPartTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcRoadTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcRoadTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcRoadTypeEnum::Class() { return *IFC4X3_ADD2_IfcRoadTypeEnum_type; } + +Ifc4x3_add2::IfcRoadTypeEnum::IfcRoadTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcRoadTypeEnum::IfcRoadTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRoadTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcRoadTypeEnum::IfcRoadTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRoadTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcRoadTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 2 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcRoadTypeEnum::Value Ifc4x3_add2::IfcRoadTypeEnum::FromString(const std::string& s) { + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcRoadTypeEnum::IfcRoadType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcRoadTypeEnum::IfcRoadType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcRoadTypeEnum::operator Ifc4x3_add2::IfcRoadTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcRoleEnum::declaration() const { return *IFC4X3_ADD2_IfcRoleEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcRoleEnum::Class() { return *IFC4X3_ADD2_IfcRoleEnum_type; } + +Ifc4x3_add2::IfcRoleEnum::IfcRoleEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcRoleEnum::IfcRoleEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRoleEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcRoleEnum::IfcRoleEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRoleEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcRoleEnum::ToString(Value v) { + if ( v < 0 || v >= 23 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ARCHITECT", "BUILDINGOPERATOR", "BUILDINGOWNER", "CIVILENGINEER", "CLIENT", "COMMISSIONINGENGINEER", "CONSTRUCTIONMANAGER", "CONSULTANT", "CONTRACTOR", "COSTENGINEER", "ELECTRICALENGINEER", "ENGINEER", "FACILITIESMANAGER", "FIELDCONSTRUCTIONMANAGER", "MANUFACTURER", "MECHANICALENGINEER", "OWNER", "PROJECTMANAGER", "RESELLER", "STRUCTURALENGINEER", "SUBCONTRACTOR", "SUPPLIER", "USERDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcRoleEnum::Value Ifc4x3_add2::IfcRoleEnum::FromString(const std::string& s) { + if (s == "ARCHITECT") return ::Ifc4x3_add2::IfcRoleEnum::IfcRole_ARCHITECT; + if (s == "BUILDINGOPERATOR") return ::Ifc4x3_add2::IfcRoleEnum::IfcRole_BUILDINGOPERATOR; + if (s == "BUILDINGOWNER") return ::Ifc4x3_add2::IfcRoleEnum::IfcRole_BUILDINGOWNER; + if (s == "CIVILENGINEER") return ::Ifc4x3_add2::IfcRoleEnum::IfcRole_CIVILENGINEER; + if (s == "CLIENT") return ::Ifc4x3_add2::IfcRoleEnum::IfcRole_CLIENT; + if (s == "COMMISSIONINGENGINEER") return ::Ifc4x3_add2::IfcRoleEnum::IfcRole_COMMISSIONINGENGINEER; + if (s == "CONSTRUCTIONMANAGER") return ::Ifc4x3_add2::IfcRoleEnum::IfcRole_CONSTRUCTIONMANAGER; + if (s == "CONSULTANT") return ::Ifc4x3_add2::IfcRoleEnum::IfcRole_CONSULTANT; + if (s == "CONTRACTOR") return ::Ifc4x3_add2::IfcRoleEnum::IfcRole_CONTRACTOR; + if (s == "COSTENGINEER") return ::Ifc4x3_add2::IfcRoleEnum::IfcRole_COSTENGINEER; + if (s == "ELECTRICALENGINEER") return ::Ifc4x3_add2::IfcRoleEnum::IfcRole_ELECTRICALENGINEER; + if (s == "ENGINEER") return ::Ifc4x3_add2::IfcRoleEnum::IfcRole_ENGINEER; + if (s == "FACILITIESMANAGER") return ::Ifc4x3_add2::IfcRoleEnum::IfcRole_FACILITIESMANAGER; + if (s == "FIELDCONSTRUCTIONMANAGER") return ::Ifc4x3_add2::IfcRoleEnum::IfcRole_FIELDCONSTRUCTIONMANAGER; + if (s == "MANUFACTURER") return ::Ifc4x3_add2::IfcRoleEnum::IfcRole_MANUFACTURER; + if (s == "MECHANICALENGINEER") return ::Ifc4x3_add2::IfcRoleEnum::IfcRole_MECHANICALENGINEER; + if (s == "OWNER") return ::Ifc4x3_add2::IfcRoleEnum::IfcRole_OWNER; + if (s == "PROJECTMANAGER") return ::Ifc4x3_add2::IfcRoleEnum::IfcRole_PROJECTMANAGER; + if (s == "RESELLER") return ::Ifc4x3_add2::IfcRoleEnum::IfcRole_RESELLER; + if (s == "STRUCTURALENGINEER") return ::Ifc4x3_add2::IfcRoleEnum::IfcRole_STRUCTURALENGINEER; + if (s == "SUBCONTRACTOR") return ::Ifc4x3_add2::IfcRoleEnum::IfcRole_SUBCONTRACTOR; + if (s == "SUPPLIER") return ::Ifc4x3_add2::IfcRoleEnum::IfcRole_SUPPLIER; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcRoleEnum::IfcRole_USERDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcRoleEnum::operator Ifc4x3_add2::IfcRoleEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcRoofTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcRoofTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcRoofTypeEnum::Class() { return *IFC4X3_ADD2_IfcRoofTypeEnum_type; } + +Ifc4x3_add2::IfcRoofTypeEnum::IfcRoofTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcRoofTypeEnum::IfcRoofTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRoofTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcRoofTypeEnum::IfcRoofTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRoofTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcRoofTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 15 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BARREL_ROOF", "BUTTERFLY_ROOF", "DOME_ROOF", "FLAT_ROOF", "FREEFORM", "GABLE_ROOF", "GAMBREL_ROOF", "HIPPED_GABLE_ROOF", "HIP_ROOF", "MANSARD_ROOF", "PAVILION_ROOF", "RAINBOW_ROOF", "SHED_ROOF", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcRoofTypeEnum::Value Ifc4x3_add2::IfcRoofTypeEnum::FromString(const std::string& s) { + if (s == "BARREL_ROOF") return ::Ifc4x3_add2::IfcRoofTypeEnum::IfcRoofType_BARREL_ROOF; + if (s == "BUTTERFLY_ROOF") return ::Ifc4x3_add2::IfcRoofTypeEnum::IfcRoofType_BUTTERFLY_ROOF; + if (s == "DOME_ROOF") return ::Ifc4x3_add2::IfcRoofTypeEnum::IfcRoofType_DOME_ROOF; + if (s == "FLAT_ROOF") return ::Ifc4x3_add2::IfcRoofTypeEnum::IfcRoofType_FLAT_ROOF; + if (s == "FREEFORM") return ::Ifc4x3_add2::IfcRoofTypeEnum::IfcRoofType_FREEFORM; + if (s == "GABLE_ROOF") return ::Ifc4x3_add2::IfcRoofTypeEnum::IfcRoofType_GABLE_ROOF; + if (s == "GAMBREL_ROOF") return ::Ifc4x3_add2::IfcRoofTypeEnum::IfcRoofType_GAMBREL_ROOF; + if (s == "HIPPED_GABLE_ROOF") return ::Ifc4x3_add2::IfcRoofTypeEnum::IfcRoofType_HIPPED_GABLE_ROOF; + if (s == "HIP_ROOF") return ::Ifc4x3_add2::IfcRoofTypeEnum::IfcRoofType_HIP_ROOF; + if (s == "MANSARD_ROOF") return ::Ifc4x3_add2::IfcRoofTypeEnum::IfcRoofType_MANSARD_ROOF; + if (s == "PAVILION_ROOF") return ::Ifc4x3_add2::IfcRoofTypeEnum::IfcRoofType_PAVILION_ROOF; + if (s == "RAINBOW_ROOF") return ::Ifc4x3_add2::IfcRoofTypeEnum::IfcRoofType_RAINBOW_ROOF; + if (s == "SHED_ROOF") return ::Ifc4x3_add2::IfcRoofTypeEnum::IfcRoofType_SHED_ROOF; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcRoofTypeEnum::IfcRoofType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcRoofTypeEnum::IfcRoofType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcRoofTypeEnum::operator Ifc4x3_add2::IfcRoofTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSIPrefix::declaration() const { return *IFC4X3_ADD2_IfcSIPrefix_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSIPrefix::Class() { return *IFC4X3_ADD2_IfcSIPrefix_type; } + +Ifc4x3_add2::IfcSIPrefix::IfcSIPrefix(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcSIPrefix::IfcSIPrefix(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSIPrefix_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcSIPrefix::IfcSIPrefix(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSIPrefix_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcSIPrefix::ToString(Value v) { + if ( v < 0 || v >= 16 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ATTO", "CENTI", "DECA", "DECI", "EXA", "FEMTO", "GIGA", "HECTO", "KILO", "MEGA", "MICRO", "MILLI", "NANO", "PETA", "PICO", "TERA" }; + return names[v]; +} + +Ifc4x3_add2::IfcSIPrefix::Value Ifc4x3_add2::IfcSIPrefix::FromString(const std::string& s) { + if (s == "ATTO") return ::Ifc4x3_add2::IfcSIPrefix::IfcSIPrefix_ATTO; + if (s == "CENTI") return ::Ifc4x3_add2::IfcSIPrefix::IfcSIPrefix_CENTI; + if (s == "DECA") return ::Ifc4x3_add2::IfcSIPrefix::IfcSIPrefix_DECA; + if (s == "DECI") return ::Ifc4x3_add2::IfcSIPrefix::IfcSIPrefix_DECI; + if (s == "EXA") return ::Ifc4x3_add2::IfcSIPrefix::IfcSIPrefix_EXA; + if (s == "FEMTO") return ::Ifc4x3_add2::IfcSIPrefix::IfcSIPrefix_FEMTO; + if (s == "GIGA") return ::Ifc4x3_add2::IfcSIPrefix::IfcSIPrefix_GIGA; + if (s == "HECTO") return ::Ifc4x3_add2::IfcSIPrefix::IfcSIPrefix_HECTO; + if (s == "KILO") return ::Ifc4x3_add2::IfcSIPrefix::IfcSIPrefix_KILO; + if (s == "MEGA") return ::Ifc4x3_add2::IfcSIPrefix::IfcSIPrefix_MEGA; + if (s == "MICRO") return ::Ifc4x3_add2::IfcSIPrefix::IfcSIPrefix_MICRO; + if (s == "MILLI") return ::Ifc4x3_add2::IfcSIPrefix::IfcSIPrefix_MILLI; + if (s == "NANO") return ::Ifc4x3_add2::IfcSIPrefix::IfcSIPrefix_NANO; + if (s == "PETA") return ::Ifc4x3_add2::IfcSIPrefix::IfcSIPrefix_PETA; + if (s == "PICO") return ::Ifc4x3_add2::IfcSIPrefix::IfcSIPrefix_PICO; + if (s == "TERA") return ::Ifc4x3_add2::IfcSIPrefix::IfcSIPrefix_TERA; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcSIPrefix::operator Ifc4x3_add2::IfcSIPrefix::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSIUnitName::declaration() const { return *IFC4X3_ADD2_IfcSIUnitName_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSIUnitName::Class() { return *IFC4X3_ADD2_IfcSIUnitName_type; } + +Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSIUnitName_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSIUnitName_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcSIUnitName::ToString(Value v) { + if ( v < 0 || v >= 30 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "AMPERE", "BECQUEREL", "CANDELA", "COULOMB", "CUBIC_METRE", "DEGREE_CELSIUS", "FARAD", "GRAM", "GRAY", "HENRY", "HERTZ", "JOULE", "KELVIN", "LUMEN", "LUX", "METRE", "MOLE", "NEWTON", "OHM", "PASCAL", "RADIAN", "SECOND", "SIEMENS", "SIEVERT", "SQUARE_METRE", "STERADIAN", "TESLA", "VOLT", "WATT", "WEBER" }; + return names[v]; +} + +Ifc4x3_add2::IfcSIUnitName::Value Ifc4x3_add2::IfcSIUnitName::FromString(const std::string& s) { + if (s == "AMPERE") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_AMPERE; + if (s == "BECQUEREL") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_BECQUEREL; + if (s == "CANDELA") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_CANDELA; + if (s == "COULOMB") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_COULOMB; + if (s == "CUBIC_METRE") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_CUBIC_METRE; + if (s == "DEGREE_CELSIUS") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_DEGREE_CELSIUS; + if (s == "FARAD") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_FARAD; + if (s == "GRAM") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_GRAM; + if (s == "GRAY") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_GRAY; + if (s == "HENRY") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_HENRY; + if (s == "HERTZ") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_HERTZ; + if (s == "JOULE") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_JOULE; + if (s == "KELVIN") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_KELVIN; + if (s == "LUMEN") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_LUMEN; + if (s == "LUX") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_LUX; + if (s == "METRE") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_METRE; + if (s == "MOLE") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_MOLE; + if (s == "NEWTON") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_NEWTON; + if (s == "OHM") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_OHM; + if (s == "PASCAL") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_PASCAL; + if (s == "RADIAN") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_RADIAN; + if (s == "SECOND") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_SECOND; + if (s == "SIEMENS") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_SIEMENS; + if (s == "SIEVERT") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_SIEVERT; + if (s == "SQUARE_METRE") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_SQUARE_METRE; + if (s == "STERADIAN") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_STERADIAN; + if (s == "TESLA") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_TESLA; + if (s == "VOLT") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_VOLT; + if (s == "WATT") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_WATT; + if (s == "WEBER") return ::Ifc4x3_add2::IfcSIUnitName::IfcSIUnitName_WEBER; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcSIUnitName::operator Ifc4x3_add2::IfcSIUnitName::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcSanitaryTerminalTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::Class() { return *IFC4X3_ADD2_IfcSanitaryTerminalTypeEnum_type; } + +Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::IfcSanitaryTerminalTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::IfcSanitaryTerminalTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSanitaryTerminalTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::IfcSanitaryTerminalTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSanitaryTerminalTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 12 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BATH", "BIDET", "CISTERN", "SANITARYFOUNTAIN", "SHOWER", "SINK", "TOILETPAN", "URINAL", "WASHHANDBASIN", "WCSEAT", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::Value Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::FromString(const std::string& s) { + if (s == "BATH") return ::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::IfcSanitaryTerminalType_BATH; + if (s == "BIDET") return ::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::IfcSanitaryTerminalType_BIDET; + if (s == "CISTERN") return ::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::IfcSanitaryTerminalType_CISTERN; + if (s == "SANITARYFOUNTAIN") return ::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::IfcSanitaryTerminalType_SANITARYFOUNTAIN; + if (s == "SHOWER") return ::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::IfcSanitaryTerminalType_SHOWER; + if (s == "SINK") return ::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::IfcSanitaryTerminalType_SINK; + if (s == "TOILETPAN") return ::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::IfcSanitaryTerminalType_TOILETPAN; + if (s == "URINAL") return ::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::IfcSanitaryTerminalType_URINAL; + if (s == "WASHHANDBASIN") return ::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::IfcSanitaryTerminalType_WASHHANDBASIN; + if (s == "WCSEAT") return ::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::IfcSanitaryTerminalType_WCSEAT; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::IfcSanitaryTerminalType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::IfcSanitaryTerminalType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::operator Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSectionTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcSectionTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSectionTypeEnum::Class() { return *IFC4X3_ADD2_IfcSectionTypeEnum_type; } + +Ifc4x3_add2::IfcSectionTypeEnum::IfcSectionTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcSectionTypeEnum::IfcSectionTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSectionTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcSectionTypeEnum::IfcSectionTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSectionTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcSectionTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 2 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "TAPERED", "UNIFORM" }; + return names[v]; +} + +Ifc4x3_add2::IfcSectionTypeEnum::Value Ifc4x3_add2::IfcSectionTypeEnum::FromString(const std::string& s) { + if (s == "TAPERED") return ::Ifc4x3_add2::IfcSectionTypeEnum::IfcSectionType_TAPERED; + if (s == "UNIFORM") return ::Ifc4x3_add2::IfcSectionTypeEnum::IfcSectionType_UNIFORM; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcSectionTypeEnum::operator Ifc4x3_add2::IfcSectionTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSensorTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcSensorTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSensorTypeEnum::Class() { return *IFC4X3_ADD2_IfcSensorTypeEnum_type; } + +Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSensorTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSensorTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcSensorTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 34 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CO2SENSOR", "CONDUCTANCESENSOR", "CONTACTSENSOR", "COSENSOR", "EARTHQUAKESENSOR", "FIRESENSOR", "FLOWSENSOR", "FOREIGNOBJECTDETECTIONSENSOR", "FROSTSENSOR", "GASSENSOR", "HEATSENSOR", "HUMIDITYSENSOR", "IDENTIFIERSENSOR", "IONCONCENTRATIONSENSOR", "LEVELSENSOR", "LIGHTSENSOR", "MOISTURESENSOR", "MOVEMENTSENSOR", "OBSTACLESENSOR", "PHSENSOR", "PRESSURESENSOR", "RADIATIONSENSOR", "RADIOACTIVITYSENSOR", "RAINSENSOR", "SMOKESENSOR", "SNOWDEPTHSENSOR", "SOUNDSENSOR", "TEMPERATURESENSOR", "TRAINSENSOR", "TURNOUTCLOSURESENSOR", "WHEELSENSOR", "WINDSENSOR", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcSensorTypeEnum::Value Ifc4x3_add2::IfcSensorTypeEnum::FromString(const std::string& s) { + if (s == "CO2SENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_CO2SENSOR; + if (s == "CONDUCTANCESENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_CONDUCTANCESENSOR; + if (s == "CONTACTSENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_CONTACTSENSOR; + if (s == "COSENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_COSENSOR; + if (s == "EARTHQUAKESENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_EARTHQUAKESENSOR; + if (s == "FIRESENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_FIRESENSOR; + if (s == "FLOWSENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_FLOWSENSOR; + if (s == "FOREIGNOBJECTDETECTIONSENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_FOREIGNOBJECTDETECTIONSENSOR; + if (s == "FROSTSENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_FROSTSENSOR; + if (s == "GASSENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_GASSENSOR; + if (s == "HEATSENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_HEATSENSOR; + if (s == "HUMIDITYSENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_HUMIDITYSENSOR; + if (s == "IDENTIFIERSENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_IDENTIFIERSENSOR; + if (s == "IONCONCENTRATIONSENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_IONCONCENTRATIONSENSOR; + if (s == "LEVELSENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_LEVELSENSOR; + if (s == "LIGHTSENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_LIGHTSENSOR; + if (s == "MOISTURESENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_MOISTURESENSOR; + if (s == "MOVEMENTSENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_MOVEMENTSENSOR; + if (s == "OBSTACLESENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_OBSTACLESENSOR; + if (s == "PHSENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_PHSENSOR; + if (s == "PRESSURESENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_PRESSURESENSOR; + if (s == "RADIATIONSENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_RADIATIONSENSOR; + if (s == "RADIOACTIVITYSENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_RADIOACTIVITYSENSOR; + if (s == "RAINSENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_RAINSENSOR; + if (s == "SMOKESENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_SMOKESENSOR; + if (s == "SNOWDEPTHSENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_SNOWDEPTHSENSOR; + if (s == "SOUNDSENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_SOUNDSENSOR; + if (s == "TEMPERATURESENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_TEMPERATURESENSOR; + if (s == "TRAINSENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_TRAINSENSOR; + if (s == "TURNOUTCLOSURESENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_TURNOUTCLOSURESENSOR; + if (s == "WHEELSENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_WHEELSENSOR; + if (s == "WINDSENSOR") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_WINDSENSOR; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcSensorTypeEnum::IfcSensorType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcSensorTypeEnum::operator Ifc4x3_add2::IfcSensorTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSequenceEnum::declaration() const { return *IFC4X3_ADD2_IfcSequenceEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSequenceEnum::Class() { return *IFC4X3_ADD2_IfcSequenceEnum_type; } + +Ifc4x3_add2::IfcSequenceEnum::IfcSequenceEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcSequenceEnum::IfcSequenceEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSequenceEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcSequenceEnum::IfcSequenceEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSequenceEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcSequenceEnum::ToString(Value v) { + if ( v < 0 || v >= 6 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "FINISH_FINISH", "FINISH_START", "START_FINISH", "START_START", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcSequenceEnum::Value Ifc4x3_add2::IfcSequenceEnum::FromString(const std::string& s) { + if (s == "FINISH_FINISH") return ::Ifc4x3_add2::IfcSequenceEnum::IfcSequence_FINISH_FINISH; + if (s == "FINISH_START") return ::Ifc4x3_add2::IfcSequenceEnum::IfcSequence_FINISH_START; + if (s == "START_FINISH") return ::Ifc4x3_add2::IfcSequenceEnum::IfcSequence_START_FINISH; + if (s == "START_START") return ::Ifc4x3_add2::IfcSequenceEnum::IfcSequence_START_START; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcSequenceEnum::IfcSequence_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcSequenceEnum::IfcSequence_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcSequenceEnum::operator Ifc4x3_add2::IfcSequenceEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcShadingDeviceTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcShadingDeviceTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcShadingDeviceTypeEnum::Class() { return *IFC4X3_ADD2_IfcShadingDeviceTypeEnum_type; } + +Ifc4x3_add2::IfcShadingDeviceTypeEnum::IfcShadingDeviceTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcShadingDeviceTypeEnum::IfcShadingDeviceTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcShadingDeviceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcShadingDeviceTypeEnum::IfcShadingDeviceTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcShadingDeviceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcShadingDeviceTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "AWNING", "JALOUSIE", "SHUTTER", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcShadingDeviceTypeEnum::Value Ifc4x3_add2::IfcShadingDeviceTypeEnum::FromString(const std::string& s) { + if (s == "AWNING") return ::Ifc4x3_add2::IfcShadingDeviceTypeEnum::IfcShadingDeviceType_AWNING; + if (s == "JALOUSIE") return ::Ifc4x3_add2::IfcShadingDeviceTypeEnum::IfcShadingDeviceType_JALOUSIE; + if (s == "SHUTTER") return ::Ifc4x3_add2::IfcShadingDeviceTypeEnum::IfcShadingDeviceType_SHUTTER; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcShadingDeviceTypeEnum::IfcShadingDeviceType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcShadingDeviceTypeEnum::IfcShadingDeviceType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcShadingDeviceTypeEnum::operator Ifc4x3_add2::IfcShadingDeviceTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSignTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcSignTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSignTypeEnum::Class() { return *IFC4X3_ADD2_IfcSignTypeEnum_type; } + +Ifc4x3_add2::IfcSignTypeEnum::IfcSignTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcSignTypeEnum::IfcSignTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSignTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcSignTypeEnum::IfcSignTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSignTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcSignTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "MARKER", "MIRROR", "PICTORAL", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcSignTypeEnum::Value Ifc4x3_add2::IfcSignTypeEnum::FromString(const std::string& s) { + if (s == "MARKER") return ::Ifc4x3_add2::IfcSignTypeEnum::IfcSignType_MARKER; + if (s == "MIRROR") return ::Ifc4x3_add2::IfcSignTypeEnum::IfcSignType_MIRROR; + if (s == "PICTORAL") return ::Ifc4x3_add2::IfcSignTypeEnum::IfcSignType_PICTORAL; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcSignTypeEnum::IfcSignType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcSignTypeEnum::IfcSignType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcSignTypeEnum::operator Ifc4x3_add2::IfcSignTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSignalTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcSignalTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSignalTypeEnum::Class() { return *IFC4X3_ADD2_IfcSignalTypeEnum_type; } + +Ifc4x3_add2::IfcSignalTypeEnum::IfcSignalTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcSignalTypeEnum::IfcSignalTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSignalTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcSignalTypeEnum::IfcSignalTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSignalTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcSignalTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "AUDIO", "MIXED", "VISUAL", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcSignalTypeEnum::Value Ifc4x3_add2::IfcSignalTypeEnum::FromString(const std::string& s) { + if (s == "AUDIO") return ::Ifc4x3_add2::IfcSignalTypeEnum::IfcSignalType_AUDIO; + if (s == "MIXED") return ::Ifc4x3_add2::IfcSignalTypeEnum::IfcSignalType_MIXED; + if (s == "VISUAL") return ::Ifc4x3_add2::IfcSignalTypeEnum::IfcSignalType_VISUAL; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcSignalTypeEnum::IfcSignalType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcSignalTypeEnum::IfcSignalType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcSignalTypeEnum::operator Ifc4x3_add2::IfcSignalTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcSimplePropertyTemplateTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::Class() { return *IFC4X3_ADD2_IfcSimplePropertyTemplateTypeEnum_type; } + +Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::IfcSimplePropertyTemplateTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::IfcSimplePropertyTemplateTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSimplePropertyTemplateTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::IfcSimplePropertyTemplateTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSimplePropertyTemplateTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 13 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "P_BOUNDEDVALUE", "P_ENUMERATEDVALUE", "P_LISTVALUE", "P_REFERENCEVALUE", "P_SINGLEVALUE", "P_TABLEVALUE", "Q_AREA", "Q_COUNT", "Q_LENGTH", "Q_NUMBER", "Q_TIME", "Q_VOLUME", "Q_WEIGHT" }; + return names[v]; +} + +Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::Value Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::FromString(const std::string& s) { + if (s == "P_BOUNDEDVALUE") return ::Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::IfcSimplePropertyTemplateType_P_BOUNDEDVALUE; + if (s == "P_ENUMERATEDVALUE") return ::Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::IfcSimplePropertyTemplateType_P_ENUMERATEDVALUE; + if (s == "P_LISTVALUE") return ::Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::IfcSimplePropertyTemplateType_P_LISTVALUE; + if (s == "P_REFERENCEVALUE") return ::Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::IfcSimplePropertyTemplateType_P_REFERENCEVALUE; + if (s == "P_SINGLEVALUE") return ::Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::IfcSimplePropertyTemplateType_P_SINGLEVALUE; + if (s == "P_TABLEVALUE") return ::Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::IfcSimplePropertyTemplateType_P_TABLEVALUE; + if (s == "Q_AREA") return ::Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::IfcSimplePropertyTemplateType_Q_AREA; + if (s == "Q_COUNT") return ::Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::IfcSimplePropertyTemplateType_Q_COUNT; + if (s == "Q_LENGTH") return ::Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::IfcSimplePropertyTemplateType_Q_LENGTH; + if (s == "Q_NUMBER") return ::Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::IfcSimplePropertyTemplateType_Q_NUMBER; + if (s == "Q_TIME") return ::Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::IfcSimplePropertyTemplateType_Q_TIME; + if (s == "Q_VOLUME") return ::Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::IfcSimplePropertyTemplateType_Q_VOLUME; + if (s == "Q_WEIGHT") return ::Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::IfcSimplePropertyTemplateType_Q_WEIGHT; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::operator Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSlabTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcSlabTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSlabTypeEnum::Class() { return *IFC4X3_ADD2_IfcSlabTypeEnum_type; } + +Ifc4x3_add2::IfcSlabTypeEnum::IfcSlabTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcSlabTypeEnum::IfcSlabTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSlabTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcSlabTypeEnum::IfcSlabTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSlabTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcSlabTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 11 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "APPROACH_SLAB", "BASESLAB", "FLOOR", "LANDING", "PAVING", "ROOF", "SIDEWALK", "TRACKSLAB", "WEARING", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcSlabTypeEnum::Value Ifc4x3_add2::IfcSlabTypeEnum::FromString(const std::string& s) { + if (s == "APPROACH_SLAB") return ::Ifc4x3_add2::IfcSlabTypeEnum::IfcSlabType_APPROACH_SLAB; + if (s == "BASESLAB") return ::Ifc4x3_add2::IfcSlabTypeEnum::IfcSlabType_BASESLAB; + if (s == "FLOOR") return ::Ifc4x3_add2::IfcSlabTypeEnum::IfcSlabType_FLOOR; + if (s == "LANDING") return ::Ifc4x3_add2::IfcSlabTypeEnum::IfcSlabType_LANDING; + if (s == "PAVING") return ::Ifc4x3_add2::IfcSlabTypeEnum::IfcSlabType_PAVING; + if (s == "ROOF") return ::Ifc4x3_add2::IfcSlabTypeEnum::IfcSlabType_ROOF; + if (s == "SIDEWALK") return ::Ifc4x3_add2::IfcSlabTypeEnum::IfcSlabType_SIDEWALK; + if (s == "TRACKSLAB") return ::Ifc4x3_add2::IfcSlabTypeEnum::IfcSlabType_TRACKSLAB; + if (s == "WEARING") return ::Ifc4x3_add2::IfcSlabTypeEnum::IfcSlabType_WEARING; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcSlabTypeEnum::IfcSlabType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcSlabTypeEnum::IfcSlabType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcSlabTypeEnum::operator Ifc4x3_add2::IfcSlabTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSolarDeviceTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcSolarDeviceTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSolarDeviceTypeEnum::Class() { return *IFC4X3_ADD2_IfcSolarDeviceTypeEnum_type; } + +Ifc4x3_add2::IfcSolarDeviceTypeEnum::IfcSolarDeviceTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcSolarDeviceTypeEnum::IfcSolarDeviceTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSolarDeviceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcSolarDeviceTypeEnum::IfcSolarDeviceTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSolarDeviceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcSolarDeviceTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "SOLARCOLLECTOR", "SOLARPANEL", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcSolarDeviceTypeEnum::Value Ifc4x3_add2::IfcSolarDeviceTypeEnum::FromString(const std::string& s) { + if (s == "SOLARCOLLECTOR") return ::Ifc4x3_add2::IfcSolarDeviceTypeEnum::IfcSolarDeviceType_SOLARCOLLECTOR; + if (s == "SOLARPANEL") return ::Ifc4x3_add2::IfcSolarDeviceTypeEnum::IfcSolarDeviceType_SOLARPANEL; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcSolarDeviceTypeEnum::IfcSolarDeviceType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcSolarDeviceTypeEnum::IfcSolarDeviceType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcSolarDeviceTypeEnum::operator Ifc4x3_add2::IfcSolarDeviceTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSpaceHeaterTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcSpaceHeaterTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSpaceHeaterTypeEnum::Class() { return *IFC4X3_ADD2_IfcSpaceHeaterTypeEnum_type; } + +Ifc4x3_add2::IfcSpaceHeaterTypeEnum::IfcSpaceHeaterTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcSpaceHeaterTypeEnum::IfcSpaceHeaterTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSpaceHeaterTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcSpaceHeaterTypeEnum::IfcSpaceHeaterTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSpaceHeaterTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcSpaceHeaterTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CONVECTOR", "RADIATOR", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcSpaceHeaterTypeEnum::Value Ifc4x3_add2::IfcSpaceHeaterTypeEnum::FromString(const std::string& s) { + if (s == "CONVECTOR") return ::Ifc4x3_add2::IfcSpaceHeaterTypeEnum::IfcSpaceHeaterType_CONVECTOR; + if (s == "RADIATOR") return ::Ifc4x3_add2::IfcSpaceHeaterTypeEnum::IfcSpaceHeaterType_RADIATOR; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcSpaceHeaterTypeEnum::IfcSpaceHeaterType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcSpaceHeaterTypeEnum::IfcSpaceHeaterType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcSpaceHeaterTypeEnum::operator Ifc4x3_add2::IfcSpaceHeaterTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSpaceTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcSpaceTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSpaceTypeEnum::Class() { return *IFC4X3_ADD2_IfcSpaceTypeEnum_type; } + +Ifc4x3_add2::IfcSpaceTypeEnum::IfcSpaceTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcSpaceTypeEnum::IfcSpaceTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSpaceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcSpaceTypeEnum::IfcSpaceTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSpaceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcSpaceTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 8 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BERTH", "EXTERNAL", "GFA", "INTERNAL", "PARKING", "SPACE", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcSpaceTypeEnum::Value Ifc4x3_add2::IfcSpaceTypeEnum::FromString(const std::string& s) { + if (s == "BERTH") return ::Ifc4x3_add2::IfcSpaceTypeEnum::IfcSpaceType_BERTH; + if (s == "EXTERNAL") return ::Ifc4x3_add2::IfcSpaceTypeEnum::IfcSpaceType_EXTERNAL; + if (s == "GFA") return ::Ifc4x3_add2::IfcSpaceTypeEnum::IfcSpaceType_GFA; + if (s == "INTERNAL") return ::Ifc4x3_add2::IfcSpaceTypeEnum::IfcSpaceType_INTERNAL; + if (s == "PARKING") return ::Ifc4x3_add2::IfcSpaceTypeEnum::IfcSpaceType_PARKING; + if (s == "SPACE") return ::Ifc4x3_add2::IfcSpaceTypeEnum::IfcSpaceType_SPACE; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcSpaceTypeEnum::IfcSpaceType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcSpaceTypeEnum::IfcSpaceType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcSpaceTypeEnum::operator Ifc4x3_add2::IfcSpaceTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSpatialZoneTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcSpatialZoneTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSpatialZoneTypeEnum::Class() { return *IFC4X3_ADD2_IfcSpatialZoneTypeEnum_type; } + +Ifc4x3_add2::IfcSpatialZoneTypeEnum::IfcSpatialZoneTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcSpatialZoneTypeEnum::IfcSpatialZoneTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSpatialZoneTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcSpatialZoneTypeEnum::IfcSpatialZoneTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSpatialZoneTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcSpatialZoneTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 12 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CONSTRUCTION", "FIRESAFETY", "INTERFERENCE", "LIGHTING", "OCCUPANCY", "RESERVATION", "SECURITY", "THERMAL", "TRANSPORT", "VENTILATION", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcSpatialZoneTypeEnum::Value Ifc4x3_add2::IfcSpatialZoneTypeEnum::FromString(const std::string& s) { + if (s == "CONSTRUCTION") return ::Ifc4x3_add2::IfcSpatialZoneTypeEnum::IfcSpatialZoneType_CONSTRUCTION; + if (s == "FIRESAFETY") return ::Ifc4x3_add2::IfcSpatialZoneTypeEnum::IfcSpatialZoneType_FIRESAFETY; + if (s == "INTERFERENCE") return ::Ifc4x3_add2::IfcSpatialZoneTypeEnum::IfcSpatialZoneType_INTERFERENCE; + if (s == "LIGHTING") return ::Ifc4x3_add2::IfcSpatialZoneTypeEnum::IfcSpatialZoneType_LIGHTING; + if (s == "OCCUPANCY") return ::Ifc4x3_add2::IfcSpatialZoneTypeEnum::IfcSpatialZoneType_OCCUPANCY; + if (s == "RESERVATION") return ::Ifc4x3_add2::IfcSpatialZoneTypeEnum::IfcSpatialZoneType_RESERVATION; + if (s == "SECURITY") return ::Ifc4x3_add2::IfcSpatialZoneTypeEnum::IfcSpatialZoneType_SECURITY; + if (s == "THERMAL") return ::Ifc4x3_add2::IfcSpatialZoneTypeEnum::IfcSpatialZoneType_THERMAL; + if (s == "TRANSPORT") return ::Ifc4x3_add2::IfcSpatialZoneTypeEnum::IfcSpatialZoneType_TRANSPORT; + if (s == "VENTILATION") return ::Ifc4x3_add2::IfcSpatialZoneTypeEnum::IfcSpatialZoneType_VENTILATION; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcSpatialZoneTypeEnum::IfcSpatialZoneType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcSpatialZoneTypeEnum::IfcSpatialZoneType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcSpatialZoneTypeEnum::operator Ifc4x3_add2::IfcSpatialZoneTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcStackTerminalTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcStackTerminalTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcStackTerminalTypeEnum::Class() { return *IFC4X3_ADD2_IfcStackTerminalTypeEnum_type; } + +Ifc4x3_add2::IfcStackTerminalTypeEnum::IfcStackTerminalTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcStackTerminalTypeEnum::IfcStackTerminalTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStackTerminalTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcStackTerminalTypeEnum::IfcStackTerminalTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStackTerminalTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcStackTerminalTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BIRDCAGE", "COWL", "RAINWATERHOPPER", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcStackTerminalTypeEnum::Value Ifc4x3_add2::IfcStackTerminalTypeEnum::FromString(const std::string& s) { + if (s == "BIRDCAGE") return ::Ifc4x3_add2::IfcStackTerminalTypeEnum::IfcStackTerminalType_BIRDCAGE; + if (s == "COWL") return ::Ifc4x3_add2::IfcStackTerminalTypeEnum::IfcStackTerminalType_COWL; + if (s == "RAINWATERHOPPER") return ::Ifc4x3_add2::IfcStackTerminalTypeEnum::IfcStackTerminalType_RAINWATERHOPPER; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcStackTerminalTypeEnum::IfcStackTerminalType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcStackTerminalTypeEnum::IfcStackTerminalType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcStackTerminalTypeEnum::operator Ifc4x3_add2::IfcStackTerminalTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcStairFlightTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcStairFlightTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcStairFlightTypeEnum::Class() { return *IFC4X3_ADD2_IfcStairFlightTypeEnum_type; } + +Ifc4x3_add2::IfcStairFlightTypeEnum::IfcStairFlightTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcStairFlightTypeEnum::IfcStairFlightTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStairFlightTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcStairFlightTypeEnum::IfcStairFlightTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStairFlightTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcStairFlightTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 7 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CURVED", "FREEFORM", "SPIRAL", "STRAIGHT", "WINDER", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcStairFlightTypeEnum::Value Ifc4x3_add2::IfcStairFlightTypeEnum::FromString(const std::string& s) { + if (s == "CURVED") return ::Ifc4x3_add2::IfcStairFlightTypeEnum::IfcStairFlightType_CURVED; + if (s == "FREEFORM") return ::Ifc4x3_add2::IfcStairFlightTypeEnum::IfcStairFlightType_FREEFORM; + if (s == "SPIRAL") return ::Ifc4x3_add2::IfcStairFlightTypeEnum::IfcStairFlightType_SPIRAL; + if (s == "STRAIGHT") return ::Ifc4x3_add2::IfcStairFlightTypeEnum::IfcStairFlightType_STRAIGHT; + if (s == "WINDER") return ::Ifc4x3_add2::IfcStairFlightTypeEnum::IfcStairFlightType_WINDER; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcStairFlightTypeEnum::IfcStairFlightType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcStairFlightTypeEnum::IfcStairFlightType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcStairFlightTypeEnum::operator Ifc4x3_add2::IfcStairFlightTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcStairTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcStairTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcStairTypeEnum::Class() { return *IFC4X3_ADD2_IfcStairTypeEnum_type; } + +Ifc4x3_add2::IfcStairTypeEnum::IfcStairTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcStairTypeEnum::IfcStairTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStairTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcStairTypeEnum::IfcStairTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStairTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcStairTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 17 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CURVED_RUN_STAIR", "DOUBLE_RETURN_STAIR", "HALF_TURN_STAIR", "HALF_WINDING_STAIR", "LADDER", "QUARTER_TURN_STAIR", "QUARTER_WINDING_STAIR", "SPIRAL_STAIR", "STRAIGHT_RUN_STAIR", "THREE_QUARTER_TURN_STAIR", "THREE_QUARTER_WINDING_STAIR", "TWO_CURVED_RUN_STAIR", "TWO_QUARTER_TURN_STAIR", "TWO_QUARTER_WINDING_STAIR", "TWO_STRAIGHT_RUN_STAIR", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcStairTypeEnum::Value Ifc4x3_add2::IfcStairTypeEnum::FromString(const std::string& s) { + if (s == "CURVED_RUN_STAIR") return ::Ifc4x3_add2::IfcStairTypeEnum::IfcStairType_CURVED_RUN_STAIR; + if (s == "DOUBLE_RETURN_STAIR") return ::Ifc4x3_add2::IfcStairTypeEnum::IfcStairType_DOUBLE_RETURN_STAIR; + if (s == "HALF_TURN_STAIR") return ::Ifc4x3_add2::IfcStairTypeEnum::IfcStairType_HALF_TURN_STAIR; + if (s == "HALF_WINDING_STAIR") return ::Ifc4x3_add2::IfcStairTypeEnum::IfcStairType_HALF_WINDING_STAIR; + if (s == "LADDER") return ::Ifc4x3_add2::IfcStairTypeEnum::IfcStairType_LADDER; + if (s == "QUARTER_TURN_STAIR") return ::Ifc4x3_add2::IfcStairTypeEnum::IfcStairType_QUARTER_TURN_STAIR; + if (s == "QUARTER_WINDING_STAIR") return ::Ifc4x3_add2::IfcStairTypeEnum::IfcStairType_QUARTER_WINDING_STAIR; + if (s == "SPIRAL_STAIR") return ::Ifc4x3_add2::IfcStairTypeEnum::IfcStairType_SPIRAL_STAIR; + if (s == "STRAIGHT_RUN_STAIR") return ::Ifc4x3_add2::IfcStairTypeEnum::IfcStairType_STRAIGHT_RUN_STAIR; + if (s == "THREE_QUARTER_TURN_STAIR") return ::Ifc4x3_add2::IfcStairTypeEnum::IfcStairType_THREE_QUARTER_TURN_STAIR; + if (s == "THREE_QUARTER_WINDING_STAIR") return ::Ifc4x3_add2::IfcStairTypeEnum::IfcStairType_THREE_QUARTER_WINDING_STAIR; + if (s == "TWO_CURVED_RUN_STAIR") return ::Ifc4x3_add2::IfcStairTypeEnum::IfcStairType_TWO_CURVED_RUN_STAIR; + if (s == "TWO_QUARTER_TURN_STAIR") return ::Ifc4x3_add2::IfcStairTypeEnum::IfcStairType_TWO_QUARTER_TURN_STAIR; + if (s == "TWO_QUARTER_WINDING_STAIR") return ::Ifc4x3_add2::IfcStairTypeEnum::IfcStairType_TWO_QUARTER_WINDING_STAIR; + if (s == "TWO_STRAIGHT_RUN_STAIR") return ::Ifc4x3_add2::IfcStairTypeEnum::IfcStairType_TWO_STRAIGHT_RUN_STAIR; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcStairTypeEnum::IfcStairType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcStairTypeEnum::IfcStairType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcStairTypeEnum::operator Ifc4x3_add2::IfcStairTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcStateEnum::declaration() const { return *IFC4X3_ADD2_IfcStateEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcStateEnum::Class() { return *IFC4X3_ADD2_IfcStateEnum_type; } + +Ifc4x3_add2::IfcStateEnum::IfcStateEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcStateEnum::IfcStateEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStateEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcStateEnum::IfcStateEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStateEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcStateEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "LOCKED", "READONLY", "READONLYLOCKED", "READWRITE", "READWRITELOCKED" }; + return names[v]; +} + +Ifc4x3_add2::IfcStateEnum::Value Ifc4x3_add2::IfcStateEnum::FromString(const std::string& s) { + if (s == "LOCKED") return ::Ifc4x3_add2::IfcStateEnum::IfcState_LOCKED; + if (s == "READONLY") return ::Ifc4x3_add2::IfcStateEnum::IfcState_READONLY; + if (s == "READONLYLOCKED") return ::Ifc4x3_add2::IfcStateEnum::IfcState_READONLYLOCKED; + if (s == "READWRITE") return ::Ifc4x3_add2::IfcStateEnum::IfcState_READWRITE; + if (s == "READWRITELOCKED") return ::Ifc4x3_add2::IfcStateEnum::IfcState_READWRITELOCKED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcStateEnum::operator Ifc4x3_add2::IfcStateEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcStructuralCurveActivityTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::Class() { return *IFC4X3_ADD2_IfcStructuralCurveActivityTypeEnum_type; } + +Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::IfcStructuralCurveActivityTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::IfcStructuralCurveActivityTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralCurveActivityTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::IfcStructuralCurveActivityTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralCurveActivityTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 9 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CONST", "DISCRETE", "EQUIDISTANT", "LINEAR", "PARABOLA", "POLYGONAL", "SINUS", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::Value Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::FromString(const std::string& s) { + if (s == "CONST") return ::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::IfcStructuralCurveActivityType_CONST; + if (s == "DISCRETE") return ::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::IfcStructuralCurveActivityType_DISCRETE; + if (s == "EQUIDISTANT") return ::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::IfcStructuralCurveActivityType_EQUIDISTANT; + if (s == "LINEAR") return ::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::IfcStructuralCurveActivityType_LINEAR; + if (s == "PARABOLA") return ::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::IfcStructuralCurveActivityType_PARABOLA; + if (s == "POLYGONAL") return ::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::IfcStructuralCurveActivityType_POLYGONAL; + if (s == "SINUS") return ::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::IfcStructuralCurveActivityType_SINUS; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::IfcStructuralCurveActivityType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::IfcStructuralCurveActivityType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::operator Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcStructuralCurveMemberTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::Class() { return *IFC4X3_ADD2_IfcStructuralCurveMemberTypeEnum_type; } + +Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::IfcStructuralCurveMemberTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::IfcStructuralCurveMemberTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralCurveMemberTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::IfcStructuralCurveMemberTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralCurveMemberTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 7 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CABLE", "COMPRESSION_MEMBER", "PIN_JOINED_MEMBER", "RIGID_JOINED_MEMBER", "TENSION_MEMBER", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::Value Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::FromString(const std::string& s) { + if (s == "CABLE") return ::Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::IfcStructuralCurveMemberType_CABLE; + if (s == "COMPRESSION_MEMBER") return ::Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::IfcStructuralCurveMemberType_COMPRESSION_MEMBER; + if (s == "PIN_JOINED_MEMBER") return ::Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::IfcStructuralCurveMemberType_PIN_JOINED_MEMBER; + if (s == "RIGID_JOINED_MEMBER") return ::Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::IfcStructuralCurveMemberType_RIGID_JOINED_MEMBER; + if (s == "TENSION_MEMBER") return ::Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::IfcStructuralCurveMemberType_TENSION_MEMBER; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::IfcStructuralCurveMemberType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::IfcStructuralCurveMemberType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::operator Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcStructuralSurfaceActivityTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::Class() { return *IFC4X3_ADD2_IfcStructuralSurfaceActivityTypeEnum_type; } + +Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::IfcStructuralSurfaceActivityTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::IfcStructuralSurfaceActivityTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralSurfaceActivityTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::IfcStructuralSurfaceActivityTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralSurfaceActivityTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 6 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BILINEAR", "CONST", "DISCRETE", "ISOCONTOUR", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::Value Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::FromString(const std::string& s) { + if (s == "BILINEAR") return ::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::IfcStructuralSurfaceActivityType_BILINEAR; + if (s == "CONST") return ::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::IfcStructuralSurfaceActivityType_CONST; + if (s == "DISCRETE") return ::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::IfcStructuralSurfaceActivityType_DISCRETE; + if (s == "ISOCONTOUR") return ::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::IfcStructuralSurfaceActivityType_ISOCONTOUR; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::IfcStructuralSurfaceActivityType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::IfcStructuralSurfaceActivityType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::operator Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcStructuralSurfaceMemberTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::Class() { return *IFC4X3_ADD2_IfcStructuralSurfaceMemberTypeEnum_type; } + +Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::IfcStructuralSurfaceMemberTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::IfcStructuralSurfaceMemberTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralSurfaceMemberTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::IfcStructuralSurfaceMemberTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralSurfaceMemberTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BENDING_ELEMENT", "MEMBRANE_ELEMENT", "SHELL", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::Value Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::FromString(const std::string& s) { + if (s == "BENDING_ELEMENT") return ::Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::IfcStructuralSurfaceMemberType_BENDING_ELEMENT; + if (s == "MEMBRANE_ELEMENT") return ::Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::IfcStructuralSurfaceMemberType_MEMBRANE_ELEMENT; + if (s == "SHELL") return ::Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::IfcStructuralSurfaceMemberType_SHELL; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::IfcStructuralSurfaceMemberType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::IfcStructuralSurfaceMemberType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::operator Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSubContractResourceTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcSubContractResourceTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSubContractResourceTypeEnum::Class() { return *IFC4X3_ADD2_IfcSubContractResourceTypeEnum_type; } + +Ifc4x3_add2::IfcSubContractResourceTypeEnum::IfcSubContractResourceTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcSubContractResourceTypeEnum::IfcSubContractResourceTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSubContractResourceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcSubContractResourceTypeEnum::IfcSubContractResourceTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSubContractResourceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcSubContractResourceTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "PURCHASE", "WORK", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcSubContractResourceTypeEnum::Value Ifc4x3_add2::IfcSubContractResourceTypeEnum::FromString(const std::string& s) { + if (s == "PURCHASE") return ::Ifc4x3_add2::IfcSubContractResourceTypeEnum::IfcSubContractResourceType_PURCHASE; + if (s == "WORK") return ::Ifc4x3_add2::IfcSubContractResourceTypeEnum::IfcSubContractResourceType_WORK; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcSubContractResourceTypeEnum::IfcSubContractResourceType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcSubContractResourceTypeEnum::IfcSubContractResourceType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcSubContractResourceTypeEnum::operator Ifc4x3_add2::IfcSubContractResourceTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcSurfaceFeatureTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::Class() { return *IFC4X3_ADD2_IfcSurfaceFeatureTypeEnum_type; } + +Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::IfcSurfaceFeatureTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::IfcSurfaceFeatureTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSurfaceFeatureTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::IfcSurfaceFeatureTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSurfaceFeatureTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 13 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "DEFECT", "HATCHMARKING", "LINEMARKING", "MARK", "NONSKIDSURFACING", "PAVEMENTSURFACEMARKING", "RUMBLESTRIP", "SYMBOLMARKING", "TAG", "TRANSVERSERUMBLESTRIP", "TREATMENT", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::Value Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::FromString(const std::string& s) { + if (s == "DEFECT") return ::Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::IfcSurfaceFeatureType_DEFECT; + if (s == "HATCHMARKING") return ::Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::IfcSurfaceFeatureType_HATCHMARKING; + if (s == "LINEMARKING") return ::Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::IfcSurfaceFeatureType_LINEMARKING; + if (s == "MARK") return ::Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::IfcSurfaceFeatureType_MARK; + if (s == "NONSKIDSURFACING") return ::Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::IfcSurfaceFeatureType_NONSKIDSURFACING; + if (s == "PAVEMENTSURFACEMARKING") return ::Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::IfcSurfaceFeatureType_PAVEMENTSURFACEMARKING; + if (s == "RUMBLESTRIP") return ::Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::IfcSurfaceFeatureType_RUMBLESTRIP; + if (s == "SYMBOLMARKING") return ::Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::IfcSurfaceFeatureType_SYMBOLMARKING; + if (s == "TAG") return ::Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::IfcSurfaceFeatureType_TAG; + if (s == "TRANSVERSERUMBLESTRIP") return ::Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::IfcSurfaceFeatureType_TRANSVERSERUMBLESTRIP; + if (s == "TREATMENT") return ::Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::IfcSurfaceFeatureType_TREATMENT; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::IfcSurfaceFeatureType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::IfcSurfaceFeatureType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::operator Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSurfaceSide::declaration() const { return *IFC4X3_ADD2_IfcSurfaceSide_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSurfaceSide::Class() { return *IFC4X3_ADD2_IfcSurfaceSide_type; } + +Ifc4x3_add2::IfcSurfaceSide::IfcSurfaceSide(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcSurfaceSide::IfcSurfaceSide(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSurfaceSide_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcSurfaceSide::IfcSurfaceSide(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSurfaceSide_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcSurfaceSide::ToString(Value v) { + if ( v < 0 || v >= 3 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BOTH", "NEGATIVE", "POSITIVE" }; + return names[v]; +} + +Ifc4x3_add2::IfcSurfaceSide::Value Ifc4x3_add2::IfcSurfaceSide::FromString(const std::string& s) { + if (s == "BOTH") return ::Ifc4x3_add2::IfcSurfaceSide::IfcSurfaceSide_BOTH; + if (s == "NEGATIVE") return ::Ifc4x3_add2::IfcSurfaceSide::IfcSurfaceSide_NEGATIVE; + if (s == "POSITIVE") return ::Ifc4x3_add2::IfcSurfaceSide::IfcSurfaceSide_POSITIVE; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcSurfaceSide::operator Ifc4x3_add2::IfcSurfaceSide::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcSwitchingDeviceTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::Class() { return *IFC4X3_ADD2_IfcSwitchingDeviceTypeEnum_type; } + +Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::IfcSwitchingDeviceTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::IfcSwitchingDeviceTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSwitchingDeviceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::IfcSwitchingDeviceTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSwitchingDeviceTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 13 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CONTACTOR", "DIMMERSWITCH", "EMERGENCYSTOP", "KEYPAD", "MOMENTARYSWITCH", "RELAY", "SELECTORSWITCH", "STARTER", "START_AND_STOP_EQUIPMENT", "SWITCHDISCONNECTOR", "TOGGLESWITCH", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::Value Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::FromString(const std::string& s) { + if (s == "CONTACTOR") return ::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::IfcSwitchingDeviceType_CONTACTOR; + if (s == "DIMMERSWITCH") return ::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::IfcSwitchingDeviceType_DIMMERSWITCH; + if (s == "EMERGENCYSTOP") return ::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::IfcSwitchingDeviceType_EMERGENCYSTOP; + if (s == "KEYPAD") return ::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::IfcSwitchingDeviceType_KEYPAD; + if (s == "MOMENTARYSWITCH") return ::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::IfcSwitchingDeviceType_MOMENTARYSWITCH; + if (s == "RELAY") return ::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::IfcSwitchingDeviceType_RELAY; + if (s == "SELECTORSWITCH") return ::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::IfcSwitchingDeviceType_SELECTORSWITCH; + if (s == "STARTER") return ::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::IfcSwitchingDeviceType_STARTER; + if (s == "START_AND_STOP_EQUIPMENT") return ::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::IfcSwitchingDeviceType_START_AND_STOP_EQUIPMENT; + if (s == "SWITCHDISCONNECTOR") return ::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::IfcSwitchingDeviceType_SWITCHDISCONNECTOR; + if (s == "TOGGLESWITCH") return ::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::IfcSwitchingDeviceType_TOGGLESWITCH; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::IfcSwitchingDeviceType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::IfcSwitchingDeviceType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::operator Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcSystemFurnitureElementTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::Class() { return *IFC4X3_ADD2_IfcSystemFurnitureElementTypeEnum_type; } + +Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::IfcSystemFurnitureElementTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::IfcSystemFurnitureElementTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSystemFurnitureElementTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::IfcSystemFurnitureElementTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSystemFurnitureElementTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "PANEL", "SUBRACK", "WORKSURFACE", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::Value Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::FromString(const std::string& s) { + if (s == "PANEL") return ::Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::IfcSystemFurnitureElementType_PANEL; + if (s == "SUBRACK") return ::Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::IfcSystemFurnitureElementType_SUBRACK; + if (s == "WORKSURFACE") return ::Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::IfcSystemFurnitureElementType_WORKSURFACE; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::IfcSystemFurnitureElementType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::IfcSystemFurnitureElementType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::operator Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTankTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcTankTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTankTypeEnum::Class() { return *IFC4X3_ADD2_IfcTankTypeEnum_type; } + +Ifc4x3_add2::IfcTankTypeEnum::IfcTankTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcTankTypeEnum::IfcTankTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTankTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcTankTypeEnum::IfcTankTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTankTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcTankTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 10 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BASIN", "BREAKPRESSURE", "EXPANSION", "FEEDANDEXPANSION", "OILRETENTIONTRAY", "PRESSUREVESSEL", "STORAGE", "VESSEL", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcTankTypeEnum::Value Ifc4x3_add2::IfcTankTypeEnum::FromString(const std::string& s) { + if (s == "BASIN") return ::Ifc4x3_add2::IfcTankTypeEnum::IfcTankType_BASIN; + if (s == "BREAKPRESSURE") return ::Ifc4x3_add2::IfcTankTypeEnum::IfcTankType_BREAKPRESSURE; + if (s == "EXPANSION") return ::Ifc4x3_add2::IfcTankTypeEnum::IfcTankType_EXPANSION; + if (s == "FEEDANDEXPANSION") return ::Ifc4x3_add2::IfcTankTypeEnum::IfcTankType_FEEDANDEXPANSION; + if (s == "OILRETENTIONTRAY") return ::Ifc4x3_add2::IfcTankTypeEnum::IfcTankType_OILRETENTIONTRAY; + if (s == "PRESSUREVESSEL") return ::Ifc4x3_add2::IfcTankTypeEnum::IfcTankType_PRESSUREVESSEL; + if (s == "STORAGE") return ::Ifc4x3_add2::IfcTankTypeEnum::IfcTankType_STORAGE; + if (s == "VESSEL") return ::Ifc4x3_add2::IfcTankTypeEnum::IfcTankType_VESSEL; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcTankTypeEnum::IfcTankType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcTankTypeEnum::IfcTankType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcTankTypeEnum::operator Ifc4x3_add2::IfcTankTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTaskDurationEnum::declaration() const { return *IFC4X3_ADD2_IfcTaskDurationEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTaskDurationEnum::Class() { return *IFC4X3_ADD2_IfcTaskDurationEnum_type; } + +Ifc4x3_add2::IfcTaskDurationEnum::IfcTaskDurationEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcTaskDurationEnum::IfcTaskDurationEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTaskDurationEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcTaskDurationEnum::IfcTaskDurationEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTaskDurationEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcTaskDurationEnum::ToString(Value v) { + if ( v < 0 || v >= 3 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ELAPSEDTIME", "WORKTIME", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcTaskDurationEnum::Value Ifc4x3_add2::IfcTaskDurationEnum::FromString(const std::string& s) { + if (s == "ELAPSEDTIME") return ::Ifc4x3_add2::IfcTaskDurationEnum::IfcTaskDuration_ELAPSEDTIME; + if (s == "WORKTIME") return ::Ifc4x3_add2::IfcTaskDurationEnum::IfcTaskDuration_WORKTIME; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcTaskDurationEnum::IfcTaskDuration_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcTaskDurationEnum::operator Ifc4x3_add2::IfcTaskDurationEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTaskTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcTaskTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTaskTypeEnum::Class() { return *IFC4X3_ADD2_IfcTaskTypeEnum_type; } + +Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTaskTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTaskTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcTaskTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 23 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ADJUSTMENT", "ATTENDANCE", "CALIBRATION", "CONSTRUCTION", "DEMOLITION", "DISMANTLE", "DISPOSAL", "EMERGENCY", "INSPECTION", "INSTALLATION", "LOGISTIC", "MAINTENANCE", "MOVE", "OPERATION", "REMOVAL", "RENOVATION", "SAFETY", "SHUTDOWN", "STARTUP", "TESTING", "TROUBLESHOOTING", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcTaskTypeEnum::Value Ifc4x3_add2::IfcTaskTypeEnum::FromString(const std::string& s) { + if (s == "ADJUSTMENT") return ::Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskType_ADJUSTMENT; + if (s == "ATTENDANCE") return ::Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskType_ATTENDANCE; + if (s == "CALIBRATION") return ::Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskType_CALIBRATION; + if (s == "CONSTRUCTION") return ::Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskType_CONSTRUCTION; + if (s == "DEMOLITION") return ::Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskType_DEMOLITION; + if (s == "DISMANTLE") return ::Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskType_DISMANTLE; + if (s == "DISPOSAL") return ::Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskType_DISPOSAL; + if (s == "EMERGENCY") return ::Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskType_EMERGENCY; + if (s == "INSPECTION") return ::Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskType_INSPECTION; + if (s == "INSTALLATION") return ::Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskType_INSTALLATION; + if (s == "LOGISTIC") return ::Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskType_LOGISTIC; + if (s == "MAINTENANCE") return ::Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskType_MAINTENANCE; + if (s == "MOVE") return ::Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskType_MOVE; + if (s == "OPERATION") return ::Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskType_OPERATION; + if (s == "REMOVAL") return ::Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskType_REMOVAL; + if (s == "RENOVATION") return ::Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskType_RENOVATION; + if (s == "SAFETY") return ::Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskType_SAFETY; + if (s == "SHUTDOWN") return ::Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskType_SHUTDOWN; + if (s == "STARTUP") return ::Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskType_STARTUP; + if (s == "TESTING") return ::Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskType_TESTING; + if (s == "TROUBLESHOOTING") return ::Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskType_TROUBLESHOOTING; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcTaskTypeEnum::IfcTaskType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcTaskTypeEnum::operator Ifc4x3_add2::IfcTaskTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTendonAnchorTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcTendonAnchorTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTendonAnchorTypeEnum::Class() { return *IFC4X3_ADD2_IfcTendonAnchorTypeEnum_type; } + +Ifc4x3_add2::IfcTendonAnchorTypeEnum::IfcTendonAnchorTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcTendonAnchorTypeEnum::IfcTendonAnchorTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTendonAnchorTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcTendonAnchorTypeEnum::IfcTendonAnchorTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTendonAnchorTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcTendonAnchorTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "COUPLER", "FIXED_END", "TENSIONING_END", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcTendonAnchorTypeEnum::Value Ifc4x3_add2::IfcTendonAnchorTypeEnum::FromString(const std::string& s) { + if (s == "COUPLER") return ::Ifc4x3_add2::IfcTendonAnchorTypeEnum::IfcTendonAnchorType_COUPLER; + if (s == "FIXED_END") return ::Ifc4x3_add2::IfcTendonAnchorTypeEnum::IfcTendonAnchorType_FIXED_END; + if (s == "TENSIONING_END") return ::Ifc4x3_add2::IfcTendonAnchorTypeEnum::IfcTendonAnchorType_TENSIONING_END; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcTendonAnchorTypeEnum::IfcTendonAnchorType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcTendonAnchorTypeEnum::IfcTendonAnchorType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcTendonAnchorTypeEnum::operator Ifc4x3_add2::IfcTendonAnchorTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTendonConduitTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcTendonConduitTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTendonConduitTypeEnum::Class() { return *IFC4X3_ADD2_IfcTendonConduitTypeEnum_type; } + +Ifc4x3_add2::IfcTendonConduitTypeEnum::IfcTendonConduitTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcTendonConduitTypeEnum::IfcTendonConduitTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTendonConduitTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcTendonConduitTypeEnum::IfcTendonConduitTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTendonConduitTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcTendonConduitTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 7 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "COUPLER", "DIABOLO", "DUCT", "GROUTING_DUCT", "TRUMPET", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcTendonConduitTypeEnum::Value Ifc4x3_add2::IfcTendonConduitTypeEnum::FromString(const std::string& s) { + if (s == "COUPLER") return ::Ifc4x3_add2::IfcTendonConduitTypeEnum::IfcTendonConduitType_COUPLER; + if (s == "DIABOLO") return ::Ifc4x3_add2::IfcTendonConduitTypeEnum::IfcTendonConduitType_DIABOLO; + if (s == "DUCT") return ::Ifc4x3_add2::IfcTendonConduitTypeEnum::IfcTendonConduitType_DUCT; + if (s == "GROUTING_DUCT") return ::Ifc4x3_add2::IfcTendonConduitTypeEnum::IfcTendonConduitType_GROUTING_DUCT; + if (s == "TRUMPET") return ::Ifc4x3_add2::IfcTendonConduitTypeEnum::IfcTendonConduitType_TRUMPET; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcTendonConduitTypeEnum::IfcTendonConduitType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcTendonConduitTypeEnum::IfcTendonConduitType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcTendonConduitTypeEnum::operator Ifc4x3_add2::IfcTendonConduitTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTendonTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcTendonTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTendonTypeEnum::Class() { return *IFC4X3_ADD2_IfcTendonTypeEnum_type; } + +Ifc4x3_add2::IfcTendonTypeEnum::IfcTendonTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcTendonTypeEnum::IfcTendonTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTendonTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcTendonTypeEnum::IfcTendonTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTendonTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcTendonTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 6 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BAR", "COATED", "STRAND", "WIRE", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcTendonTypeEnum::Value Ifc4x3_add2::IfcTendonTypeEnum::FromString(const std::string& s) { + if (s == "BAR") return ::Ifc4x3_add2::IfcTendonTypeEnum::IfcTendonType_BAR; + if (s == "COATED") return ::Ifc4x3_add2::IfcTendonTypeEnum::IfcTendonType_COATED; + if (s == "STRAND") return ::Ifc4x3_add2::IfcTendonTypeEnum::IfcTendonType_STRAND; + if (s == "WIRE") return ::Ifc4x3_add2::IfcTendonTypeEnum::IfcTendonType_WIRE; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcTendonTypeEnum::IfcTendonType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcTendonTypeEnum::IfcTendonType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcTendonTypeEnum::operator Ifc4x3_add2::IfcTendonTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTextPath::declaration() const { return *IFC4X3_ADD2_IfcTextPath_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTextPath::Class() { return *IFC4X3_ADD2_IfcTextPath_type; } + +Ifc4x3_add2::IfcTextPath::IfcTextPath(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcTextPath::IfcTextPath(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTextPath_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcTextPath::IfcTextPath(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTextPath_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcTextPath::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "DOWN", "LEFT", "RIGHT", "UP" }; + return names[v]; +} + +Ifc4x3_add2::IfcTextPath::Value Ifc4x3_add2::IfcTextPath::FromString(const std::string& s) { + if (s == "DOWN") return ::Ifc4x3_add2::IfcTextPath::IfcTextPath_DOWN; + if (s == "LEFT") return ::Ifc4x3_add2::IfcTextPath::IfcTextPath_LEFT; + if (s == "RIGHT") return ::Ifc4x3_add2::IfcTextPath::IfcTextPath_RIGHT; + if (s == "UP") return ::Ifc4x3_add2::IfcTextPath::IfcTextPath_UP; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcTextPath::operator Ifc4x3_add2::IfcTextPath::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcTimeSeriesDataTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::Class() { return *IFC4X3_ADD2_IfcTimeSeriesDataTypeEnum_type; } + +Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::IfcTimeSeriesDataTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::IfcTimeSeriesDataTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTimeSeriesDataTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::IfcTimeSeriesDataTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTimeSeriesDataTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 7 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CONTINUOUS", "DISCRETE", "DISCRETEBINARY", "PIECEWISEBINARY", "PIECEWISECONSTANT", "PIECEWISECONTINUOUS", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::Value Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::FromString(const std::string& s) { + if (s == "CONTINUOUS") return ::Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::IfcTimeSeriesDataType_CONTINUOUS; + if (s == "DISCRETE") return ::Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::IfcTimeSeriesDataType_DISCRETE; + if (s == "DISCRETEBINARY") return ::Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::IfcTimeSeriesDataType_DISCRETEBINARY; + if (s == "PIECEWISEBINARY") return ::Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::IfcTimeSeriesDataType_PIECEWISEBINARY; + if (s == "PIECEWISECONSTANT") return ::Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::IfcTimeSeriesDataType_PIECEWISECONSTANT; + if (s == "PIECEWISECONTINUOUS") return ::Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::IfcTimeSeriesDataType_PIECEWISECONTINUOUS; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::IfcTimeSeriesDataType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::operator Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTrackElementTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcTrackElementTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTrackElementTypeEnum::Class() { return *IFC4X3_ADD2_IfcTrackElementTypeEnum_type; } + +Ifc4x3_add2::IfcTrackElementTypeEnum::IfcTrackElementTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcTrackElementTypeEnum::IfcTrackElementTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTrackElementTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcTrackElementTypeEnum::IfcTrackElementTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTrackElementTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcTrackElementTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 10 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BLOCKINGDEVICE", "DERAILER", "FROG", "HALF_SET_OF_BLADES", "SLEEPER", "SPEEDREGULATOR", "TRACKENDOFALIGNMENT", "VEHICLESTOP", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcTrackElementTypeEnum::Value Ifc4x3_add2::IfcTrackElementTypeEnum::FromString(const std::string& s) { + if (s == "BLOCKINGDEVICE") return ::Ifc4x3_add2::IfcTrackElementTypeEnum::IfcTrackElementType_BLOCKINGDEVICE; + if (s == "DERAILER") return ::Ifc4x3_add2::IfcTrackElementTypeEnum::IfcTrackElementType_DERAILER; + if (s == "FROG") return ::Ifc4x3_add2::IfcTrackElementTypeEnum::IfcTrackElementType_FROG; + if (s == "HALF_SET_OF_BLADES") return ::Ifc4x3_add2::IfcTrackElementTypeEnum::IfcTrackElementType_HALF_SET_OF_BLADES; + if (s == "SLEEPER") return ::Ifc4x3_add2::IfcTrackElementTypeEnum::IfcTrackElementType_SLEEPER; + if (s == "SPEEDREGULATOR") return ::Ifc4x3_add2::IfcTrackElementTypeEnum::IfcTrackElementType_SPEEDREGULATOR; + if (s == "TRACKENDOFALIGNMENT") return ::Ifc4x3_add2::IfcTrackElementTypeEnum::IfcTrackElementType_TRACKENDOFALIGNMENT; + if (s == "VEHICLESTOP") return ::Ifc4x3_add2::IfcTrackElementTypeEnum::IfcTrackElementType_VEHICLESTOP; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcTrackElementTypeEnum::IfcTrackElementType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcTrackElementTypeEnum::IfcTrackElementType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcTrackElementTypeEnum::operator Ifc4x3_add2::IfcTrackElementTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTransformerTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcTransformerTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTransformerTypeEnum::Class() { return *IFC4X3_ADD2_IfcTransformerTypeEnum_type; } + +Ifc4x3_add2::IfcTransformerTypeEnum::IfcTransformerTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcTransformerTypeEnum::IfcTransformerTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTransformerTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcTransformerTypeEnum::IfcTransformerTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTransformerTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcTransformerTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 9 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CHOPPER", "COMBINED", "CURRENT", "FREQUENCY", "INVERTER", "RECTIFIER", "VOLTAGE", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcTransformerTypeEnum::Value Ifc4x3_add2::IfcTransformerTypeEnum::FromString(const std::string& s) { + if (s == "CHOPPER") return ::Ifc4x3_add2::IfcTransformerTypeEnum::IfcTransformerType_CHOPPER; + if (s == "COMBINED") return ::Ifc4x3_add2::IfcTransformerTypeEnum::IfcTransformerType_COMBINED; + if (s == "CURRENT") return ::Ifc4x3_add2::IfcTransformerTypeEnum::IfcTransformerType_CURRENT; + if (s == "FREQUENCY") return ::Ifc4x3_add2::IfcTransformerTypeEnum::IfcTransformerType_FREQUENCY; + if (s == "INVERTER") return ::Ifc4x3_add2::IfcTransformerTypeEnum::IfcTransformerType_INVERTER; + if (s == "RECTIFIER") return ::Ifc4x3_add2::IfcTransformerTypeEnum::IfcTransformerType_RECTIFIER; + if (s == "VOLTAGE") return ::Ifc4x3_add2::IfcTransformerTypeEnum::IfcTransformerType_VOLTAGE; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcTransformerTypeEnum::IfcTransformerType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcTransformerTypeEnum::IfcTransformerType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcTransformerTypeEnum::operator Ifc4x3_add2::IfcTransformerTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTransitionCode::declaration() const { return *IFC4X3_ADD2_IfcTransitionCode_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTransitionCode::Class() { return *IFC4X3_ADD2_IfcTransitionCode_type; } + +Ifc4x3_add2::IfcTransitionCode::IfcTransitionCode(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcTransitionCode::IfcTransitionCode(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTransitionCode_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcTransitionCode::IfcTransitionCode(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTransitionCode_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcTransitionCode::ToString(Value v) { + if ( v < 0 || v >= 4 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CONTINUOUS", "CONTSAMEGRADIENT", "CONTSAMEGRADIENTSAMECURVATURE", "DISCONTINUOUS" }; + return names[v]; +} + +Ifc4x3_add2::IfcTransitionCode::Value Ifc4x3_add2::IfcTransitionCode::FromString(const std::string& s) { + if (s == "CONTINUOUS") return ::Ifc4x3_add2::IfcTransitionCode::IfcTransitionCode_CONTINUOUS; + if (s == "CONTSAMEGRADIENT") return ::Ifc4x3_add2::IfcTransitionCode::IfcTransitionCode_CONTSAMEGRADIENT; + if (s == "CONTSAMEGRADIENTSAMECURVATURE") return ::Ifc4x3_add2::IfcTransitionCode::IfcTransitionCode_CONTSAMEGRADIENTSAMECURVATURE; + if (s == "DISCONTINUOUS") return ::Ifc4x3_add2::IfcTransitionCode::IfcTransitionCode_DISCONTINUOUS; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcTransitionCode::operator Ifc4x3_add2::IfcTransitionCode::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTransportElementTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcTransportElementTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTransportElementTypeEnum::Class() { return *IFC4X3_ADD2_IfcTransportElementTypeEnum_type; } + +Ifc4x3_add2::IfcTransportElementTypeEnum::IfcTransportElementTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcTransportElementTypeEnum::IfcTransportElementTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTransportElementTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcTransportElementTypeEnum::IfcTransportElementTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTransportElementTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcTransportElementTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 8 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CRANEWAY", "ELEVATOR", "ESCALATOR", "HAULINGGEAR", "LIFTINGGEAR", "MOVINGWALKWAY", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcTransportElementTypeEnum::Value Ifc4x3_add2::IfcTransportElementTypeEnum::FromString(const std::string& s) { + if (s == "CRANEWAY") return ::Ifc4x3_add2::IfcTransportElementTypeEnum::IfcTransportElementType_CRANEWAY; + if (s == "ELEVATOR") return ::Ifc4x3_add2::IfcTransportElementTypeEnum::IfcTransportElementType_ELEVATOR; + if (s == "ESCALATOR") return ::Ifc4x3_add2::IfcTransportElementTypeEnum::IfcTransportElementType_ESCALATOR; + if (s == "HAULINGGEAR") return ::Ifc4x3_add2::IfcTransportElementTypeEnum::IfcTransportElementType_HAULINGGEAR; + if (s == "LIFTINGGEAR") return ::Ifc4x3_add2::IfcTransportElementTypeEnum::IfcTransportElementType_LIFTINGGEAR; + if (s == "MOVINGWALKWAY") return ::Ifc4x3_add2::IfcTransportElementTypeEnum::IfcTransportElementType_MOVINGWALKWAY; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcTransportElementTypeEnum::IfcTransportElementType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcTransportElementTypeEnum::IfcTransportElementType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcTransportElementTypeEnum::operator Ifc4x3_add2::IfcTransportElementTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTrimmingPreference::declaration() const { return *IFC4X3_ADD2_IfcTrimmingPreference_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTrimmingPreference::Class() { return *IFC4X3_ADD2_IfcTrimmingPreference_type; } + +Ifc4x3_add2::IfcTrimmingPreference::IfcTrimmingPreference(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcTrimmingPreference::IfcTrimmingPreference(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTrimmingPreference_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcTrimmingPreference::IfcTrimmingPreference(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTrimmingPreference_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcTrimmingPreference::ToString(Value v) { + if ( v < 0 || v >= 3 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CARTESIAN", "PARAMETER", "UNSPECIFIED" }; + return names[v]; +} + +Ifc4x3_add2::IfcTrimmingPreference::Value Ifc4x3_add2::IfcTrimmingPreference::FromString(const std::string& s) { + if (s == "CARTESIAN") return ::Ifc4x3_add2::IfcTrimmingPreference::IfcTrimmingPreference_CARTESIAN; + if (s == "PARAMETER") return ::Ifc4x3_add2::IfcTrimmingPreference::IfcTrimmingPreference_PARAMETER; + if (s == "UNSPECIFIED") return ::Ifc4x3_add2::IfcTrimmingPreference::IfcTrimmingPreference_UNSPECIFIED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcTrimmingPreference::operator Ifc4x3_add2::IfcTrimmingPreference::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTubeBundleTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcTubeBundleTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcTubeBundleTypeEnum::Class() { return *IFC4X3_ADD2_IfcTubeBundleTypeEnum_type; } + +Ifc4x3_add2::IfcTubeBundleTypeEnum::IfcTubeBundleTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcTubeBundleTypeEnum::IfcTubeBundleTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTubeBundleTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcTubeBundleTypeEnum::IfcTubeBundleTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTubeBundleTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcTubeBundleTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 3 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "FINNED", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcTubeBundleTypeEnum::Value Ifc4x3_add2::IfcTubeBundleTypeEnum::FromString(const std::string& s) { + if (s == "FINNED") return ::Ifc4x3_add2::IfcTubeBundleTypeEnum::IfcTubeBundleType_FINNED; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcTubeBundleTypeEnum::IfcTubeBundleType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcTubeBundleTypeEnum::IfcTubeBundleType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcTubeBundleTypeEnum::operator Ifc4x3_add2::IfcTubeBundleTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcUnitEnum::declaration() const { return *IFC4X3_ADD2_IfcUnitEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcUnitEnum::Class() { return *IFC4X3_ADD2_IfcUnitEnum_type; } + +Ifc4x3_add2::IfcUnitEnum::IfcUnitEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcUnitEnum::IfcUnitEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcUnitEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcUnitEnum::IfcUnitEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcUnitEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcUnitEnum::ToString(Value v) { + if ( v < 0 || v >= 30 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ABSORBEDDOSEUNIT", "AMOUNTOFSUBSTANCEUNIT", "AREAUNIT", "DOSEEQUIVALENTUNIT", "ELECTRICCAPACITANCEUNIT", "ELECTRICCHARGEUNIT", "ELECTRICCONDUCTANCEUNIT", "ELECTRICCURRENTUNIT", "ELECTRICRESISTANCEUNIT", "ELECTRICVOLTAGEUNIT", "ENERGYUNIT", "FORCEUNIT", "FREQUENCYUNIT", "ILLUMINANCEUNIT", "INDUCTANCEUNIT", "LENGTHUNIT", "LUMINOUSFLUXUNIT", "LUMINOUSINTENSITYUNIT", "MAGNETICFLUXDENSITYUNIT", "MAGNETICFLUXUNIT", "MASSUNIT", "PLANEANGLEUNIT", "POWERUNIT", "PRESSUREUNIT", "RADIOACTIVITYUNIT", "SOLIDANGLEUNIT", "THERMODYNAMICTEMPERATUREUNIT", "TIMEUNIT", "VOLUMEUNIT", "USERDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcUnitEnum::Value Ifc4x3_add2::IfcUnitEnum::FromString(const std::string& s) { + if (s == "ABSORBEDDOSEUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_ABSORBEDDOSEUNIT; + if (s == "AMOUNTOFSUBSTANCEUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_AMOUNTOFSUBSTANCEUNIT; + if (s == "AREAUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_AREAUNIT; + if (s == "DOSEEQUIVALENTUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_DOSEEQUIVALENTUNIT; + if (s == "ELECTRICCAPACITANCEUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_ELECTRICCAPACITANCEUNIT; + if (s == "ELECTRICCHARGEUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_ELECTRICCHARGEUNIT; + if (s == "ELECTRICCONDUCTANCEUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_ELECTRICCONDUCTANCEUNIT; + if (s == "ELECTRICCURRENTUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_ELECTRICCURRENTUNIT; + if (s == "ELECTRICRESISTANCEUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_ELECTRICRESISTANCEUNIT; + if (s == "ELECTRICVOLTAGEUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_ELECTRICVOLTAGEUNIT; + if (s == "ENERGYUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_ENERGYUNIT; + if (s == "FORCEUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_FORCEUNIT; + if (s == "FREQUENCYUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_FREQUENCYUNIT; + if (s == "ILLUMINANCEUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_ILLUMINANCEUNIT; + if (s == "INDUCTANCEUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_INDUCTANCEUNIT; + if (s == "LENGTHUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_LENGTHUNIT; + if (s == "LUMINOUSFLUXUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_LUMINOUSFLUXUNIT; + if (s == "LUMINOUSINTENSITYUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_LUMINOUSINTENSITYUNIT; + if (s == "MAGNETICFLUXDENSITYUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_MAGNETICFLUXDENSITYUNIT; + if (s == "MAGNETICFLUXUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_MAGNETICFLUXUNIT; + if (s == "MASSUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_MASSUNIT; + if (s == "PLANEANGLEUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_PLANEANGLEUNIT; + if (s == "POWERUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_POWERUNIT; + if (s == "PRESSUREUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_PRESSUREUNIT; + if (s == "RADIOACTIVITYUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_RADIOACTIVITYUNIT; + if (s == "SOLIDANGLEUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_SOLIDANGLEUNIT; + if (s == "THERMODYNAMICTEMPERATUREUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_THERMODYNAMICTEMPERATUREUNIT; + if (s == "TIMEUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_TIMEUNIT; + if (s == "VOLUMEUNIT") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_VOLUMEUNIT; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcUnitEnum::IfcUnit_USERDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcUnitEnum::operator Ifc4x3_add2::IfcUnitEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcUnitaryControlElementTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::Class() { return *IFC4X3_ADD2_IfcUnitaryControlElementTypeEnum_type; } + +Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::IfcUnitaryControlElementTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::IfcUnitaryControlElementTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcUnitaryControlElementTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::IfcUnitaryControlElementTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcUnitaryControlElementTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 12 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ALARMPANEL", "BASESTATIONCONTROLLER", "COMBINED", "CONTROLPANEL", "GASDETECTIONPANEL", "HUMIDISTAT", "INDICATORPANEL", "MIMICPANEL", "THERMOSTAT", "WEATHERSTATION", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::Value Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::FromString(const std::string& s) { + if (s == "ALARMPANEL") return ::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::IfcUnitaryControlElementType_ALARMPANEL; + if (s == "BASESTATIONCONTROLLER") return ::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::IfcUnitaryControlElementType_BASESTATIONCONTROLLER; + if (s == "COMBINED") return ::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::IfcUnitaryControlElementType_COMBINED; + if (s == "CONTROLPANEL") return ::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::IfcUnitaryControlElementType_CONTROLPANEL; + if (s == "GASDETECTIONPANEL") return ::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::IfcUnitaryControlElementType_GASDETECTIONPANEL; + if (s == "HUMIDISTAT") return ::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::IfcUnitaryControlElementType_HUMIDISTAT; + if (s == "INDICATORPANEL") return ::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::IfcUnitaryControlElementType_INDICATORPANEL; + if (s == "MIMICPANEL") return ::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::IfcUnitaryControlElementType_MIMICPANEL; + if (s == "THERMOSTAT") return ::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::IfcUnitaryControlElementType_THERMOSTAT; + if (s == "WEATHERSTATION") return ::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::IfcUnitaryControlElementType_WEATHERSTATION; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::IfcUnitaryControlElementType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::IfcUnitaryControlElementType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::operator Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcUnitaryEquipmentTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::Class() { return *IFC4X3_ADD2_IfcUnitaryEquipmentTypeEnum_type; } + +Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::IfcUnitaryEquipmentTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::IfcUnitaryEquipmentTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcUnitaryEquipmentTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::IfcUnitaryEquipmentTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcUnitaryEquipmentTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 7 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "AIRCONDITIONINGUNIT", "AIRHANDLER", "DEHUMIDIFIER", "ROOFTOPUNIT", "SPLITSYSTEM", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::Value Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::FromString(const std::string& s) { + if (s == "AIRCONDITIONINGUNIT") return ::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::IfcUnitaryEquipmentType_AIRCONDITIONINGUNIT; + if (s == "AIRHANDLER") return ::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::IfcUnitaryEquipmentType_AIRHANDLER; + if (s == "DEHUMIDIFIER") return ::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::IfcUnitaryEquipmentType_DEHUMIDIFIER; + if (s == "ROOFTOPUNIT") return ::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::IfcUnitaryEquipmentType_ROOFTOPUNIT; + if (s == "SPLITSYSTEM") return ::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::IfcUnitaryEquipmentType_SPLITSYSTEM; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::IfcUnitaryEquipmentType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::IfcUnitaryEquipmentType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::operator Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcValveTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcValveTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcValveTypeEnum::Class() { return *IFC4X3_ADD2_IfcValveTypeEnum_type; } + +Ifc4x3_add2::IfcValveTypeEnum::IfcValveTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcValveTypeEnum::IfcValveTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcValveTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcValveTypeEnum::IfcValveTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcValveTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcValveTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 23 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "AIRRELEASE", "ANTIVACUUM", "CHANGEOVER", "CHECK", "COMMISSIONING", "DIVERTING", "DOUBLECHECK", "DOUBLEREGULATING", "DRAWOFFCOCK", "FAUCET", "FLUSHING", "GASCOCK", "GASTAP", "ISOLATING", "MIXING", "PRESSUREREDUCING", "PRESSURERELIEF", "REGULATING", "SAFETYCUTOFF", "STEAMTRAP", "STOPCOCK", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcValveTypeEnum::Value Ifc4x3_add2::IfcValveTypeEnum::FromString(const std::string& s) { + if (s == "AIRRELEASE") return ::Ifc4x3_add2::IfcValveTypeEnum::IfcValveType_AIRRELEASE; + if (s == "ANTIVACUUM") return ::Ifc4x3_add2::IfcValveTypeEnum::IfcValveType_ANTIVACUUM; + if (s == "CHANGEOVER") return ::Ifc4x3_add2::IfcValveTypeEnum::IfcValveType_CHANGEOVER; + if (s == "CHECK") return ::Ifc4x3_add2::IfcValveTypeEnum::IfcValveType_CHECK; + if (s == "COMMISSIONING") return ::Ifc4x3_add2::IfcValveTypeEnum::IfcValveType_COMMISSIONING; + if (s == "DIVERTING") return ::Ifc4x3_add2::IfcValveTypeEnum::IfcValveType_DIVERTING; + if (s == "DOUBLECHECK") return ::Ifc4x3_add2::IfcValveTypeEnum::IfcValveType_DOUBLECHECK; + if (s == "DOUBLEREGULATING") return ::Ifc4x3_add2::IfcValveTypeEnum::IfcValveType_DOUBLEREGULATING; + if (s == "DRAWOFFCOCK") return ::Ifc4x3_add2::IfcValveTypeEnum::IfcValveType_DRAWOFFCOCK; + if (s == "FAUCET") return ::Ifc4x3_add2::IfcValveTypeEnum::IfcValveType_FAUCET; + if (s == "FLUSHING") return ::Ifc4x3_add2::IfcValveTypeEnum::IfcValveType_FLUSHING; + if (s == "GASCOCK") return ::Ifc4x3_add2::IfcValveTypeEnum::IfcValveType_GASCOCK; + if (s == "GASTAP") return ::Ifc4x3_add2::IfcValveTypeEnum::IfcValveType_GASTAP; + if (s == "ISOLATING") return ::Ifc4x3_add2::IfcValveTypeEnum::IfcValveType_ISOLATING; + if (s == "MIXING") return ::Ifc4x3_add2::IfcValveTypeEnum::IfcValveType_MIXING; + if (s == "PRESSUREREDUCING") return ::Ifc4x3_add2::IfcValveTypeEnum::IfcValveType_PRESSUREREDUCING; + if (s == "PRESSURERELIEF") return ::Ifc4x3_add2::IfcValveTypeEnum::IfcValveType_PRESSURERELIEF; + if (s == "REGULATING") return ::Ifc4x3_add2::IfcValveTypeEnum::IfcValveType_REGULATING; + if (s == "SAFETYCUTOFF") return ::Ifc4x3_add2::IfcValveTypeEnum::IfcValveType_SAFETYCUTOFF; + if (s == "STEAMTRAP") return ::Ifc4x3_add2::IfcValveTypeEnum::IfcValveType_STEAMTRAP; + if (s == "STOPCOCK") return ::Ifc4x3_add2::IfcValveTypeEnum::IfcValveType_STOPCOCK; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcValveTypeEnum::IfcValveType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcValveTypeEnum::IfcValveType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcValveTypeEnum::operator Ifc4x3_add2::IfcValveTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcVehicleTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcVehicleTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcVehicleTypeEnum::Class() { return *IFC4X3_ADD2_IfcVehicleTypeEnum_type; } + +Ifc4x3_add2::IfcVehicleTypeEnum::IfcVehicleTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcVehicleTypeEnum::IfcVehicleTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVehicleTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcVehicleTypeEnum::IfcVehicleTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVehicleTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcVehicleTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 9 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CARGO", "ROLLINGSTOCK", "VEHICLE", "VEHICLEAIR", "VEHICLEMARINE", "VEHICLETRACKED", "VEHICLEWHEELED", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcVehicleTypeEnum::Value Ifc4x3_add2::IfcVehicleTypeEnum::FromString(const std::string& s) { + if (s == "CARGO") return ::Ifc4x3_add2::IfcVehicleTypeEnum::IfcVehicleType_CARGO; + if (s == "ROLLINGSTOCK") return ::Ifc4x3_add2::IfcVehicleTypeEnum::IfcVehicleType_ROLLINGSTOCK; + if (s == "VEHICLE") return ::Ifc4x3_add2::IfcVehicleTypeEnum::IfcVehicleType_VEHICLE; + if (s == "VEHICLEAIR") return ::Ifc4x3_add2::IfcVehicleTypeEnum::IfcVehicleType_VEHICLEAIR; + if (s == "VEHICLEMARINE") return ::Ifc4x3_add2::IfcVehicleTypeEnum::IfcVehicleType_VEHICLEMARINE; + if (s == "VEHICLETRACKED") return ::Ifc4x3_add2::IfcVehicleTypeEnum::IfcVehicleType_VEHICLETRACKED; + if (s == "VEHICLEWHEELED") return ::Ifc4x3_add2::IfcVehicleTypeEnum::IfcVehicleType_VEHICLEWHEELED; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcVehicleTypeEnum::IfcVehicleType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcVehicleTypeEnum::IfcVehicleType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcVehicleTypeEnum::operator Ifc4x3_add2::IfcVehicleTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcVibrationDamperTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcVibrationDamperTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcVibrationDamperTypeEnum::Class() { return *IFC4X3_ADD2_IfcVibrationDamperTypeEnum_type; } + +Ifc4x3_add2::IfcVibrationDamperTypeEnum::IfcVibrationDamperTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcVibrationDamperTypeEnum::IfcVibrationDamperTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVibrationDamperTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcVibrationDamperTypeEnum::IfcVibrationDamperTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVibrationDamperTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcVibrationDamperTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 8 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "AXIAL_YIELD", "BENDING_YIELD", "FRICTION", "RUBBER", "SHEAR_YIELD", "VISCOUS", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcVibrationDamperTypeEnum::Value Ifc4x3_add2::IfcVibrationDamperTypeEnum::FromString(const std::string& s) { + if (s == "AXIAL_YIELD") return ::Ifc4x3_add2::IfcVibrationDamperTypeEnum::IfcVibrationDamperType_AXIAL_YIELD; + if (s == "BENDING_YIELD") return ::Ifc4x3_add2::IfcVibrationDamperTypeEnum::IfcVibrationDamperType_BENDING_YIELD; + if (s == "FRICTION") return ::Ifc4x3_add2::IfcVibrationDamperTypeEnum::IfcVibrationDamperType_FRICTION; + if (s == "RUBBER") return ::Ifc4x3_add2::IfcVibrationDamperTypeEnum::IfcVibrationDamperType_RUBBER; + if (s == "SHEAR_YIELD") return ::Ifc4x3_add2::IfcVibrationDamperTypeEnum::IfcVibrationDamperType_SHEAR_YIELD; + if (s == "VISCOUS") return ::Ifc4x3_add2::IfcVibrationDamperTypeEnum::IfcVibrationDamperType_VISCOUS; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcVibrationDamperTypeEnum::IfcVibrationDamperType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcVibrationDamperTypeEnum::IfcVibrationDamperType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcVibrationDamperTypeEnum::operator Ifc4x3_add2::IfcVibrationDamperTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcVibrationIsolatorTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::Class() { return *IFC4X3_ADD2_IfcVibrationIsolatorTypeEnum_type; } + +Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::IfcVibrationIsolatorTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::IfcVibrationIsolatorTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVibrationIsolatorTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::IfcVibrationIsolatorTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVibrationIsolatorTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BASE", "COMPRESSION", "SPRING", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::Value Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::FromString(const std::string& s) { + if (s == "BASE") return ::Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::IfcVibrationIsolatorType_BASE; + if (s == "COMPRESSION") return ::Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::IfcVibrationIsolatorType_COMPRESSION; + if (s == "SPRING") return ::Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::IfcVibrationIsolatorType_SPRING; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::IfcVibrationIsolatorType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::IfcVibrationIsolatorType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::operator Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcVirtualElementTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcVirtualElementTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcVirtualElementTypeEnum::Class() { return *IFC4X3_ADD2_IfcVirtualElementTypeEnum_type; } + +Ifc4x3_add2::IfcVirtualElementTypeEnum::IfcVirtualElementTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcVirtualElementTypeEnum::IfcVirtualElementTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVirtualElementTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcVirtualElementTypeEnum::IfcVirtualElementTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVirtualElementTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcVirtualElementTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BOUNDARY", "CLEARANCE", "PROVISIONFORVOID", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcVirtualElementTypeEnum::Value Ifc4x3_add2::IfcVirtualElementTypeEnum::FromString(const std::string& s) { + if (s == "BOUNDARY") return ::Ifc4x3_add2::IfcVirtualElementTypeEnum::IfcVirtualElementType_BOUNDARY; + if (s == "CLEARANCE") return ::Ifc4x3_add2::IfcVirtualElementTypeEnum::IfcVirtualElementType_CLEARANCE; + if (s == "PROVISIONFORVOID") return ::Ifc4x3_add2::IfcVirtualElementTypeEnum::IfcVirtualElementType_PROVISIONFORVOID; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcVirtualElementTypeEnum::IfcVirtualElementType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcVirtualElementTypeEnum::IfcVirtualElementType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcVirtualElementTypeEnum::operator Ifc4x3_add2::IfcVirtualElementTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcVoidingFeatureTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcVoidingFeatureTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcVoidingFeatureTypeEnum::Class() { return *IFC4X3_ADD2_IfcVoidingFeatureTypeEnum_type; } + +Ifc4x3_add2::IfcVoidingFeatureTypeEnum::IfcVoidingFeatureTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcVoidingFeatureTypeEnum::IfcVoidingFeatureTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVoidingFeatureTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcVoidingFeatureTypeEnum::IfcVoidingFeatureTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVoidingFeatureTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcVoidingFeatureTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 8 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "CHAMFER", "CUTOUT", "EDGE", "HOLE", "MITER", "NOTCH", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcVoidingFeatureTypeEnum::Value Ifc4x3_add2::IfcVoidingFeatureTypeEnum::FromString(const std::string& s) { + if (s == "CHAMFER") return ::Ifc4x3_add2::IfcVoidingFeatureTypeEnum::IfcVoidingFeatureType_CHAMFER; + if (s == "CUTOUT") return ::Ifc4x3_add2::IfcVoidingFeatureTypeEnum::IfcVoidingFeatureType_CUTOUT; + if (s == "EDGE") return ::Ifc4x3_add2::IfcVoidingFeatureTypeEnum::IfcVoidingFeatureType_EDGE; + if (s == "HOLE") return ::Ifc4x3_add2::IfcVoidingFeatureTypeEnum::IfcVoidingFeatureType_HOLE; + if (s == "MITER") return ::Ifc4x3_add2::IfcVoidingFeatureTypeEnum::IfcVoidingFeatureType_MITER; + if (s == "NOTCH") return ::Ifc4x3_add2::IfcVoidingFeatureTypeEnum::IfcVoidingFeatureType_NOTCH; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcVoidingFeatureTypeEnum::IfcVoidingFeatureType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcVoidingFeatureTypeEnum::IfcVoidingFeatureType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcVoidingFeatureTypeEnum::operator Ifc4x3_add2::IfcVoidingFeatureTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcWallTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcWallTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcWallTypeEnum::Class() { return *IFC4X3_ADD2_IfcWallTypeEnum_type; } + +Ifc4x3_add2::IfcWallTypeEnum::IfcWallTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcWallTypeEnum::IfcWallTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWallTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcWallTypeEnum::IfcWallTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWallTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcWallTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 13 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ELEMENTEDWALL", "MOVABLE", "PARAPET", "PARTITIONING", "PLUMBINGWALL", "POLYGONAL", "RETAININGWALL", "SHEAR", "SOLIDWALL", "STANDARD", "WAVEWALL", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcWallTypeEnum::Value Ifc4x3_add2::IfcWallTypeEnum::FromString(const std::string& s) { + if (s == "ELEMENTEDWALL") return ::Ifc4x3_add2::IfcWallTypeEnum::IfcWallType_ELEMENTEDWALL; + if (s == "MOVABLE") return ::Ifc4x3_add2::IfcWallTypeEnum::IfcWallType_MOVABLE; + if (s == "PARAPET") return ::Ifc4x3_add2::IfcWallTypeEnum::IfcWallType_PARAPET; + if (s == "PARTITIONING") return ::Ifc4x3_add2::IfcWallTypeEnum::IfcWallType_PARTITIONING; + if (s == "PLUMBINGWALL") return ::Ifc4x3_add2::IfcWallTypeEnum::IfcWallType_PLUMBINGWALL; + if (s == "POLYGONAL") return ::Ifc4x3_add2::IfcWallTypeEnum::IfcWallType_POLYGONAL; + if (s == "RETAININGWALL") return ::Ifc4x3_add2::IfcWallTypeEnum::IfcWallType_RETAININGWALL; + if (s == "SHEAR") return ::Ifc4x3_add2::IfcWallTypeEnum::IfcWallType_SHEAR; + if (s == "SOLIDWALL") return ::Ifc4x3_add2::IfcWallTypeEnum::IfcWallType_SOLIDWALL; + if (s == "STANDARD") return ::Ifc4x3_add2::IfcWallTypeEnum::IfcWallType_STANDARD; + if (s == "WAVEWALL") return ::Ifc4x3_add2::IfcWallTypeEnum::IfcWallType_WAVEWALL; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcWallTypeEnum::IfcWallType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcWallTypeEnum::IfcWallType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcWallTypeEnum::operator Ifc4x3_add2::IfcWallTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcWasteTerminalTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcWasteTerminalTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcWasteTerminalTypeEnum::Class() { return *IFC4X3_ADD2_IfcWasteTerminalTypeEnum_type; } + +Ifc4x3_add2::IfcWasteTerminalTypeEnum::IfcWasteTerminalTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcWasteTerminalTypeEnum::IfcWasteTerminalTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWasteTerminalTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcWasteTerminalTypeEnum::IfcWasteTerminalTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWasteTerminalTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcWasteTerminalTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 9 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "FLOORTRAP", "FLOORWASTE", "GULLYSUMP", "GULLYTRAP", "ROOFDRAIN", "WASTEDISPOSALUNIT", "WASTETRAP", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcWasteTerminalTypeEnum::Value Ifc4x3_add2::IfcWasteTerminalTypeEnum::FromString(const std::string& s) { + if (s == "FLOORTRAP") return ::Ifc4x3_add2::IfcWasteTerminalTypeEnum::IfcWasteTerminalType_FLOORTRAP; + if (s == "FLOORWASTE") return ::Ifc4x3_add2::IfcWasteTerminalTypeEnum::IfcWasteTerminalType_FLOORWASTE; + if (s == "GULLYSUMP") return ::Ifc4x3_add2::IfcWasteTerminalTypeEnum::IfcWasteTerminalType_GULLYSUMP; + if (s == "GULLYTRAP") return ::Ifc4x3_add2::IfcWasteTerminalTypeEnum::IfcWasteTerminalType_GULLYTRAP; + if (s == "ROOFDRAIN") return ::Ifc4x3_add2::IfcWasteTerminalTypeEnum::IfcWasteTerminalType_ROOFDRAIN; + if (s == "WASTEDISPOSALUNIT") return ::Ifc4x3_add2::IfcWasteTerminalTypeEnum::IfcWasteTerminalType_WASTEDISPOSALUNIT; + if (s == "WASTETRAP") return ::Ifc4x3_add2::IfcWasteTerminalTypeEnum::IfcWasteTerminalType_WASTETRAP; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcWasteTerminalTypeEnum::IfcWasteTerminalType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcWasteTerminalTypeEnum::IfcWasteTerminalType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcWasteTerminalTypeEnum::operator Ifc4x3_add2::IfcWasteTerminalTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcWindowPanelOperationEnum::declaration() const { return *IFC4X3_ADD2_IfcWindowPanelOperationEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcWindowPanelOperationEnum::Class() { return *IFC4X3_ADD2_IfcWindowPanelOperationEnum_type; } + +Ifc4x3_add2::IfcWindowPanelOperationEnum::IfcWindowPanelOperationEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcWindowPanelOperationEnum::IfcWindowPanelOperationEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWindowPanelOperationEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcWindowPanelOperationEnum::IfcWindowPanelOperationEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWindowPanelOperationEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcWindowPanelOperationEnum::ToString(Value v) { + if ( v < 0 || v >= 14 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BOTTOMHUNG", "FIXEDCASEMENT", "OTHEROPERATION", "PIVOTHORIZONTAL", "PIVOTVERTICAL", "REMOVABLECASEMENT", "SIDEHUNGLEFTHAND", "SIDEHUNGRIGHTHAND", "SLIDINGHORIZONTAL", "SLIDINGVERTICAL", "TILTANDTURNLEFTHAND", "TILTANDTURNRIGHTHAND", "TOPHUNG", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcWindowPanelOperationEnum::Value Ifc4x3_add2::IfcWindowPanelOperationEnum::FromString(const std::string& s) { + if (s == "BOTTOMHUNG") return ::Ifc4x3_add2::IfcWindowPanelOperationEnum::IfcWindowPanelOperation_BOTTOMHUNG; + if (s == "FIXEDCASEMENT") return ::Ifc4x3_add2::IfcWindowPanelOperationEnum::IfcWindowPanelOperation_FIXEDCASEMENT; + if (s == "OTHEROPERATION") return ::Ifc4x3_add2::IfcWindowPanelOperationEnum::IfcWindowPanelOperation_OTHEROPERATION; + if (s == "PIVOTHORIZONTAL") return ::Ifc4x3_add2::IfcWindowPanelOperationEnum::IfcWindowPanelOperation_PIVOTHORIZONTAL; + if (s == "PIVOTVERTICAL") return ::Ifc4x3_add2::IfcWindowPanelOperationEnum::IfcWindowPanelOperation_PIVOTVERTICAL; + if (s == "REMOVABLECASEMENT") return ::Ifc4x3_add2::IfcWindowPanelOperationEnum::IfcWindowPanelOperation_REMOVABLECASEMENT; + if (s == "SIDEHUNGLEFTHAND") return ::Ifc4x3_add2::IfcWindowPanelOperationEnum::IfcWindowPanelOperation_SIDEHUNGLEFTHAND; + if (s == "SIDEHUNGRIGHTHAND") return ::Ifc4x3_add2::IfcWindowPanelOperationEnum::IfcWindowPanelOperation_SIDEHUNGRIGHTHAND; + if (s == "SLIDINGHORIZONTAL") return ::Ifc4x3_add2::IfcWindowPanelOperationEnum::IfcWindowPanelOperation_SLIDINGHORIZONTAL; + if (s == "SLIDINGVERTICAL") return ::Ifc4x3_add2::IfcWindowPanelOperationEnum::IfcWindowPanelOperation_SLIDINGVERTICAL; + if (s == "TILTANDTURNLEFTHAND") return ::Ifc4x3_add2::IfcWindowPanelOperationEnum::IfcWindowPanelOperation_TILTANDTURNLEFTHAND; + if (s == "TILTANDTURNRIGHTHAND") return ::Ifc4x3_add2::IfcWindowPanelOperationEnum::IfcWindowPanelOperation_TILTANDTURNRIGHTHAND; + if (s == "TOPHUNG") return ::Ifc4x3_add2::IfcWindowPanelOperationEnum::IfcWindowPanelOperation_TOPHUNG; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcWindowPanelOperationEnum::IfcWindowPanelOperation_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcWindowPanelOperationEnum::operator Ifc4x3_add2::IfcWindowPanelOperationEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcWindowPanelPositionEnum::declaration() const { return *IFC4X3_ADD2_IfcWindowPanelPositionEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcWindowPanelPositionEnum::Class() { return *IFC4X3_ADD2_IfcWindowPanelPositionEnum_type; } + +Ifc4x3_add2::IfcWindowPanelPositionEnum::IfcWindowPanelPositionEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcWindowPanelPositionEnum::IfcWindowPanelPositionEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWindowPanelPositionEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcWindowPanelPositionEnum::IfcWindowPanelPositionEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWindowPanelPositionEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcWindowPanelPositionEnum::ToString(Value v) { + if ( v < 0 || v >= 6 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "BOTTOM", "LEFT", "MIDDLE", "RIGHT", "TOP", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcWindowPanelPositionEnum::Value Ifc4x3_add2::IfcWindowPanelPositionEnum::FromString(const std::string& s) { + if (s == "BOTTOM") return ::Ifc4x3_add2::IfcWindowPanelPositionEnum::IfcWindowPanelPosition_BOTTOM; + if (s == "LEFT") return ::Ifc4x3_add2::IfcWindowPanelPositionEnum::IfcWindowPanelPosition_LEFT; + if (s == "MIDDLE") return ::Ifc4x3_add2::IfcWindowPanelPositionEnum::IfcWindowPanelPosition_MIDDLE; + if (s == "RIGHT") return ::Ifc4x3_add2::IfcWindowPanelPositionEnum::IfcWindowPanelPosition_RIGHT; + if (s == "TOP") return ::Ifc4x3_add2::IfcWindowPanelPositionEnum::IfcWindowPanelPosition_TOP; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcWindowPanelPositionEnum::IfcWindowPanelPosition_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcWindowPanelPositionEnum::operator Ifc4x3_add2::IfcWindowPanelPositionEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcWindowTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcWindowTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcWindowTypeEnum::Class() { return *IFC4X3_ADD2_IfcWindowTypeEnum_type; } + +Ifc4x3_add2::IfcWindowTypeEnum::IfcWindowTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcWindowTypeEnum::IfcWindowTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWindowTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcWindowTypeEnum::IfcWindowTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWindowTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcWindowTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "LIGHTDOME", "SKYLIGHT", "WINDOW", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcWindowTypeEnum::Value Ifc4x3_add2::IfcWindowTypeEnum::FromString(const std::string& s) { + if (s == "LIGHTDOME") return ::Ifc4x3_add2::IfcWindowTypeEnum::IfcWindowType_LIGHTDOME; + if (s == "SKYLIGHT") return ::Ifc4x3_add2::IfcWindowTypeEnum::IfcWindowType_SKYLIGHT; + if (s == "WINDOW") return ::Ifc4x3_add2::IfcWindowTypeEnum::IfcWindowType_WINDOW; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcWindowTypeEnum::IfcWindowType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcWindowTypeEnum::IfcWindowType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcWindowTypeEnum::operator Ifc4x3_add2::IfcWindowTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcWindowTypePartitioningEnum::declaration() const { return *IFC4X3_ADD2_IfcWindowTypePartitioningEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcWindowTypePartitioningEnum::Class() { return *IFC4X3_ADD2_IfcWindowTypePartitioningEnum_type; } + +Ifc4x3_add2::IfcWindowTypePartitioningEnum::IfcWindowTypePartitioningEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcWindowTypePartitioningEnum::IfcWindowTypePartitioningEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWindowTypePartitioningEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcWindowTypePartitioningEnum::IfcWindowTypePartitioningEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWindowTypePartitioningEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcWindowTypePartitioningEnum::ToString(Value v) { + if ( v < 0 || v >= 11 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "DOUBLE_PANEL_HORIZONTAL", "DOUBLE_PANEL_VERTICAL", "SINGLE_PANEL", "TRIPLE_PANEL_BOTTOM", "TRIPLE_PANEL_HORIZONTAL", "TRIPLE_PANEL_LEFT", "TRIPLE_PANEL_RIGHT", "TRIPLE_PANEL_TOP", "TRIPLE_PANEL_VERTICAL", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcWindowTypePartitioningEnum::Value Ifc4x3_add2::IfcWindowTypePartitioningEnum::FromString(const std::string& s) { + if (s == "DOUBLE_PANEL_HORIZONTAL") return ::Ifc4x3_add2::IfcWindowTypePartitioningEnum::IfcWindowTypePartitioning_DOUBLE_PANEL_HORIZONTAL; + if (s == "DOUBLE_PANEL_VERTICAL") return ::Ifc4x3_add2::IfcWindowTypePartitioningEnum::IfcWindowTypePartitioning_DOUBLE_PANEL_VERTICAL; + if (s == "SINGLE_PANEL") return ::Ifc4x3_add2::IfcWindowTypePartitioningEnum::IfcWindowTypePartitioning_SINGLE_PANEL; + if (s == "TRIPLE_PANEL_BOTTOM") return ::Ifc4x3_add2::IfcWindowTypePartitioningEnum::IfcWindowTypePartitioning_TRIPLE_PANEL_BOTTOM; + if (s == "TRIPLE_PANEL_HORIZONTAL") return ::Ifc4x3_add2::IfcWindowTypePartitioningEnum::IfcWindowTypePartitioning_TRIPLE_PANEL_HORIZONTAL; + if (s == "TRIPLE_PANEL_LEFT") return ::Ifc4x3_add2::IfcWindowTypePartitioningEnum::IfcWindowTypePartitioning_TRIPLE_PANEL_LEFT; + if (s == "TRIPLE_PANEL_RIGHT") return ::Ifc4x3_add2::IfcWindowTypePartitioningEnum::IfcWindowTypePartitioning_TRIPLE_PANEL_RIGHT; + if (s == "TRIPLE_PANEL_TOP") return ::Ifc4x3_add2::IfcWindowTypePartitioningEnum::IfcWindowTypePartitioning_TRIPLE_PANEL_TOP; + if (s == "TRIPLE_PANEL_VERTICAL") return ::Ifc4x3_add2::IfcWindowTypePartitioningEnum::IfcWindowTypePartitioning_TRIPLE_PANEL_VERTICAL; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcWindowTypePartitioningEnum::IfcWindowTypePartitioning_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcWindowTypePartitioningEnum::IfcWindowTypePartitioning_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcWindowTypePartitioningEnum::operator Ifc4x3_add2::IfcWindowTypePartitioningEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcWorkCalendarTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcWorkCalendarTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcWorkCalendarTypeEnum::Class() { return *IFC4X3_ADD2_IfcWorkCalendarTypeEnum_type; } + +Ifc4x3_add2::IfcWorkCalendarTypeEnum::IfcWorkCalendarTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcWorkCalendarTypeEnum::IfcWorkCalendarTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWorkCalendarTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcWorkCalendarTypeEnum::IfcWorkCalendarTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWorkCalendarTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcWorkCalendarTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "FIRSTSHIFT", "SECONDSHIFT", "THIRDSHIFT", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcWorkCalendarTypeEnum::Value Ifc4x3_add2::IfcWorkCalendarTypeEnum::FromString(const std::string& s) { + if (s == "FIRSTSHIFT") return ::Ifc4x3_add2::IfcWorkCalendarTypeEnum::IfcWorkCalendarType_FIRSTSHIFT; + if (s == "SECONDSHIFT") return ::Ifc4x3_add2::IfcWorkCalendarTypeEnum::IfcWorkCalendarType_SECONDSHIFT; + if (s == "THIRDSHIFT") return ::Ifc4x3_add2::IfcWorkCalendarTypeEnum::IfcWorkCalendarType_THIRDSHIFT; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcWorkCalendarTypeEnum::IfcWorkCalendarType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcWorkCalendarTypeEnum::IfcWorkCalendarType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcWorkCalendarTypeEnum::operator Ifc4x3_add2::IfcWorkCalendarTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcWorkPlanTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcWorkPlanTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcWorkPlanTypeEnum::Class() { return *IFC4X3_ADD2_IfcWorkPlanTypeEnum_type; } + +Ifc4x3_add2::IfcWorkPlanTypeEnum::IfcWorkPlanTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcWorkPlanTypeEnum::IfcWorkPlanTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWorkPlanTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcWorkPlanTypeEnum::IfcWorkPlanTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWorkPlanTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcWorkPlanTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ACTUAL", "BASELINE", "PLANNED", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcWorkPlanTypeEnum::Value Ifc4x3_add2::IfcWorkPlanTypeEnum::FromString(const std::string& s) { + if (s == "ACTUAL") return ::Ifc4x3_add2::IfcWorkPlanTypeEnum::IfcWorkPlanType_ACTUAL; + if (s == "BASELINE") return ::Ifc4x3_add2::IfcWorkPlanTypeEnum::IfcWorkPlanType_BASELINE; + if (s == "PLANNED") return ::Ifc4x3_add2::IfcWorkPlanTypeEnum::IfcWorkPlanType_PLANNED; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcWorkPlanTypeEnum::IfcWorkPlanType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcWorkPlanTypeEnum::IfcWorkPlanType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcWorkPlanTypeEnum::operator Ifc4x3_add2::IfcWorkPlanTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::enumeration_type& Ifc4x3_add2::IfcWorkScheduleTypeEnum::declaration() const { return *IFC4X3_ADD2_IfcWorkScheduleTypeEnum_type; } +const IfcParse::enumeration_type& Ifc4x3_add2::IfcWorkScheduleTypeEnum::Class() { return *IFC4X3_ADD2_IfcWorkScheduleTypeEnum_type; } + +Ifc4x3_add2::IfcWorkScheduleTypeEnum::IfcWorkScheduleTypeEnum(IfcEntityInstanceData* e) { + data_ = e; +} + +Ifc4x3_add2::IfcWorkScheduleTypeEnum::IfcWorkScheduleTypeEnum(Value v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWorkScheduleTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,ToString(v))); + data_->setArgument(0,attr); +} + +Ifc4x3_add2::IfcWorkScheduleTypeEnum::IfcWorkScheduleTypeEnum(const std::string& v) { + data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWorkScheduleTypeEnum_type); + IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); + attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(FromString(v),ToString(FromString(v)))); + data_->setArgument(0,attr); +} + +const char* Ifc4x3_add2::IfcWorkScheduleTypeEnum::ToString(Value v) { + if ( v < 0 || v >= 5 ) throw IfcException("Unable to find keyword in schema"); + const char* names[] = { "ACTUAL", "BASELINE", "PLANNED", "USERDEFINED", "NOTDEFINED" }; + return names[v]; +} + +Ifc4x3_add2::IfcWorkScheduleTypeEnum::Value Ifc4x3_add2::IfcWorkScheduleTypeEnum::FromString(const std::string& s) { + if (s == "ACTUAL") return ::Ifc4x3_add2::IfcWorkScheduleTypeEnum::IfcWorkScheduleType_ACTUAL; + if (s == "BASELINE") return ::Ifc4x3_add2::IfcWorkScheduleTypeEnum::IfcWorkScheduleType_BASELINE; + if (s == "PLANNED") return ::Ifc4x3_add2::IfcWorkScheduleTypeEnum::IfcWorkScheduleType_PLANNED; + if (s == "USERDEFINED") return ::Ifc4x3_add2::IfcWorkScheduleTypeEnum::IfcWorkScheduleType_USERDEFINED; + if (s == "NOTDEFINED") return ::Ifc4x3_add2::IfcWorkScheduleTypeEnum::IfcWorkScheduleType_NOTDEFINED; + throw IfcException("Unable to find keyword in schema: " + s); +} + +Ifc4x3_add2::IfcWorkScheduleTypeEnum::operator Ifc4x3_add2::IfcWorkScheduleTypeEnum::Value() const { + return FromString((std::string) *data_->getArgument(0)); +} + +const IfcParse::select_type& Ifc4x3_add2::IfcActorSelect::Class() { return *IFC4X3_ADD2_IfcActorSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcAppliedValueSelect::Class() { return *IFC4X3_ADD2_IfcAppliedValueSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcAxis2Placement::Class() { return *IFC4X3_ADD2_IfcAxis2Placement_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcBendingParameterSelect::Class() { return *IFC4X3_ADD2_IfcBendingParameterSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcBooleanOperand::Class() { return *IFC4X3_ADD2_IfcBooleanOperand_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcClassificationReferenceSelect::Class() { return *IFC4X3_ADD2_IfcClassificationReferenceSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcClassificationSelect::Class() { return *IFC4X3_ADD2_IfcClassificationSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcColour::Class() { return *IFC4X3_ADD2_IfcColour_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcColourOrFactor::Class() { return *IFC4X3_ADD2_IfcColourOrFactor_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcCoordinateReferenceSystemSelect::Class() { return *IFC4X3_ADD2_IfcCoordinateReferenceSystemSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcCsgSelect::Class() { return *IFC4X3_ADD2_IfcCsgSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcCurveFontOrScaledCurveFontSelect::Class() { return *IFC4X3_ADD2_IfcCurveFontOrScaledCurveFontSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcCurveMeasureSelect::Class() { return *IFC4X3_ADD2_IfcCurveMeasureSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcCurveOnSurface::Class() { return *IFC4X3_ADD2_IfcCurveOnSurface_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcCurveOrEdgeCurve::Class() { return *IFC4X3_ADD2_IfcCurveOrEdgeCurve_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcCurveStyleFontSelect::Class() { return *IFC4X3_ADD2_IfcCurveStyleFontSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcDefinitionSelect::Class() { return *IFC4X3_ADD2_IfcDefinitionSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcDerivedMeasureValue::Class() { return *IFC4X3_ADD2_IfcDerivedMeasureValue_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcDocumentSelect::Class() { return *IFC4X3_ADD2_IfcDocumentSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcFillStyleSelect::Class() { return *IFC4X3_ADD2_IfcFillStyleSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcGeometricSetSelect::Class() { return *IFC4X3_ADD2_IfcGeometricSetSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcGridPlacementDirectionSelect::Class() { return *IFC4X3_ADD2_IfcGridPlacementDirectionSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcHatchLineDistanceSelect::Class() { return *IFC4X3_ADD2_IfcHatchLineDistanceSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcInterferenceSelect::Class() { return *IFC4X3_ADD2_IfcInterferenceSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcLayeredItem::Class() { return *IFC4X3_ADD2_IfcLayeredItem_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcLibrarySelect::Class() { return *IFC4X3_ADD2_IfcLibrarySelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcLightDistributionDataSourceSelect::Class() { return *IFC4X3_ADD2_IfcLightDistributionDataSourceSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcMaterialSelect::Class() { return *IFC4X3_ADD2_IfcMaterialSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcMeasureValue::Class() { return *IFC4X3_ADD2_IfcMeasureValue_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcMetricValueSelect::Class() { return *IFC4X3_ADD2_IfcMetricValueSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionSelect::Class() { return *IFC4X3_ADD2_IfcModulusOfRotationalSubgradeReactionSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcModulusOfSubgradeReactionSelect::Class() { return *IFC4X3_ADD2_IfcModulusOfSubgradeReactionSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcModulusOfTranslationalSubgradeReactionSelect::Class() { return *IFC4X3_ADD2_IfcModulusOfTranslationalSubgradeReactionSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcObjectReferenceSelect::Class() { return *IFC4X3_ADD2_IfcObjectReferenceSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcPointOrVertexPoint::Class() { return *IFC4X3_ADD2_IfcPointOrVertexPoint_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcProcessSelect::Class() { return *IFC4X3_ADD2_IfcProcessSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcProductRepresentationSelect::Class() { return *IFC4X3_ADD2_IfcProductRepresentationSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcProductSelect::Class() { return *IFC4X3_ADD2_IfcProductSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcPropertySetDefinitionSelect::Class() { return *IFC4X3_ADD2_IfcPropertySetDefinitionSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcResourceObjectSelect::Class() { return *IFC4X3_ADD2_IfcResourceObjectSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcResourceSelect::Class() { return *IFC4X3_ADD2_IfcResourceSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcRotationalStiffnessSelect::Class() { return *IFC4X3_ADD2_IfcRotationalStiffnessSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcSegmentIndexSelect::Class() { return *IFC4X3_ADD2_IfcSegmentIndexSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcShell::Class() { return *IFC4X3_ADD2_IfcShell_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcSimpleValue::Class() { return *IFC4X3_ADD2_IfcSimpleValue_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcSizeSelect::Class() { return *IFC4X3_ADD2_IfcSizeSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcSolidOrShell::Class() { return *IFC4X3_ADD2_IfcSolidOrShell_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcSpaceBoundarySelect::Class() { return *IFC4X3_ADD2_IfcSpaceBoundarySelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcSpatialReferenceSelect::Class() { return *IFC4X3_ADD2_IfcSpatialReferenceSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcSpecularHighlightSelect::Class() { return *IFC4X3_ADD2_IfcSpecularHighlightSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcStructuralActivityAssignmentSelect::Class() { return *IFC4X3_ADD2_IfcStructuralActivityAssignmentSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcSurfaceOrFaceSurface::Class() { return *IFC4X3_ADD2_IfcSurfaceOrFaceSurface_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcSurfaceStyleElementSelect::Class() { return *IFC4X3_ADD2_IfcSurfaceStyleElementSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcTextFontSelect::Class() { return *IFC4X3_ADD2_IfcTextFontSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcTimeOrRatioSelect::Class() { return *IFC4X3_ADD2_IfcTimeOrRatioSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcTranslationalStiffnessSelect::Class() { return *IFC4X3_ADD2_IfcTranslationalStiffnessSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcTrimmingSelect::Class() { return *IFC4X3_ADD2_IfcTrimmingSelect_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcUnit::Class() { return *IFC4X3_ADD2_IfcUnit_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcValue::Class() { return *IFC4X3_ADD2_IfcValue_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcVectorOrDirection::Class() { return *IFC4X3_ADD2_IfcVectorOrDirection_type; } + +const IfcParse::select_type& Ifc4x3_add2::IfcWarpingStiffnessSelect::Class() { return *IFC4X3_ADD2_IfcWarpingStiffnessSelect_type; } + + +// Function implementations for IfcAbsorbedDoseMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcAbsorbedDoseMeasure::Class() { return *IFC4X3_ADD2_IfcAbsorbedDoseMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcAbsorbedDoseMeasure::declaration() const { return *IFC4X3_ADD2_IfcAbsorbedDoseMeasure_type; } +Ifc4x3_add2::IfcAbsorbedDoseMeasure::IfcAbsorbedDoseMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcAbsorbedDoseMeasure::IfcAbsorbedDoseMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAbsorbedDoseMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcAbsorbedDoseMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcAccelerationMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcAccelerationMeasure::Class() { return *IFC4X3_ADD2_IfcAccelerationMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcAccelerationMeasure::declaration() const { return *IFC4X3_ADD2_IfcAccelerationMeasure_type; } +Ifc4x3_add2::IfcAccelerationMeasure::IfcAccelerationMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcAccelerationMeasure::IfcAccelerationMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAccelerationMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcAccelerationMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcAmountOfSubstanceMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcAmountOfSubstanceMeasure::Class() { return *IFC4X3_ADD2_IfcAmountOfSubstanceMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcAmountOfSubstanceMeasure::declaration() const { return *IFC4X3_ADD2_IfcAmountOfSubstanceMeasure_type; } +Ifc4x3_add2::IfcAmountOfSubstanceMeasure::IfcAmountOfSubstanceMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcAmountOfSubstanceMeasure::IfcAmountOfSubstanceMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAmountOfSubstanceMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcAmountOfSubstanceMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcAngularVelocityMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcAngularVelocityMeasure::Class() { return *IFC4X3_ADD2_IfcAngularVelocityMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcAngularVelocityMeasure::declaration() const { return *IFC4X3_ADD2_IfcAngularVelocityMeasure_type; } +Ifc4x3_add2::IfcAngularVelocityMeasure::IfcAngularVelocityMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcAngularVelocityMeasure::IfcAngularVelocityMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAngularVelocityMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcAngularVelocityMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcArcIndex +const IfcParse::type_declaration& Ifc4x3_add2::IfcArcIndex::Class() { return *IFC4X3_ADD2_IfcArcIndex_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcArcIndex::declaration() const { return *IFC4X3_ADD2_IfcArcIndex_type; } +Ifc4x3_add2::IfcArcIndex::IfcArcIndex(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcArcIndex::IfcArcIndex(std::vector< int > /*[3:3]*/ v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcArcIndex_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcArcIndex::operator std::vector< int > /*[3:3]*/() const { return *data_->getArgument(0); } + +// Function implementations for IfcAreaDensityMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcAreaDensityMeasure::Class() { return *IFC4X3_ADD2_IfcAreaDensityMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcAreaDensityMeasure::declaration() const { return *IFC4X3_ADD2_IfcAreaDensityMeasure_type; } +Ifc4x3_add2::IfcAreaDensityMeasure::IfcAreaDensityMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcAreaDensityMeasure::IfcAreaDensityMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAreaDensityMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcAreaDensityMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcAreaMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcAreaMeasure::Class() { return *IFC4X3_ADD2_IfcAreaMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcAreaMeasure::declaration() const { return *IFC4X3_ADD2_IfcAreaMeasure_type; } +Ifc4x3_add2::IfcAreaMeasure::IfcAreaMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcAreaMeasure::IfcAreaMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAreaMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcAreaMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcBinary +const IfcParse::type_declaration& Ifc4x3_add2::IfcBinary::Class() { return *IFC4X3_ADD2_IfcBinary_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcBinary::declaration() const { return *IFC4X3_ADD2_IfcBinary_type; } +Ifc4x3_add2::IfcBinary::IfcBinary(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcBinary::IfcBinary(boost::dynamic_bitset<> v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBinary_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcBinary::operator boost::dynamic_bitset<>() const { return *data_->getArgument(0); } + +// Function implementations for IfcBoolean +const IfcParse::type_declaration& Ifc4x3_add2::IfcBoolean::Class() { return *IFC4X3_ADD2_IfcBoolean_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcBoolean::declaration() const { return *IFC4X3_ADD2_IfcBoolean_type; } +Ifc4x3_add2::IfcBoolean::IfcBoolean(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcBoolean::IfcBoolean(bool v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBoolean_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcBoolean::operator bool() const { return *data_->getArgument(0); } + +// Function implementations for IfcBoxAlignment +const IfcParse::type_declaration& Ifc4x3_add2::IfcBoxAlignment::Class() { return *IFC4X3_ADD2_IfcBoxAlignment_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcBoxAlignment::declaration() const { return *IFC4X3_ADD2_IfcBoxAlignment_type; } +Ifc4x3_add2::IfcBoxAlignment::IfcBoxAlignment(IfcEntityInstanceData* e) : IfcLabel((IfcEntityInstanceData*)0) { data_ = e; } +Ifc4x3_add2::IfcBoxAlignment::IfcBoxAlignment(std::string v) : IfcLabel((IfcEntityInstanceData*)0) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBoxAlignment_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcBoxAlignment::operator std::string() const { return *data_->getArgument(0); } + +// Function implementations for IfcCardinalPointReference +const IfcParse::type_declaration& Ifc4x3_add2::IfcCardinalPointReference::Class() { return *IFC4X3_ADD2_IfcCardinalPointReference_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcCardinalPointReference::declaration() const { return *IFC4X3_ADD2_IfcCardinalPointReference_type; } +Ifc4x3_add2::IfcCardinalPointReference::IfcCardinalPointReference(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcCardinalPointReference::IfcCardinalPointReference(int v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCardinalPointReference_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcCardinalPointReference::operator int() const { return *data_->getArgument(0); } + +// Function implementations for IfcComplexNumber +const IfcParse::type_declaration& Ifc4x3_add2::IfcComplexNumber::Class() { return *IFC4X3_ADD2_IfcComplexNumber_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcComplexNumber::declaration() const { return *IFC4X3_ADD2_IfcComplexNumber_type; } +Ifc4x3_add2::IfcComplexNumber::IfcComplexNumber(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcComplexNumber::IfcComplexNumber(std::vector< double > /*[1:2]*/ v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcComplexNumber_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcComplexNumber::operator std::vector< double > /*[1:2]*/() const { return *data_->getArgument(0); } + +// Function implementations for IfcCompoundPlaneAngleMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcCompoundPlaneAngleMeasure::Class() { return *IFC4X3_ADD2_IfcCompoundPlaneAngleMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcCompoundPlaneAngleMeasure::declaration() const { return *IFC4X3_ADD2_IfcCompoundPlaneAngleMeasure_type; } +Ifc4x3_add2::IfcCompoundPlaneAngleMeasure::IfcCompoundPlaneAngleMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcCompoundPlaneAngleMeasure::IfcCompoundPlaneAngleMeasure(std::vector< int > /*[3:4]*/ v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCompoundPlaneAngleMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcCompoundPlaneAngleMeasure::operator std::vector< int > /*[3:4]*/() const { return *data_->getArgument(0); } + +// Function implementations for IfcContextDependentMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcContextDependentMeasure::Class() { return *IFC4X3_ADD2_IfcContextDependentMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcContextDependentMeasure::declaration() const { return *IFC4X3_ADD2_IfcContextDependentMeasure_type; } +Ifc4x3_add2::IfcContextDependentMeasure::IfcContextDependentMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcContextDependentMeasure::IfcContextDependentMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcContextDependentMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcContextDependentMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcCountMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcCountMeasure::Class() { return *IFC4X3_ADD2_IfcCountMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcCountMeasure::declaration() const { return *IFC4X3_ADD2_IfcCountMeasure_type; } +Ifc4x3_add2::IfcCountMeasure::IfcCountMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcCountMeasure::IfcCountMeasure(int v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCountMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcCountMeasure::operator int() const { return *data_->getArgument(0); } + +// Function implementations for IfcCurvatureMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcCurvatureMeasure::Class() { return *IFC4X3_ADD2_IfcCurvatureMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcCurvatureMeasure::declaration() const { return *IFC4X3_ADD2_IfcCurvatureMeasure_type; } +Ifc4x3_add2::IfcCurvatureMeasure::IfcCurvatureMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcCurvatureMeasure::IfcCurvatureMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCurvatureMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcCurvatureMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcDate +const IfcParse::type_declaration& Ifc4x3_add2::IfcDate::Class() { return *IFC4X3_ADD2_IfcDate_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcDate::declaration() const { return *IFC4X3_ADD2_IfcDate_type; } +Ifc4x3_add2::IfcDate::IfcDate(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcDate::IfcDate(std::string v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDate_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcDate::operator std::string() const { return *data_->getArgument(0); } + +// Function implementations for IfcDateTime +const IfcParse::type_declaration& Ifc4x3_add2::IfcDateTime::Class() { return *IFC4X3_ADD2_IfcDateTime_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcDateTime::declaration() const { return *IFC4X3_ADD2_IfcDateTime_type; } +Ifc4x3_add2::IfcDateTime::IfcDateTime(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcDateTime::IfcDateTime(std::string v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDateTime_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcDateTime::operator std::string() const { return *data_->getArgument(0); } + +// Function implementations for IfcDayInMonthNumber +const IfcParse::type_declaration& Ifc4x3_add2::IfcDayInMonthNumber::Class() { return *IFC4X3_ADD2_IfcDayInMonthNumber_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcDayInMonthNumber::declaration() const { return *IFC4X3_ADD2_IfcDayInMonthNumber_type; } +Ifc4x3_add2::IfcDayInMonthNumber::IfcDayInMonthNumber(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcDayInMonthNumber::IfcDayInMonthNumber(int v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDayInMonthNumber_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcDayInMonthNumber::operator int() const { return *data_->getArgument(0); } + +// Function implementations for IfcDayInWeekNumber +const IfcParse::type_declaration& Ifc4x3_add2::IfcDayInWeekNumber::Class() { return *IFC4X3_ADD2_IfcDayInWeekNumber_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcDayInWeekNumber::declaration() const { return *IFC4X3_ADD2_IfcDayInWeekNumber_type; } +Ifc4x3_add2::IfcDayInWeekNumber::IfcDayInWeekNumber(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcDayInWeekNumber::IfcDayInWeekNumber(int v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDayInWeekNumber_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcDayInWeekNumber::operator int() const { return *data_->getArgument(0); } + +// Function implementations for IfcDescriptiveMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcDescriptiveMeasure::Class() { return *IFC4X3_ADD2_IfcDescriptiveMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcDescriptiveMeasure::declaration() const { return *IFC4X3_ADD2_IfcDescriptiveMeasure_type; } +Ifc4x3_add2::IfcDescriptiveMeasure::IfcDescriptiveMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcDescriptiveMeasure::IfcDescriptiveMeasure(std::string v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDescriptiveMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcDescriptiveMeasure::operator std::string() const { return *data_->getArgument(0); } + +// Function implementations for IfcDimensionCount +const IfcParse::type_declaration& Ifc4x3_add2::IfcDimensionCount::Class() { return *IFC4X3_ADD2_IfcDimensionCount_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcDimensionCount::declaration() const { return *IFC4X3_ADD2_IfcDimensionCount_type; } +Ifc4x3_add2::IfcDimensionCount::IfcDimensionCount(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcDimensionCount::IfcDimensionCount(int v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDimensionCount_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcDimensionCount::operator int() const { return *data_->getArgument(0); } + +// Function implementations for IfcDoseEquivalentMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcDoseEquivalentMeasure::Class() { return *IFC4X3_ADD2_IfcDoseEquivalentMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcDoseEquivalentMeasure::declaration() const { return *IFC4X3_ADD2_IfcDoseEquivalentMeasure_type; } +Ifc4x3_add2::IfcDoseEquivalentMeasure::IfcDoseEquivalentMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcDoseEquivalentMeasure::IfcDoseEquivalentMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDoseEquivalentMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcDoseEquivalentMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcDuration +const IfcParse::type_declaration& Ifc4x3_add2::IfcDuration::Class() { return *IFC4X3_ADD2_IfcDuration_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcDuration::declaration() const { return *IFC4X3_ADD2_IfcDuration_type; } +Ifc4x3_add2::IfcDuration::IfcDuration(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcDuration::IfcDuration(std::string v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDuration_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcDuration::operator std::string() const { return *data_->getArgument(0); } + +// Function implementations for IfcDynamicViscosityMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcDynamicViscosityMeasure::Class() { return *IFC4X3_ADD2_IfcDynamicViscosityMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcDynamicViscosityMeasure::declaration() const { return *IFC4X3_ADD2_IfcDynamicViscosityMeasure_type; } +Ifc4x3_add2::IfcDynamicViscosityMeasure::IfcDynamicViscosityMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcDynamicViscosityMeasure::IfcDynamicViscosityMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDynamicViscosityMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcDynamicViscosityMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcElectricCapacitanceMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcElectricCapacitanceMeasure::Class() { return *IFC4X3_ADD2_IfcElectricCapacitanceMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcElectricCapacitanceMeasure::declaration() const { return *IFC4X3_ADD2_IfcElectricCapacitanceMeasure_type; } +Ifc4x3_add2::IfcElectricCapacitanceMeasure::IfcElectricCapacitanceMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcElectricCapacitanceMeasure::IfcElectricCapacitanceMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricCapacitanceMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcElectricCapacitanceMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcElectricChargeMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcElectricChargeMeasure::Class() { return *IFC4X3_ADD2_IfcElectricChargeMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcElectricChargeMeasure::declaration() const { return *IFC4X3_ADD2_IfcElectricChargeMeasure_type; } +Ifc4x3_add2::IfcElectricChargeMeasure::IfcElectricChargeMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcElectricChargeMeasure::IfcElectricChargeMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricChargeMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcElectricChargeMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcElectricConductanceMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcElectricConductanceMeasure::Class() { return *IFC4X3_ADD2_IfcElectricConductanceMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcElectricConductanceMeasure::declaration() const { return *IFC4X3_ADD2_IfcElectricConductanceMeasure_type; } +Ifc4x3_add2::IfcElectricConductanceMeasure::IfcElectricConductanceMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcElectricConductanceMeasure::IfcElectricConductanceMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricConductanceMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcElectricConductanceMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcElectricCurrentMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcElectricCurrentMeasure::Class() { return *IFC4X3_ADD2_IfcElectricCurrentMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcElectricCurrentMeasure::declaration() const { return *IFC4X3_ADD2_IfcElectricCurrentMeasure_type; } +Ifc4x3_add2::IfcElectricCurrentMeasure::IfcElectricCurrentMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcElectricCurrentMeasure::IfcElectricCurrentMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricCurrentMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcElectricCurrentMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcElectricResistanceMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcElectricResistanceMeasure::Class() { return *IFC4X3_ADD2_IfcElectricResistanceMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcElectricResistanceMeasure::declaration() const { return *IFC4X3_ADD2_IfcElectricResistanceMeasure_type; } +Ifc4x3_add2::IfcElectricResistanceMeasure::IfcElectricResistanceMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcElectricResistanceMeasure::IfcElectricResistanceMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricResistanceMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcElectricResistanceMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcElectricVoltageMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcElectricVoltageMeasure::Class() { return *IFC4X3_ADD2_IfcElectricVoltageMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcElectricVoltageMeasure::declaration() const { return *IFC4X3_ADD2_IfcElectricVoltageMeasure_type; } +Ifc4x3_add2::IfcElectricVoltageMeasure::IfcElectricVoltageMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcElectricVoltageMeasure::IfcElectricVoltageMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricVoltageMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcElectricVoltageMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcEnergyMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcEnergyMeasure::Class() { return *IFC4X3_ADD2_IfcEnergyMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcEnergyMeasure::declaration() const { return *IFC4X3_ADD2_IfcEnergyMeasure_type; } +Ifc4x3_add2::IfcEnergyMeasure::IfcEnergyMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcEnergyMeasure::IfcEnergyMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEnergyMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcEnergyMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcFontStyle +const IfcParse::type_declaration& Ifc4x3_add2::IfcFontStyle::Class() { return *IFC4X3_ADD2_IfcFontStyle_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcFontStyle::declaration() const { return *IFC4X3_ADD2_IfcFontStyle_type; } +Ifc4x3_add2::IfcFontStyle::IfcFontStyle(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcFontStyle::IfcFontStyle(std::string v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFontStyle_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcFontStyle::operator std::string() const { return *data_->getArgument(0); } + +// Function implementations for IfcFontVariant +const IfcParse::type_declaration& Ifc4x3_add2::IfcFontVariant::Class() { return *IFC4X3_ADD2_IfcFontVariant_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcFontVariant::declaration() const { return *IFC4X3_ADD2_IfcFontVariant_type; } +Ifc4x3_add2::IfcFontVariant::IfcFontVariant(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcFontVariant::IfcFontVariant(std::string v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFontVariant_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcFontVariant::operator std::string() const { return *data_->getArgument(0); } + +// Function implementations for IfcFontWeight +const IfcParse::type_declaration& Ifc4x3_add2::IfcFontWeight::Class() { return *IFC4X3_ADD2_IfcFontWeight_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcFontWeight::declaration() const { return *IFC4X3_ADD2_IfcFontWeight_type; } +Ifc4x3_add2::IfcFontWeight::IfcFontWeight(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcFontWeight::IfcFontWeight(std::string v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFontWeight_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcFontWeight::operator std::string() const { return *data_->getArgument(0); } + +// Function implementations for IfcForceMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcForceMeasure::Class() { return *IFC4X3_ADD2_IfcForceMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcForceMeasure::declaration() const { return *IFC4X3_ADD2_IfcForceMeasure_type; } +Ifc4x3_add2::IfcForceMeasure::IfcForceMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcForceMeasure::IfcForceMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcForceMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcForceMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcFrequencyMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcFrequencyMeasure::Class() { return *IFC4X3_ADD2_IfcFrequencyMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcFrequencyMeasure::declaration() const { return *IFC4X3_ADD2_IfcFrequencyMeasure_type; } +Ifc4x3_add2::IfcFrequencyMeasure::IfcFrequencyMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcFrequencyMeasure::IfcFrequencyMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFrequencyMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcFrequencyMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcGloballyUniqueId +const IfcParse::type_declaration& Ifc4x3_add2::IfcGloballyUniqueId::Class() { return *IFC4X3_ADD2_IfcGloballyUniqueId_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcGloballyUniqueId::declaration() const { return *IFC4X3_ADD2_IfcGloballyUniqueId_type; } +Ifc4x3_add2::IfcGloballyUniqueId::IfcGloballyUniqueId(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcGloballyUniqueId::IfcGloballyUniqueId(std::string v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGloballyUniqueId_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcGloballyUniqueId::operator std::string() const { return *data_->getArgument(0); } + +// Function implementations for IfcHeatFluxDensityMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcHeatFluxDensityMeasure::Class() { return *IFC4X3_ADD2_IfcHeatFluxDensityMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcHeatFluxDensityMeasure::declaration() const { return *IFC4X3_ADD2_IfcHeatFluxDensityMeasure_type; } +Ifc4x3_add2::IfcHeatFluxDensityMeasure::IfcHeatFluxDensityMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcHeatFluxDensityMeasure::IfcHeatFluxDensityMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcHeatFluxDensityMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcHeatFluxDensityMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcHeatingValueMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcHeatingValueMeasure::Class() { return *IFC4X3_ADD2_IfcHeatingValueMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcHeatingValueMeasure::declaration() const { return *IFC4X3_ADD2_IfcHeatingValueMeasure_type; } +Ifc4x3_add2::IfcHeatingValueMeasure::IfcHeatingValueMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcHeatingValueMeasure::IfcHeatingValueMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcHeatingValueMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcHeatingValueMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcIdentifier +const IfcParse::type_declaration& Ifc4x3_add2::IfcIdentifier::Class() { return *IFC4X3_ADD2_IfcIdentifier_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcIdentifier::declaration() const { return *IFC4X3_ADD2_IfcIdentifier_type; } +Ifc4x3_add2::IfcIdentifier::IfcIdentifier(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcIdentifier::IfcIdentifier(std::string v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcIdentifier_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcIdentifier::operator std::string() const { return *data_->getArgument(0); } + +// Function implementations for IfcIlluminanceMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcIlluminanceMeasure::Class() { return *IFC4X3_ADD2_IfcIlluminanceMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcIlluminanceMeasure::declaration() const { return *IFC4X3_ADD2_IfcIlluminanceMeasure_type; } +Ifc4x3_add2::IfcIlluminanceMeasure::IfcIlluminanceMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcIlluminanceMeasure::IfcIlluminanceMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcIlluminanceMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcIlluminanceMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcInductanceMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcInductanceMeasure::Class() { return *IFC4X3_ADD2_IfcInductanceMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcInductanceMeasure::declaration() const { return *IFC4X3_ADD2_IfcInductanceMeasure_type; } +Ifc4x3_add2::IfcInductanceMeasure::IfcInductanceMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcInductanceMeasure::IfcInductanceMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcInductanceMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcInductanceMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcInteger +const IfcParse::type_declaration& Ifc4x3_add2::IfcInteger::Class() { return *IFC4X3_ADD2_IfcInteger_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcInteger::declaration() const { return *IFC4X3_ADD2_IfcInteger_type; } +Ifc4x3_add2::IfcInteger::IfcInteger(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcInteger::IfcInteger(int v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcInteger_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcInteger::operator int() const { return *data_->getArgument(0); } + +// Function implementations for IfcIntegerCountRateMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcIntegerCountRateMeasure::Class() { return *IFC4X3_ADD2_IfcIntegerCountRateMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcIntegerCountRateMeasure::declaration() const { return *IFC4X3_ADD2_IfcIntegerCountRateMeasure_type; } +Ifc4x3_add2::IfcIntegerCountRateMeasure::IfcIntegerCountRateMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcIntegerCountRateMeasure::IfcIntegerCountRateMeasure(int v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcIntegerCountRateMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcIntegerCountRateMeasure::operator int() const { return *data_->getArgument(0); } + +// Function implementations for IfcIonConcentrationMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcIonConcentrationMeasure::Class() { return *IFC4X3_ADD2_IfcIonConcentrationMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcIonConcentrationMeasure::declaration() const { return *IFC4X3_ADD2_IfcIonConcentrationMeasure_type; } +Ifc4x3_add2::IfcIonConcentrationMeasure::IfcIonConcentrationMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcIonConcentrationMeasure::IfcIonConcentrationMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcIonConcentrationMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcIonConcentrationMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcIsothermalMoistureCapacityMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcIsothermalMoistureCapacityMeasure::Class() { return *IFC4X3_ADD2_IfcIsothermalMoistureCapacityMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcIsothermalMoistureCapacityMeasure::declaration() const { return *IFC4X3_ADD2_IfcIsothermalMoistureCapacityMeasure_type; } +Ifc4x3_add2::IfcIsothermalMoistureCapacityMeasure::IfcIsothermalMoistureCapacityMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcIsothermalMoistureCapacityMeasure::IfcIsothermalMoistureCapacityMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcIsothermalMoistureCapacityMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcIsothermalMoistureCapacityMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcKinematicViscosityMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcKinematicViscosityMeasure::Class() { return *IFC4X3_ADD2_IfcKinematicViscosityMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcKinematicViscosityMeasure::declaration() const { return *IFC4X3_ADD2_IfcKinematicViscosityMeasure_type; } +Ifc4x3_add2::IfcKinematicViscosityMeasure::IfcKinematicViscosityMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcKinematicViscosityMeasure::IfcKinematicViscosityMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcKinematicViscosityMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcKinematicViscosityMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcLabel +const IfcParse::type_declaration& Ifc4x3_add2::IfcLabel::Class() { return *IFC4X3_ADD2_IfcLabel_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcLabel::declaration() const { return *IFC4X3_ADD2_IfcLabel_type; } +Ifc4x3_add2::IfcLabel::IfcLabel(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcLabel::IfcLabel(std::string v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLabel_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcLabel::operator std::string() const { return *data_->getArgument(0); } + +// Function implementations for IfcLanguageId +const IfcParse::type_declaration& Ifc4x3_add2::IfcLanguageId::Class() { return *IFC4X3_ADD2_IfcLanguageId_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcLanguageId::declaration() const { return *IFC4X3_ADD2_IfcLanguageId_type; } +Ifc4x3_add2::IfcLanguageId::IfcLanguageId(IfcEntityInstanceData* e) : IfcIdentifier((IfcEntityInstanceData*)0) { data_ = e; } +Ifc4x3_add2::IfcLanguageId::IfcLanguageId(std::string v) : IfcIdentifier((IfcEntityInstanceData*)0) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLanguageId_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcLanguageId::operator std::string() const { return *data_->getArgument(0); } + +// Function implementations for IfcLengthMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcLengthMeasure::Class() { return *IFC4X3_ADD2_IfcLengthMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcLengthMeasure::declaration() const { return *IFC4X3_ADD2_IfcLengthMeasure_type; } +Ifc4x3_add2::IfcLengthMeasure::IfcLengthMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcLengthMeasure::IfcLengthMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLengthMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcLengthMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcLineIndex +const IfcParse::type_declaration& Ifc4x3_add2::IfcLineIndex::Class() { return *IFC4X3_ADD2_IfcLineIndex_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcLineIndex::declaration() const { return *IFC4X3_ADD2_IfcLineIndex_type; } +Ifc4x3_add2::IfcLineIndex::IfcLineIndex(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcLineIndex::IfcLineIndex(std::vector< int > /*[2:?]*/ v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLineIndex_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcLineIndex::operator std::vector< int > /*[2:?]*/() const { return *data_->getArgument(0); } + +// Function implementations for IfcLinearForceMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcLinearForceMeasure::Class() { return *IFC4X3_ADD2_IfcLinearForceMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcLinearForceMeasure::declaration() const { return *IFC4X3_ADD2_IfcLinearForceMeasure_type; } +Ifc4x3_add2::IfcLinearForceMeasure::IfcLinearForceMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcLinearForceMeasure::IfcLinearForceMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLinearForceMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcLinearForceMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcLinearMomentMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcLinearMomentMeasure::Class() { return *IFC4X3_ADD2_IfcLinearMomentMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcLinearMomentMeasure::declaration() const { return *IFC4X3_ADD2_IfcLinearMomentMeasure_type; } +Ifc4x3_add2::IfcLinearMomentMeasure::IfcLinearMomentMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcLinearMomentMeasure::IfcLinearMomentMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLinearMomentMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcLinearMomentMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcLinearStiffnessMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcLinearStiffnessMeasure::Class() { return *IFC4X3_ADD2_IfcLinearStiffnessMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcLinearStiffnessMeasure::declaration() const { return *IFC4X3_ADD2_IfcLinearStiffnessMeasure_type; } +Ifc4x3_add2::IfcLinearStiffnessMeasure::IfcLinearStiffnessMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcLinearStiffnessMeasure::IfcLinearStiffnessMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLinearStiffnessMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcLinearStiffnessMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcLinearVelocityMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcLinearVelocityMeasure::Class() { return *IFC4X3_ADD2_IfcLinearVelocityMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcLinearVelocityMeasure::declaration() const { return *IFC4X3_ADD2_IfcLinearVelocityMeasure_type; } +Ifc4x3_add2::IfcLinearVelocityMeasure::IfcLinearVelocityMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcLinearVelocityMeasure::IfcLinearVelocityMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLinearVelocityMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcLinearVelocityMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcLogical +const IfcParse::type_declaration& Ifc4x3_add2::IfcLogical::Class() { return *IFC4X3_ADD2_IfcLogical_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcLogical::declaration() const { return *IFC4X3_ADD2_IfcLogical_type; } +Ifc4x3_add2::IfcLogical::IfcLogical(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcLogical::IfcLogical(boost::logic::tribool v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLogical_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcLogical::operator boost::logic::tribool() const { return *data_->getArgument(0); } + +// Function implementations for IfcLuminousFluxMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcLuminousFluxMeasure::Class() { return *IFC4X3_ADD2_IfcLuminousFluxMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcLuminousFluxMeasure::declaration() const { return *IFC4X3_ADD2_IfcLuminousFluxMeasure_type; } +Ifc4x3_add2::IfcLuminousFluxMeasure::IfcLuminousFluxMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcLuminousFluxMeasure::IfcLuminousFluxMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLuminousFluxMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcLuminousFluxMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcLuminousIntensityDistributionMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcLuminousIntensityDistributionMeasure::Class() { return *IFC4X3_ADD2_IfcLuminousIntensityDistributionMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcLuminousIntensityDistributionMeasure::declaration() const { return *IFC4X3_ADD2_IfcLuminousIntensityDistributionMeasure_type; } +Ifc4x3_add2::IfcLuminousIntensityDistributionMeasure::IfcLuminousIntensityDistributionMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcLuminousIntensityDistributionMeasure::IfcLuminousIntensityDistributionMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLuminousIntensityDistributionMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcLuminousIntensityDistributionMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcLuminousIntensityMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcLuminousIntensityMeasure::Class() { return *IFC4X3_ADD2_IfcLuminousIntensityMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcLuminousIntensityMeasure::declaration() const { return *IFC4X3_ADD2_IfcLuminousIntensityMeasure_type; } +Ifc4x3_add2::IfcLuminousIntensityMeasure::IfcLuminousIntensityMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcLuminousIntensityMeasure::IfcLuminousIntensityMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLuminousIntensityMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcLuminousIntensityMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcMagneticFluxDensityMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcMagneticFluxDensityMeasure::Class() { return *IFC4X3_ADD2_IfcMagneticFluxDensityMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcMagneticFluxDensityMeasure::declaration() const { return *IFC4X3_ADD2_IfcMagneticFluxDensityMeasure_type; } +Ifc4x3_add2::IfcMagneticFluxDensityMeasure::IfcMagneticFluxDensityMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcMagneticFluxDensityMeasure::IfcMagneticFluxDensityMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMagneticFluxDensityMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcMagneticFluxDensityMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcMagneticFluxMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcMagneticFluxMeasure::Class() { return *IFC4X3_ADD2_IfcMagneticFluxMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcMagneticFluxMeasure::declaration() const { return *IFC4X3_ADD2_IfcMagneticFluxMeasure_type; } +Ifc4x3_add2::IfcMagneticFluxMeasure::IfcMagneticFluxMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcMagneticFluxMeasure::IfcMagneticFluxMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMagneticFluxMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcMagneticFluxMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcMassDensityMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcMassDensityMeasure::Class() { return *IFC4X3_ADD2_IfcMassDensityMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcMassDensityMeasure::declaration() const { return *IFC4X3_ADD2_IfcMassDensityMeasure_type; } +Ifc4x3_add2::IfcMassDensityMeasure::IfcMassDensityMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcMassDensityMeasure::IfcMassDensityMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMassDensityMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcMassDensityMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcMassFlowRateMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcMassFlowRateMeasure::Class() { return *IFC4X3_ADD2_IfcMassFlowRateMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcMassFlowRateMeasure::declaration() const { return *IFC4X3_ADD2_IfcMassFlowRateMeasure_type; } +Ifc4x3_add2::IfcMassFlowRateMeasure::IfcMassFlowRateMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcMassFlowRateMeasure::IfcMassFlowRateMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMassFlowRateMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcMassFlowRateMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcMassMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcMassMeasure::Class() { return *IFC4X3_ADD2_IfcMassMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcMassMeasure::declaration() const { return *IFC4X3_ADD2_IfcMassMeasure_type; } +Ifc4x3_add2::IfcMassMeasure::IfcMassMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcMassMeasure::IfcMassMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMassMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcMassMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcMassPerLengthMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcMassPerLengthMeasure::Class() { return *IFC4X3_ADD2_IfcMassPerLengthMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcMassPerLengthMeasure::declaration() const { return *IFC4X3_ADD2_IfcMassPerLengthMeasure_type; } +Ifc4x3_add2::IfcMassPerLengthMeasure::IfcMassPerLengthMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcMassPerLengthMeasure::IfcMassPerLengthMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMassPerLengthMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcMassPerLengthMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcModulusOfElasticityMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcModulusOfElasticityMeasure::Class() { return *IFC4X3_ADD2_IfcModulusOfElasticityMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcModulusOfElasticityMeasure::declaration() const { return *IFC4X3_ADD2_IfcModulusOfElasticityMeasure_type; } +Ifc4x3_add2::IfcModulusOfElasticityMeasure::IfcModulusOfElasticityMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcModulusOfElasticityMeasure::IfcModulusOfElasticityMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcModulusOfElasticityMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcModulusOfElasticityMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcModulusOfLinearSubgradeReactionMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcModulusOfLinearSubgradeReactionMeasure::Class() { return *IFC4X3_ADD2_IfcModulusOfLinearSubgradeReactionMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcModulusOfLinearSubgradeReactionMeasure::declaration() const { return *IFC4X3_ADD2_IfcModulusOfLinearSubgradeReactionMeasure_type; } +Ifc4x3_add2::IfcModulusOfLinearSubgradeReactionMeasure::IfcModulusOfLinearSubgradeReactionMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcModulusOfLinearSubgradeReactionMeasure::IfcModulusOfLinearSubgradeReactionMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcModulusOfLinearSubgradeReactionMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcModulusOfLinearSubgradeReactionMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcModulusOfRotationalSubgradeReactionMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionMeasure::Class() { return *IFC4X3_ADD2_IfcModulusOfRotationalSubgradeReactionMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionMeasure::declaration() const { return *IFC4X3_ADD2_IfcModulusOfRotationalSubgradeReactionMeasure_type; } +Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionMeasure::IfcModulusOfRotationalSubgradeReactionMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionMeasure::IfcModulusOfRotationalSubgradeReactionMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcModulusOfRotationalSubgradeReactionMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcModulusOfSubgradeReactionMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcModulusOfSubgradeReactionMeasure::Class() { return *IFC4X3_ADD2_IfcModulusOfSubgradeReactionMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcModulusOfSubgradeReactionMeasure::declaration() const { return *IFC4X3_ADD2_IfcModulusOfSubgradeReactionMeasure_type; } +Ifc4x3_add2::IfcModulusOfSubgradeReactionMeasure::IfcModulusOfSubgradeReactionMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcModulusOfSubgradeReactionMeasure::IfcModulusOfSubgradeReactionMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcModulusOfSubgradeReactionMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcModulusOfSubgradeReactionMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcMoistureDiffusivityMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcMoistureDiffusivityMeasure::Class() { return *IFC4X3_ADD2_IfcMoistureDiffusivityMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcMoistureDiffusivityMeasure::declaration() const { return *IFC4X3_ADD2_IfcMoistureDiffusivityMeasure_type; } +Ifc4x3_add2::IfcMoistureDiffusivityMeasure::IfcMoistureDiffusivityMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcMoistureDiffusivityMeasure::IfcMoistureDiffusivityMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMoistureDiffusivityMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcMoistureDiffusivityMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcMolecularWeightMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcMolecularWeightMeasure::Class() { return *IFC4X3_ADD2_IfcMolecularWeightMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcMolecularWeightMeasure::declaration() const { return *IFC4X3_ADD2_IfcMolecularWeightMeasure_type; } +Ifc4x3_add2::IfcMolecularWeightMeasure::IfcMolecularWeightMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcMolecularWeightMeasure::IfcMolecularWeightMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMolecularWeightMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcMolecularWeightMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcMomentOfInertiaMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcMomentOfInertiaMeasure::Class() { return *IFC4X3_ADD2_IfcMomentOfInertiaMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcMomentOfInertiaMeasure::declaration() const { return *IFC4X3_ADD2_IfcMomentOfInertiaMeasure_type; } +Ifc4x3_add2::IfcMomentOfInertiaMeasure::IfcMomentOfInertiaMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcMomentOfInertiaMeasure::IfcMomentOfInertiaMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMomentOfInertiaMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcMomentOfInertiaMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcMonetaryMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcMonetaryMeasure::Class() { return *IFC4X3_ADD2_IfcMonetaryMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcMonetaryMeasure::declaration() const { return *IFC4X3_ADD2_IfcMonetaryMeasure_type; } +Ifc4x3_add2::IfcMonetaryMeasure::IfcMonetaryMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcMonetaryMeasure::IfcMonetaryMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMonetaryMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcMonetaryMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcMonthInYearNumber +const IfcParse::type_declaration& Ifc4x3_add2::IfcMonthInYearNumber::Class() { return *IFC4X3_ADD2_IfcMonthInYearNumber_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcMonthInYearNumber::declaration() const { return *IFC4X3_ADD2_IfcMonthInYearNumber_type; } +Ifc4x3_add2::IfcMonthInYearNumber::IfcMonthInYearNumber(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcMonthInYearNumber::IfcMonthInYearNumber(int v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMonthInYearNumber_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcMonthInYearNumber::operator int() const { return *data_->getArgument(0); } + +// Function implementations for IfcNonNegativeLengthMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcNonNegativeLengthMeasure::Class() { return *IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcNonNegativeLengthMeasure::declaration() const { return *IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type; } +Ifc4x3_add2::IfcNonNegativeLengthMeasure::IfcNonNegativeLengthMeasure(IfcEntityInstanceData* e) : IfcLengthMeasure((IfcEntityInstanceData*)0) { data_ = e; } +Ifc4x3_add2::IfcNonNegativeLengthMeasure::IfcNonNegativeLengthMeasure(double v) : IfcLengthMeasure((IfcEntityInstanceData*)0) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcNonNegativeLengthMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcNonNegativeLengthMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcNormalisedRatioMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcNormalisedRatioMeasure::Class() { return *IFC4X3_ADD2_IfcNormalisedRatioMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcNormalisedRatioMeasure::declaration() const { return *IFC4X3_ADD2_IfcNormalisedRatioMeasure_type; } +Ifc4x3_add2::IfcNormalisedRatioMeasure::IfcNormalisedRatioMeasure(IfcEntityInstanceData* e) : IfcRatioMeasure((IfcEntityInstanceData*)0) { data_ = e; } +Ifc4x3_add2::IfcNormalisedRatioMeasure::IfcNormalisedRatioMeasure(double v) : IfcRatioMeasure((IfcEntityInstanceData*)0) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcNormalisedRatioMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcNormalisedRatioMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcNumericMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcNumericMeasure::Class() { return *IFC4X3_ADD2_IfcNumericMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcNumericMeasure::declaration() const { return *IFC4X3_ADD2_IfcNumericMeasure_type; } +Ifc4x3_add2::IfcNumericMeasure::IfcNumericMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcNumericMeasure::IfcNumericMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcNumericMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcNumericMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcPHMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcPHMeasure::Class() { return *IFC4X3_ADD2_IfcPHMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcPHMeasure::declaration() const { return *IFC4X3_ADD2_IfcPHMeasure_type; } +Ifc4x3_add2::IfcPHMeasure::IfcPHMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcPHMeasure::IfcPHMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPHMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcPHMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcParameterValue +const IfcParse::type_declaration& Ifc4x3_add2::IfcParameterValue::Class() { return *IFC4X3_ADD2_IfcParameterValue_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcParameterValue::declaration() const { return *IFC4X3_ADD2_IfcParameterValue_type; } +Ifc4x3_add2::IfcParameterValue::IfcParameterValue(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcParameterValue::IfcParameterValue(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcParameterValue_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcParameterValue::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcPlanarForceMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcPlanarForceMeasure::Class() { return *IFC4X3_ADD2_IfcPlanarForceMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcPlanarForceMeasure::declaration() const { return *IFC4X3_ADD2_IfcPlanarForceMeasure_type; } +Ifc4x3_add2::IfcPlanarForceMeasure::IfcPlanarForceMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcPlanarForceMeasure::IfcPlanarForceMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPlanarForceMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcPlanarForceMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcPlaneAngleMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcPlaneAngleMeasure::Class() { return *IFC4X3_ADD2_IfcPlaneAngleMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcPlaneAngleMeasure::declaration() const { return *IFC4X3_ADD2_IfcPlaneAngleMeasure_type; } +Ifc4x3_add2::IfcPlaneAngleMeasure::IfcPlaneAngleMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcPlaneAngleMeasure::IfcPlaneAngleMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPlaneAngleMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcPlaneAngleMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcPositiveInteger +const IfcParse::type_declaration& Ifc4x3_add2::IfcPositiveInteger::Class() { return *IFC4X3_ADD2_IfcPositiveInteger_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcPositiveInteger::declaration() const { return *IFC4X3_ADD2_IfcPositiveInteger_type; } +Ifc4x3_add2::IfcPositiveInteger::IfcPositiveInteger(IfcEntityInstanceData* e) : IfcInteger((IfcEntityInstanceData*)0) { data_ = e; } +Ifc4x3_add2::IfcPositiveInteger::IfcPositiveInteger(int v) : IfcInteger((IfcEntityInstanceData*)0) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPositiveInteger_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcPositiveInteger::operator int() const { return *data_->getArgument(0); } + +// Function implementations for IfcPositiveLengthMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcPositiveLengthMeasure::Class() { return *IFC4X3_ADD2_IfcPositiveLengthMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcPositiveLengthMeasure::declaration() const { return *IFC4X3_ADD2_IfcPositiveLengthMeasure_type; } +Ifc4x3_add2::IfcPositiveLengthMeasure::IfcPositiveLengthMeasure(IfcEntityInstanceData* e) : IfcLengthMeasure((IfcEntityInstanceData*)0) { data_ = e; } +Ifc4x3_add2::IfcPositiveLengthMeasure::IfcPositiveLengthMeasure(double v) : IfcLengthMeasure((IfcEntityInstanceData*)0) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPositiveLengthMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcPositiveLengthMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcPositivePlaneAngleMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcPositivePlaneAngleMeasure::Class() { return *IFC4X3_ADD2_IfcPositivePlaneAngleMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcPositivePlaneAngleMeasure::declaration() const { return *IFC4X3_ADD2_IfcPositivePlaneAngleMeasure_type; } +Ifc4x3_add2::IfcPositivePlaneAngleMeasure::IfcPositivePlaneAngleMeasure(IfcEntityInstanceData* e) : IfcPlaneAngleMeasure((IfcEntityInstanceData*)0) { data_ = e; } +Ifc4x3_add2::IfcPositivePlaneAngleMeasure::IfcPositivePlaneAngleMeasure(double v) : IfcPlaneAngleMeasure((IfcEntityInstanceData*)0) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPositivePlaneAngleMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcPositivePlaneAngleMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcPositiveRatioMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcPositiveRatioMeasure::Class() { return *IFC4X3_ADD2_IfcPositiveRatioMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcPositiveRatioMeasure::declaration() const { return *IFC4X3_ADD2_IfcPositiveRatioMeasure_type; } +Ifc4x3_add2::IfcPositiveRatioMeasure::IfcPositiveRatioMeasure(IfcEntityInstanceData* e) : IfcRatioMeasure((IfcEntityInstanceData*)0) { data_ = e; } +Ifc4x3_add2::IfcPositiveRatioMeasure::IfcPositiveRatioMeasure(double v) : IfcRatioMeasure((IfcEntityInstanceData*)0) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPositiveRatioMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcPositiveRatioMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcPowerMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcPowerMeasure::Class() { return *IFC4X3_ADD2_IfcPowerMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcPowerMeasure::declaration() const { return *IFC4X3_ADD2_IfcPowerMeasure_type; } +Ifc4x3_add2::IfcPowerMeasure::IfcPowerMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcPowerMeasure::IfcPowerMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPowerMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcPowerMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcPresentableText +const IfcParse::type_declaration& Ifc4x3_add2::IfcPresentableText::Class() { return *IFC4X3_ADD2_IfcPresentableText_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcPresentableText::declaration() const { return *IFC4X3_ADD2_IfcPresentableText_type; } +Ifc4x3_add2::IfcPresentableText::IfcPresentableText(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcPresentableText::IfcPresentableText(std::string v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPresentableText_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcPresentableText::operator std::string() const { return *data_->getArgument(0); } + +// Function implementations for IfcPressureMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcPressureMeasure::Class() { return *IFC4X3_ADD2_IfcPressureMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcPressureMeasure::declaration() const { return *IFC4X3_ADD2_IfcPressureMeasure_type; } +Ifc4x3_add2::IfcPressureMeasure::IfcPressureMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcPressureMeasure::IfcPressureMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPressureMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcPressureMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcPropertySetDefinitionSet +const IfcParse::type_declaration& Ifc4x3_add2::IfcPropertySetDefinitionSet::Class() { return *IFC4X3_ADD2_IfcPropertySetDefinitionSet_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcPropertySetDefinitionSet::declaration() const { return *IFC4X3_ADD2_IfcPropertySetDefinitionSet_type; } +Ifc4x3_add2::IfcPropertySetDefinitionSet::IfcPropertySetDefinitionSet(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcPropertySetDefinitionSet::IfcPropertySetDefinitionSet(aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPropertySetDefinitionSet_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v->generalize()); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcPropertySetDefinitionSet::operator aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr() const { aggregate_of_instance::ptr es = *data_->getArgument(0); return es->as< ::Ifc4x3_add2::IfcPropertySetDefinition >(); } + +// Function implementations for IfcRadioActivityMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcRadioActivityMeasure::Class() { return *IFC4X3_ADD2_IfcRadioActivityMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcRadioActivityMeasure::declaration() const { return *IFC4X3_ADD2_IfcRadioActivityMeasure_type; } +Ifc4x3_add2::IfcRadioActivityMeasure::IfcRadioActivityMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcRadioActivityMeasure::IfcRadioActivityMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRadioActivityMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcRadioActivityMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcRatioMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcRatioMeasure::Class() { return *IFC4X3_ADD2_IfcRatioMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcRatioMeasure::declaration() const { return *IFC4X3_ADD2_IfcRatioMeasure_type; } +Ifc4x3_add2::IfcRatioMeasure::IfcRatioMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcRatioMeasure::IfcRatioMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRatioMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcRatioMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcReal +const IfcParse::type_declaration& Ifc4x3_add2::IfcReal::Class() { return *IFC4X3_ADD2_IfcReal_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcReal::declaration() const { return *IFC4X3_ADD2_IfcReal_type; } +Ifc4x3_add2::IfcReal::IfcReal(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcReal::IfcReal(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReal_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcReal::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcRotationalFrequencyMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcRotationalFrequencyMeasure::Class() { return *IFC4X3_ADD2_IfcRotationalFrequencyMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcRotationalFrequencyMeasure::declaration() const { return *IFC4X3_ADD2_IfcRotationalFrequencyMeasure_type; } +Ifc4x3_add2::IfcRotationalFrequencyMeasure::IfcRotationalFrequencyMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcRotationalFrequencyMeasure::IfcRotationalFrequencyMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRotationalFrequencyMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcRotationalFrequencyMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcRotationalMassMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcRotationalMassMeasure::Class() { return *IFC4X3_ADD2_IfcRotationalMassMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcRotationalMassMeasure::declaration() const { return *IFC4X3_ADD2_IfcRotationalMassMeasure_type; } +Ifc4x3_add2::IfcRotationalMassMeasure::IfcRotationalMassMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcRotationalMassMeasure::IfcRotationalMassMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRotationalMassMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcRotationalMassMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcRotationalStiffnessMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcRotationalStiffnessMeasure::Class() { return *IFC4X3_ADD2_IfcRotationalStiffnessMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcRotationalStiffnessMeasure::declaration() const { return *IFC4X3_ADD2_IfcRotationalStiffnessMeasure_type; } +Ifc4x3_add2::IfcRotationalStiffnessMeasure::IfcRotationalStiffnessMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcRotationalStiffnessMeasure::IfcRotationalStiffnessMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRotationalStiffnessMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcRotationalStiffnessMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcSectionModulusMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcSectionModulusMeasure::Class() { return *IFC4X3_ADD2_IfcSectionModulusMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcSectionModulusMeasure::declaration() const { return *IFC4X3_ADD2_IfcSectionModulusMeasure_type; } +Ifc4x3_add2::IfcSectionModulusMeasure::IfcSectionModulusMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcSectionModulusMeasure::IfcSectionModulusMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSectionModulusMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcSectionModulusMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcSectionalAreaIntegralMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcSectionalAreaIntegralMeasure::Class() { return *IFC4X3_ADD2_IfcSectionalAreaIntegralMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcSectionalAreaIntegralMeasure::declaration() const { return *IFC4X3_ADD2_IfcSectionalAreaIntegralMeasure_type; } +Ifc4x3_add2::IfcSectionalAreaIntegralMeasure::IfcSectionalAreaIntegralMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcSectionalAreaIntegralMeasure::IfcSectionalAreaIntegralMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSectionalAreaIntegralMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcSectionalAreaIntegralMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcShearModulusMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcShearModulusMeasure::Class() { return *IFC4X3_ADD2_IfcShearModulusMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcShearModulusMeasure::declaration() const { return *IFC4X3_ADD2_IfcShearModulusMeasure_type; } +Ifc4x3_add2::IfcShearModulusMeasure::IfcShearModulusMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcShearModulusMeasure::IfcShearModulusMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcShearModulusMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcShearModulusMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcSolidAngleMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcSolidAngleMeasure::Class() { return *IFC4X3_ADD2_IfcSolidAngleMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcSolidAngleMeasure::declaration() const { return *IFC4X3_ADD2_IfcSolidAngleMeasure_type; } +Ifc4x3_add2::IfcSolidAngleMeasure::IfcSolidAngleMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcSolidAngleMeasure::IfcSolidAngleMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSolidAngleMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcSolidAngleMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcSoundPowerLevelMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcSoundPowerLevelMeasure::Class() { return *IFC4X3_ADD2_IfcSoundPowerLevelMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcSoundPowerLevelMeasure::declaration() const { return *IFC4X3_ADD2_IfcSoundPowerLevelMeasure_type; } +Ifc4x3_add2::IfcSoundPowerLevelMeasure::IfcSoundPowerLevelMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcSoundPowerLevelMeasure::IfcSoundPowerLevelMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSoundPowerLevelMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcSoundPowerLevelMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcSoundPowerMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcSoundPowerMeasure::Class() { return *IFC4X3_ADD2_IfcSoundPowerMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcSoundPowerMeasure::declaration() const { return *IFC4X3_ADD2_IfcSoundPowerMeasure_type; } +Ifc4x3_add2::IfcSoundPowerMeasure::IfcSoundPowerMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcSoundPowerMeasure::IfcSoundPowerMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSoundPowerMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcSoundPowerMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcSoundPressureLevelMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcSoundPressureLevelMeasure::Class() { return *IFC4X3_ADD2_IfcSoundPressureLevelMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcSoundPressureLevelMeasure::declaration() const { return *IFC4X3_ADD2_IfcSoundPressureLevelMeasure_type; } +Ifc4x3_add2::IfcSoundPressureLevelMeasure::IfcSoundPressureLevelMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcSoundPressureLevelMeasure::IfcSoundPressureLevelMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSoundPressureLevelMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcSoundPressureLevelMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcSoundPressureMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcSoundPressureMeasure::Class() { return *IFC4X3_ADD2_IfcSoundPressureMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcSoundPressureMeasure::declaration() const { return *IFC4X3_ADD2_IfcSoundPressureMeasure_type; } +Ifc4x3_add2::IfcSoundPressureMeasure::IfcSoundPressureMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcSoundPressureMeasure::IfcSoundPressureMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSoundPressureMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcSoundPressureMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcSpecificHeatCapacityMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcSpecificHeatCapacityMeasure::Class() { return *IFC4X3_ADD2_IfcSpecificHeatCapacityMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcSpecificHeatCapacityMeasure::declaration() const { return *IFC4X3_ADD2_IfcSpecificHeatCapacityMeasure_type; } +Ifc4x3_add2::IfcSpecificHeatCapacityMeasure::IfcSpecificHeatCapacityMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcSpecificHeatCapacityMeasure::IfcSpecificHeatCapacityMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSpecificHeatCapacityMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcSpecificHeatCapacityMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcSpecularExponent +const IfcParse::type_declaration& Ifc4x3_add2::IfcSpecularExponent::Class() { return *IFC4X3_ADD2_IfcSpecularExponent_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcSpecularExponent::declaration() const { return *IFC4X3_ADD2_IfcSpecularExponent_type; } +Ifc4x3_add2::IfcSpecularExponent::IfcSpecularExponent(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcSpecularExponent::IfcSpecularExponent(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSpecularExponent_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcSpecularExponent::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcSpecularRoughness +const IfcParse::type_declaration& Ifc4x3_add2::IfcSpecularRoughness::Class() { return *IFC4X3_ADD2_IfcSpecularRoughness_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcSpecularRoughness::declaration() const { return *IFC4X3_ADD2_IfcSpecularRoughness_type; } +Ifc4x3_add2::IfcSpecularRoughness::IfcSpecularRoughness(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcSpecularRoughness::IfcSpecularRoughness(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSpecularRoughness_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcSpecularRoughness::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcStrippedOptional +const IfcParse::type_declaration& Ifc4x3_add2::IfcStrippedOptional::Class() { return *IFC4X3_ADD2_IfcStrippedOptional_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcStrippedOptional::declaration() const { return *IFC4X3_ADD2_IfcStrippedOptional_type; } +Ifc4x3_add2::IfcStrippedOptional::IfcStrippedOptional(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcStrippedOptional::IfcStrippedOptional(bool v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStrippedOptional_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcStrippedOptional::operator bool() const { return *data_->getArgument(0); } + +// Function implementations for IfcTemperatureGradientMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcTemperatureGradientMeasure::Class() { return *IFC4X3_ADD2_IfcTemperatureGradientMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcTemperatureGradientMeasure::declaration() const { return *IFC4X3_ADD2_IfcTemperatureGradientMeasure_type; } +Ifc4x3_add2::IfcTemperatureGradientMeasure::IfcTemperatureGradientMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcTemperatureGradientMeasure::IfcTemperatureGradientMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTemperatureGradientMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcTemperatureGradientMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcTemperatureRateOfChangeMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcTemperatureRateOfChangeMeasure::Class() { return *IFC4X3_ADD2_IfcTemperatureRateOfChangeMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcTemperatureRateOfChangeMeasure::declaration() const { return *IFC4X3_ADD2_IfcTemperatureRateOfChangeMeasure_type; } +Ifc4x3_add2::IfcTemperatureRateOfChangeMeasure::IfcTemperatureRateOfChangeMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcTemperatureRateOfChangeMeasure::IfcTemperatureRateOfChangeMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTemperatureRateOfChangeMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcTemperatureRateOfChangeMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcText +const IfcParse::type_declaration& Ifc4x3_add2::IfcText::Class() { return *IFC4X3_ADD2_IfcText_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcText::declaration() const { return *IFC4X3_ADD2_IfcText_type; } +Ifc4x3_add2::IfcText::IfcText(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcText::IfcText(std::string v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcText_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcText::operator std::string() const { return *data_->getArgument(0); } + +// Function implementations for IfcTextAlignment +const IfcParse::type_declaration& Ifc4x3_add2::IfcTextAlignment::Class() { return *IFC4X3_ADD2_IfcTextAlignment_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcTextAlignment::declaration() const { return *IFC4X3_ADD2_IfcTextAlignment_type; } +Ifc4x3_add2::IfcTextAlignment::IfcTextAlignment(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcTextAlignment::IfcTextAlignment(std::string v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTextAlignment_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcTextAlignment::operator std::string() const { return *data_->getArgument(0); } + +// Function implementations for IfcTextDecoration +const IfcParse::type_declaration& Ifc4x3_add2::IfcTextDecoration::Class() { return *IFC4X3_ADD2_IfcTextDecoration_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcTextDecoration::declaration() const { return *IFC4X3_ADD2_IfcTextDecoration_type; } +Ifc4x3_add2::IfcTextDecoration::IfcTextDecoration(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcTextDecoration::IfcTextDecoration(std::string v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTextDecoration_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcTextDecoration::operator std::string() const { return *data_->getArgument(0); } + +// Function implementations for IfcTextFontName +const IfcParse::type_declaration& Ifc4x3_add2::IfcTextFontName::Class() { return *IFC4X3_ADD2_IfcTextFontName_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcTextFontName::declaration() const { return *IFC4X3_ADD2_IfcTextFontName_type; } +Ifc4x3_add2::IfcTextFontName::IfcTextFontName(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcTextFontName::IfcTextFontName(std::string v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTextFontName_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcTextFontName::operator std::string() const { return *data_->getArgument(0); } + +// Function implementations for IfcTextTransformation +const IfcParse::type_declaration& Ifc4x3_add2::IfcTextTransformation::Class() { return *IFC4X3_ADD2_IfcTextTransformation_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcTextTransformation::declaration() const { return *IFC4X3_ADD2_IfcTextTransformation_type; } +Ifc4x3_add2::IfcTextTransformation::IfcTextTransformation(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcTextTransformation::IfcTextTransformation(std::string v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTextTransformation_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcTextTransformation::operator std::string() const { return *data_->getArgument(0); } + +// Function implementations for IfcThermalAdmittanceMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcThermalAdmittanceMeasure::Class() { return *IFC4X3_ADD2_IfcThermalAdmittanceMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcThermalAdmittanceMeasure::declaration() const { return *IFC4X3_ADD2_IfcThermalAdmittanceMeasure_type; } +Ifc4x3_add2::IfcThermalAdmittanceMeasure::IfcThermalAdmittanceMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcThermalAdmittanceMeasure::IfcThermalAdmittanceMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcThermalAdmittanceMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcThermalAdmittanceMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcThermalConductivityMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcThermalConductivityMeasure::Class() { return *IFC4X3_ADD2_IfcThermalConductivityMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcThermalConductivityMeasure::declaration() const { return *IFC4X3_ADD2_IfcThermalConductivityMeasure_type; } +Ifc4x3_add2::IfcThermalConductivityMeasure::IfcThermalConductivityMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcThermalConductivityMeasure::IfcThermalConductivityMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcThermalConductivityMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcThermalConductivityMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcThermalExpansionCoefficientMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcThermalExpansionCoefficientMeasure::Class() { return *IFC4X3_ADD2_IfcThermalExpansionCoefficientMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcThermalExpansionCoefficientMeasure::declaration() const { return *IFC4X3_ADD2_IfcThermalExpansionCoefficientMeasure_type; } +Ifc4x3_add2::IfcThermalExpansionCoefficientMeasure::IfcThermalExpansionCoefficientMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcThermalExpansionCoefficientMeasure::IfcThermalExpansionCoefficientMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcThermalExpansionCoefficientMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcThermalExpansionCoefficientMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcThermalResistanceMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcThermalResistanceMeasure::Class() { return *IFC4X3_ADD2_IfcThermalResistanceMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcThermalResistanceMeasure::declaration() const { return *IFC4X3_ADD2_IfcThermalResistanceMeasure_type; } +Ifc4x3_add2::IfcThermalResistanceMeasure::IfcThermalResistanceMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcThermalResistanceMeasure::IfcThermalResistanceMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcThermalResistanceMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcThermalResistanceMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcThermalTransmittanceMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcThermalTransmittanceMeasure::Class() { return *IFC4X3_ADD2_IfcThermalTransmittanceMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcThermalTransmittanceMeasure::declaration() const { return *IFC4X3_ADD2_IfcThermalTransmittanceMeasure_type; } +Ifc4x3_add2::IfcThermalTransmittanceMeasure::IfcThermalTransmittanceMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcThermalTransmittanceMeasure::IfcThermalTransmittanceMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcThermalTransmittanceMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcThermalTransmittanceMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcThermodynamicTemperatureMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcThermodynamicTemperatureMeasure::Class() { return *IFC4X3_ADD2_IfcThermodynamicTemperatureMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcThermodynamicTemperatureMeasure::declaration() const { return *IFC4X3_ADD2_IfcThermodynamicTemperatureMeasure_type; } +Ifc4x3_add2::IfcThermodynamicTemperatureMeasure::IfcThermodynamicTemperatureMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcThermodynamicTemperatureMeasure::IfcThermodynamicTemperatureMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcThermodynamicTemperatureMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcThermodynamicTemperatureMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcTime +const IfcParse::type_declaration& Ifc4x3_add2::IfcTime::Class() { return *IFC4X3_ADD2_IfcTime_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcTime::declaration() const { return *IFC4X3_ADD2_IfcTime_type; } +Ifc4x3_add2::IfcTime::IfcTime(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcTime::IfcTime(std::string v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTime_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcTime::operator std::string() const { return *data_->getArgument(0); } + +// Function implementations for IfcTimeMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcTimeMeasure::Class() { return *IFC4X3_ADD2_IfcTimeMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcTimeMeasure::declaration() const { return *IFC4X3_ADD2_IfcTimeMeasure_type; } +Ifc4x3_add2::IfcTimeMeasure::IfcTimeMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcTimeMeasure::IfcTimeMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTimeMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcTimeMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcTimeStamp +const IfcParse::type_declaration& Ifc4x3_add2::IfcTimeStamp::Class() { return *IFC4X3_ADD2_IfcTimeStamp_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcTimeStamp::declaration() const { return *IFC4X3_ADD2_IfcTimeStamp_type; } +Ifc4x3_add2::IfcTimeStamp::IfcTimeStamp(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcTimeStamp::IfcTimeStamp(int v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTimeStamp_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcTimeStamp::operator int() const { return *data_->getArgument(0); } + +// Function implementations for IfcTorqueMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcTorqueMeasure::Class() { return *IFC4X3_ADD2_IfcTorqueMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcTorqueMeasure::declaration() const { return *IFC4X3_ADD2_IfcTorqueMeasure_type; } +Ifc4x3_add2::IfcTorqueMeasure::IfcTorqueMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcTorqueMeasure::IfcTorqueMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTorqueMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcTorqueMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcURIReference +const IfcParse::type_declaration& Ifc4x3_add2::IfcURIReference::Class() { return *IFC4X3_ADD2_IfcURIReference_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcURIReference::declaration() const { return *IFC4X3_ADD2_IfcURIReference_type; } +Ifc4x3_add2::IfcURIReference::IfcURIReference(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcURIReference::IfcURIReference(std::string v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcURIReference_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcURIReference::operator std::string() const { return *data_->getArgument(0); } + +// Function implementations for IfcVaporPermeabilityMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcVaporPermeabilityMeasure::Class() { return *IFC4X3_ADD2_IfcVaporPermeabilityMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcVaporPermeabilityMeasure::declaration() const { return *IFC4X3_ADD2_IfcVaporPermeabilityMeasure_type; } +Ifc4x3_add2::IfcVaporPermeabilityMeasure::IfcVaporPermeabilityMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcVaporPermeabilityMeasure::IfcVaporPermeabilityMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVaporPermeabilityMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcVaporPermeabilityMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcVolumeMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcVolumeMeasure::Class() { return *IFC4X3_ADD2_IfcVolumeMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcVolumeMeasure::declaration() const { return *IFC4X3_ADD2_IfcVolumeMeasure_type; } +Ifc4x3_add2::IfcVolumeMeasure::IfcVolumeMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcVolumeMeasure::IfcVolumeMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVolumeMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcVolumeMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcVolumetricFlowRateMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcVolumetricFlowRateMeasure::Class() { return *IFC4X3_ADD2_IfcVolumetricFlowRateMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcVolumetricFlowRateMeasure::declaration() const { return *IFC4X3_ADD2_IfcVolumetricFlowRateMeasure_type; } +Ifc4x3_add2::IfcVolumetricFlowRateMeasure::IfcVolumetricFlowRateMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcVolumetricFlowRateMeasure::IfcVolumetricFlowRateMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVolumetricFlowRateMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcVolumetricFlowRateMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcWarpingConstantMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcWarpingConstantMeasure::Class() { return *IFC4X3_ADD2_IfcWarpingConstantMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcWarpingConstantMeasure::declaration() const { return *IFC4X3_ADD2_IfcWarpingConstantMeasure_type; } +Ifc4x3_add2::IfcWarpingConstantMeasure::IfcWarpingConstantMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcWarpingConstantMeasure::IfcWarpingConstantMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWarpingConstantMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcWarpingConstantMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcWarpingMomentMeasure +const IfcParse::type_declaration& Ifc4x3_add2::IfcWarpingMomentMeasure::Class() { return *IFC4X3_ADD2_IfcWarpingMomentMeasure_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcWarpingMomentMeasure::declaration() const { return *IFC4X3_ADD2_IfcWarpingMomentMeasure_type; } +Ifc4x3_add2::IfcWarpingMomentMeasure::IfcWarpingMomentMeasure(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcWarpingMomentMeasure::IfcWarpingMomentMeasure(double v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWarpingMomentMeasure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcWarpingMomentMeasure::operator double() const { return *data_->getArgument(0); } + +// Function implementations for IfcWellKnownTextLiteral +const IfcParse::type_declaration& Ifc4x3_add2::IfcWellKnownTextLiteral::Class() { return *IFC4X3_ADD2_IfcWellKnownTextLiteral_type; } +const IfcParse::type_declaration& Ifc4x3_add2::IfcWellKnownTextLiteral::declaration() const { return *IFC4X3_ADD2_IfcWellKnownTextLiteral_type; } +Ifc4x3_add2::IfcWellKnownTextLiteral::IfcWellKnownTextLiteral(IfcEntityInstanceData* e) { data_ = e; } +Ifc4x3_add2::IfcWellKnownTextLiteral::IfcWellKnownTextLiteral(std::string v) { data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWellKnownTextLiteral_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(v); data_->setArgument(0, attr);} } +Ifc4x3_add2::IfcWellKnownTextLiteral::operator std::string() const { return *data_->getArgument(0); } + + +// Function implementations for IfcActionRequest +boost::optional< ::Ifc4x3_add2::IfcActionRequestTypeEnum::Value > Ifc4x3_add2::IfcActionRequest::PredefinedType() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcActionRequestTypeEnum::FromString(*data_->getArgument(6)); } +void Ifc4x3_add2::IfcActionRequest::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcActionRequestTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcActionRequestTypeEnum::ToString(*v)));}data_->setArgument(6,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcActionRequest::Status() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } std::string v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcActionRequest::setStatus(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcActionRequest::LongDescription() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } std::string v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcActionRequest::setLongDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcActionRequest::declaration() const { return *IFC4X3_ADD2_IfcActionRequest_type; } +const IfcParse::entity& Ifc4x3_add2::IfcActionRequest::Class() { return *IFC4X3_ADD2_IfcActionRequest_type; } +Ifc4x3_add2::IfcActionRequest::IfcActionRequest(IfcEntityInstanceData* e) : IfcControl((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcActionRequest_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcActionRequest::IfcActionRequest(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< ::Ifc4x3_add2::IfcActionRequestTypeEnum::Value > v7_PredefinedType, boost::optional< std::string > v8_Status, boost::optional< std::string > v9_LongDescription) : IfcControl((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcActionRequest_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Identification));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v7_PredefinedType,::Ifc4x3_add2::IfcActionRequestTypeEnum::ToString(*v7_PredefinedType))));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Status) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Status));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_LongDescription));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcActor +::Ifc4x3_add2::IfcActorSelect* Ifc4x3_add2::IfcActor::TheActor() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcActorSelect>(true); } +void Ifc4x3_add2::IfcActor::setTheActor(::Ifc4x3_add2::IfcActorSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + +::Ifc4x3_add2::IfcRelAssignsToActor::list::ptr Ifc4x3_add2::IfcActor::IsActingUpon() const { return data_->getInverse(IFC4X3_ADD2_IfcRelAssignsToActor_type, 6)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcActor::declaration() const { return *IFC4X3_ADD2_IfcActor_type; } +const IfcParse::entity& Ifc4x3_add2::IfcActor::Class() { return *IFC4X3_ADD2_IfcActor_type; } +Ifc4x3_add2::IfcActor::IfcActor(IfcEntityInstanceData* e) : IfcObject((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcActor_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcActor::IfcActor(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcActorSelect* v6_TheActor) : IfcObject((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcActor_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_TheActor));data_->setArgument(5,attr);} } + +// Function implementations for IfcActorRole +::Ifc4x3_add2::IfcRoleEnum::Value Ifc4x3_add2::IfcActorRole::Role() const { return ::Ifc4x3_add2::IfcRoleEnum::FromString(*data_->getArgument(0)); } +void Ifc4x3_add2::IfcActorRole::setRole(::Ifc4x3_add2::IfcRoleEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcRoleEnum::ToString(v)));data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcActorRole::UserDefinedRole() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcActorRole::setUserDefinedRole(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcActorRole::Description() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcActorRole::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } + +::Ifc4x3_add2::IfcExternalReferenceRelationship::list::ptr Ifc4x3_add2::IfcActorRole::HasExternalReference() const { return data_->getInverse(IFC4X3_ADD2_IfcExternalReferenceRelationship_type, 3)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcActorRole::declaration() const { return *IFC4X3_ADD2_IfcActorRole_type; } +const IfcParse::entity& Ifc4x3_add2::IfcActorRole::Class() { return *IFC4X3_ADD2_IfcActorRole_type; } +Ifc4x3_add2::IfcActorRole::IfcActorRole(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcActorRole_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcActorRole::IfcActorRole(::Ifc4x3_add2::IfcRoleEnum::Value v1_Role, boost::optional< std::string > v2_UserDefinedRole, boost::optional< std::string > v3_Description) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcActorRole_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_Role,::Ifc4x3_add2::IfcRoleEnum::ToString(v1_Role))));data_->setArgument(0,attr);} if (v2_UserDefinedRole) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_UserDefinedRole));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Description));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } } + +// Function implementations for IfcActuator +boost::optional< ::Ifc4x3_add2::IfcActuatorTypeEnum::Value > Ifc4x3_add2::IfcActuator::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcActuatorTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcActuator::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcActuatorTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcActuatorTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcActuator::declaration() const { return *IFC4X3_ADD2_IfcActuator_type; } +const IfcParse::entity& Ifc4x3_add2::IfcActuator::Class() { return *IFC4X3_ADD2_IfcActuator_type; } +Ifc4x3_add2::IfcActuator::IfcActuator(IfcEntityInstanceData* e) : IfcDistributionControlElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcActuator_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcActuator::IfcActuator(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcActuatorTypeEnum::Value > v9_PredefinedType) : IfcDistributionControlElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcActuator_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcActuatorTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcActuatorType +::Ifc4x3_add2::IfcActuatorTypeEnum::Value Ifc4x3_add2::IfcActuatorType::PredefinedType() const { return ::Ifc4x3_add2::IfcActuatorTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcActuatorType::setPredefinedType(::Ifc4x3_add2::IfcActuatorTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcActuatorTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcActuatorType::declaration() const { return *IFC4X3_ADD2_IfcActuatorType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcActuatorType::Class() { return *IFC4X3_ADD2_IfcActuatorType_type; } +Ifc4x3_add2::IfcActuatorType::IfcActuatorType(IfcEntityInstanceData* e) : IfcDistributionControlElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcActuatorType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcActuatorType::IfcActuatorType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcActuatorTypeEnum::Value v10_PredefinedType) : IfcDistributionControlElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcActuatorType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcActuatorTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcAddress +boost::optional< ::Ifc4x3_add2::IfcAddressTypeEnum::Value > Ifc4x3_add2::IfcAddress::Purpose() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcAddressTypeEnum::FromString(*data_->getArgument(0)); } +void Ifc4x3_add2::IfcAddress::setPurpose(boost::optional< ::Ifc4x3_add2::IfcAddressTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcAddressTypeEnum::ToString(*v)));}data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcAddress::Description() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcAddress::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcAddress::UserDefinedPurpose() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcAddress::setUserDefinedPurpose(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } + +::Ifc4x3_add2::IfcPerson::list::ptr Ifc4x3_add2::IfcAddress::OfPerson() const { return data_->getInverse(IFC4X3_ADD2_IfcPerson_type, 7)->as(); } +::Ifc4x3_add2::IfcOrganization::list::ptr Ifc4x3_add2::IfcAddress::OfOrganization() const { return data_->getInverse(IFC4X3_ADD2_IfcOrganization_type, 4)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcAddress::declaration() const { return *IFC4X3_ADD2_IfcAddress_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAddress::Class() { return *IFC4X3_ADD2_IfcAddress_type; } +Ifc4x3_add2::IfcAddress::IfcAddress(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAddress_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAddress::IfcAddress(boost::optional< ::Ifc4x3_add2::IfcAddressTypeEnum::Value > v1_Purpose, boost::optional< std::string > v2_Description, boost::optional< std::string > v3_UserDefinedPurpose) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAddress_type); if (v1_Purpose) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v1_Purpose,::Ifc4x3_add2::IfcAddressTypeEnum::ToString(*v1_Purpose))));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_UserDefinedPurpose) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_UserDefinedPurpose));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } } + +// Function implementations for IfcAdvancedBrep + + +const IfcParse::entity& Ifc4x3_add2::IfcAdvancedBrep::declaration() const { return *IFC4X3_ADD2_IfcAdvancedBrep_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAdvancedBrep::Class() { return *IFC4X3_ADD2_IfcAdvancedBrep_type; } +Ifc4x3_add2::IfcAdvancedBrep::IfcAdvancedBrep(IfcEntityInstanceData* e) : IfcManifoldSolidBrep((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAdvancedBrep_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAdvancedBrep::IfcAdvancedBrep(::Ifc4x3_add2::IfcClosedShell* v1_Outer) : IfcManifoldSolidBrep((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAdvancedBrep_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Outer));data_->setArgument(0,attr);} } + +// Function implementations for IfcAdvancedBrepWithVoids +aggregate_of< ::Ifc4x3_add2::IfcClosedShell >::ptr Ifc4x3_add2::IfcAdvancedBrepWithVoids::Voids() const { aggregate_of_instance::ptr es = *data_->getArgument(1); return es->as< ::Ifc4x3_add2::IfcClosedShell >(); } +void Ifc4x3_add2::IfcAdvancedBrepWithVoids::setVoids(aggregate_of< ::Ifc4x3_add2::IfcClosedShell >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcAdvancedBrepWithVoids::declaration() const { return *IFC4X3_ADD2_IfcAdvancedBrepWithVoids_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAdvancedBrepWithVoids::Class() { return *IFC4X3_ADD2_IfcAdvancedBrepWithVoids_type; } +Ifc4x3_add2::IfcAdvancedBrepWithVoids::IfcAdvancedBrepWithVoids(IfcEntityInstanceData* e) : IfcAdvancedBrep((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAdvancedBrepWithVoids_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAdvancedBrepWithVoids::IfcAdvancedBrepWithVoids(::Ifc4x3_add2::IfcClosedShell* v1_Outer, aggregate_of< ::Ifc4x3_add2::IfcClosedShell >::ptr v2_Voids) : IfcAdvancedBrep((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAdvancedBrepWithVoids_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Outer));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Voids)->generalize());data_->setArgument(1,attr);} } + +// Function implementations for IfcAdvancedFace + + +const IfcParse::entity& Ifc4x3_add2::IfcAdvancedFace::declaration() const { return *IFC4X3_ADD2_IfcAdvancedFace_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAdvancedFace::Class() { return *IFC4X3_ADD2_IfcAdvancedFace_type; } +Ifc4x3_add2::IfcAdvancedFace::IfcAdvancedFace(IfcEntityInstanceData* e) : IfcFaceSurface((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAdvancedFace_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAdvancedFace::IfcAdvancedFace(aggregate_of< ::Ifc4x3_add2::IfcFaceBound >::ptr v1_Bounds, ::Ifc4x3_add2::IfcSurface* v2_FaceSurface, bool v3_SameSense) : IfcFaceSurface((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAdvancedFace_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Bounds)->generalize());data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_FaceSurface));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_SameSense));data_->setArgument(2,attr);} } + +// Function implementations for IfcAirTerminal +boost::optional< ::Ifc4x3_add2::IfcAirTerminalTypeEnum::Value > Ifc4x3_add2::IfcAirTerminal::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcAirTerminalTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcAirTerminal::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcAirTerminalTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcAirTerminalTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcAirTerminal::declaration() const { return *IFC4X3_ADD2_IfcAirTerminal_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAirTerminal::Class() { return *IFC4X3_ADD2_IfcAirTerminal_type; } +Ifc4x3_add2::IfcAirTerminal::IfcAirTerminal(IfcEntityInstanceData* e) : IfcFlowTerminal((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAirTerminal_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAirTerminal::IfcAirTerminal(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcAirTerminalTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAirTerminal_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcAirTerminalTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcAirTerminalBox +boost::optional< ::Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::Value > Ifc4x3_add2::IfcAirTerminalBox::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcAirTerminalBox::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcAirTerminalBox::declaration() const { return *IFC4X3_ADD2_IfcAirTerminalBox_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAirTerminalBox::Class() { return *IFC4X3_ADD2_IfcAirTerminalBox_type; } +Ifc4x3_add2::IfcAirTerminalBox::IfcAirTerminalBox(IfcEntityInstanceData* e) : IfcFlowController((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAirTerminalBox_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAirTerminalBox::IfcAirTerminalBox(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::Value > v9_PredefinedType) : IfcFlowController((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAirTerminalBox_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcAirTerminalBoxType +::Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::Value Ifc4x3_add2::IfcAirTerminalBoxType::PredefinedType() const { return ::Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcAirTerminalBoxType::setPredefinedType(::Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcAirTerminalBoxType::declaration() const { return *IFC4X3_ADD2_IfcAirTerminalBoxType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAirTerminalBoxType::Class() { return *IFC4X3_ADD2_IfcAirTerminalBoxType_type; } +Ifc4x3_add2::IfcAirTerminalBoxType::IfcAirTerminalBoxType(IfcEntityInstanceData* e) : IfcFlowControllerType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAirTerminalBoxType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAirTerminalBoxType::IfcAirTerminalBoxType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::Value v10_PredefinedType) : IfcFlowControllerType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAirTerminalBoxType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcAirTerminalType +::Ifc4x3_add2::IfcAirTerminalTypeEnum::Value Ifc4x3_add2::IfcAirTerminalType::PredefinedType() const { return ::Ifc4x3_add2::IfcAirTerminalTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcAirTerminalType::setPredefinedType(::Ifc4x3_add2::IfcAirTerminalTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcAirTerminalTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcAirTerminalType::declaration() const { return *IFC4X3_ADD2_IfcAirTerminalType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAirTerminalType::Class() { return *IFC4X3_ADD2_IfcAirTerminalType_type; } +Ifc4x3_add2::IfcAirTerminalType::IfcAirTerminalType(IfcEntityInstanceData* e) : IfcFlowTerminalType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAirTerminalType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAirTerminalType::IfcAirTerminalType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcAirTerminalTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAirTerminalType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcAirTerminalTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcAirToAirHeatRecovery +boost::optional< ::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::Value > Ifc4x3_add2::IfcAirToAirHeatRecovery::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcAirToAirHeatRecovery::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcAirToAirHeatRecovery::declaration() const { return *IFC4X3_ADD2_IfcAirToAirHeatRecovery_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAirToAirHeatRecovery::Class() { return *IFC4X3_ADD2_IfcAirToAirHeatRecovery_type; } +Ifc4x3_add2::IfcAirToAirHeatRecovery::IfcAirToAirHeatRecovery(IfcEntityInstanceData* e) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAirToAirHeatRecovery_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAirToAirHeatRecovery::IfcAirToAirHeatRecovery(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAirToAirHeatRecovery_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcAirToAirHeatRecoveryType +::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::Value Ifc4x3_add2::IfcAirToAirHeatRecoveryType::PredefinedType() const { return ::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcAirToAirHeatRecoveryType::setPredefinedType(::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcAirToAirHeatRecoveryType::declaration() const { return *IFC4X3_ADD2_IfcAirToAirHeatRecoveryType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAirToAirHeatRecoveryType::Class() { return *IFC4X3_ADD2_IfcAirToAirHeatRecoveryType_type; } +Ifc4x3_add2::IfcAirToAirHeatRecoveryType::IfcAirToAirHeatRecoveryType(IfcEntityInstanceData* e) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAirToAirHeatRecoveryType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAirToAirHeatRecoveryType::IfcAirToAirHeatRecoveryType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAirToAirHeatRecoveryType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcAlarm +boost::optional< ::Ifc4x3_add2::IfcAlarmTypeEnum::Value > Ifc4x3_add2::IfcAlarm::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcAlarmTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcAlarm::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcAlarmTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcAlarmTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcAlarm::declaration() const { return *IFC4X3_ADD2_IfcAlarm_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAlarm::Class() { return *IFC4X3_ADD2_IfcAlarm_type; } +Ifc4x3_add2::IfcAlarm::IfcAlarm(IfcEntityInstanceData* e) : IfcDistributionControlElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAlarm_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAlarm::IfcAlarm(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcAlarmTypeEnum::Value > v9_PredefinedType) : IfcDistributionControlElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAlarm_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcAlarmTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcAlarmType +::Ifc4x3_add2::IfcAlarmTypeEnum::Value Ifc4x3_add2::IfcAlarmType::PredefinedType() const { return ::Ifc4x3_add2::IfcAlarmTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcAlarmType::setPredefinedType(::Ifc4x3_add2::IfcAlarmTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcAlarmTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcAlarmType::declaration() const { return *IFC4X3_ADD2_IfcAlarmType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAlarmType::Class() { return *IFC4X3_ADD2_IfcAlarmType_type; } +Ifc4x3_add2::IfcAlarmType::IfcAlarmType(IfcEntityInstanceData* e) : IfcDistributionControlElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAlarmType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAlarmType::IfcAlarmType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcAlarmTypeEnum::Value v10_PredefinedType) : IfcDistributionControlElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAlarmType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcAlarmTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcAlignment +boost::optional< ::Ifc4x3_add2::IfcAlignmentTypeEnum::Value > Ifc4x3_add2::IfcAlignment::PredefinedType() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcAlignmentTypeEnum::FromString(*data_->getArgument(7)); } +void Ifc4x3_add2::IfcAlignment::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcAlignmentTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcAlignmentTypeEnum::ToString(*v)));}data_->setArgument(7,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcAlignment::declaration() const { return *IFC4X3_ADD2_IfcAlignment_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAlignment::Class() { return *IFC4X3_ADD2_IfcAlignment_type; } +Ifc4x3_add2::IfcAlignment::IfcAlignment(IfcEntityInstanceData* e) : IfcLinearPositioningElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAlignment_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAlignment::IfcAlignment(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< ::Ifc4x3_add2::IfcAlignmentTypeEnum::Value > v8_PredefinedType) : IfcLinearPositioningElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAlignment_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v8_PredefinedType,::Ifc4x3_add2::IfcAlignmentTypeEnum::ToString(*v8_PredefinedType))));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcAlignmentCant +double Ifc4x3_add2::IfcAlignmentCant::RailHeadDistance() const { double v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcAlignmentCant::setRailHeadDistance(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(7,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcAlignmentCant::declaration() const { return *IFC4X3_ADD2_IfcAlignmentCant_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAlignmentCant::Class() { return *IFC4X3_ADD2_IfcAlignmentCant_type; } +Ifc4x3_add2::IfcAlignmentCant::IfcAlignmentCant(IfcEntityInstanceData* e) : IfcLinearElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAlignmentCant_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAlignmentCant::IfcAlignmentCant(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, double v8_RailHeadDistance) : IfcLinearElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAlignmentCant_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_RailHeadDistance));data_->setArgument(7,attr);} } + +// Function implementations for IfcAlignmentCantSegment +double Ifc4x3_add2::IfcAlignmentCantSegment::StartDistAlong() const { double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcAlignmentCantSegment::setStartDistAlong(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +double Ifc4x3_add2::IfcAlignmentCantSegment::HorizontalLength() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcAlignmentCantSegment::setHorizontalLength(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +double Ifc4x3_add2::IfcAlignmentCantSegment::StartCantLeft() const { double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcAlignmentCantSegment::setStartCantLeft(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +boost::optional< double > Ifc4x3_add2::IfcAlignmentCantSegment::EndCantLeft() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } double v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcAlignmentCantSegment::setEndCantLeft(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +double Ifc4x3_add2::IfcAlignmentCantSegment::StartCantRight() const { double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcAlignmentCantSegment::setStartCantRight(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +boost::optional< double > Ifc4x3_add2::IfcAlignmentCantSegment::EndCantRight() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } double v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcAlignmentCantSegment::setEndCantRight(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +::Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::Value Ifc4x3_add2::IfcAlignmentCantSegment::PredefinedType() const { return ::Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcAlignmentCantSegment::setPredefinedType(::Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::ToString(v)));data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcAlignmentCantSegment::declaration() const { return *IFC4X3_ADD2_IfcAlignmentCantSegment_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAlignmentCantSegment::Class() { return *IFC4X3_ADD2_IfcAlignmentCantSegment_type; } +Ifc4x3_add2::IfcAlignmentCantSegment::IfcAlignmentCantSegment(IfcEntityInstanceData* e) : IfcAlignmentParameterSegment((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAlignmentCantSegment_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAlignmentCantSegment::IfcAlignmentCantSegment(boost::optional< std::string > v1_StartTag, boost::optional< std::string > v2_EndTag, double v3_StartDistAlong, double v4_HorizontalLength, double v5_StartCantLeft, boost::optional< double > v6_EndCantLeft, double v7_StartCantRight, boost::optional< double > v8_EndCantRight, ::Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::Value v9_PredefinedType) : IfcAlignmentParameterSegment((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAlignmentCantSegment_type); if (v1_StartTag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_StartTag));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_EndTag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_EndTag));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_StartDistAlong));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_HorizontalLength));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_StartCantLeft));data_->setArgument(4,attr);} if (v6_EndCantLeft) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_EndCantLeft));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_StartCantRight));data_->setArgument(6,attr);} if (v8_EndCantRight) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_EndCantRight));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v9_PredefinedType,::Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::ToString(v9_PredefinedType))));data_->setArgument(8,attr);} } + +// Function implementations for IfcAlignmentHorizontal + + +const IfcParse::entity& Ifc4x3_add2::IfcAlignmentHorizontal::declaration() const { return *IFC4X3_ADD2_IfcAlignmentHorizontal_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAlignmentHorizontal::Class() { return *IFC4X3_ADD2_IfcAlignmentHorizontal_type; } +Ifc4x3_add2::IfcAlignmentHorizontal::IfcAlignmentHorizontal(IfcEntityInstanceData* e) : IfcLinearElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAlignmentHorizontal_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAlignmentHorizontal::IfcAlignmentHorizontal(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation) : IfcLinearElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAlignmentHorizontal_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} } + +// Function implementations for IfcAlignmentHorizontalSegment +::Ifc4x3_add2::IfcCartesianPoint* Ifc4x3_add2::IfcAlignmentHorizontalSegment::StartPoint() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcCartesianPoint>(true); } +void Ifc4x3_add2::IfcAlignmentHorizontalSegment::setStartPoint(::Ifc4x3_add2::IfcCartesianPoint* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +double Ifc4x3_add2::IfcAlignmentHorizontalSegment::StartDirection() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcAlignmentHorizontalSegment::setStartDirection(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +double Ifc4x3_add2::IfcAlignmentHorizontalSegment::StartRadiusOfCurvature() const { double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcAlignmentHorizontalSegment::setStartRadiusOfCurvature(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +double Ifc4x3_add2::IfcAlignmentHorizontalSegment::EndRadiusOfCurvature() const { double v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcAlignmentHorizontalSegment::setEndRadiusOfCurvature(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +double Ifc4x3_add2::IfcAlignmentHorizontalSegment::SegmentLength() const { double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcAlignmentHorizontalSegment::setSegmentLength(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +boost::optional< double > Ifc4x3_add2::IfcAlignmentHorizontalSegment::GravityCenterLineHeight() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } double v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcAlignmentHorizontalSegment::setGravityCenterLineHeight(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +::Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::Value Ifc4x3_add2::IfcAlignmentHorizontalSegment::PredefinedType() const { return ::Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcAlignmentHorizontalSegment::setPredefinedType(::Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::ToString(v)));data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcAlignmentHorizontalSegment::declaration() const { return *IFC4X3_ADD2_IfcAlignmentHorizontalSegment_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAlignmentHorizontalSegment::Class() { return *IFC4X3_ADD2_IfcAlignmentHorizontalSegment_type; } +Ifc4x3_add2::IfcAlignmentHorizontalSegment::IfcAlignmentHorizontalSegment(IfcEntityInstanceData* e) : IfcAlignmentParameterSegment((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAlignmentHorizontalSegment_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAlignmentHorizontalSegment::IfcAlignmentHorizontalSegment(boost::optional< std::string > v1_StartTag, boost::optional< std::string > v2_EndTag, ::Ifc4x3_add2::IfcCartesianPoint* v3_StartPoint, double v4_StartDirection, double v5_StartRadiusOfCurvature, double v6_EndRadiusOfCurvature, double v7_SegmentLength, boost::optional< double > v8_GravityCenterLineHeight, ::Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::Value v9_PredefinedType) : IfcAlignmentParameterSegment((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAlignmentHorizontalSegment_type); if (v1_StartTag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_StartTag));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_EndTag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_EndTag));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_StartPoint));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_StartDirection));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_StartRadiusOfCurvature));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_EndRadiusOfCurvature));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_SegmentLength));data_->setArgument(6,attr);} if (v8_GravityCenterLineHeight) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_GravityCenterLineHeight));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v9_PredefinedType,::Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::ToString(v9_PredefinedType))));data_->setArgument(8,attr);} } + +// Function implementations for IfcAlignmentParameterSegment +boost::optional< std::string > Ifc4x3_add2::IfcAlignmentParameterSegment::StartTag() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcAlignmentParameterSegment::setStartTag(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcAlignmentParameterSegment::EndTag() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcAlignmentParameterSegment::setEndTag(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcAlignmentParameterSegment::declaration() const { return *IFC4X3_ADD2_IfcAlignmentParameterSegment_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAlignmentParameterSegment::Class() { return *IFC4X3_ADD2_IfcAlignmentParameterSegment_type; } +Ifc4x3_add2::IfcAlignmentParameterSegment::IfcAlignmentParameterSegment(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAlignmentParameterSegment_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAlignmentParameterSegment::IfcAlignmentParameterSegment(boost::optional< std::string > v1_StartTag, boost::optional< std::string > v2_EndTag) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAlignmentParameterSegment_type); if (v1_StartTag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_StartTag));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_EndTag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_EndTag));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } } + +// Function implementations for IfcAlignmentSegment +::Ifc4x3_add2::IfcAlignmentParameterSegment* Ifc4x3_add2::IfcAlignmentSegment::DesignParameters() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(7)))->as<::Ifc4x3_add2::IfcAlignmentParameterSegment>(true); } +void Ifc4x3_add2::IfcAlignmentSegment::setDesignParameters(::Ifc4x3_add2::IfcAlignmentParameterSegment* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(7,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcAlignmentSegment::declaration() const { return *IFC4X3_ADD2_IfcAlignmentSegment_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAlignmentSegment::Class() { return *IFC4X3_ADD2_IfcAlignmentSegment_type; } +Ifc4x3_add2::IfcAlignmentSegment::IfcAlignmentSegment(IfcEntityInstanceData* e) : IfcLinearElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAlignmentSegment_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAlignmentSegment::IfcAlignmentSegment(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcAlignmentParameterSegment* v8_DesignParameters) : IfcLinearElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAlignmentSegment_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_DesignParameters));data_->setArgument(7,attr);} } + +// Function implementations for IfcAlignmentVertical + + +const IfcParse::entity& Ifc4x3_add2::IfcAlignmentVertical::declaration() const { return *IFC4X3_ADD2_IfcAlignmentVertical_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAlignmentVertical::Class() { return *IFC4X3_ADD2_IfcAlignmentVertical_type; } +Ifc4x3_add2::IfcAlignmentVertical::IfcAlignmentVertical(IfcEntityInstanceData* e) : IfcLinearElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAlignmentVertical_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAlignmentVertical::IfcAlignmentVertical(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation) : IfcLinearElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAlignmentVertical_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} } + +// Function implementations for IfcAlignmentVerticalSegment +double Ifc4x3_add2::IfcAlignmentVerticalSegment::StartDistAlong() const { double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcAlignmentVerticalSegment::setStartDistAlong(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +double Ifc4x3_add2::IfcAlignmentVerticalSegment::HorizontalLength() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcAlignmentVerticalSegment::setHorizontalLength(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +double Ifc4x3_add2::IfcAlignmentVerticalSegment::StartHeight() const { double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcAlignmentVerticalSegment::setStartHeight(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +double Ifc4x3_add2::IfcAlignmentVerticalSegment::StartGradient() const { double v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcAlignmentVerticalSegment::setStartGradient(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +double Ifc4x3_add2::IfcAlignmentVerticalSegment::EndGradient() const { double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcAlignmentVerticalSegment::setEndGradient(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +boost::optional< double > Ifc4x3_add2::IfcAlignmentVerticalSegment::RadiusOfCurvature() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } double v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcAlignmentVerticalSegment::setRadiusOfCurvature(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +::Ifc4x3_add2::IfcAlignmentVerticalSegmentTypeEnum::Value Ifc4x3_add2::IfcAlignmentVerticalSegment::PredefinedType() const { return ::Ifc4x3_add2::IfcAlignmentVerticalSegmentTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcAlignmentVerticalSegment::setPredefinedType(::Ifc4x3_add2::IfcAlignmentVerticalSegmentTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcAlignmentVerticalSegmentTypeEnum::ToString(v)));data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcAlignmentVerticalSegment::declaration() const { return *IFC4X3_ADD2_IfcAlignmentVerticalSegment_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAlignmentVerticalSegment::Class() { return *IFC4X3_ADD2_IfcAlignmentVerticalSegment_type; } +Ifc4x3_add2::IfcAlignmentVerticalSegment::IfcAlignmentVerticalSegment(IfcEntityInstanceData* e) : IfcAlignmentParameterSegment((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAlignmentVerticalSegment_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAlignmentVerticalSegment::IfcAlignmentVerticalSegment(boost::optional< std::string > v1_StartTag, boost::optional< std::string > v2_EndTag, double v3_StartDistAlong, double v4_HorizontalLength, double v5_StartHeight, double v6_StartGradient, double v7_EndGradient, boost::optional< double > v8_RadiusOfCurvature, ::Ifc4x3_add2::IfcAlignmentVerticalSegmentTypeEnum::Value v9_PredefinedType) : IfcAlignmentParameterSegment((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAlignmentVerticalSegment_type); if (v1_StartTag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_StartTag));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_EndTag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_EndTag));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_StartDistAlong));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_HorizontalLength));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_StartHeight));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_StartGradient));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_EndGradient));data_->setArgument(6,attr);} if (v8_RadiusOfCurvature) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_RadiusOfCurvature));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v9_PredefinedType,::Ifc4x3_add2::IfcAlignmentVerticalSegmentTypeEnum::ToString(v9_PredefinedType))));data_->setArgument(8,attr);} } + +// Function implementations for IfcAnnotation +boost::optional< ::Ifc4x3_add2::IfcAnnotationTypeEnum::Value > Ifc4x3_add2::IfcAnnotation::PredefinedType() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcAnnotationTypeEnum::FromString(*data_->getArgument(7)); } +void Ifc4x3_add2::IfcAnnotation::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcAnnotationTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcAnnotationTypeEnum::ToString(*v)));}data_->setArgument(7,attr);} } + +::Ifc4x3_add2::IfcRelContainedInSpatialStructure::list::ptr Ifc4x3_add2::IfcAnnotation::ContainedInStructure() const { return data_->getInverse(IFC4X3_ADD2_IfcRelContainedInSpatialStructure_type, 4)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcAnnotation::declaration() const { return *IFC4X3_ADD2_IfcAnnotation_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAnnotation::Class() { return *IFC4X3_ADD2_IfcAnnotation_type; } +Ifc4x3_add2::IfcAnnotation::IfcAnnotation(IfcEntityInstanceData* e) : IfcProduct((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAnnotation_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAnnotation::IfcAnnotation(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< ::Ifc4x3_add2::IfcAnnotationTypeEnum::Value > v8_PredefinedType) : IfcProduct((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAnnotation_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v8_PredefinedType,::Ifc4x3_add2::IfcAnnotationTypeEnum::ToString(*v8_PredefinedType))));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcAnnotationFillArea +::Ifc4x3_add2::IfcCurve* Ifc4x3_add2::IfcAnnotationFillArea::OuterBoundary() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcCurve>(true); } +void Ifc4x3_add2::IfcAnnotationFillArea::setOuterBoundary(::Ifc4x3_add2::IfcCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcCurve >::ptr > Ifc4x3_add2::IfcAnnotationFillArea::InnerBoundaries() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(1); return es->as< ::Ifc4x3_add2::IfcCurve >(); } +void Ifc4x3_add2::IfcAnnotationFillArea::setInnerBoundaries(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcCurve >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcAnnotationFillArea::declaration() const { return *IFC4X3_ADD2_IfcAnnotationFillArea_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAnnotationFillArea::Class() { return *IFC4X3_ADD2_IfcAnnotationFillArea_type; } +Ifc4x3_add2::IfcAnnotationFillArea::IfcAnnotationFillArea(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAnnotationFillArea_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAnnotationFillArea::IfcAnnotationFillArea(::Ifc4x3_add2::IfcCurve* v1_OuterBoundary, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcCurve >::ptr > v2_InnerBoundaries) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAnnotationFillArea_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_OuterBoundary));data_->setArgument(0,attr);} if (v2_InnerBoundaries) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_InnerBoundaries)->generalize());data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } } + +// Function implementations for IfcApplication +::Ifc4x3_add2::IfcOrganization* Ifc4x3_add2::IfcApplication::ApplicationDeveloper() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcOrganization>(true); } +void Ifc4x3_add2::IfcApplication::setApplicationDeveloper(::Ifc4x3_add2::IfcOrganization* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +std::string Ifc4x3_add2::IfcApplication::Version() const { std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcApplication::setVersion(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +std::string Ifc4x3_add2::IfcApplication::ApplicationFullName() const { std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcApplication::setApplicationFullName(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +std::string Ifc4x3_add2::IfcApplication::ApplicationIdentifier() const { std::string v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcApplication::setApplicationIdentifier(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcApplication::declaration() const { return *IFC4X3_ADD2_IfcApplication_type; } +const IfcParse::entity& Ifc4x3_add2::IfcApplication::Class() { return *IFC4X3_ADD2_IfcApplication_type; } +Ifc4x3_add2::IfcApplication::IfcApplication(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcApplication_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcApplication::IfcApplication(::Ifc4x3_add2::IfcOrganization* v1_ApplicationDeveloper, std::string v2_Version, std::string v3_ApplicationFullName, std::string v4_ApplicationIdentifier) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcApplication_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_ApplicationDeveloper));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Version));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_ApplicationFullName));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_ApplicationIdentifier));data_->setArgument(3,attr);} } + +// Function implementations for IfcAppliedValue +boost::optional< std::string > Ifc4x3_add2::IfcAppliedValue::Name() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcAppliedValue::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcAppliedValue::Description() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcAppliedValue::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcAppliedValueSelect* Ifc4x3_add2::IfcAppliedValue::AppliedValue() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcAppliedValueSelect>(true); } +void Ifc4x3_add2::IfcAppliedValue::setAppliedValue(::Ifc4x3_add2::IfcAppliedValueSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcMeasureWithUnit* Ifc4x3_add2::IfcAppliedValue::UnitBasis() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcMeasureWithUnit>(true); } +void Ifc4x3_add2::IfcAppliedValue::setUnitBasis(::Ifc4x3_add2::IfcMeasureWithUnit* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcAppliedValue::ApplicableDate() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcAppliedValue::setApplicableDate(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcAppliedValue::FixedUntilDate() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcAppliedValue::setFixedUntilDate(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcAppliedValue::Category() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } std::string v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcAppliedValue::setCategory(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcAppliedValue::Condition() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } std::string v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcAppliedValue::setCondition(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +boost::optional< ::Ifc4x3_add2::IfcArithmeticOperatorEnum::Value > Ifc4x3_add2::IfcAppliedValue::ArithmeticOperator() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcArithmeticOperatorEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcAppliedValue::setArithmeticOperator(boost::optional< ::Ifc4x3_add2::IfcArithmeticOperatorEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcArithmeticOperatorEnum::ToString(*v)));}data_->setArgument(8,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > Ifc4x3_add2::IfcAppliedValue::Components() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(9); return es->as< ::Ifc4x3_add2::IfcAppliedValue >(); } +void Ifc4x3_add2::IfcAppliedValue::setComponents(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(9,attr);} } + +::Ifc4x3_add2::IfcExternalReferenceRelationship::list::ptr Ifc4x3_add2::IfcAppliedValue::HasExternalReference() const { return data_->getInverse(IFC4X3_ADD2_IfcExternalReferenceRelationship_type, 3)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcAppliedValue::declaration() const { return *IFC4X3_ADD2_IfcAppliedValue_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAppliedValue::Class() { return *IFC4X3_ADD2_IfcAppliedValue_type; } +Ifc4x3_add2::IfcAppliedValue::IfcAppliedValue(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAppliedValue_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAppliedValue::IfcAppliedValue(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcAppliedValueSelect* v3_AppliedValue, ::Ifc4x3_add2::IfcMeasureWithUnit* v4_UnitBasis, boost::optional< std::string > v5_ApplicableDate, boost::optional< std::string > v6_FixedUntilDate, boost::optional< std::string > v7_Category, boost::optional< std::string > v8_Condition, boost::optional< ::Ifc4x3_add2::IfcArithmeticOperatorEnum::Value > v9_ArithmeticOperator, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v10_Components) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAppliedValue_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_AppliedValue));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_UnitBasis));data_->setArgument(3,attr);} if (v5_ApplicableDate) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableDate));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_FixedUntilDate) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_FixedUntilDate));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_Category) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_Category));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Condition) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Condition));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ArithmeticOperator) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_ArithmeticOperator,::Ifc4x3_add2::IfcArithmeticOperatorEnum::ToString(*v9_ArithmeticOperator))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_Components) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_Components)->generalize());data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } } + +// Function implementations for IfcApproval +boost::optional< std::string > Ifc4x3_add2::IfcApproval::Identifier() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcApproval::setIdentifier(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcApproval::Name() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcApproval::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcApproval::Description() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcApproval::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcApproval::TimeOfApproval() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } std::string v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcApproval::setTimeOfApproval(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcApproval::Status() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcApproval::setStatus(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcApproval::Level() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcApproval::setLevel(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcApproval::Qualifier() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } std::string v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcApproval::setQualifier(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } +::Ifc4x3_add2::IfcActorSelect* Ifc4x3_add2::IfcApproval::RequestingApproval() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(7)))->as<::Ifc4x3_add2::IfcActorSelect>(true); } +void Ifc4x3_add2::IfcApproval::setRequestingApproval(::Ifc4x3_add2::IfcActorSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(7,attr);} } +::Ifc4x3_add2::IfcActorSelect* Ifc4x3_add2::IfcApproval::GivingApproval() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(8)))->as<::Ifc4x3_add2::IfcActorSelect>(true); } +void Ifc4x3_add2::IfcApproval::setGivingApproval(::Ifc4x3_add2::IfcActorSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(8,attr);} } + +::Ifc4x3_add2::IfcExternalReferenceRelationship::list::ptr Ifc4x3_add2::IfcApproval::HasExternalReferences() const { return data_->getInverse(IFC4X3_ADD2_IfcExternalReferenceRelationship_type, 3)->as(); } +::Ifc4x3_add2::IfcRelAssociatesApproval::list::ptr Ifc4x3_add2::IfcApproval::ApprovedObjects() const { return data_->getInverse(IFC4X3_ADD2_IfcRelAssociatesApproval_type, 5)->as(); } +::Ifc4x3_add2::IfcResourceApprovalRelationship::list::ptr Ifc4x3_add2::IfcApproval::ApprovedResources() const { return data_->getInverse(IFC4X3_ADD2_IfcResourceApprovalRelationship_type, 3)->as(); } +::Ifc4x3_add2::IfcApprovalRelationship::list::ptr Ifc4x3_add2::IfcApproval::IsRelatedWith() const { return data_->getInverse(IFC4X3_ADD2_IfcApprovalRelationship_type, 3)->as(); } +::Ifc4x3_add2::IfcApprovalRelationship::list::ptr Ifc4x3_add2::IfcApproval::Relates() const { return data_->getInverse(IFC4X3_ADD2_IfcApprovalRelationship_type, 2)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcApproval::declaration() const { return *IFC4X3_ADD2_IfcApproval_type; } +const IfcParse::entity& Ifc4x3_add2::IfcApproval::Class() { return *IFC4X3_ADD2_IfcApproval_type; } +Ifc4x3_add2::IfcApproval::IfcApproval(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcApproval_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcApproval::IfcApproval(boost::optional< std::string > v1_Identifier, boost::optional< std::string > v2_Name, boost::optional< std::string > v3_Description, boost::optional< std::string > v4_TimeOfApproval, boost::optional< std::string > v5_Status, boost::optional< std::string > v6_Level, boost::optional< std::string > v7_Qualifier, ::Ifc4x3_add2::IfcActorSelect* v8_RequestingApproval, ::Ifc4x3_add2::IfcActorSelect* v9_GivingApproval) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcApproval_type); if (v1_Identifier) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Identifier));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Name));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Description));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_TimeOfApproval) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_TimeOfApproval));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_Status) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Status));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Level) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Level));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_Qualifier) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_Qualifier));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_RequestingApproval));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_GivingApproval));data_->setArgument(8,attr);} } + +// Function implementations for IfcApprovalRelationship +::Ifc4x3_add2::IfcApproval* Ifc4x3_add2::IfcApprovalRelationship::RelatingApproval() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcApproval>(true); } +void Ifc4x3_add2::IfcApprovalRelationship::setRelatingApproval(::Ifc4x3_add2::IfcApproval* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcApproval >::ptr Ifc4x3_add2::IfcApprovalRelationship::RelatedApprovals() const { aggregate_of_instance::ptr es = *data_->getArgument(3); return es->as< ::Ifc4x3_add2::IfcApproval >(); } +void Ifc4x3_add2::IfcApprovalRelationship::setRelatedApprovals(aggregate_of< ::Ifc4x3_add2::IfcApproval >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcApprovalRelationship::declaration() const { return *IFC4X3_ADD2_IfcApprovalRelationship_type; } +const IfcParse::entity& Ifc4x3_add2::IfcApprovalRelationship::Class() { return *IFC4X3_ADD2_IfcApprovalRelationship_type; } +Ifc4x3_add2::IfcApprovalRelationship::IfcApprovalRelationship(IfcEntityInstanceData* e) : IfcResourceLevelRelationship((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcApprovalRelationship_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcApprovalRelationship::IfcApprovalRelationship(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcApproval* v3_RelatingApproval, aggregate_of< ::Ifc4x3_add2::IfcApproval >::ptr v4_RelatedApprovals) : IfcResourceLevelRelationship((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcApprovalRelationship_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_RelatingApproval));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_RelatedApprovals)->generalize());data_->setArgument(3,attr);} } + +// Function implementations for IfcArbitraryClosedProfileDef +::Ifc4x3_add2::IfcCurve* Ifc4x3_add2::IfcArbitraryClosedProfileDef::OuterCurve() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcCurve>(true); } +void Ifc4x3_add2::IfcArbitraryClosedProfileDef::setOuterCurve(::Ifc4x3_add2::IfcCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcArbitraryClosedProfileDef::declaration() const { return *IFC4X3_ADD2_IfcArbitraryClosedProfileDef_type; } +const IfcParse::entity& Ifc4x3_add2::IfcArbitraryClosedProfileDef::Class() { return *IFC4X3_ADD2_IfcArbitraryClosedProfileDef_type; } +Ifc4x3_add2::IfcArbitraryClosedProfileDef::IfcArbitraryClosedProfileDef(IfcEntityInstanceData* e) : IfcProfileDef((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcArbitraryClosedProfileDef_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcArbitraryClosedProfileDef::IfcArbitraryClosedProfileDef(::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcCurve* v3_OuterCurve) : IfcProfileDef((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcArbitraryClosedProfileDef_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_ProfileType,::Ifc4x3_add2::IfcProfileTypeEnum::ToString(v1_ProfileType))));data_->setArgument(0,attr);} if (v2_ProfileName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ProfileName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_OuterCurve));data_->setArgument(2,attr);} } + +// Function implementations for IfcArbitraryOpenProfileDef +::Ifc4x3_add2::IfcBoundedCurve* Ifc4x3_add2::IfcArbitraryOpenProfileDef::Curve() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcBoundedCurve>(true); } +void Ifc4x3_add2::IfcArbitraryOpenProfileDef::setCurve(::Ifc4x3_add2::IfcBoundedCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcArbitraryOpenProfileDef::declaration() const { return *IFC4X3_ADD2_IfcArbitraryOpenProfileDef_type; } +const IfcParse::entity& Ifc4x3_add2::IfcArbitraryOpenProfileDef::Class() { return *IFC4X3_ADD2_IfcArbitraryOpenProfileDef_type; } +Ifc4x3_add2::IfcArbitraryOpenProfileDef::IfcArbitraryOpenProfileDef(IfcEntityInstanceData* e) : IfcProfileDef((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcArbitraryOpenProfileDef_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcArbitraryOpenProfileDef::IfcArbitraryOpenProfileDef(::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcBoundedCurve* v3_Curve) : IfcProfileDef((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcArbitraryOpenProfileDef_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_ProfileType,::Ifc4x3_add2::IfcProfileTypeEnum::ToString(v1_ProfileType))));data_->setArgument(0,attr);} if (v2_ProfileName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ProfileName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Curve));data_->setArgument(2,attr);} } + +// Function implementations for IfcArbitraryProfileDefWithVoids +aggregate_of< ::Ifc4x3_add2::IfcCurve >::ptr Ifc4x3_add2::IfcArbitraryProfileDefWithVoids::InnerCurves() const { aggregate_of_instance::ptr es = *data_->getArgument(3); return es->as< ::Ifc4x3_add2::IfcCurve >(); } +void Ifc4x3_add2::IfcArbitraryProfileDefWithVoids::setInnerCurves(aggregate_of< ::Ifc4x3_add2::IfcCurve >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcArbitraryProfileDefWithVoids::declaration() const { return *IFC4X3_ADD2_IfcArbitraryProfileDefWithVoids_type; } +const IfcParse::entity& Ifc4x3_add2::IfcArbitraryProfileDefWithVoids::Class() { return *IFC4X3_ADD2_IfcArbitraryProfileDefWithVoids_type; } +Ifc4x3_add2::IfcArbitraryProfileDefWithVoids::IfcArbitraryProfileDefWithVoids(IfcEntityInstanceData* e) : IfcArbitraryClosedProfileDef((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcArbitraryProfileDefWithVoids_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcArbitraryProfileDefWithVoids::IfcArbitraryProfileDefWithVoids(::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcCurve* v3_OuterCurve, aggregate_of< ::Ifc4x3_add2::IfcCurve >::ptr v4_InnerCurves) : IfcArbitraryClosedProfileDef((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcArbitraryProfileDefWithVoids_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_ProfileType,::Ifc4x3_add2::IfcProfileTypeEnum::ToString(v1_ProfileType))));data_->setArgument(0,attr);} if (v2_ProfileName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ProfileName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_OuterCurve));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_InnerCurves)->generalize());data_->setArgument(3,attr);} } + +// Function implementations for IfcAsset +boost::optional< std::string > Ifc4x3_add2::IfcAsset::Identification() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcAsset::setIdentification(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +::Ifc4x3_add2::IfcCostValue* Ifc4x3_add2::IfcAsset::OriginalValue() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcCostValue>(true); } +void Ifc4x3_add2::IfcAsset::setOriginalValue(::Ifc4x3_add2::IfcCostValue* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +::Ifc4x3_add2::IfcCostValue* Ifc4x3_add2::IfcAsset::CurrentValue() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(7)))->as<::Ifc4x3_add2::IfcCostValue>(true); } +void Ifc4x3_add2::IfcAsset::setCurrentValue(::Ifc4x3_add2::IfcCostValue* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(7,attr);} } +::Ifc4x3_add2::IfcCostValue* Ifc4x3_add2::IfcAsset::TotalReplacementCost() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(8)))->as<::Ifc4x3_add2::IfcCostValue>(true); } +void Ifc4x3_add2::IfcAsset::setTotalReplacementCost(::Ifc4x3_add2::IfcCostValue* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(8,attr);} } +::Ifc4x3_add2::IfcActorSelect* Ifc4x3_add2::IfcAsset::Owner() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(9)))->as<::Ifc4x3_add2::IfcActorSelect>(true); } +void Ifc4x3_add2::IfcAsset::setOwner(::Ifc4x3_add2::IfcActorSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(9,attr);} } +::Ifc4x3_add2::IfcActorSelect* Ifc4x3_add2::IfcAsset::User() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(10)))->as<::Ifc4x3_add2::IfcActorSelect>(true); } +void Ifc4x3_add2::IfcAsset::setUser(::Ifc4x3_add2::IfcActorSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(10,attr);} } +::Ifc4x3_add2::IfcPerson* Ifc4x3_add2::IfcAsset::ResponsiblePerson() const { if(!data_->getArgument(11) || data_->getArgument(11)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(11)))->as<::Ifc4x3_add2::IfcPerson>(true); } +void Ifc4x3_add2::IfcAsset::setResponsiblePerson(::Ifc4x3_add2::IfcPerson* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(11,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcAsset::IncorporationDate() const { if(!data_->getArgument(12) || data_->getArgument(12)->isNull()) { return boost::none; } std::string v = *data_->getArgument(12); return v; } +void Ifc4x3_add2::IfcAsset::setIncorporationDate(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(12,attr);} } +::Ifc4x3_add2::IfcCostValue* Ifc4x3_add2::IfcAsset::DepreciatedValue() const { if(!data_->getArgument(13) || data_->getArgument(13)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(13)))->as<::Ifc4x3_add2::IfcCostValue>(true); } +void Ifc4x3_add2::IfcAsset::setDepreciatedValue(::Ifc4x3_add2::IfcCostValue* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(13,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcAsset::declaration() const { return *IFC4X3_ADD2_IfcAsset_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAsset::Class() { return *IFC4X3_ADD2_IfcAsset_type; } +Ifc4x3_add2::IfcAsset::IfcAsset(IfcEntityInstanceData* e) : IfcGroup((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAsset_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAsset::IfcAsset(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, ::Ifc4x3_add2::IfcCostValue* v7_OriginalValue, ::Ifc4x3_add2::IfcCostValue* v8_CurrentValue, ::Ifc4x3_add2::IfcCostValue* v9_TotalReplacementCost, ::Ifc4x3_add2::IfcActorSelect* v10_Owner, ::Ifc4x3_add2::IfcActorSelect* v11_User, ::Ifc4x3_add2::IfcPerson* v12_ResponsiblePerson, boost::optional< std::string > v13_IncorporationDate, ::Ifc4x3_add2::IfcCostValue* v14_DepreciatedValue) : IfcGroup((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAsset_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Identification));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_OriginalValue));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_CurrentValue));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_TotalReplacementCost));data_->setArgument(8,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v10_Owner));data_->setArgument(9,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v11_User));data_->setArgument(10,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v12_ResponsiblePerson));data_->setArgument(11,attr);} if (v13_IncorporationDate) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v13_IncorporationDate));data_->setArgument(12,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(12, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v14_DepreciatedValue));data_->setArgument(13,attr);} } + +// Function implementations for IfcAsymmetricIShapeProfileDef +double Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::BottomFlangeWidth() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::setBottomFlangeWidth(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +double Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::OverallDepth() const { double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::setOverallDepth(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +double Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::WebThickness() const { double v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::setWebThickness(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +double Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::BottomFlangeThickness() const { double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::setBottomFlangeThickness(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +boost::optional< double > Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::BottomFlangeFilletRadius() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } double v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::setBottomFlangeFilletRadius(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +double Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::TopFlangeWidth() const { double v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::setTopFlangeWidth(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(8,attr);} } +boost::optional< double > Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::TopFlangeThickness() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } double v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::setTopFlangeThickness(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(9,attr);} } +boost::optional< double > Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::TopFlangeFilletRadius() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } double v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::setTopFlangeFilletRadius(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } +boost::optional< double > Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::BottomFlangeEdgeRadius() const { if(!data_->getArgument(11) || data_->getArgument(11)->isNull()) { return boost::none; } double v = *data_->getArgument(11); return v; } +void Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::setBottomFlangeEdgeRadius(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(11,attr);} } +boost::optional< double > Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::BottomFlangeSlope() const { if(!data_->getArgument(12) || data_->getArgument(12)->isNull()) { return boost::none; } double v = *data_->getArgument(12); return v; } +void Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::setBottomFlangeSlope(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(12,attr);} } +boost::optional< double > Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::TopFlangeEdgeRadius() const { if(!data_->getArgument(13) || data_->getArgument(13)->isNull()) { return boost::none; } double v = *data_->getArgument(13); return v; } +void Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::setTopFlangeEdgeRadius(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(13,attr);} } +boost::optional< double > Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::TopFlangeSlope() const { if(!data_->getArgument(14) || data_->getArgument(14)->isNull()) { return boost::none; } double v = *data_->getArgument(14); return v; } +void Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::setTopFlangeSlope(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(14,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::declaration() const { return *IFC4X3_ADD2_IfcAsymmetricIShapeProfileDef_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::Class() { return *IFC4X3_ADD2_IfcAsymmetricIShapeProfileDef_type; } +Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::IfcAsymmetricIShapeProfileDef(IfcEntityInstanceData* e) : IfcParameterizedProfileDef((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAsymmetricIShapeProfileDef_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAsymmetricIShapeProfileDef::IfcAsymmetricIShapeProfileDef(::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_BottomFlangeWidth, double v5_OverallDepth, double v6_WebThickness, double v7_BottomFlangeThickness, boost::optional< double > v8_BottomFlangeFilletRadius, double v9_TopFlangeWidth, boost::optional< double > v10_TopFlangeThickness, boost::optional< double > v11_TopFlangeFilletRadius, boost::optional< double > v12_BottomFlangeEdgeRadius, boost::optional< double > v13_BottomFlangeSlope, boost::optional< double > v14_TopFlangeEdgeRadius, boost::optional< double > v15_TopFlangeSlope) : IfcParameterizedProfileDef((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAsymmetricIShapeProfileDef_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_ProfileType,::Ifc4x3_add2::IfcProfileTypeEnum::ToString(v1_ProfileType))));data_->setArgument(0,attr);} if (v2_ProfileName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ProfileName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Position));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_BottomFlangeWidth));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_OverallDepth));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_WebThickness));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_BottomFlangeThickness));data_->setArgument(6,attr);} if (v8_BottomFlangeFilletRadius) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_BottomFlangeFilletRadius));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_TopFlangeWidth));data_->setArgument(8,attr);} if (v10_TopFlangeThickness) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_TopFlangeThickness));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_TopFlangeFilletRadius) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_TopFlangeFilletRadius));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } if (v12_BottomFlangeEdgeRadius) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v12_BottomFlangeEdgeRadius));data_->setArgument(11,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(11, attr); } if (v13_BottomFlangeSlope) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v13_BottomFlangeSlope));data_->setArgument(12,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(12, attr); } if (v14_TopFlangeEdgeRadius) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v14_TopFlangeEdgeRadius));data_->setArgument(13,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(13, attr); } if (v15_TopFlangeSlope) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v15_TopFlangeSlope));data_->setArgument(14,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(14, attr); } } + +// Function implementations for IfcAudioVisualAppliance +boost::optional< ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::Value > Ifc4x3_add2::IfcAudioVisualAppliance::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcAudioVisualAppliance::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcAudioVisualAppliance::declaration() const { return *IFC4X3_ADD2_IfcAudioVisualAppliance_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAudioVisualAppliance::Class() { return *IFC4X3_ADD2_IfcAudioVisualAppliance_type; } +Ifc4x3_add2::IfcAudioVisualAppliance::IfcAudioVisualAppliance(IfcEntityInstanceData* e) : IfcFlowTerminal((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAudioVisualAppliance_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAudioVisualAppliance::IfcAudioVisualAppliance(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAudioVisualAppliance_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcAudioVisualApplianceType +::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::Value Ifc4x3_add2::IfcAudioVisualApplianceType::PredefinedType() const { return ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcAudioVisualApplianceType::setPredefinedType(::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcAudioVisualApplianceType::declaration() const { return *IFC4X3_ADD2_IfcAudioVisualApplianceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAudioVisualApplianceType::Class() { return *IFC4X3_ADD2_IfcAudioVisualApplianceType_type; } +Ifc4x3_add2::IfcAudioVisualApplianceType::IfcAudioVisualApplianceType(IfcEntityInstanceData* e) : IfcFlowTerminalType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAudioVisualApplianceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAudioVisualApplianceType::IfcAudioVisualApplianceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAudioVisualApplianceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcAxis1Placement +::Ifc4x3_add2::IfcDirection* Ifc4x3_add2::IfcAxis1Placement::Axis() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcDirection>(true); } +void Ifc4x3_add2::IfcAxis1Placement::setAxis(::Ifc4x3_add2::IfcDirection* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcAxis1Placement::declaration() const { return *IFC4X3_ADD2_IfcAxis1Placement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAxis1Placement::Class() { return *IFC4X3_ADD2_IfcAxis1Placement_type; } +Ifc4x3_add2::IfcAxis1Placement::IfcAxis1Placement(IfcEntityInstanceData* e) : IfcPlacement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAxis1Placement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAxis1Placement::IfcAxis1Placement(::Ifc4x3_add2::IfcPoint* v1_Location, ::Ifc4x3_add2::IfcDirection* v2_Axis) : IfcPlacement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAxis1Placement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Location));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Axis));data_->setArgument(1,attr);} } + +// Function implementations for IfcAxis2Placement2D +::Ifc4x3_add2::IfcDirection* Ifc4x3_add2::IfcAxis2Placement2D::RefDirection() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcDirection>(true); } +void Ifc4x3_add2::IfcAxis2Placement2D::setRefDirection(::Ifc4x3_add2::IfcDirection* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcAxis2Placement2D::declaration() const { return *IFC4X3_ADD2_IfcAxis2Placement2D_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAxis2Placement2D::Class() { return *IFC4X3_ADD2_IfcAxis2Placement2D_type; } +Ifc4x3_add2::IfcAxis2Placement2D::IfcAxis2Placement2D(IfcEntityInstanceData* e) : IfcPlacement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAxis2Placement2D_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAxis2Placement2D::IfcAxis2Placement2D(::Ifc4x3_add2::IfcPoint* v1_Location, ::Ifc4x3_add2::IfcDirection* v2_RefDirection) : IfcPlacement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAxis2Placement2D_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Location));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_RefDirection));data_->setArgument(1,attr);} } + +// Function implementations for IfcAxis2Placement3D +::Ifc4x3_add2::IfcDirection* Ifc4x3_add2::IfcAxis2Placement3D::Axis() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcDirection>(true); } +void Ifc4x3_add2::IfcAxis2Placement3D::setAxis(::Ifc4x3_add2::IfcDirection* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcDirection* Ifc4x3_add2::IfcAxis2Placement3D::RefDirection() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcDirection>(true); } +void Ifc4x3_add2::IfcAxis2Placement3D::setRefDirection(::Ifc4x3_add2::IfcDirection* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcAxis2Placement3D::declaration() const { return *IFC4X3_ADD2_IfcAxis2Placement3D_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAxis2Placement3D::Class() { return *IFC4X3_ADD2_IfcAxis2Placement3D_type; } +Ifc4x3_add2::IfcAxis2Placement3D::IfcAxis2Placement3D(IfcEntityInstanceData* e) : IfcPlacement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAxis2Placement3D_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAxis2Placement3D::IfcAxis2Placement3D(::Ifc4x3_add2::IfcPoint* v1_Location, ::Ifc4x3_add2::IfcDirection* v2_Axis, ::Ifc4x3_add2::IfcDirection* v3_RefDirection) : IfcPlacement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAxis2Placement3D_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Location));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Axis));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_RefDirection));data_->setArgument(2,attr);} } + +// Function implementations for IfcAxis2PlacementLinear +::Ifc4x3_add2::IfcDirection* Ifc4x3_add2::IfcAxis2PlacementLinear::Axis() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcDirection>(true); } +void Ifc4x3_add2::IfcAxis2PlacementLinear::setAxis(::Ifc4x3_add2::IfcDirection* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcDirection* Ifc4x3_add2::IfcAxis2PlacementLinear::RefDirection() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcDirection>(true); } +void Ifc4x3_add2::IfcAxis2PlacementLinear::setRefDirection(::Ifc4x3_add2::IfcDirection* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcAxis2PlacementLinear::declaration() const { return *IFC4X3_ADD2_IfcAxis2PlacementLinear_type; } +const IfcParse::entity& Ifc4x3_add2::IfcAxis2PlacementLinear::Class() { return *IFC4X3_ADD2_IfcAxis2PlacementLinear_type; } +Ifc4x3_add2::IfcAxis2PlacementLinear::IfcAxis2PlacementLinear(IfcEntityInstanceData* e) : IfcPlacement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcAxis2PlacementLinear_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcAxis2PlacementLinear::IfcAxis2PlacementLinear(::Ifc4x3_add2::IfcPoint* v1_Location, ::Ifc4x3_add2::IfcDirection* v2_Axis, ::Ifc4x3_add2::IfcDirection* v3_RefDirection) : IfcPlacement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcAxis2PlacementLinear_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Location));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Axis));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_RefDirection));data_->setArgument(2,attr);} } + +// Function implementations for IfcBSplineCurve +int Ifc4x3_add2::IfcBSplineCurve::Degree() const { int v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcBSplineCurve::setDegree(int v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr Ifc4x3_add2::IfcBSplineCurve::ControlPointsList() const { aggregate_of_instance::ptr es = *data_->getArgument(1); return es->as< ::Ifc4x3_add2::IfcCartesianPoint >(); } +void Ifc4x3_add2::IfcBSplineCurve::setControlPointsList(aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcBSplineCurveForm::Value Ifc4x3_add2::IfcBSplineCurve::CurveForm() const { return ::Ifc4x3_add2::IfcBSplineCurveForm::FromString(*data_->getArgument(2)); } +void Ifc4x3_add2::IfcBSplineCurve::setCurveForm(::Ifc4x3_add2::IfcBSplineCurveForm::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcBSplineCurveForm::ToString(v)));data_->setArgument(2,attr);} } +boost::logic::tribool Ifc4x3_add2::IfcBSplineCurve::ClosedCurve() const { boost::logic::tribool v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcBSplineCurve::setClosedCurve(boost::logic::tribool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +boost::logic::tribool Ifc4x3_add2::IfcBSplineCurve::SelfIntersect() const { boost::logic::tribool v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcBSplineCurve::setSelfIntersect(boost::logic::tribool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBSplineCurve::declaration() const { return *IFC4X3_ADD2_IfcBSplineCurve_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBSplineCurve::Class() { return *IFC4X3_ADD2_IfcBSplineCurve_type; } +Ifc4x3_add2::IfcBSplineCurve::IfcBSplineCurve(IfcEntityInstanceData* e) : IfcBoundedCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBSplineCurve_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBSplineCurve::IfcBSplineCurve(int v1_Degree, aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr v2_ControlPointsList, ::Ifc4x3_add2::IfcBSplineCurveForm::Value v3_CurveForm, boost::logic::tribool v4_ClosedCurve, boost::logic::tribool v5_SelfIntersect) : IfcBoundedCurve((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBSplineCurve_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Degree));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_ControlPointsList)->generalize());data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v3_CurveForm,::Ifc4x3_add2::IfcBSplineCurveForm::ToString(v3_CurveForm))));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_ClosedCurve));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_SelfIntersect));data_->setArgument(4,attr);} } + +// Function implementations for IfcBSplineCurveWithKnots +std::vector< int > /*[2:?]*/ Ifc4x3_add2::IfcBSplineCurveWithKnots::KnotMultiplicities() const { std::vector< int > /*[2:?]*/ v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcBSplineCurveWithKnots::setKnotMultiplicities(std::vector< int > /*[2:?]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +std::vector< double > /*[2:?]*/ Ifc4x3_add2::IfcBSplineCurveWithKnots::Knots() const { std::vector< double > /*[2:?]*/ v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcBSplineCurveWithKnots::setKnots(std::vector< double > /*[2:?]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +::Ifc4x3_add2::IfcKnotType::Value Ifc4x3_add2::IfcBSplineCurveWithKnots::KnotSpec() const { return ::Ifc4x3_add2::IfcKnotType::FromString(*data_->getArgument(7)); } +void Ifc4x3_add2::IfcBSplineCurveWithKnots::setKnotSpec(::Ifc4x3_add2::IfcKnotType::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcKnotType::ToString(v)));data_->setArgument(7,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBSplineCurveWithKnots::declaration() const { return *IFC4X3_ADD2_IfcBSplineCurveWithKnots_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBSplineCurveWithKnots::Class() { return *IFC4X3_ADD2_IfcBSplineCurveWithKnots_type; } +Ifc4x3_add2::IfcBSplineCurveWithKnots::IfcBSplineCurveWithKnots(IfcEntityInstanceData* e) : IfcBSplineCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBSplineCurveWithKnots_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBSplineCurveWithKnots::IfcBSplineCurveWithKnots(int v1_Degree, aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr v2_ControlPointsList, ::Ifc4x3_add2::IfcBSplineCurveForm::Value v3_CurveForm, boost::logic::tribool v4_ClosedCurve, boost::logic::tribool v5_SelfIntersect, std::vector< int > /*[2:?]*/ v6_KnotMultiplicities, std::vector< double > /*[2:?]*/ v7_Knots, ::Ifc4x3_add2::IfcKnotType::Value v8_KnotSpec) : IfcBSplineCurve((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBSplineCurveWithKnots_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Degree));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_ControlPointsList)->generalize());data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v3_CurveForm,::Ifc4x3_add2::IfcBSplineCurveForm::ToString(v3_CurveForm))));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_ClosedCurve));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_SelfIntersect));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_KnotMultiplicities));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Knots));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v8_KnotSpec,::Ifc4x3_add2::IfcKnotType::ToString(v8_KnotSpec))));data_->setArgument(7,attr);} } + +// Function implementations for IfcBSplineSurface +int Ifc4x3_add2::IfcBSplineSurface::UDegree() const { int v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcBSplineSurface::setUDegree(int v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +int Ifc4x3_add2::IfcBSplineSurface::VDegree() const { int v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcBSplineSurface::setVDegree(int v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +aggregate_of_aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr Ifc4x3_add2::IfcBSplineSurface::ControlPointsList() const { aggregate_of_aggregate_of_instance::ptr es = *data_->getArgument(2); return es->as< ::Ifc4x3_add2::IfcCartesianPoint >(); } +void Ifc4x3_add2::IfcBSplineSurface::setControlPointsList(aggregate_of_aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcBSplineSurfaceForm::Value Ifc4x3_add2::IfcBSplineSurface::SurfaceForm() const { return ::Ifc4x3_add2::IfcBSplineSurfaceForm::FromString(*data_->getArgument(3)); } +void Ifc4x3_add2::IfcBSplineSurface::setSurfaceForm(::Ifc4x3_add2::IfcBSplineSurfaceForm::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcBSplineSurfaceForm::ToString(v)));data_->setArgument(3,attr);} } +boost::logic::tribool Ifc4x3_add2::IfcBSplineSurface::UClosed() const { boost::logic::tribool v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcBSplineSurface::setUClosed(boost::logic::tribool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +boost::logic::tribool Ifc4x3_add2::IfcBSplineSurface::VClosed() const { boost::logic::tribool v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcBSplineSurface::setVClosed(boost::logic::tribool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +boost::logic::tribool Ifc4x3_add2::IfcBSplineSurface::SelfIntersect() const { boost::logic::tribool v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcBSplineSurface::setSelfIntersect(boost::logic::tribool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBSplineSurface::declaration() const { return *IFC4X3_ADD2_IfcBSplineSurface_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBSplineSurface::Class() { return *IFC4X3_ADD2_IfcBSplineSurface_type; } +Ifc4x3_add2::IfcBSplineSurface::IfcBSplineSurface(IfcEntityInstanceData* e) : IfcBoundedSurface((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBSplineSurface_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBSplineSurface::IfcBSplineSurface(int v1_UDegree, int v2_VDegree, aggregate_of_aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr v3_ControlPointsList, ::Ifc4x3_add2::IfcBSplineSurfaceForm::Value v4_SurfaceForm, boost::logic::tribool v5_UClosed, boost::logic::tribool v6_VClosed, boost::logic::tribool v7_SelfIntersect) : IfcBoundedSurface((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBSplineSurface_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_UDegree));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_VDegree));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_ControlPointsList)->generalize());data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v4_SurfaceForm,::Ifc4x3_add2::IfcBSplineSurfaceForm::ToString(v4_SurfaceForm))));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_UClosed));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_VClosed));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_SelfIntersect));data_->setArgument(6,attr);} } + +// Function implementations for IfcBSplineSurfaceWithKnots +std::vector< int > /*[2:?]*/ Ifc4x3_add2::IfcBSplineSurfaceWithKnots::UMultiplicities() const { std::vector< int > /*[2:?]*/ v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcBSplineSurfaceWithKnots::setUMultiplicities(std::vector< int > /*[2:?]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(7,attr);} } +std::vector< int > /*[2:?]*/ Ifc4x3_add2::IfcBSplineSurfaceWithKnots::VMultiplicities() const { std::vector< int > /*[2:?]*/ v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcBSplineSurfaceWithKnots::setVMultiplicities(std::vector< int > /*[2:?]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(8,attr);} } +std::vector< double > /*[2:?]*/ Ifc4x3_add2::IfcBSplineSurfaceWithKnots::UKnots() const { std::vector< double > /*[2:?]*/ v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcBSplineSurfaceWithKnots::setUKnots(std::vector< double > /*[2:?]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(9,attr);} } +std::vector< double > /*[2:?]*/ Ifc4x3_add2::IfcBSplineSurfaceWithKnots::VKnots() const { std::vector< double > /*[2:?]*/ v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcBSplineSurfaceWithKnots::setVKnots(std::vector< double > /*[2:?]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(10,attr);} } +::Ifc4x3_add2::IfcKnotType::Value Ifc4x3_add2::IfcBSplineSurfaceWithKnots::KnotSpec() const { return ::Ifc4x3_add2::IfcKnotType::FromString(*data_->getArgument(11)); } +void Ifc4x3_add2::IfcBSplineSurfaceWithKnots::setKnotSpec(::Ifc4x3_add2::IfcKnotType::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcKnotType::ToString(v)));data_->setArgument(11,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBSplineSurfaceWithKnots::declaration() const { return *IFC4X3_ADD2_IfcBSplineSurfaceWithKnots_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBSplineSurfaceWithKnots::Class() { return *IFC4X3_ADD2_IfcBSplineSurfaceWithKnots_type; } +Ifc4x3_add2::IfcBSplineSurfaceWithKnots::IfcBSplineSurfaceWithKnots(IfcEntityInstanceData* e) : IfcBSplineSurface((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBSplineSurfaceWithKnots_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBSplineSurfaceWithKnots::IfcBSplineSurfaceWithKnots(int v1_UDegree, int v2_VDegree, aggregate_of_aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr v3_ControlPointsList, ::Ifc4x3_add2::IfcBSplineSurfaceForm::Value v4_SurfaceForm, boost::logic::tribool v5_UClosed, boost::logic::tribool v6_VClosed, boost::logic::tribool v7_SelfIntersect, std::vector< int > /*[2:?]*/ v8_UMultiplicities, std::vector< int > /*[2:?]*/ v9_VMultiplicities, std::vector< double > /*[2:?]*/ v10_UKnots, std::vector< double > /*[2:?]*/ v11_VKnots, ::Ifc4x3_add2::IfcKnotType::Value v12_KnotSpec) : IfcBSplineSurface((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBSplineSurfaceWithKnots_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_UDegree));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_VDegree));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_ControlPointsList)->generalize());data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v4_SurfaceForm,::Ifc4x3_add2::IfcBSplineSurfaceForm::ToString(v4_SurfaceForm))));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_UClosed));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_VClosed));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_SelfIntersect));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_UMultiplicities));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_VMultiplicities));data_->setArgument(8,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v10_UKnots));data_->setArgument(9,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v11_VKnots));data_->setArgument(10,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v12_KnotSpec,::Ifc4x3_add2::IfcKnotType::ToString(v12_KnotSpec))));data_->setArgument(11,attr);} } + +// Function implementations for IfcBeam +boost::optional< ::Ifc4x3_add2::IfcBeamTypeEnum::Value > Ifc4x3_add2::IfcBeam::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcBeamTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcBeam::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcBeamTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcBeamTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBeam::declaration() const { return *IFC4X3_ADD2_IfcBeam_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBeam::Class() { return *IFC4X3_ADD2_IfcBeam_type; } +Ifc4x3_add2::IfcBeam::IfcBeam(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBeam_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBeam::IfcBeam(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcBeamTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBeam_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcBeamTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcBeamType +::Ifc4x3_add2::IfcBeamTypeEnum::Value Ifc4x3_add2::IfcBeamType::PredefinedType() const { return ::Ifc4x3_add2::IfcBeamTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcBeamType::setPredefinedType(::Ifc4x3_add2::IfcBeamTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcBeamTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBeamType::declaration() const { return *IFC4X3_ADD2_IfcBeamType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBeamType::Class() { return *IFC4X3_ADD2_IfcBeamType_type; } +Ifc4x3_add2::IfcBeamType::IfcBeamType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBeamType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBeamType::IfcBeamType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcBeamTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBeamType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcBeamTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcBearing +boost::optional< ::Ifc4x3_add2::IfcBearingTypeEnum::Value > Ifc4x3_add2::IfcBearing::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcBearingTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcBearing::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcBearingTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcBearingTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBearing::declaration() const { return *IFC4X3_ADD2_IfcBearing_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBearing::Class() { return *IFC4X3_ADD2_IfcBearing_type; } +Ifc4x3_add2::IfcBearing::IfcBearing(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBearing_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBearing::IfcBearing(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcBearingTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBearing_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcBearingTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcBearingType +::Ifc4x3_add2::IfcBearingTypeEnum::Value Ifc4x3_add2::IfcBearingType::PredefinedType() const { return ::Ifc4x3_add2::IfcBearingTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcBearingType::setPredefinedType(::Ifc4x3_add2::IfcBearingTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcBearingTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBearingType::declaration() const { return *IFC4X3_ADD2_IfcBearingType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBearingType::Class() { return *IFC4X3_ADD2_IfcBearingType_type; } +Ifc4x3_add2::IfcBearingType::IfcBearingType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBearingType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBearingType::IfcBearingType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcBearingTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBearingType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcBearingTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcBlobTexture +std::string Ifc4x3_add2::IfcBlobTexture::RasterFormat() const { std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcBlobTexture::setRasterFormat(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +boost::dynamic_bitset<> Ifc4x3_add2::IfcBlobTexture::RasterCode() const { boost::dynamic_bitset<> v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcBlobTexture::setRasterCode(boost::dynamic_bitset<> v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBlobTexture::declaration() const { return *IFC4X3_ADD2_IfcBlobTexture_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBlobTexture::Class() { return *IFC4X3_ADD2_IfcBlobTexture_type; } +Ifc4x3_add2::IfcBlobTexture::IfcBlobTexture(IfcEntityInstanceData* e) : IfcSurfaceTexture((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBlobTexture_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBlobTexture::IfcBlobTexture(bool v1_RepeatS, bool v2_RepeatT, boost::optional< std::string > v3_Mode, ::Ifc4x3_add2::IfcCartesianTransformationOperator2D* v4_TextureTransform, boost::optional< std::vector< std::string > /*[1:?]*/ > v5_Parameter, std::string v6_RasterFormat, boost::dynamic_bitset<> v7_RasterCode) : IfcSurfaceTexture((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBlobTexture_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_RepeatS));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_RepeatT));data_->setArgument(1,attr);} if (v3_Mode) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Mode));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_TextureTransform));data_->setArgument(3,attr);} if (v5_Parameter) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Parameter));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RasterFormat));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_RasterCode));data_->setArgument(6,attr);} } + +// Function implementations for IfcBlock +double Ifc4x3_add2::IfcBlock::XLength() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcBlock::setXLength(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +double Ifc4x3_add2::IfcBlock::YLength() const { double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcBlock::setYLength(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +double Ifc4x3_add2::IfcBlock::ZLength() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcBlock::setZLength(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBlock::declaration() const { return *IFC4X3_ADD2_IfcBlock_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBlock::Class() { return *IFC4X3_ADD2_IfcBlock_type; } +Ifc4x3_add2::IfcBlock::IfcBlock(IfcEntityInstanceData* e) : IfcCsgPrimitive3D((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBlock_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBlock::IfcBlock(::Ifc4x3_add2::IfcAxis2Placement3D* v1_Position, double v2_XLength, double v3_YLength, double v4_ZLength) : IfcCsgPrimitive3D((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBlock_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Position));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_XLength));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_YLength));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_ZLength));data_->setArgument(3,attr);} } + +// Function implementations for IfcBoiler +boost::optional< ::Ifc4x3_add2::IfcBoilerTypeEnum::Value > Ifc4x3_add2::IfcBoiler::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcBoilerTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcBoiler::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcBoilerTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcBoilerTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBoiler::declaration() const { return *IFC4X3_ADD2_IfcBoiler_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBoiler::Class() { return *IFC4X3_ADD2_IfcBoiler_type; } +Ifc4x3_add2::IfcBoiler::IfcBoiler(IfcEntityInstanceData* e) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBoiler_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBoiler::IfcBoiler(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcBoilerTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBoiler_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcBoilerTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcBoilerType +::Ifc4x3_add2::IfcBoilerTypeEnum::Value Ifc4x3_add2::IfcBoilerType::PredefinedType() const { return ::Ifc4x3_add2::IfcBoilerTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcBoilerType::setPredefinedType(::Ifc4x3_add2::IfcBoilerTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcBoilerTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBoilerType::declaration() const { return *IFC4X3_ADD2_IfcBoilerType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBoilerType::Class() { return *IFC4X3_ADD2_IfcBoilerType_type; } +Ifc4x3_add2::IfcBoilerType::IfcBoilerType(IfcEntityInstanceData* e) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBoilerType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBoilerType::IfcBoilerType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcBoilerTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBoilerType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcBoilerTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcBooleanClippingResult + + +const IfcParse::entity& Ifc4x3_add2::IfcBooleanClippingResult::declaration() const { return *IFC4X3_ADD2_IfcBooleanClippingResult_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBooleanClippingResult::Class() { return *IFC4X3_ADD2_IfcBooleanClippingResult_type; } +Ifc4x3_add2::IfcBooleanClippingResult::IfcBooleanClippingResult(IfcEntityInstanceData* e) : IfcBooleanResult((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBooleanClippingResult_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBooleanClippingResult::IfcBooleanClippingResult(::Ifc4x3_add2::IfcBooleanOperator::Value v1_Operator, ::Ifc4x3_add2::IfcBooleanOperand* v2_FirstOperand, ::Ifc4x3_add2::IfcBooleanOperand* v3_SecondOperand) : IfcBooleanResult((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBooleanClippingResult_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_Operator,::Ifc4x3_add2::IfcBooleanOperator::ToString(v1_Operator))));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_FirstOperand));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_SecondOperand));data_->setArgument(2,attr);} } + +// Function implementations for IfcBooleanResult +::Ifc4x3_add2::IfcBooleanOperator::Value Ifc4x3_add2::IfcBooleanResult::Operator() const { return ::Ifc4x3_add2::IfcBooleanOperator::FromString(*data_->getArgument(0)); } +void Ifc4x3_add2::IfcBooleanResult::setOperator(::Ifc4x3_add2::IfcBooleanOperator::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcBooleanOperator::ToString(v)));data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcBooleanOperand* Ifc4x3_add2::IfcBooleanResult::FirstOperand() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcBooleanOperand>(true); } +void Ifc4x3_add2::IfcBooleanResult::setFirstOperand(::Ifc4x3_add2::IfcBooleanOperand* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcBooleanOperand* Ifc4x3_add2::IfcBooleanResult::SecondOperand() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcBooleanOperand>(true); } +void Ifc4x3_add2::IfcBooleanResult::setSecondOperand(::Ifc4x3_add2::IfcBooleanOperand* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBooleanResult::declaration() const { return *IFC4X3_ADD2_IfcBooleanResult_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBooleanResult::Class() { return *IFC4X3_ADD2_IfcBooleanResult_type; } +Ifc4x3_add2::IfcBooleanResult::IfcBooleanResult(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBooleanResult_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBooleanResult::IfcBooleanResult(::Ifc4x3_add2::IfcBooleanOperator::Value v1_Operator, ::Ifc4x3_add2::IfcBooleanOperand* v2_FirstOperand, ::Ifc4x3_add2::IfcBooleanOperand* v3_SecondOperand) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBooleanResult_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_Operator,::Ifc4x3_add2::IfcBooleanOperator::ToString(v1_Operator))));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_FirstOperand));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_SecondOperand));data_->setArgument(2,attr);} } + +// Function implementations for IfcBorehole + + +const IfcParse::entity& Ifc4x3_add2::IfcBorehole::declaration() const { return *IFC4X3_ADD2_IfcBorehole_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBorehole::Class() { return *IFC4X3_ADD2_IfcBorehole_type; } +Ifc4x3_add2::IfcBorehole::IfcBorehole(IfcEntityInstanceData* e) : IfcGeotechnicalAssembly((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBorehole_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBorehole::IfcBorehole(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcGeotechnicalAssembly((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBorehole_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcBoundaryCondition +boost::optional< std::string > Ifc4x3_add2::IfcBoundaryCondition::Name() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcBoundaryCondition::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBoundaryCondition::declaration() const { return *IFC4X3_ADD2_IfcBoundaryCondition_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBoundaryCondition::Class() { return *IFC4X3_ADD2_IfcBoundaryCondition_type; } +Ifc4x3_add2::IfcBoundaryCondition::IfcBoundaryCondition(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBoundaryCondition_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBoundaryCondition::IfcBoundaryCondition(boost::optional< std::string > v1_Name) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBoundaryCondition_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } } + +// Function implementations for IfcBoundaryCurve + + +const IfcParse::entity& Ifc4x3_add2::IfcBoundaryCurve::declaration() const { return *IFC4X3_ADD2_IfcBoundaryCurve_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBoundaryCurve::Class() { return *IFC4X3_ADD2_IfcBoundaryCurve_type; } +Ifc4x3_add2::IfcBoundaryCurve::IfcBoundaryCurve(IfcEntityInstanceData* e) : IfcCompositeCurveOnSurface((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBoundaryCurve_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBoundaryCurve::IfcBoundaryCurve(aggregate_of< ::Ifc4x3_add2::IfcSegment >::ptr v1_Segments, boost::logic::tribool v2_SelfIntersect) : IfcCompositeCurveOnSurface((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBoundaryCurve_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Segments)->generalize());data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_SelfIntersect));data_->setArgument(1,attr);} } + +// Function implementations for IfcBoundaryEdgeCondition +::Ifc4x3_add2::IfcModulusOfTranslationalSubgradeReactionSelect* Ifc4x3_add2::IfcBoundaryEdgeCondition::TranslationalStiffnessByLengthX() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcModulusOfTranslationalSubgradeReactionSelect>(true); } +void Ifc4x3_add2::IfcBoundaryEdgeCondition::setTranslationalStiffnessByLengthX(::Ifc4x3_add2::IfcModulusOfTranslationalSubgradeReactionSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcModulusOfTranslationalSubgradeReactionSelect* Ifc4x3_add2::IfcBoundaryEdgeCondition::TranslationalStiffnessByLengthY() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcModulusOfTranslationalSubgradeReactionSelect>(true); } +void Ifc4x3_add2::IfcBoundaryEdgeCondition::setTranslationalStiffnessByLengthY(::Ifc4x3_add2::IfcModulusOfTranslationalSubgradeReactionSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcModulusOfTranslationalSubgradeReactionSelect* Ifc4x3_add2::IfcBoundaryEdgeCondition::TranslationalStiffnessByLengthZ() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcModulusOfTranslationalSubgradeReactionSelect>(true); } +void Ifc4x3_add2::IfcBoundaryEdgeCondition::setTranslationalStiffnessByLengthZ(::Ifc4x3_add2::IfcModulusOfTranslationalSubgradeReactionSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +::Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionSelect* Ifc4x3_add2::IfcBoundaryEdgeCondition::RotationalStiffnessByLengthX() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionSelect>(true); } +void Ifc4x3_add2::IfcBoundaryEdgeCondition::setRotationalStiffnessByLengthX(::Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionSelect* Ifc4x3_add2::IfcBoundaryEdgeCondition::RotationalStiffnessByLengthY() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionSelect>(true); } +void Ifc4x3_add2::IfcBoundaryEdgeCondition::setRotationalStiffnessByLengthY(::Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +::Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionSelect* Ifc4x3_add2::IfcBoundaryEdgeCondition::RotationalStiffnessByLengthZ() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionSelect>(true); } +void Ifc4x3_add2::IfcBoundaryEdgeCondition::setRotationalStiffnessByLengthZ(::Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBoundaryEdgeCondition::declaration() const { return *IFC4X3_ADD2_IfcBoundaryEdgeCondition_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBoundaryEdgeCondition::Class() { return *IFC4X3_ADD2_IfcBoundaryEdgeCondition_type; } +Ifc4x3_add2::IfcBoundaryEdgeCondition::IfcBoundaryEdgeCondition(IfcEntityInstanceData* e) : IfcBoundaryCondition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBoundaryEdgeCondition_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBoundaryEdgeCondition::IfcBoundaryEdgeCondition(boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcModulusOfTranslationalSubgradeReactionSelect* v2_TranslationalStiffnessByLengthX, ::Ifc4x3_add2::IfcModulusOfTranslationalSubgradeReactionSelect* v3_TranslationalStiffnessByLengthY, ::Ifc4x3_add2::IfcModulusOfTranslationalSubgradeReactionSelect* v4_TranslationalStiffnessByLengthZ, ::Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionSelect* v5_RotationalStiffnessByLengthX, ::Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionSelect* v6_RotationalStiffnessByLengthY, ::Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionSelect* v7_RotationalStiffnessByLengthZ) : IfcBoundaryCondition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBoundaryEdgeCondition_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_TranslationalStiffnessByLengthX));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_TranslationalStiffnessByLengthY));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_TranslationalStiffnessByLengthZ));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RotationalStiffnessByLengthX));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RotationalStiffnessByLengthY));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_RotationalStiffnessByLengthZ));data_->setArgument(6,attr);} } + +// Function implementations for IfcBoundaryFaceCondition +::Ifc4x3_add2::IfcModulusOfSubgradeReactionSelect* Ifc4x3_add2::IfcBoundaryFaceCondition::TranslationalStiffnessByAreaX() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcModulusOfSubgradeReactionSelect>(true); } +void Ifc4x3_add2::IfcBoundaryFaceCondition::setTranslationalStiffnessByAreaX(::Ifc4x3_add2::IfcModulusOfSubgradeReactionSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcModulusOfSubgradeReactionSelect* Ifc4x3_add2::IfcBoundaryFaceCondition::TranslationalStiffnessByAreaY() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcModulusOfSubgradeReactionSelect>(true); } +void Ifc4x3_add2::IfcBoundaryFaceCondition::setTranslationalStiffnessByAreaY(::Ifc4x3_add2::IfcModulusOfSubgradeReactionSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcModulusOfSubgradeReactionSelect* Ifc4x3_add2::IfcBoundaryFaceCondition::TranslationalStiffnessByAreaZ() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcModulusOfSubgradeReactionSelect>(true); } +void Ifc4x3_add2::IfcBoundaryFaceCondition::setTranslationalStiffnessByAreaZ(::Ifc4x3_add2::IfcModulusOfSubgradeReactionSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBoundaryFaceCondition::declaration() const { return *IFC4X3_ADD2_IfcBoundaryFaceCondition_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBoundaryFaceCondition::Class() { return *IFC4X3_ADD2_IfcBoundaryFaceCondition_type; } +Ifc4x3_add2::IfcBoundaryFaceCondition::IfcBoundaryFaceCondition(IfcEntityInstanceData* e) : IfcBoundaryCondition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBoundaryFaceCondition_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBoundaryFaceCondition::IfcBoundaryFaceCondition(boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcModulusOfSubgradeReactionSelect* v2_TranslationalStiffnessByAreaX, ::Ifc4x3_add2::IfcModulusOfSubgradeReactionSelect* v3_TranslationalStiffnessByAreaY, ::Ifc4x3_add2::IfcModulusOfSubgradeReactionSelect* v4_TranslationalStiffnessByAreaZ) : IfcBoundaryCondition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBoundaryFaceCondition_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_TranslationalStiffnessByAreaX));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_TranslationalStiffnessByAreaY));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_TranslationalStiffnessByAreaZ));data_->setArgument(3,attr);} } + +// Function implementations for IfcBoundaryNodeCondition +::Ifc4x3_add2::IfcTranslationalStiffnessSelect* Ifc4x3_add2::IfcBoundaryNodeCondition::TranslationalStiffnessX() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcTranslationalStiffnessSelect>(true); } +void Ifc4x3_add2::IfcBoundaryNodeCondition::setTranslationalStiffnessX(::Ifc4x3_add2::IfcTranslationalStiffnessSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcTranslationalStiffnessSelect* Ifc4x3_add2::IfcBoundaryNodeCondition::TranslationalStiffnessY() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcTranslationalStiffnessSelect>(true); } +void Ifc4x3_add2::IfcBoundaryNodeCondition::setTranslationalStiffnessY(::Ifc4x3_add2::IfcTranslationalStiffnessSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcTranslationalStiffnessSelect* Ifc4x3_add2::IfcBoundaryNodeCondition::TranslationalStiffnessZ() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcTranslationalStiffnessSelect>(true); } +void Ifc4x3_add2::IfcBoundaryNodeCondition::setTranslationalStiffnessZ(::Ifc4x3_add2::IfcTranslationalStiffnessSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +::Ifc4x3_add2::IfcRotationalStiffnessSelect* Ifc4x3_add2::IfcBoundaryNodeCondition::RotationalStiffnessX() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcRotationalStiffnessSelect>(true); } +void Ifc4x3_add2::IfcBoundaryNodeCondition::setRotationalStiffnessX(::Ifc4x3_add2::IfcRotationalStiffnessSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcRotationalStiffnessSelect* Ifc4x3_add2::IfcBoundaryNodeCondition::RotationalStiffnessY() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcRotationalStiffnessSelect>(true); } +void Ifc4x3_add2::IfcBoundaryNodeCondition::setRotationalStiffnessY(::Ifc4x3_add2::IfcRotationalStiffnessSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +::Ifc4x3_add2::IfcRotationalStiffnessSelect* Ifc4x3_add2::IfcBoundaryNodeCondition::RotationalStiffnessZ() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcRotationalStiffnessSelect>(true); } +void Ifc4x3_add2::IfcBoundaryNodeCondition::setRotationalStiffnessZ(::Ifc4x3_add2::IfcRotationalStiffnessSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBoundaryNodeCondition::declaration() const { return *IFC4X3_ADD2_IfcBoundaryNodeCondition_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBoundaryNodeCondition::Class() { return *IFC4X3_ADD2_IfcBoundaryNodeCondition_type; } +Ifc4x3_add2::IfcBoundaryNodeCondition::IfcBoundaryNodeCondition(IfcEntityInstanceData* e) : IfcBoundaryCondition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBoundaryNodeCondition_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBoundaryNodeCondition::IfcBoundaryNodeCondition(boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcTranslationalStiffnessSelect* v2_TranslationalStiffnessX, ::Ifc4x3_add2::IfcTranslationalStiffnessSelect* v3_TranslationalStiffnessY, ::Ifc4x3_add2::IfcTranslationalStiffnessSelect* v4_TranslationalStiffnessZ, ::Ifc4x3_add2::IfcRotationalStiffnessSelect* v5_RotationalStiffnessX, ::Ifc4x3_add2::IfcRotationalStiffnessSelect* v6_RotationalStiffnessY, ::Ifc4x3_add2::IfcRotationalStiffnessSelect* v7_RotationalStiffnessZ) : IfcBoundaryCondition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBoundaryNodeCondition_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_TranslationalStiffnessX));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_TranslationalStiffnessY));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_TranslationalStiffnessZ));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RotationalStiffnessX));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RotationalStiffnessY));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_RotationalStiffnessZ));data_->setArgument(6,attr);} } + +// Function implementations for IfcBoundaryNodeConditionWarping +::Ifc4x3_add2::IfcWarpingStiffnessSelect* Ifc4x3_add2::IfcBoundaryNodeConditionWarping::WarpingStiffness() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(7)))->as<::Ifc4x3_add2::IfcWarpingStiffnessSelect>(true); } +void Ifc4x3_add2::IfcBoundaryNodeConditionWarping::setWarpingStiffness(::Ifc4x3_add2::IfcWarpingStiffnessSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(7,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBoundaryNodeConditionWarping::declaration() const { return *IFC4X3_ADD2_IfcBoundaryNodeConditionWarping_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBoundaryNodeConditionWarping::Class() { return *IFC4X3_ADD2_IfcBoundaryNodeConditionWarping_type; } +Ifc4x3_add2::IfcBoundaryNodeConditionWarping::IfcBoundaryNodeConditionWarping(IfcEntityInstanceData* e) : IfcBoundaryNodeCondition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBoundaryNodeConditionWarping_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBoundaryNodeConditionWarping::IfcBoundaryNodeConditionWarping(boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcTranslationalStiffnessSelect* v2_TranslationalStiffnessX, ::Ifc4x3_add2::IfcTranslationalStiffnessSelect* v3_TranslationalStiffnessY, ::Ifc4x3_add2::IfcTranslationalStiffnessSelect* v4_TranslationalStiffnessZ, ::Ifc4x3_add2::IfcRotationalStiffnessSelect* v5_RotationalStiffnessX, ::Ifc4x3_add2::IfcRotationalStiffnessSelect* v6_RotationalStiffnessY, ::Ifc4x3_add2::IfcRotationalStiffnessSelect* v7_RotationalStiffnessZ, ::Ifc4x3_add2::IfcWarpingStiffnessSelect* v8_WarpingStiffness) : IfcBoundaryNodeCondition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBoundaryNodeConditionWarping_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_TranslationalStiffnessX));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_TranslationalStiffnessY));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_TranslationalStiffnessZ));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RotationalStiffnessX));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RotationalStiffnessY));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_RotationalStiffnessZ));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_WarpingStiffness));data_->setArgument(7,attr);} } + +// Function implementations for IfcBoundedCurve + + +const IfcParse::entity& Ifc4x3_add2::IfcBoundedCurve::declaration() const { return *IFC4X3_ADD2_IfcBoundedCurve_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBoundedCurve::Class() { return *IFC4X3_ADD2_IfcBoundedCurve_type; } +Ifc4x3_add2::IfcBoundedCurve::IfcBoundedCurve(IfcEntityInstanceData* e) : IfcCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBoundedCurve_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBoundedCurve::IfcBoundedCurve() : IfcCurve((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBoundedCurve_type); } + +// Function implementations for IfcBoundedSurface + + +const IfcParse::entity& Ifc4x3_add2::IfcBoundedSurface::declaration() const { return *IFC4X3_ADD2_IfcBoundedSurface_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBoundedSurface::Class() { return *IFC4X3_ADD2_IfcBoundedSurface_type; } +Ifc4x3_add2::IfcBoundedSurface::IfcBoundedSurface(IfcEntityInstanceData* e) : IfcSurface((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBoundedSurface_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBoundedSurface::IfcBoundedSurface() : IfcSurface((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBoundedSurface_type); } + +// Function implementations for IfcBoundingBox +::Ifc4x3_add2::IfcCartesianPoint* Ifc4x3_add2::IfcBoundingBox::Corner() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcCartesianPoint>(true); } +void Ifc4x3_add2::IfcBoundingBox::setCorner(::Ifc4x3_add2::IfcCartesianPoint* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +double Ifc4x3_add2::IfcBoundingBox::XDim() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcBoundingBox::setXDim(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +double Ifc4x3_add2::IfcBoundingBox::YDim() const { double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcBoundingBox::setYDim(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +double Ifc4x3_add2::IfcBoundingBox::ZDim() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcBoundingBox::setZDim(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBoundingBox::declaration() const { return *IFC4X3_ADD2_IfcBoundingBox_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBoundingBox::Class() { return *IFC4X3_ADD2_IfcBoundingBox_type; } +Ifc4x3_add2::IfcBoundingBox::IfcBoundingBox(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBoundingBox_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBoundingBox::IfcBoundingBox(::Ifc4x3_add2::IfcCartesianPoint* v1_Corner, double v2_XDim, double v3_YDim, double v4_ZDim) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBoundingBox_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Corner));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_XDim));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_YDim));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_ZDim));data_->setArgument(3,attr);} } + +// Function implementations for IfcBoxedHalfSpace +::Ifc4x3_add2::IfcBoundingBox* Ifc4x3_add2::IfcBoxedHalfSpace::Enclosure() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcBoundingBox>(true); } +void Ifc4x3_add2::IfcBoxedHalfSpace::setEnclosure(::Ifc4x3_add2::IfcBoundingBox* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBoxedHalfSpace::declaration() const { return *IFC4X3_ADD2_IfcBoxedHalfSpace_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBoxedHalfSpace::Class() { return *IFC4X3_ADD2_IfcBoxedHalfSpace_type; } +Ifc4x3_add2::IfcBoxedHalfSpace::IfcBoxedHalfSpace(IfcEntityInstanceData* e) : IfcHalfSpaceSolid((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBoxedHalfSpace_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBoxedHalfSpace::IfcBoxedHalfSpace(::Ifc4x3_add2::IfcSurface* v1_BaseSurface, bool v2_AgreementFlag, ::Ifc4x3_add2::IfcBoundingBox* v3_Enclosure) : IfcHalfSpaceSolid((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBoxedHalfSpace_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_BaseSurface));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_AgreementFlag));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Enclosure));data_->setArgument(2,attr);} } + +// Function implementations for IfcBridge +boost::optional< ::Ifc4x3_add2::IfcBridgeTypeEnum::Value > Ifc4x3_add2::IfcBridge::PredefinedType() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcBridgeTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcBridge::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcBridgeTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcBridgeTypeEnum::ToString(*v)));}data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBridge::declaration() const { return *IFC4X3_ADD2_IfcBridge_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBridge::Class() { return *IFC4X3_ADD2_IfcBridge_type; } +Ifc4x3_add2::IfcBridge::IfcBridge(IfcEntityInstanceData* e) : IfcFacility((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBridge_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBridge::IfcBridge(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, boost::optional< ::Ifc4x3_add2::IfcBridgeTypeEnum::Value > v10_PredefinedType) : IfcFacility((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBridge_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongName));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_CompositionType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_CompositionType,::Ifc4x3_add2::IfcElementCompositionEnum::ToString(*v9_CompositionType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v10_PredefinedType,::Ifc4x3_add2::IfcBridgeTypeEnum::ToString(*v10_PredefinedType))));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } } + +// Function implementations for IfcBridgePart +boost::optional< ::Ifc4x3_add2::IfcBridgePartTypeEnum::Value > Ifc4x3_add2::IfcBridgePart::PredefinedType() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcBridgePartTypeEnum::FromString(*data_->getArgument(10)); } +void Ifc4x3_add2::IfcBridgePart::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcBridgePartTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcBridgePartTypeEnum::ToString(*v)));}data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBridgePart::declaration() const { return *IFC4X3_ADD2_IfcBridgePart_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBridgePart::Class() { return *IFC4X3_ADD2_IfcBridgePart_type; } +Ifc4x3_add2::IfcBridgePart::IfcBridgePart(IfcEntityInstanceData* e) : IfcFacilityPart((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBridgePart_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBridgePart::IfcBridgePart(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, ::Ifc4x3_add2::IfcFacilityUsageEnum::Value v10_UsageType, boost::optional< ::Ifc4x3_add2::IfcBridgePartTypeEnum::Value > v11_PredefinedType) : IfcFacilityPart((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBridgePart_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongName));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_CompositionType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_CompositionType,::Ifc4x3_add2::IfcElementCompositionEnum::ToString(*v9_CompositionType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_UsageType,::Ifc4x3_add2::IfcFacilityUsageEnum::ToString(v10_UsageType))));data_->setArgument(9,attr);} if (v11_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v11_PredefinedType,::Ifc4x3_add2::IfcBridgePartTypeEnum::ToString(*v11_PredefinedType))));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } } + +// Function implementations for IfcBuilding +boost::optional< double > Ifc4x3_add2::IfcBuilding::ElevationOfRefHeight() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } double v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcBuilding::setElevationOfRefHeight(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(9,attr);} } +boost::optional< double > Ifc4x3_add2::IfcBuilding::ElevationOfTerrain() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } double v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcBuilding::setElevationOfTerrain(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } +::Ifc4x3_add2::IfcPostalAddress* Ifc4x3_add2::IfcBuilding::BuildingAddress() const { if(!data_->getArgument(11) || data_->getArgument(11)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(11)))->as<::Ifc4x3_add2::IfcPostalAddress>(true); } +void Ifc4x3_add2::IfcBuilding::setBuildingAddress(::Ifc4x3_add2::IfcPostalAddress* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(11,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBuilding::declaration() const { return *IFC4X3_ADD2_IfcBuilding_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBuilding::Class() { return *IFC4X3_ADD2_IfcBuilding_type; } +Ifc4x3_add2::IfcBuilding::IfcBuilding(IfcEntityInstanceData* e) : IfcFacility((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBuilding_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBuilding::IfcBuilding(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, boost::optional< double > v10_ElevationOfRefHeight, boost::optional< double > v11_ElevationOfTerrain, ::Ifc4x3_add2::IfcPostalAddress* v12_BuildingAddress) : IfcFacility((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBuilding_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongName));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_CompositionType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_CompositionType,::Ifc4x3_add2::IfcElementCompositionEnum::ToString(*v9_CompositionType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_ElevationOfRefHeight) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_ElevationOfRefHeight));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_ElevationOfTerrain) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_ElevationOfTerrain));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v12_BuildingAddress));data_->setArgument(11,attr);} } + +// Function implementations for IfcBuildingElementPart +boost::optional< ::Ifc4x3_add2::IfcBuildingElementPartTypeEnum::Value > Ifc4x3_add2::IfcBuildingElementPart::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcBuildingElementPartTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcBuildingElementPart::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcBuildingElementPartTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcBuildingElementPartTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBuildingElementPart::declaration() const { return *IFC4X3_ADD2_IfcBuildingElementPart_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBuildingElementPart::Class() { return *IFC4X3_ADD2_IfcBuildingElementPart_type; } +Ifc4x3_add2::IfcBuildingElementPart::IfcBuildingElementPart(IfcEntityInstanceData* e) : IfcElementComponent((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBuildingElementPart_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBuildingElementPart::IfcBuildingElementPart(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcBuildingElementPartTypeEnum::Value > v9_PredefinedType) : IfcElementComponent((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBuildingElementPart_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcBuildingElementPartTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcBuildingElementPartType +::Ifc4x3_add2::IfcBuildingElementPartTypeEnum::Value Ifc4x3_add2::IfcBuildingElementPartType::PredefinedType() const { return ::Ifc4x3_add2::IfcBuildingElementPartTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcBuildingElementPartType::setPredefinedType(::Ifc4x3_add2::IfcBuildingElementPartTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcBuildingElementPartTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBuildingElementPartType::declaration() const { return *IFC4X3_ADD2_IfcBuildingElementPartType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBuildingElementPartType::Class() { return *IFC4X3_ADD2_IfcBuildingElementPartType_type; } +Ifc4x3_add2::IfcBuildingElementPartType::IfcBuildingElementPartType(IfcEntityInstanceData* e) : IfcElementComponentType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBuildingElementPartType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBuildingElementPartType::IfcBuildingElementPartType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcBuildingElementPartTypeEnum::Value v10_PredefinedType) : IfcElementComponentType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBuildingElementPartType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcBuildingElementPartTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcBuildingElementProxy +boost::optional< ::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::Value > Ifc4x3_add2::IfcBuildingElementProxy::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcBuildingElementProxy::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBuildingElementProxy::declaration() const { return *IFC4X3_ADD2_IfcBuildingElementProxy_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBuildingElementProxy::Class() { return *IFC4X3_ADD2_IfcBuildingElementProxy_type; } +Ifc4x3_add2::IfcBuildingElementProxy::IfcBuildingElementProxy(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBuildingElementProxy_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBuildingElementProxy::IfcBuildingElementProxy(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBuildingElementProxy_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcBuildingElementProxyType +::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::Value Ifc4x3_add2::IfcBuildingElementProxyType::PredefinedType() const { return ::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcBuildingElementProxyType::setPredefinedType(::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBuildingElementProxyType::declaration() const { return *IFC4X3_ADD2_IfcBuildingElementProxyType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBuildingElementProxyType::Class() { return *IFC4X3_ADD2_IfcBuildingElementProxyType_type; } +Ifc4x3_add2::IfcBuildingElementProxyType::IfcBuildingElementProxyType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBuildingElementProxyType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBuildingElementProxyType::IfcBuildingElementProxyType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBuildingElementProxyType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcBuildingStorey +boost::optional< double > Ifc4x3_add2::IfcBuildingStorey::Elevation() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } double v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcBuildingStorey::setElevation(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBuildingStorey::declaration() const { return *IFC4X3_ADD2_IfcBuildingStorey_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBuildingStorey::Class() { return *IFC4X3_ADD2_IfcBuildingStorey_type; } +Ifc4x3_add2::IfcBuildingStorey::IfcBuildingStorey(IfcEntityInstanceData* e) : IfcSpatialStructureElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBuildingStorey_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBuildingStorey::IfcBuildingStorey(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, boost::optional< double > v10_Elevation) : IfcSpatialStructureElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBuildingStorey_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongName));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_CompositionType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_CompositionType,::Ifc4x3_add2::IfcElementCompositionEnum::ToString(*v9_CompositionType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_Elevation) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_Elevation));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } } + +// Function implementations for IfcBuildingSystem +boost::optional< ::Ifc4x3_add2::IfcBuildingSystemTypeEnum::Value > Ifc4x3_add2::IfcBuildingSystem::PredefinedType() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcBuildingSystemTypeEnum::FromString(*data_->getArgument(5)); } +void Ifc4x3_add2::IfcBuildingSystem::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcBuildingSystemTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcBuildingSystemTypeEnum::ToString(*v)));}data_->setArgument(5,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcBuildingSystem::LongName() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } std::string v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcBuildingSystem::setLongName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBuildingSystem::declaration() const { return *IFC4X3_ADD2_IfcBuildingSystem_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBuildingSystem::Class() { return *IFC4X3_ADD2_IfcBuildingSystem_type; } +Ifc4x3_add2::IfcBuildingSystem::IfcBuildingSystem(IfcEntityInstanceData* e) : IfcSystem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBuildingSystem_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBuildingSystem::IfcBuildingSystem(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< ::Ifc4x3_add2::IfcBuildingSystemTypeEnum::Value > v6_PredefinedType, boost::optional< std::string > v7_LongName) : IfcSystem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBuildingSystem_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v6_PredefinedType,::Ifc4x3_add2::IfcBuildingSystemTypeEnum::ToString(*v6_PredefinedType))));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_LongName));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } } + +// Function implementations for IfcBuiltElement + + +const IfcParse::entity& Ifc4x3_add2::IfcBuiltElement::declaration() const { return *IFC4X3_ADD2_IfcBuiltElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBuiltElement::Class() { return *IFC4X3_ADD2_IfcBuiltElement_type; } +Ifc4x3_add2::IfcBuiltElement::IfcBuiltElement(IfcEntityInstanceData* e) : IfcElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBuiltElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBuiltElement::IfcBuiltElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBuiltElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcBuiltElementType + + +const IfcParse::entity& Ifc4x3_add2::IfcBuiltElementType::declaration() const { return *IFC4X3_ADD2_IfcBuiltElementType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBuiltElementType::Class() { return *IFC4X3_ADD2_IfcBuiltElementType_type; } +Ifc4x3_add2::IfcBuiltElementType::IfcBuiltElementType(IfcEntityInstanceData* e) : IfcElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBuiltElementType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBuiltElementType::IfcBuiltElementType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBuiltElementType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcBuiltSystem +boost::optional< ::Ifc4x3_add2::IfcBuiltSystemTypeEnum::Value > Ifc4x3_add2::IfcBuiltSystem::PredefinedType() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcBuiltSystemTypeEnum::FromString(*data_->getArgument(5)); } +void Ifc4x3_add2::IfcBuiltSystem::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcBuiltSystemTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcBuiltSystemTypeEnum::ToString(*v)));}data_->setArgument(5,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcBuiltSystem::LongName() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } std::string v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcBuiltSystem::setLongName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBuiltSystem::declaration() const { return *IFC4X3_ADD2_IfcBuiltSystem_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBuiltSystem::Class() { return *IFC4X3_ADD2_IfcBuiltSystem_type; } +Ifc4x3_add2::IfcBuiltSystem::IfcBuiltSystem(IfcEntityInstanceData* e) : IfcSystem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBuiltSystem_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBuiltSystem::IfcBuiltSystem(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< ::Ifc4x3_add2::IfcBuiltSystemTypeEnum::Value > v6_PredefinedType, boost::optional< std::string > v7_LongName) : IfcSystem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBuiltSystem_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v6_PredefinedType,::Ifc4x3_add2::IfcBuiltSystemTypeEnum::ToString(*v6_PredefinedType))));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_LongName));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } } + +// Function implementations for IfcBurner +boost::optional< ::Ifc4x3_add2::IfcBurnerTypeEnum::Value > Ifc4x3_add2::IfcBurner::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcBurnerTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcBurner::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcBurnerTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcBurnerTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBurner::declaration() const { return *IFC4X3_ADD2_IfcBurner_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBurner::Class() { return *IFC4X3_ADD2_IfcBurner_type; } +Ifc4x3_add2::IfcBurner::IfcBurner(IfcEntityInstanceData* e) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBurner_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBurner::IfcBurner(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcBurnerTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBurner_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcBurnerTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcBurnerType +::Ifc4x3_add2::IfcBurnerTypeEnum::Value Ifc4x3_add2::IfcBurnerType::PredefinedType() const { return ::Ifc4x3_add2::IfcBurnerTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcBurnerType::setPredefinedType(::Ifc4x3_add2::IfcBurnerTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcBurnerTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcBurnerType::declaration() const { return *IFC4X3_ADD2_IfcBurnerType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcBurnerType::Class() { return *IFC4X3_ADD2_IfcBurnerType_type; } +Ifc4x3_add2::IfcBurnerType::IfcBurnerType(IfcEntityInstanceData* e) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcBurnerType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcBurnerType::IfcBurnerType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcBurnerTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcBurnerType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcBurnerTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcCShapeProfileDef +double Ifc4x3_add2::IfcCShapeProfileDef::Depth() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcCShapeProfileDef::setDepth(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +double Ifc4x3_add2::IfcCShapeProfileDef::Width() const { double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcCShapeProfileDef::setWidth(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +double Ifc4x3_add2::IfcCShapeProfileDef::WallThickness() const { double v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcCShapeProfileDef::setWallThickness(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +double Ifc4x3_add2::IfcCShapeProfileDef::Girth() const { double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcCShapeProfileDef::setGirth(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +boost::optional< double > Ifc4x3_add2::IfcCShapeProfileDef::InternalFilletRadius() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } double v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcCShapeProfileDef::setInternalFilletRadius(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCShapeProfileDef::declaration() const { return *IFC4X3_ADD2_IfcCShapeProfileDef_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCShapeProfileDef::Class() { return *IFC4X3_ADD2_IfcCShapeProfileDef_type; } +Ifc4x3_add2::IfcCShapeProfileDef::IfcCShapeProfileDef(IfcEntityInstanceData* e) : IfcParameterizedProfileDef((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCShapeProfileDef_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCShapeProfileDef::IfcCShapeProfileDef(::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_Depth, double v5_Width, double v6_WallThickness, double v7_Girth, boost::optional< double > v8_InternalFilletRadius) : IfcParameterizedProfileDef((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCShapeProfileDef_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_ProfileType,::Ifc4x3_add2::IfcProfileTypeEnum::ToString(v1_ProfileType))));data_->setArgument(0,attr);} if (v2_ProfileName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ProfileName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Position));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Depth));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_Width));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_WallThickness));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Girth));data_->setArgument(6,attr);} if (v8_InternalFilletRadius) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_InternalFilletRadius));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcCableCarrierFitting +boost::optional< ::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::Value > Ifc4x3_add2::IfcCableCarrierFitting::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcCableCarrierFitting::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCableCarrierFitting::declaration() const { return *IFC4X3_ADD2_IfcCableCarrierFitting_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCableCarrierFitting::Class() { return *IFC4X3_ADD2_IfcCableCarrierFitting_type; } +Ifc4x3_add2::IfcCableCarrierFitting::IfcCableCarrierFitting(IfcEntityInstanceData* e) : IfcFlowFitting((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCableCarrierFitting_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCableCarrierFitting::IfcCableCarrierFitting(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::Value > v9_PredefinedType) : IfcFlowFitting((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCableCarrierFitting_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcCableCarrierFittingType +::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::Value Ifc4x3_add2::IfcCableCarrierFittingType::PredefinedType() const { return ::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcCableCarrierFittingType::setPredefinedType(::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCableCarrierFittingType::declaration() const { return *IFC4X3_ADD2_IfcCableCarrierFittingType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCableCarrierFittingType::Class() { return *IFC4X3_ADD2_IfcCableCarrierFittingType_type; } +Ifc4x3_add2::IfcCableCarrierFittingType::IfcCableCarrierFittingType(IfcEntityInstanceData* e) : IfcFlowFittingType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCableCarrierFittingType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCableCarrierFittingType::IfcCableCarrierFittingType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::Value v10_PredefinedType) : IfcFlowFittingType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCableCarrierFittingType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcCableCarrierSegment +boost::optional< ::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::Value > Ifc4x3_add2::IfcCableCarrierSegment::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcCableCarrierSegment::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCableCarrierSegment::declaration() const { return *IFC4X3_ADD2_IfcCableCarrierSegment_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCableCarrierSegment::Class() { return *IFC4X3_ADD2_IfcCableCarrierSegment_type; } +Ifc4x3_add2::IfcCableCarrierSegment::IfcCableCarrierSegment(IfcEntityInstanceData* e) : IfcFlowSegment((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCableCarrierSegment_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCableCarrierSegment::IfcCableCarrierSegment(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::Value > v9_PredefinedType) : IfcFlowSegment((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCableCarrierSegment_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcCableCarrierSegmentType +::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::Value Ifc4x3_add2::IfcCableCarrierSegmentType::PredefinedType() const { return ::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcCableCarrierSegmentType::setPredefinedType(::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCableCarrierSegmentType::declaration() const { return *IFC4X3_ADD2_IfcCableCarrierSegmentType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCableCarrierSegmentType::Class() { return *IFC4X3_ADD2_IfcCableCarrierSegmentType_type; } +Ifc4x3_add2::IfcCableCarrierSegmentType::IfcCableCarrierSegmentType(IfcEntityInstanceData* e) : IfcFlowSegmentType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCableCarrierSegmentType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCableCarrierSegmentType::IfcCableCarrierSegmentType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::Value v10_PredefinedType) : IfcFlowSegmentType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCableCarrierSegmentType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcCableFitting +boost::optional< ::Ifc4x3_add2::IfcCableFittingTypeEnum::Value > Ifc4x3_add2::IfcCableFitting::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcCableFittingTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcCableFitting::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCableFittingTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcCableFittingTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCableFitting::declaration() const { return *IFC4X3_ADD2_IfcCableFitting_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCableFitting::Class() { return *IFC4X3_ADD2_IfcCableFitting_type; } +Ifc4x3_add2::IfcCableFitting::IfcCableFitting(IfcEntityInstanceData* e) : IfcFlowFitting((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCableFitting_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCableFitting::IfcCableFitting(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCableFittingTypeEnum::Value > v9_PredefinedType) : IfcFlowFitting((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCableFitting_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcCableFittingTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcCableFittingType +::Ifc4x3_add2::IfcCableFittingTypeEnum::Value Ifc4x3_add2::IfcCableFittingType::PredefinedType() const { return ::Ifc4x3_add2::IfcCableFittingTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcCableFittingType::setPredefinedType(::Ifc4x3_add2::IfcCableFittingTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcCableFittingTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCableFittingType::declaration() const { return *IFC4X3_ADD2_IfcCableFittingType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCableFittingType::Class() { return *IFC4X3_ADD2_IfcCableFittingType_type; } +Ifc4x3_add2::IfcCableFittingType::IfcCableFittingType(IfcEntityInstanceData* e) : IfcFlowFittingType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCableFittingType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCableFittingType::IfcCableFittingType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCableFittingTypeEnum::Value v10_PredefinedType) : IfcFlowFittingType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCableFittingType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcCableFittingTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcCableSegment +boost::optional< ::Ifc4x3_add2::IfcCableSegmentTypeEnum::Value > Ifc4x3_add2::IfcCableSegment::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcCableSegmentTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcCableSegment::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCableSegmentTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcCableSegmentTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCableSegment::declaration() const { return *IFC4X3_ADD2_IfcCableSegment_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCableSegment::Class() { return *IFC4X3_ADD2_IfcCableSegment_type; } +Ifc4x3_add2::IfcCableSegment::IfcCableSegment(IfcEntityInstanceData* e) : IfcFlowSegment((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCableSegment_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCableSegment::IfcCableSegment(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCableSegmentTypeEnum::Value > v9_PredefinedType) : IfcFlowSegment((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCableSegment_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcCableSegmentTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcCableSegmentType +::Ifc4x3_add2::IfcCableSegmentTypeEnum::Value Ifc4x3_add2::IfcCableSegmentType::PredefinedType() const { return ::Ifc4x3_add2::IfcCableSegmentTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcCableSegmentType::setPredefinedType(::Ifc4x3_add2::IfcCableSegmentTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcCableSegmentTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCableSegmentType::declaration() const { return *IFC4X3_ADD2_IfcCableSegmentType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCableSegmentType::Class() { return *IFC4X3_ADD2_IfcCableSegmentType_type; } +Ifc4x3_add2::IfcCableSegmentType::IfcCableSegmentType(IfcEntityInstanceData* e) : IfcFlowSegmentType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCableSegmentType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCableSegmentType::IfcCableSegmentType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCableSegmentTypeEnum::Value v10_PredefinedType) : IfcFlowSegmentType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCableSegmentType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcCableSegmentTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcCaissonFoundation +boost::optional< ::Ifc4x3_add2::IfcCaissonFoundationTypeEnum::Value > Ifc4x3_add2::IfcCaissonFoundation::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcCaissonFoundationTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcCaissonFoundation::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCaissonFoundationTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcCaissonFoundationTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCaissonFoundation::declaration() const { return *IFC4X3_ADD2_IfcCaissonFoundation_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCaissonFoundation::Class() { return *IFC4X3_ADD2_IfcCaissonFoundation_type; } +Ifc4x3_add2::IfcCaissonFoundation::IfcCaissonFoundation(IfcEntityInstanceData* e) : IfcDeepFoundation((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCaissonFoundation_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCaissonFoundation::IfcCaissonFoundation(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCaissonFoundationTypeEnum::Value > v9_PredefinedType) : IfcDeepFoundation((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCaissonFoundation_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcCaissonFoundationTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcCaissonFoundationType +::Ifc4x3_add2::IfcCaissonFoundationTypeEnum::Value Ifc4x3_add2::IfcCaissonFoundationType::PredefinedType() const { return ::Ifc4x3_add2::IfcCaissonFoundationTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcCaissonFoundationType::setPredefinedType(::Ifc4x3_add2::IfcCaissonFoundationTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcCaissonFoundationTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCaissonFoundationType::declaration() const { return *IFC4X3_ADD2_IfcCaissonFoundationType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCaissonFoundationType::Class() { return *IFC4X3_ADD2_IfcCaissonFoundationType_type; } +Ifc4x3_add2::IfcCaissonFoundationType::IfcCaissonFoundationType(IfcEntityInstanceData* e) : IfcDeepFoundationType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCaissonFoundationType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCaissonFoundationType::IfcCaissonFoundationType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCaissonFoundationTypeEnum::Value v10_PredefinedType) : IfcDeepFoundationType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCaissonFoundationType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcCaissonFoundationTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcCartesianPoint +std::vector< double > /*[1:3]*/ Ifc4x3_add2::IfcCartesianPoint::Coordinates() const { std::vector< double > /*[1:3]*/ v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcCartesianPoint::setCoordinates(std::vector< double > /*[1:3]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCartesianPoint::declaration() const { return *IFC4X3_ADD2_IfcCartesianPoint_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCartesianPoint::Class() { return *IFC4X3_ADD2_IfcCartesianPoint_type; } +Ifc4x3_add2::IfcCartesianPoint::IfcCartesianPoint(IfcEntityInstanceData* e) : IfcPoint((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCartesianPoint_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCartesianPoint::IfcCartesianPoint(std::vector< double > /*[1:3]*/ v1_Coordinates) : IfcPoint((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCartesianPoint_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Coordinates));data_->setArgument(0,attr);} } + +// Function implementations for IfcCartesianPointList + + +const IfcParse::entity& Ifc4x3_add2::IfcCartesianPointList::declaration() const { return *IFC4X3_ADD2_IfcCartesianPointList_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCartesianPointList::Class() { return *IFC4X3_ADD2_IfcCartesianPointList_type; } +Ifc4x3_add2::IfcCartesianPointList::IfcCartesianPointList(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCartesianPointList_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCartesianPointList::IfcCartesianPointList() : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCartesianPointList_type); } + +// Function implementations for IfcCartesianPointList2D +std::vector< std::vector< double > > Ifc4x3_add2::IfcCartesianPointList2D::CoordList() const { std::vector< std::vector< double > > v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcCartesianPointList2D::setCoordList(std::vector< std::vector< double > > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +boost::optional< std::vector< std::string > /*[1:?]*/ > Ifc4x3_add2::IfcCartesianPointList2D::TagList() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::vector< std::string > /*[1:?]*/ v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcCartesianPointList2D::setTagList(boost::optional< std::vector< std::string > /*[1:?]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCartesianPointList2D::declaration() const { return *IFC4X3_ADD2_IfcCartesianPointList2D_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCartesianPointList2D::Class() { return *IFC4X3_ADD2_IfcCartesianPointList2D_type; } +Ifc4x3_add2::IfcCartesianPointList2D::IfcCartesianPointList2D(IfcEntityInstanceData* e) : IfcCartesianPointList((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCartesianPointList2D_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCartesianPointList2D::IfcCartesianPointList2D(std::vector< std::vector< double > > v1_CoordList, boost::optional< std::vector< std::string > /*[1:?]*/ > v2_TagList) : IfcCartesianPointList((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCartesianPointList2D_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_CoordList));data_->setArgument(0,attr);} if (v2_TagList) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_TagList));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } } + +// Function implementations for IfcCartesianPointList3D +std::vector< std::vector< double > > Ifc4x3_add2::IfcCartesianPointList3D::CoordList() const { std::vector< std::vector< double > > v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcCartesianPointList3D::setCoordList(std::vector< std::vector< double > > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +boost::optional< std::vector< std::string > /*[1:?]*/ > Ifc4x3_add2::IfcCartesianPointList3D::TagList() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::vector< std::string > /*[1:?]*/ v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcCartesianPointList3D::setTagList(boost::optional< std::vector< std::string > /*[1:?]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCartesianPointList3D::declaration() const { return *IFC4X3_ADD2_IfcCartesianPointList3D_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCartesianPointList3D::Class() { return *IFC4X3_ADD2_IfcCartesianPointList3D_type; } +Ifc4x3_add2::IfcCartesianPointList3D::IfcCartesianPointList3D(IfcEntityInstanceData* e) : IfcCartesianPointList((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCartesianPointList3D_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCartesianPointList3D::IfcCartesianPointList3D(std::vector< std::vector< double > > v1_CoordList, boost::optional< std::vector< std::string > /*[1:?]*/ > v2_TagList) : IfcCartesianPointList((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCartesianPointList3D_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_CoordList));data_->setArgument(0,attr);} if (v2_TagList) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_TagList));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } } + +// Function implementations for IfcCartesianTransformationOperator +::Ifc4x3_add2::IfcDirection* Ifc4x3_add2::IfcCartesianTransformationOperator::Axis1() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcDirection>(true); } +void Ifc4x3_add2::IfcCartesianTransformationOperator::setAxis1(::Ifc4x3_add2::IfcDirection* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcDirection* Ifc4x3_add2::IfcCartesianTransformationOperator::Axis2() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcDirection>(true); } +void Ifc4x3_add2::IfcCartesianTransformationOperator::setAxis2(::Ifc4x3_add2::IfcDirection* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcCartesianPoint* Ifc4x3_add2::IfcCartesianTransformationOperator::LocalOrigin() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcCartesianPoint>(true); } +void Ifc4x3_add2::IfcCartesianTransformationOperator::setLocalOrigin(::Ifc4x3_add2::IfcCartesianPoint* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +boost::optional< double > Ifc4x3_add2::IfcCartesianTransformationOperator::Scale() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcCartesianTransformationOperator::setScale(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCartesianTransformationOperator::declaration() const { return *IFC4X3_ADD2_IfcCartesianTransformationOperator_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCartesianTransformationOperator::Class() { return *IFC4X3_ADD2_IfcCartesianTransformationOperator_type; } +Ifc4x3_add2::IfcCartesianTransformationOperator::IfcCartesianTransformationOperator(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCartesianTransformationOperator_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCartesianTransformationOperator::IfcCartesianTransformationOperator(::Ifc4x3_add2::IfcDirection* v1_Axis1, ::Ifc4x3_add2::IfcDirection* v2_Axis2, ::Ifc4x3_add2::IfcCartesianPoint* v3_LocalOrigin, boost::optional< double > v4_Scale) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCartesianTransformationOperator_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Axis1));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Axis2));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_LocalOrigin));data_->setArgument(2,attr);} if (v4_Scale) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Scale));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcCartesianTransformationOperator2D + + +const IfcParse::entity& Ifc4x3_add2::IfcCartesianTransformationOperator2D::declaration() const { return *IFC4X3_ADD2_IfcCartesianTransformationOperator2D_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCartesianTransformationOperator2D::Class() { return *IFC4X3_ADD2_IfcCartesianTransformationOperator2D_type; } +Ifc4x3_add2::IfcCartesianTransformationOperator2D::IfcCartesianTransformationOperator2D(IfcEntityInstanceData* e) : IfcCartesianTransformationOperator((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCartesianTransformationOperator2D_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCartesianTransformationOperator2D::IfcCartesianTransformationOperator2D(::Ifc4x3_add2::IfcDirection* v1_Axis1, ::Ifc4x3_add2::IfcDirection* v2_Axis2, ::Ifc4x3_add2::IfcCartesianPoint* v3_LocalOrigin, boost::optional< double > v4_Scale) : IfcCartesianTransformationOperator((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCartesianTransformationOperator2D_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Axis1));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Axis2));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_LocalOrigin));data_->setArgument(2,attr);} if (v4_Scale) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Scale));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcCartesianTransformationOperator2DnonUniform +boost::optional< double > Ifc4x3_add2::IfcCartesianTransformationOperator2DnonUniform::Scale2() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcCartesianTransformationOperator2DnonUniform::setScale2(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCartesianTransformationOperator2DnonUniform::declaration() const { return *IFC4X3_ADD2_IfcCartesianTransformationOperator2DnonUniform_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCartesianTransformationOperator2DnonUniform::Class() { return *IFC4X3_ADD2_IfcCartesianTransformationOperator2DnonUniform_type; } +Ifc4x3_add2::IfcCartesianTransformationOperator2DnonUniform::IfcCartesianTransformationOperator2DnonUniform(IfcEntityInstanceData* e) : IfcCartesianTransformationOperator2D((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCartesianTransformationOperator2DnonUniform_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCartesianTransformationOperator2DnonUniform::IfcCartesianTransformationOperator2DnonUniform(::Ifc4x3_add2::IfcDirection* v1_Axis1, ::Ifc4x3_add2::IfcDirection* v2_Axis2, ::Ifc4x3_add2::IfcCartesianPoint* v3_LocalOrigin, boost::optional< double > v4_Scale, boost::optional< double > v5_Scale2) : IfcCartesianTransformationOperator2D((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCartesianTransformationOperator2DnonUniform_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Axis1));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Axis2));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_LocalOrigin));data_->setArgument(2,attr);} if (v4_Scale) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Scale));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_Scale2) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Scale2));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcCartesianTransformationOperator3D +::Ifc4x3_add2::IfcDirection* Ifc4x3_add2::IfcCartesianTransformationOperator3D::Axis3() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcDirection>(true); } +void Ifc4x3_add2::IfcCartesianTransformationOperator3D::setAxis3(::Ifc4x3_add2::IfcDirection* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCartesianTransformationOperator3D::declaration() const { return *IFC4X3_ADD2_IfcCartesianTransformationOperator3D_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCartesianTransformationOperator3D::Class() { return *IFC4X3_ADD2_IfcCartesianTransformationOperator3D_type; } +Ifc4x3_add2::IfcCartesianTransformationOperator3D::IfcCartesianTransformationOperator3D(IfcEntityInstanceData* e) : IfcCartesianTransformationOperator((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCartesianTransformationOperator3D_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCartesianTransformationOperator3D::IfcCartesianTransformationOperator3D(::Ifc4x3_add2::IfcDirection* v1_Axis1, ::Ifc4x3_add2::IfcDirection* v2_Axis2, ::Ifc4x3_add2::IfcCartesianPoint* v3_LocalOrigin, boost::optional< double > v4_Scale, ::Ifc4x3_add2::IfcDirection* v5_Axis3) : IfcCartesianTransformationOperator((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCartesianTransformationOperator3D_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Axis1));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Axis2));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_LocalOrigin));data_->setArgument(2,attr);} if (v4_Scale) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Scale));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_Axis3));data_->setArgument(4,attr);} } + +// Function implementations for IfcCartesianTransformationOperator3DnonUniform +boost::optional< double > Ifc4x3_add2::IfcCartesianTransformationOperator3DnonUniform::Scale2() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } double v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcCartesianTransformationOperator3DnonUniform::setScale2(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< double > Ifc4x3_add2::IfcCartesianTransformationOperator3DnonUniform::Scale3() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcCartesianTransformationOperator3DnonUniform::setScale3(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCartesianTransformationOperator3DnonUniform::declaration() const { return *IFC4X3_ADD2_IfcCartesianTransformationOperator3DnonUniform_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCartesianTransformationOperator3DnonUniform::Class() { return *IFC4X3_ADD2_IfcCartesianTransformationOperator3DnonUniform_type; } +Ifc4x3_add2::IfcCartesianTransformationOperator3DnonUniform::IfcCartesianTransformationOperator3DnonUniform(IfcEntityInstanceData* e) : IfcCartesianTransformationOperator3D((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCartesianTransformationOperator3DnonUniform_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCartesianTransformationOperator3DnonUniform::IfcCartesianTransformationOperator3DnonUniform(::Ifc4x3_add2::IfcDirection* v1_Axis1, ::Ifc4x3_add2::IfcDirection* v2_Axis2, ::Ifc4x3_add2::IfcCartesianPoint* v3_LocalOrigin, boost::optional< double > v4_Scale, ::Ifc4x3_add2::IfcDirection* v5_Axis3, boost::optional< double > v6_Scale2, boost::optional< double > v7_Scale3) : IfcCartesianTransformationOperator3D((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCartesianTransformationOperator3DnonUniform_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Axis1));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Axis2));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_LocalOrigin));data_->setArgument(2,attr);} if (v4_Scale) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Scale));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_Axis3));data_->setArgument(4,attr);} if (v6_Scale2) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Scale2));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_Scale3) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_Scale3));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } } + +// Function implementations for IfcCenterLineProfileDef +double Ifc4x3_add2::IfcCenterLineProfileDef::Thickness() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcCenterLineProfileDef::setThickness(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCenterLineProfileDef::declaration() const { return *IFC4X3_ADD2_IfcCenterLineProfileDef_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCenterLineProfileDef::Class() { return *IFC4X3_ADD2_IfcCenterLineProfileDef_type; } +Ifc4x3_add2::IfcCenterLineProfileDef::IfcCenterLineProfileDef(IfcEntityInstanceData* e) : IfcArbitraryOpenProfileDef((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCenterLineProfileDef_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCenterLineProfileDef::IfcCenterLineProfileDef(::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcBoundedCurve* v3_Curve, double v4_Thickness) : IfcArbitraryOpenProfileDef((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCenterLineProfileDef_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_ProfileType,::Ifc4x3_add2::IfcProfileTypeEnum::ToString(v1_ProfileType))));data_->setArgument(0,attr);} if (v2_ProfileName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ProfileName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Curve));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Thickness));data_->setArgument(3,attr);} } + +// Function implementations for IfcChiller +boost::optional< ::Ifc4x3_add2::IfcChillerTypeEnum::Value > Ifc4x3_add2::IfcChiller::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcChillerTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcChiller::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcChillerTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcChillerTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcChiller::declaration() const { return *IFC4X3_ADD2_IfcChiller_type; } +const IfcParse::entity& Ifc4x3_add2::IfcChiller::Class() { return *IFC4X3_ADD2_IfcChiller_type; } +Ifc4x3_add2::IfcChiller::IfcChiller(IfcEntityInstanceData* e) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcChiller_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcChiller::IfcChiller(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcChillerTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcChiller_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcChillerTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcChillerType +::Ifc4x3_add2::IfcChillerTypeEnum::Value Ifc4x3_add2::IfcChillerType::PredefinedType() const { return ::Ifc4x3_add2::IfcChillerTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcChillerType::setPredefinedType(::Ifc4x3_add2::IfcChillerTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcChillerTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcChillerType::declaration() const { return *IFC4X3_ADD2_IfcChillerType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcChillerType::Class() { return *IFC4X3_ADD2_IfcChillerType_type; } +Ifc4x3_add2::IfcChillerType::IfcChillerType(IfcEntityInstanceData* e) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcChillerType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcChillerType::IfcChillerType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcChillerTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcChillerType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcChillerTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcChimney +boost::optional< ::Ifc4x3_add2::IfcChimneyTypeEnum::Value > Ifc4x3_add2::IfcChimney::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcChimneyTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcChimney::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcChimneyTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcChimneyTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcChimney::declaration() const { return *IFC4X3_ADD2_IfcChimney_type; } +const IfcParse::entity& Ifc4x3_add2::IfcChimney::Class() { return *IFC4X3_ADD2_IfcChimney_type; } +Ifc4x3_add2::IfcChimney::IfcChimney(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcChimney_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcChimney::IfcChimney(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcChimneyTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcChimney_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcChimneyTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcChimneyType +::Ifc4x3_add2::IfcChimneyTypeEnum::Value Ifc4x3_add2::IfcChimneyType::PredefinedType() const { return ::Ifc4x3_add2::IfcChimneyTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcChimneyType::setPredefinedType(::Ifc4x3_add2::IfcChimneyTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcChimneyTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcChimneyType::declaration() const { return *IFC4X3_ADD2_IfcChimneyType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcChimneyType::Class() { return *IFC4X3_ADD2_IfcChimneyType_type; } +Ifc4x3_add2::IfcChimneyType::IfcChimneyType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcChimneyType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcChimneyType::IfcChimneyType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcChimneyTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcChimneyType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcChimneyTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcCircle +double Ifc4x3_add2::IfcCircle::Radius() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcCircle::setRadius(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCircle::declaration() const { return *IFC4X3_ADD2_IfcCircle_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCircle::Class() { return *IFC4X3_ADD2_IfcCircle_type; } +Ifc4x3_add2::IfcCircle::IfcCircle(IfcEntityInstanceData* e) : IfcConic((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCircle_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCircle::IfcCircle(::Ifc4x3_add2::IfcAxis2Placement* v1_Position, double v2_Radius) : IfcConic((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCircle_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Position));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Radius));data_->setArgument(1,attr);} } + +// Function implementations for IfcCircleHollowProfileDef +double Ifc4x3_add2::IfcCircleHollowProfileDef::WallThickness() const { double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcCircleHollowProfileDef::setWallThickness(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCircleHollowProfileDef::declaration() const { return *IFC4X3_ADD2_IfcCircleHollowProfileDef_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCircleHollowProfileDef::Class() { return *IFC4X3_ADD2_IfcCircleHollowProfileDef_type; } +Ifc4x3_add2::IfcCircleHollowProfileDef::IfcCircleHollowProfileDef(IfcEntityInstanceData* e) : IfcCircleProfileDef((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCircleHollowProfileDef_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCircleHollowProfileDef::IfcCircleHollowProfileDef(::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_Radius, double v5_WallThickness) : IfcCircleProfileDef((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCircleHollowProfileDef_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_ProfileType,::Ifc4x3_add2::IfcProfileTypeEnum::ToString(v1_ProfileType))));data_->setArgument(0,attr);} if (v2_ProfileName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ProfileName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Position));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Radius));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_WallThickness));data_->setArgument(4,attr);} } + +// Function implementations for IfcCircleProfileDef +double Ifc4x3_add2::IfcCircleProfileDef::Radius() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcCircleProfileDef::setRadius(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCircleProfileDef::declaration() const { return *IFC4X3_ADD2_IfcCircleProfileDef_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCircleProfileDef::Class() { return *IFC4X3_ADD2_IfcCircleProfileDef_type; } +Ifc4x3_add2::IfcCircleProfileDef::IfcCircleProfileDef(IfcEntityInstanceData* e) : IfcParameterizedProfileDef((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCircleProfileDef_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCircleProfileDef::IfcCircleProfileDef(::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_Radius) : IfcParameterizedProfileDef((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCircleProfileDef_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_ProfileType,::Ifc4x3_add2::IfcProfileTypeEnum::ToString(v1_ProfileType))));data_->setArgument(0,attr);} if (v2_ProfileName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ProfileName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Position));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Radius));data_->setArgument(3,attr);} } + +// Function implementations for IfcCivilElement + + +const IfcParse::entity& Ifc4x3_add2::IfcCivilElement::declaration() const { return *IFC4X3_ADD2_IfcCivilElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCivilElement::Class() { return *IFC4X3_ADD2_IfcCivilElement_type; } +Ifc4x3_add2::IfcCivilElement::IfcCivilElement(IfcEntityInstanceData* e) : IfcElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCivilElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCivilElement::IfcCivilElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCivilElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcCivilElementType + + +const IfcParse::entity& Ifc4x3_add2::IfcCivilElementType::declaration() const { return *IFC4X3_ADD2_IfcCivilElementType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCivilElementType::Class() { return *IFC4X3_ADD2_IfcCivilElementType_type; } +Ifc4x3_add2::IfcCivilElementType::IfcCivilElementType(IfcEntityInstanceData* e) : IfcElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCivilElementType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCivilElementType::IfcCivilElementType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCivilElementType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcClassification +boost::optional< std::string > Ifc4x3_add2::IfcClassification::Source() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcClassification::setSource(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcClassification::Edition() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcClassification::setEdition(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcClassification::EditionDate() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcClassification::setEditionDate(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +std::string Ifc4x3_add2::IfcClassification::Name() const { std::string v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcClassification::setName(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcClassification::Description() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcClassification::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcClassification::Specification() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcClassification::setSpecification(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< std::vector< std::string > /*[1:?]*/ > Ifc4x3_add2::IfcClassification::ReferenceTokens() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } std::vector< std::string > /*[1:?]*/ v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcClassification::setReferenceTokens(boost::optional< std::vector< std::string > /*[1:?]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } + +::Ifc4x3_add2::IfcRelAssociatesClassification::list::ptr Ifc4x3_add2::IfcClassification::ClassificationForObjects() const { return data_->getInverse(IFC4X3_ADD2_IfcRelAssociatesClassification_type, 5)->as(); } +::Ifc4x3_add2::IfcClassificationReference::list::ptr Ifc4x3_add2::IfcClassification::HasReferences() const { return data_->getInverse(IFC4X3_ADD2_IfcClassificationReference_type, 3)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcClassification::declaration() const { return *IFC4X3_ADD2_IfcClassification_type; } +const IfcParse::entity& Ifc4x3_add2::IfcClassification::Class() { return *IFC4X3_ADD2_IfcClassification_type; } +Ifc4x3_add2::IfcClassification::IfcClassification(IfcEntityInstanceData* e) : IfcExternalInformation((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcClassification_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcClassification::IfcClassification(boost::optional< std::string > v1_Source, boost::optional< std::string > v2_Edition, boost::optional< std::string > v3_EditionDate, std::string v4_Name, boost::optional< std::string > v5_Description, boost::optional< std::string > v6_Specification, boost::optional< std::vector< std::string > /*[1:?]*/ > v7_ReferenceTokens) : IfcExternalInformation((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcClassification_type); if (v1_Source) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Source));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Edition) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Edition));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_EditionDate) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_EditionDate));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Name));data_->setArgument(3,attr);} if (v5_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Description));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Specification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Specification));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_ReferenceTokens) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_ReferenceTokens));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } } + +// Function implementations for IfcClassificationReference +::Ifc4x3_add2::IfcClassificationReferenceSelect* Ifc4x3_add2::IfcClassificationReference::ReferencedSource() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcClassificationReferenceSelect>(true); } +void Ifc4x3_add2::IfcClassificationReference::setReferencedSource(::Ifc4x3_add2::IfcClassificationReferenceSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcClassificationReference::Description() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcClassificationReference::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcClassificationReference::Sort() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcClassificationReference::setSort(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } + +::Ifc4x3_add2::IfcRelAssociatesClassification::list::ptr Ifc4x3_add2::IfcClassificationReference::ClassificationRefForObjects() const { return data_->getInverse(IFC4X3_ADD2_IfcRelAssociatesClassification_type, 5)->as(); } +::Ifc4x3_add2::IfcClassificationReference::list::ptr Ifc4x3_add2::IfcClassificationReference::HasReferences() const { return data_->getInverse(IFC4X3_ADD2_IfcClassificationReference_type, 3)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcClassificationReference::declaration() const { return *IFC4X3_ADD2_IfcClassificationReference_type; } +const IfcParse::entity& Ifc4x3_add2::IfcClassificationReference::Class() { return *IFC4X3_ADD2_IfcClassificationReference_type; } +Ifc4x3_add2::IfcClassificationReference::IfcClassificationReference(IfcEntityInstanceData* e) : IfcExternalReference((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcClassificationReference_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcClassificationReference::IfcClassificationReference(boost::optional< std::string > v1_Location, boost::optional< std::string > v2_Identification, boost::optional< std::string > v3_Name, ::Ifc4x3_add2::IfcClassificationReferenceSelect* v4_ReferencedSource, boost::optional< std::string > v5_Description, boost::optional< std::string > v6_Sort) : IfcExternalReference((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcClassificationReference_type); if (v1_Location) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Location));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Identification));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_ReferencedSource));data_->setArgument(3,attr);} if (v5_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Description));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Sort) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Sort));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } } + +// Function implementations for IfcClosedShell + + +const IfcParse::entity& Ifc4x3_add2::IfcClosedShell::declaration() const { return *IFC4X3_ADD2_IfcClosedShell_type; } +const IfcParse::entity& Ifc4x3_add2::IfcClosedShell::Class() { return *IFC4X3_ADD2_IfcClosedShell_type; } +Ifc4x3_add2::IfcClosedShell::IfcClosedShell(IfcEntityInstanceData* e) : IfcConnectedFaceSet((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcClosedShell_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcClosedShell::IfcClosedShell(aggregate_of< ::Ifc4x3_add2::IfcFace >::ptr v1_CfsFaces) : IfcConnectedFaceSet((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcClosedShell_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_CfsFaces)->generalize());data_->setArgument(0,attr);} } + +// Function implementations for IfcClothoid +double Ifc4x3_add2::IfcClothoid::ClothoidConstant() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcClothoid::setClothoidConstant(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcClothoid::declaration() const { return *IFC4X3_ADD2_IfcClothoid_type; } +const IfcParse::entity& Ifc4x3_add2::IfcClothoid::Class() { return *IFC4X3_ADD2_IfcClothoid_type; } +Ifc4x3_add2::IfcClothoid::IfcClothoid(IfcEntityInstanceData* e) : IfcSpiral((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcClothoid_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcClothoid::IfcClothoid(::Ifc4x3_add2::IfcAxis2Placement* v1_Position, double v2_ClothoidConstant) : IfcSpiral((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcClothoid_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Position));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_ClothoidConstant));data_->setArgument(1,attr);} } + +// Function implementations for IfcCoil +boost::optional< ::Ifc4x3_add2::IfcCoilTypeEnum::Value > Ifc4x3_add2::IfcCoil::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcCoilTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcCoil::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCoilTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcCoilTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCoil::declaration() const { return *IFC4X3_ADD2_IfcCoil_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCoil::Class() { return *IFC4X3_ADD2_IfcCoil_type; } +Ifc4x3_add2::IfcCoil::IfcCoil(IfcEntityInstanceData* e) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCoil_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCoil::IfcCoil(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCoilTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCoil_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcCoilTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcCoilType +::Ifc4x3_add2::IfcCoilTypeEnum::Value Ifc4x3_add2::IfcCoilType::PredefinedType() const { return ::Ifc4x3_add2::IfcCoilTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcCoilType::setPredefinedType(::Ifc4x3_add2::IfcCoilTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcCoilTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCoilType::declaration() const { return *IFC4X3_ADD2_IfcCoilType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCoilType::Class() { return *IFC4X3_ADD2_IfcCoilType_type; } +Ifc4x3_add2::IfcCoilType::IfcCoilType(IfcEntityInstanceData* e) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCoilType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCoilType::IfcCoilType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCoilTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCoilType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcCoilTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcColourRgb +double Ifc4x3_add2::IfcColourRgb::Red() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcColourRgb::setRed(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +double Ifc4x3_add2::IfcColourRgb::Green() const { double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcColourRgb::setGreen(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +double Ifc4x3_add2::IfcColourRgb::Blue() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcColourRgb::setBlue(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcColourRgb::declaration() const { return *IFC4X3_ADD2_IfcColourRgb_type; } +const IfcParse::entity& Ifc4x3_add2::IfcColourRgb::Class() { return *IFC4X3_ADD2_IfcColourRgb_type; } +Ifc4x3_add2::IfcColourRgb::IfcColourRgb(IfcEntityInstanceData* e) : IfcColourSpecification((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcColourRgb_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcColourRgb::IfcColourRgb(boost::optional< std::string > v1_Name, double v2_Red, double v3_Green, double v4_Blue) : IfcColourSpecification((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcColourRgb_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Red));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Green));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Blue));data_->setArgument(3,attr);} } + +// Function implementations for IfcColourRgbList +std::vector< std::vector< double > > Ifc4x3_add2::IfcColourRgbList::ColourList() const { std::vector< std::vector< double > > v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcColourRgbList::setColourList(std::vector< std::vector< double > > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcColourRgbList::declaration() const { return *IFC4X3_ADD2_IfcColourRgbList_type; } +const IfcParse::entity& Ifc4x3_add2::IfcColourRgbList::Class() { return *IFC4X3_ADD2_IfcColourRgbList_type; } +Ifc4x3_add2::IfcColourRgbList::IfcColourRgbList(IfcEntityInstanceData* e) : IfcPresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcColourRgbList_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcColourRgbList::IfcColourRgbList(std::vector< std::vector< double > > v1_ColourList) : IfcPresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcColourRgbList_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_ColourList));data_->setArgument(0,attr);} } + +// Function implementations for IfcColourSpecification +boost::optional< std::string > Ifc4x3_add2::IfcColourSpecification::Name() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcColourSpecification::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcColourSpecification::declaration() const { return *IFC4X3_ADD2_IfcColourSpecification_type; } +const IfcParse::entity& Ifc4x3_add2::IfcColourSpecification::Class() { return *IFC4X3_ADD2_IfcColourSpecification_type; } +Ifc4x3_add2::IfcColourSpecification::IfcColourSpecification(IfcEntityInstanceData* e) : IfcPresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcColourSpecification_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcColourSpecification::IfcColourSpecification(boost::optional< std::string > v1_Name) : IfcPresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcColourSpecification_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } } + +// Function implementations for IfcColumn +boost::optional< ::Ifc4x3_add2::IfcColumnTypeEnum::Value > Ifc4x3_add2::IfcColumn::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcColumnTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcColumn::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcColumnTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcColumnTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcColumn::declaration() const { return *IFC4X3_ADD2_IfcColumn_type; } +const IfcParse::entity& Ifc4x3_add2::IfcColumn::Class() { return *IFC4X3_ADD2_IfcColumn_type; } +Ifc4x3_add2::IfcColumn::IfcColumn(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcColumn_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcColumn::IfcColumn(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcColumnTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcColumn_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcColumnTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcColumnType +::Ifc4x3_add2::IfcColumnTypeEnum::Value Ifc4x3_add2::IfcColumnType::PredefinedType() const { return ::Ifc4x3_add2::IfcColumnTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcColumnType::setPredefinedType(::Ifc4x3_add2::IfcColumnTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcColumnTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcColumnType::declaration() const { return *IFC4X3_ADD2_IfcColumnType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcColumnType::Class() { return *IFC4X3_ADD2_IfcColumnType_type; } +Ifc4x3_add2::IfcColumnType::IfcColumnType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcColumnType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcColumnType::IfcColumnType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcColumnTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcColumnType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcColumnTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcCommunicationsAppliance +boost::optional< ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::Value > Ifc4x3_add2::IfcCommunicationsAppliance::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcCommunicationsAppliance::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCommunicationsAppliance::declaration() const { return *IFC4X3_ADD2_IfcCommunicationsAppliance_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCommunicationsAppliance::Class() { return *IFC4X3_ADD2_IfcCommunicationsAppliance_type; } +Ifc4x3_add2::IfcCommunicationsAppliance::IfcCommunicationsAppliance(IfcEntityInstanceData* e) : IfcFlowTerminal((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCommunicationsAppliance_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCommunicationsAppliance::IfcCommunicationsAppliance(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCommunicationsAppliance_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcCommunicationsApplianceType +::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::Value Ifc4x3_add2::IfcCommunicationsApplianceType::PredefinedType() const { return ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcCommunicationsApplianceType::setPredefinedType(::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCommunicationsApplianceType::declaration() const { return *IFC4X3_ADD2_IfcCommunicationsApplianceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCommunicationsApplianceType::Class() { return *IFC4X3_ADD2_IfcCommunicationsApplianceType_type; } +Ifc4x3_add2::IfcCommunicationsApplianceType::IfcCommunicationsApplianceType(IfcEntityInstanceData* e) : IfcFlowTerminalType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCommunicationsApplianceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCommunicationsApplianceType::IfcCommunicationsApplianceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCommunicationsApplianceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcComplexProperty +std::string Ifc4x3_add2::IfcComplexProperty::UsageName() const { std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcComplexProperty::setUsageName(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcProperty >::ptr Ifc4x3_add2::IfcComplexProperty::HasProperties() const { aggregate_of_instance::ptr es = *data_->getArgument(3); return es->as< ::Ifc4x3_add2::IfcProperty >(); } +void Ifc4x3_add2::IfcComplexProperty::setHasProperties(aggregate_of< ::Ifc4x3_add2::IfcProperty >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcComplexProperty::declaration() const { return *IFC4X3_ADD2_IfcComplexProperty_type; } +const IfcParse::entity& Ifc4x3_add2::IfcComplexProperty::Class() { return *IFC4X3_ADD2_IfcComplexProperty_type; } +Ifc4x3_add2::IfcComplexProperty::IfcComplexProperty(IfcEntityInstanceData* e) : IfcProperty((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcComplexProperty_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcComplexProperty::IfcComplexProperty(std::string v1_Name, boost::optional< std::string > v2_Specification, std::string v3_UsageName, aggregate_of< ::Ifc4x3_add2::IfcProperty >::ptr v4_HasProperties) : IfcProperty((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcComplexProperty_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Specification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Specification));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_UsageName));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_HasProperties)->generalize());data_->setArgument(3,attr);} } + +// Function implementations for IfcComplexPropertyTemplate +boost::optional< std::string > Ifc4x3_add2::IfcComplexPropertyTemplate::UsageName() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcComplexPropertyTemplate::setUsageName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< ::Ifc4x3_add2::IfcComplexPropertyTemplateTypeEnum::Value > Ifc4x3_add2::IfcComplexPropertyTemplate::TemplateType() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcComplexPropertyTemplateTypeEnum::FromString(*data_->getArgument(5)); } +void Ifc4x3_add2::IfcComplexPropertyTemplate::setTemplateType(boost::optional< ::Ifc4x3_add2::IfcComplexPropertyTemplateTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcComplexPropertyTemplateTypeEnum::ToString(*v)));}data_->setArgument(5,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertyTemplate >::ptr > Ifc4x3_add2::IfcComplexPropertyTemplate::HasPropertyTemplates() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(6); return es->as< ::Ifc4x3_add2::IfcPropertyTemplate >(); } +void Ifc4x3_add2::IfcComplexPropertyTemplate::setHasPropertyTemplates(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertyTemplate >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcComplexPropertyTemplate::declaration() const { return *IFC4X3_ADD2_IfcComplexPropertyTemplate_type; } +const IfcParse::entity& Ifc4x3_add2::IfcComplexPropertyTemplate::Class() { return *IFC4X3_ADD2_IfcComplexPropertyTemplate_type; } +Ifc4x3_add2::IfcComplexPropertyTemplate::IfcComplexPropertyTemplate(IfcEntityInstanceData* e) : IfcPropertyTemplate((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcComplexPropertyTemplate_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcComplexPropertyTemplate::IfcComplexPropertyTemplate(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_UsageName, boost::optional< ::Ifc4x3_add2::IfcComplexPropertyTemplateTypeEnum::Value > v6_TemplateType, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertyTemplate >::ptr > v7_HasPropertyTemplates) : IfcPropertyTemplate((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcComplexPropertyTemplate_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_UsageName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_UsageName));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_TemplateType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v6_TemplateType,::Ifc4x3_add2::IfcComplexPropertyTemplateTypeEnum::ToString(*v6_TemplateType))));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_HasPropertyTemplates) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_HasPropertyTemplates)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } } + +// Function implementations for IfcCompositeCurve +aggregate_of< ::Ifc4x3_add2::IfcSegment >::ptr Ifc4x3_add2::IfcCompositeCurve::Segments() const { aggregate_of_instance::ptr es = *data_->getArgument(0); return es->as< ::Ifc4x3_add2::IfcSegment >(); } +void Ifc4x3_add2::IfcCompositeCurve::setSegments(aggregate_of< ::Ifc4x3_add2::IfcSegment >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(0,attr);} } +boost::logic::tribool Ifc4x3_add2::IfcCompositeCurve::SelfIntersect() const { boost::logic::tribool v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcCompositeCurve::setSelfIntersect(boost::logic::tribool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCompositeCurve::declaration() const { return *IFC4X3_ADD2_IfcCompositeCurve_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCompositeCurve::Class() { return *IFC4X3_ADD2_IfcCompositeCurve_type; } +Ifc4x3_add2::IfcCompositeCurve::IfcCompositeCurve(IfcEntityInstanceData* e) : IfcBoundedCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCompositeCurve_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCompositeCurve::IfcCompositeCurve(aggregate_of< ::Ifc4x3_add2::IfcSegment >::ptr v1_Segments, boost::logic::tribool v2_SelfIntersect) : IfcBoundedCurve((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCompositeCurve_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Segments)->generalize());data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_SelfIntersect));data_->setArgument(1,attr);} } + +// Function implementations for IfcCompositeCurveOnSurface + + +const IfcParse::entity& Ifc4x3_add2::IfcCompositeCurveOnSurface::declaration() const { return *IFC4X3_ADD2_IfcCompositeCurveOnSurface_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCompositeCurveOnSurface::Class() { return *IFC4X3_ADD2_IfcCompositeCurveOnSurface_type; } +Ifc4x3_add2::IfcCompositeCurveOnSurface::IfcCompositeCurveOnSurface(IfcEntityInstanceData* e) : IfcCompositeCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCompositeCurveOnSurface_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCompositeCurveOnSurface::IfcCompositeCurveOnSurface(aggregate_of< ::Ifc4x3_add2::IfcSegment >::ptr v1_Segments, boost::logic::tribool v2_SelfIntersect) : IfcCompositeCurve((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCompositeCurveOnSurface_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Segments)->generalize());data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_SelfIntersect));data_->setArgument(1,attr);} } + +// Function implementations for IfcCompositeCurveSegment +bool Ifc4x3_add2::IfcCompositeCurveSegment::SameSense() const { bool v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcCompositeCurveSegment::setSameSense(bool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcCurve* Ifc4x3_add2::IfcCompositeCurveSegment::ParentCurve() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcCurve>(true); } +void Ifc4x3_add2::IfcCompositeCurveSegment::setParentCurve(::Ifc4x3_add2::IfcCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCompositeCurveSegment::declaration() const { return *IFC4X3_ADD2_IfcCompositeCurveSegment_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCompositeCurveSegment::Class() { return *IFC4X3_ADD2_IfcCompositeCurveSegment_type; } +Ifc4x3_add2::IfcCompositeCurveSegment::IfcCompositeCurveSegment(IfcEntityInstanceData* e) : IfcSegment((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCompositeCurveSegment_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCompositeCurveSegment::IfcCompositeCurveSegment(::Ifc4x3_add2::IfcTransitionCode::Value v1_Transition, bool v2_SameSense, ::Ifc4x3_add2::IfcCurve* v3_ParentCurve) : IfcSegment((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCompositeCurveSegment_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_Transition,::Ifc4x3_add2::IfcTransitionCode::ToString(v1_Transition))));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_SameSense));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_ParentCurve));data_->setArgument(2,attr);} } + +// Function implementations for IfcCompositeProfileDef +aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr Ifc4x3_add2::IfcCompositeProfileDef::Profiles() const { aggregate_of_instance::ptr es = *data_->getArgument(2); return es->as< ::Ifc4x3_add2::IfcProfileDef >(); } +void Ifc4x3_add2::IfcCompositeProfileDef::setProfiles(aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(2,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcCompositeProfileDef::Label() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } std::string v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcCompositeProfileDef::setLabel(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCompositeProfileDef::declaration() const { return *IFC4X3_ADD2_IfcCompositeProfileDef_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCompositeProfileDef::Class() { return *IFC4X3_ADD2_IfcCompositeProfileDef_type; } +Ifc4x3_add2::IfcCompositeProfileDef::IfcCompositeProfileDef(IfcEntityInstanceData* e) : IfcProfileDef((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCompositeProfileDef_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCompositeProfileDef::IfcCompositeProfileDef(::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr v3_Profiles, boost::optional< std::string > v4_Label) : IfcProfileDef((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCompositeProfileDef_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_ProfileType,::Ifc4x3_add2::IfcProfileTypeEnum::ToString(v1_ProfileType))));data_->setArgument(0,attr);} if (v2_ProfileName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ProfileName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Profiles)->generalize());data_->setArgument(2,attr);} if (v4_Label) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Label));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcCompressor +boost::optional< ::Ifc4x3_add2::IfcCompressorTypeEnum::Value > Ifc4x3_add2::IfcCompressor::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcCompressorTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcCompressor::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCompressorTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcCompressorTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCompressor::declaration() const { return *IFC4X3_ADD2_IfcCompressor_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCompressor::Class() { return *IFC4X3_ADD2_IfcCompressor_type; } +Ifc4x3_add2::IfcCompressor::IfcCompressor(IfcEntityInstanceData* e) : IfcFlowMovingDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCompressor_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCompressor::IfcCompressor(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCompressorTypeEnum::Value > v9_PredefinedType) : IfcFlowMovingDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCompressor_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcCompressorTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcCompressorType +::Ifc4x3_add2::IfcCompressorTypeEnum::Value Ifc4x3_add2::IfcCompressorType::PredefinedType() const { return ::Ifc4x3_add2::IfcCompressorTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcCompressorType::setPredefinedType(::Ifc4x3_add2::IfcCompressorTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcCompressorTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCompressorType::declaration() const { return *IFC4X3_ADD2_IfcCompressorType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCompressorType::Class() { return *IFC4X3_ADD2_IfcCompressorType_type; } +Ifc4x3_add2::IfcCompressorType::IfcCompressorType(IfcEntityInstanceData* e) : IfcFlowMovingDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCompressorType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCompressorType::IfcCompressorType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCompressorTypeEnum::Value v10_PredefinedType) : IfcFlowMovingDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCompressorType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcCompressorTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcCondenser +boost::optional< ::Ifc4x3_add2::IfcCondenserTypeEnum::Value > Ifc4x3_add2::IfcCondenser::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcCondenserTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcCondenser::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCondenserTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcCondenserTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCondenser::declaration() const { return *IFC4X3_ADD2_IfcCondenser_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCondenser::Class() { return *IFC4X3_ADD2_IfcCondenser_type; } +Ifc4x3_add2::IfcCondenser::IfcCondenser(IfcEntityInstanceData* e) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCondenser_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCondenser::IfcCondenser(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCondenserTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCondenser_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcCondenserTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcCondenserType +::Ifc4x3_add2::IfcCondenserTypeEnum::Value Ifc4x3_add2::IfcCondenserType::PredefinedType() const { return ::Ifc4x3_add2::IfcCondenserTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcCondenserType::setPredefinedType(::Ifc4x3_add2::IfcCondenserTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcCondenserTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCondenserType::declaration() const { return *IFC4X3_ADD2_IfcCondenserType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCondenserType::Class() { return *IFC4X3_ADD2_IfcCondenserType_type; } +Ifc4x3_add2::IfcCondenserType::IfcCondenserType(IfcEntityInstanceData* e) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCondenserType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCondenserType::IfcCondenserType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCondenserTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCondenserType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcCondenserTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcConic +::Ifc4x3_add2::IfcAxis2Placement* Ifc4x3_add2::IfcConic::Position() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcAxis2Placement>(true); } +void Ifc4x3_add2::IfcConic::setPosition(::Ifc4x3_add2::IfcAxis2Placement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcConic::declaration() const { return *IFC4X3_ADD2_IfcConic_type; } +const IfcParse::entity& Ifc4x3_add2::IfcConic::Class() { return *IFC4X3_ADD2_IfcConic_type; } +Ifc4x3_add2::IfcConic::IfcConic(IfcEntityInstanceData* e) : IfcCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcConic_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcConic::IfcConic(::Ifc4x3_add2::IfcAxis2Placement* v1_Position) : IfcCurve((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConic_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Position));data_->setArgument(0,attr);} } + +// Function implementations for IfcConnectedFaceSet +aggregate_of< ::Ifc4x3_add2::IfcFace >::ptr Ifc4x3_add2::IfcConnectedFaceSet::CfsFaces() const { aggregate_of_instance::ptr es = *data_->getArgument(0); return es->as< ::Ifc4x3_add2::IfcFace >(); } +void Ifc4x3_add2::IfcConnectedFaceSet::setCfsFaces(aggregate_of< ::Ifc4x3_add2::IfcFace >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcConnectedFaceSet::declaration() const { return *IFC4X3_ADD2_IfcConnectedFaceSet_type; } +const IfcParse::entity& Ifc4x3_add2::IfcConnectedFaceSet::Class() { return *IFC4X3_ADD2_IfcConnectedFaceSet_type; } +Ifc4x3_add2::IfcConnectedFaceSet::IfcConnectedFaceSet(IfcEntityInstanceData* e) : IfcTopologicalRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcConnectedFaceSet_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcConnectedFaceSet::IfcConnectedFaceSet(aggregate_of< ::Ifc4x3_add2::IfcFace >::ptr v1_CfsFaces) : IfcTopologicalRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConnectedFaceSet_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_CfsFaces)->generalize());data_->setArgument(0,attr);} } + +// Function implementations for IfcConnectionCurveGeometry +::Ifc4x3_add2::IfcCurveOrEdgeCurve* Ifc4x3_add2::IfcConnectionCurveGeometry::CurveOnRelatingElement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcCurveOrEdgeCurve>(true); } +void Ifc4x3_add2::IfcConnectionCurveGeometry::setCurveOnRelatingElement(::Ifc4x3_add2::IfcCurveOrEdgeCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcCurveOrEdgeCurve* Ifc4x3_add2::IfcConnectionCurveGeometry::CurveOnRelatedElement() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcCurveOrEdgeCurve>(true); } +void Ifc4x3_add2::IfcConnectionCurveGeometry::setCurveOnRelatedElement(::Ifc4x3_add2::IfcCurveOrEdgeCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcConnectionCurveGeometry::declaration() const { return *IFC4X3_ADD2_IfcConnectionCurveGeometry_type; } +const IfcParse::entity& Ifc4x3_add2::IfcConnectionCurveGeometry::Class() { return *IFC4X3_ADD2_IfcConnectionCurveGeometry_type; } +Ifc4x3_add2::IfcConnectionCurveGeometry::IfcConnectionCurveGeometry(IfcEntityInstanceData* e) : IfcConnectionGeometry((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcConnectionCurveGeometry_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcConnectionCurveGeometry::IfcConnectionCurveGeometry(::Ifc4x3_add2::IfcCurveOrEdgeCurve* v1_CurveOnRelatingElement, ::Ifc4x3_add2::IfcCurveOrEdgeCurve* v2_CurveOnRelatedElement) : IfcConnectionGeometry((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConnectionCurveGeometry_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_CurveOnRelatingElement));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_CurveOnRelatedElement));data_->setArgument(1,attr);} } + +// Function implementations for IfcConnectionGeometry + + +const IfcParse::entity& Ifc4x3_add2::IfcConnectionGeometry::declaration() const { return *IFC4X3_ADD2_IfcConnectionGeometry_type; } +const IfcParse::entity& Ifc4x3_add2::IfcConnectionGeometry::Class() { return *IFC4X3_ADD2_IfcConnectionGeometry_type; } +Ifc4x3_add2::IfcConnectionGeometry::IfcConnectionGeometry(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcConnectionGeometry_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcConnectionGeometry::IfcConnectionGeometry() : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConnectionGeometry_type); } + +// Function implementations for IfcConnectionPointEccentricity +boost::optional< double > Ifc4x3_add2::IfcConnectionPointEccentricity::EccentricityInX() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcConnectionPointEccentricity::setEccentricityInX(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< double > Ifc4x3_add2::IfcConnectionPointEccentricity::EccentricityInY() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcConnectionPointEccentricity::setEccentricityInY(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +boost::optional< double > Ifc4x3_add2::IfcConnectionPointEccentricity::EccentricityInZ() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcConnectionPointEccentricity::setEccentricityInZ(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcConnectionPointEccentricity::declaration() const { return *IFC4X3_ADD2_IfcConnectionPointEccentricity_type; } +const IfcParse::entity& Ifc4x3_add2::IfcConnectionPointEccentricity::Class() { return *IFC4X3_ADD2_IfcConnectionPointEccentricity_type; } +Ifc4x3_add2::IfcConnectionPointEccentricity::IfcConnectionPointEccentricity(IfcEntityInstanceData* e) : IfcConnectionPointGeometry((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcConnectionPointEccentricity_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcConnectionPointEccentricity::IfcConnectionPointEccentricity(::Ifc4x3_add2::IfcPointOrVertexPoint* v1_PointOnRelatingElement, ::Ifc4x3_add2::IfcPointOrVertexPoint* v2_PointOnRelatedElement, boost::optional< double > v3_EccentricityInX, boost::optional< double > v4_EccentricityInY, boost::optional< double > v5_EccentricityInZ) : IfcConnectionPointGeometry((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConnectionPointEccentricity_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_PointOnRelatingElement));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_PointOnRelatedElement));data_->setArgument(1,attr);} if (v3_EccentricityInX) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_EccentricityInX));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_EccentricityInY) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_EccentricityInY));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_EccentricityInZ) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_EccentricityInZ));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcConnectionPointGeometry +::Ifc4x3_add2::IfcPointOrVertexPoint* Ifc4x3_add2::IfcConnectionPointGeometry::PointOnRelatingElement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcPointOrVertexPoint>(true); } +void Ifc4x3_add2::IfcConnectionPointGeometry::setPointOnRelatingElement(::Ifc4x3_add2::IfcPointOrVertexPoint* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcPointOrVertexPoint* Ifc4x3_add2::IfcConnectionPointGeometry::PointOnRelatedElement() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcPointOrVertexPoint>(true); } +void Ifc4x3_add2::IfcConnectionPointGeometry::setPointOnRelatedElement(::Ifc4x3_add2::IfcPointOrVertexPoint* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcConnectionPointGeometry::declaration() const { return *IFC4X3_ADD2_IfcConnectionPointGeometry_type; } +const IfcParse::entity& Ifc4x3_add2::IfcConnectionPointGeometry::Class() { return *IFC4X3_ADD2_IfcConnectionPointGeometry_type; } +Ifc4x3_add2::IfcConnectionPointGeometry::IfcConnectionPointGeometry(IfcEntityInstanceData* e) : IfcConnectionGeometry((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcConnectionPointGeometry_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcConnectionPointGeometry::IfcConnectionPointGeometry(::Ifc4x3_add2::IfcPointOrVertexPoint* v1_PointOnRelatingElement, ::Ifc4x3_add2::IfcPointOrVertexPoint* v2_PointOnRelatedElement) : IfcConnectionGeometry((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConnectionPointGeometry_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_PointOnRelatingElement));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_PointOnRelatedElement));data_->setArgument(1,attr);} } + +// Function implementations for IfcConnectionSurfaceGeometry +::Ifc4x3_add2::IfcSurfaceOrFaceSurface* Ifc4x3_add2::IfcConnectionSurfaceGeometry::SurfaceOnRelatingElement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcSurfaceOrFaceSurface>(true); } +void Ifc4x3_add2::IfcConnectionSurfaceGeometry::setSurfaceOnRelatingElement(::Ifc4x3_add2::IfcSurfaceOrFaceSurface* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcSurfaceOrFaceSurface* Ifc4x3_add2::IfcConnectionSurfaceGeometry::SurfaceOnRelatedElement() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcSurfaceOrFaceSurface>(true); } +void Ifc4x3_add2::IfcConnectionSurfaceGeometry::setSurfaceOnRelatedElement(::Ifc4x3_add2::IfcSurfaceOrFaceSurface* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcConnectionSurfaceGeometry::declaration() const { return *IFC4X3_ADD2_IfcConnectionSurfaceGeometry_type; } +const IfcParse::entity& Ifc4x3_add2::IfcConnectionSurfaceGeometry::Class() { return *IFC4X3_ADD2_IfcConnectionSurfaceGeometry_type; } +Ifc4x3_add2::IfcConnectionSurfaceGeometry::IfcConnectionSurfaceGeometry(IfcEntityInstanceData* e) : IfcConnectionGeometry((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcConnectionSurfaceGeometry_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcConnectionSurfaceGeometry::IfcConnectionSurfaceGeometry(::Ifc4x3_add2::IfcSurfaceOrFaceSurface* v1_SurfaceOnRelatingElement, ::Ifc4x3_add2::IfcSurfaceOrFaceSurface* v2_SurfaceOnRelatedElement) : IfcConnectionGeometry((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConnectionSurfaceGeometry_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_SurfaceOnRelatingElement));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_SurfaceOnRelatedElement));data_->setArgument(1,attr);} } + +// Function implementations for IfcConnectionVolumeGeometry +::Ifc4x3_add2::IfcSolidOrShell* Ifc4x3_add2::IfcConnectionVolumeGeometry::VolumeOnRelatingElement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcSolidOrShell>(true); } +void Ifc4x3_add2::IfcConnectionVolumeGeometry::setVolumeOnRelatingElement(::Ifc4x3_add2::IfcSolidOrShell* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcSolidOrShell* Ifc4x3_add2::IfcConnectionVolumeGeometry::VolumeOnRelatedElement() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcSolidOrShell>(true); } +void Ifc4x3_add2::IfcConnectionVolumeGeometry::setVolumeOnRelatedElement(::Ifc4x3_add2::IfcSolidOrShell* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcConnectionVolumeGeometry::declaration() const { return *IFC4X3_ADD2_IfcConnectionVolumeGeometry_type; } +const IfcParse::entity& Ifc4x3_add2::IfcConnectionVolumeGeometry::Class() { return *IFC4X3_ADD2_IfcConnectionVolumeGeometry_type; } +Ifc4x3_add2::IfcConnectionVolumeGeometry::IfcConnectionVolumeGeometry(IfcEntityInstanceData* e) : IfcConnectionGeometry((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcConnectionVolumeGeometry_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcConnectionVolumeGeometry::IfcConnectionVolumeGeometry(::Ifc4x3_add2::IfcSolidOrShell* v1_VolumeOnRelatingElement, ::Ifc4x3_add2::IfcSolidOrShell* v2_VolumeOnRelatedElement) : IfcConnectionGeometry((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConnectionVolumeGeometry_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_VolumeOnRelatingElement));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_VolumeOnRelatedElement));data_->setArgument(1,attr);} } + +// Function implementations for IfcConstraint +std::string Ifc4x3_add2::IfcConstraint::Name() const { std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcConstraint::setName(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcConstraint::Description() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcConstraint::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcConstraintEnum::Value Ifc4x3_add2::IfcConstraint::ConstraintGrade() const { return ::Ifc4x3_add2::IfcConstraintEnum::FromString(*data_->getArgument(2)); } +void Ifc4x3_add2::IfcConstraint::setConstraintGrade(::Ifc4x3_add2::IfcConstraintEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcConstraintEnum::ToString(v)));data_->setArgument(2,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcConstraint::ConstraintSource() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } std::string v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcConstraint::setConstraintSource(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +::Ifc4x3_add2::IfcActorSelect* Ifc4x3_add2::IfcConstraint::CreatingActor() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcActorSelect>(true); } +void Ifc4x3_add2::IfcConstraint::setCreatingActor(::Ifc4x3_add2::IfcActorSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcConstraint::CreationTime() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcConstraint::setCreationTime(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcConstraint::UserDefinedGrade() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } std::string v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcConstraint::setUserDefinedGrade(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } + +::Ifc4x3_add2::IfcExternalReferenceRelationship::list::ptr Ifc4x3_add2::IfcConstraint::HasExternalReferences() const { return data_->getInverse(IFC4X3_ADD2_IfcExternalReferenceRelationship_type, 3)->as(); } +::Ifc4x3_add2::IfcResourceConstraintRelationship::list::ptr Ifc4x3_add2::IfcConstraint::PropertiesForConstraint() const { return data_->getInverse(IFC4X3_ADD2_IfcResourceConstraintRelationship_type, 2)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcConstraint::declaration() const { return *IFC4X3_ADD2_IfcConstraint_type; } +const IfcParse::entity& Ifc4x3_add2::IfcConstraint::Class() { return *IFC4X3_ADD2_IfcConstraint_type; } +Ifc4x3_add2::IfcConstraint::IfcConstraint(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcConstraint_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcConstraint::IfcConstraint(std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcConstraintEnum::Value v3_ConstraintGrade, boost::optional< std::string > v4_ConstraintSource, ::Ifc4x3_add2::IfcActorSelect* v5_CreatingActor, boost::optional< std::string > v6_CreationTime, boost::optional< std::string > v7_UserDefinedGrade) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConstraint_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v3_ConstraintGrade,::Ifc4x3_add2::IfcConstraintEnum::ToString(v3_ConstraintGrade))));data_->setArgument(2,attr);} if (v4_ConstraintSource) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_ConstraintSource));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_CreatingActor));data_->setArgument(4,attr);} if (v6_CreationTime) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_CreationTime));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_UserDefinedGrade) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_UserDefinedGrade));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } } + +// Function implementations for IfcConstructionEquipmentResource +boost::optional< ::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::Value > Ifc4x3_add2::IfcConstructionEquipmentResource::PredefinedType() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::FromString(*data_->getArgument(10)); } +void Ifc4x3_add2::IfcConstructionEquipmentResource::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::ToString(*v)));}data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcConstructionEquipmentResource::declaration() const { return *IFC4X3_ADD2_IfcConstructionEquipmentResource_type; } +const IfcParse::entity& Ifc4x3_add2::IfcConstructionEquipmentResource::Class() { return *IFC4X3_ADD2_IfcConstructionEquipmentResource_type; } +Ifc4x3_add2::IfcConstructionEquipmentResource::IfcConstructionEquipmentResource(IfcEntityInstanceData* e) : IfcConstructionResource((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcConstructionEquipmentResource_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcConstructionEquipmentResource::IfcConstructionEquipmentResource(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, ::Ifc4x3_add2::IfcResourceTime* v8_Usage, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v9_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v10_BaseQuantity, boost::optional< ::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::Value > v11_PredefinedType) : IfcConstructionResource((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConstructionEquipmentResource_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Identification));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_LongDescription));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_Usage));data_->setArgument(7,attr);} if (v9_BaseCosts) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_BaseCosts)->generalize());data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v10_BaseQuantity));data_->setArgument(9,attr);} if (v11_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v11_PredefinedType,::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::ToString(*v11_PredefinedType))));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } } + +// Function implementations for IfcConstructionEquipmentResourceType +::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::Value Ifc4x3_add2::IfcConstructionEquipmentResourceType::PredefinedType() const { return ::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::FromString(*data_->getArgument(11)); } +void Ifc4x3_add2::IfcConstructionEquipmentResourceType::setPredefinedType(::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::ToString(v)));data_->setArgument(11,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcConstructionEquipmentResourceType::declaration() const { return *IFC4X3_ADD2_IfcConstructionEquipmentResourceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcConstructionEquipmentResourceType::Class() { return *IFC4X3_ADD2_IfcConstructionEquipmentResourceType_type; } +Ifc4x3_add2::IfcConstructionEquipmentResourceType::IfcConstructionEquipmentResourceType(IfcEntityInstanceData* e) : IfcConstructionResourceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcConstructionEquipmentResourceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcConstructionEquipmentResourceType::IfcConstructionEquipmentResourceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ResourceType, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v10_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v11_BaseQuantity, ::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::Value v12_PredefinedType) : IfcConstructionResourceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConstructionEquipmentResourceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_Identification));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongDescription));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ResourceType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ResourceType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_BaseCosts) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_BaseCosts)->generalize());data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v11_BaseQuantity));data_->setArgument(10,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v12_PredefinedType,::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::ToString(v12_PredefinedType))));data_->setArgument(11,attr);} } + +// Function implementations for IfcConstructionMaterialResource +boost::optional< ::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::Value > Ifc4x3_add2::IfcConstructionMaterialResource::PredefinedType() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::FromString(*data_->getArgument(10)); } +void Ifc4x3_add2::IfcConstructionMaterialResource::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::ToString(*v)));}data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcConstructionMaterialResource::declaration() const { return *IFC4X3_ADD2_IfcConstructionMaterialResource_type; } +const IfcParse::entity& Ifc4x3_add2::IfcConstructionMaterialResource::Class() { return *IFC4X3_ADD2_IfcConstructionMaterialResource_type; } +Ifc4x3_add2::IfcConstructionMaterialResource::IfcConstructionMaterialResource(IfcEntityInstanceData* e) : IfcConstructionResource((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcConstructionMaterialResource_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcConstructionMaterialResource::IfcConstructionMaterialResource(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, ::Ifc4x3_add2::IfcResourceTime* v8_Usage, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v9_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v10_BaseQuantity, boost::optional< ::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::Value > v11_PredefinedType) : IfcConstructionResource((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConstructionMaterialResource_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Identification));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_LongDescription));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_Usage));data_->setArgument(7,attr);} if (v9_BaseCosts) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_BaseCosts)->generalize());data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v10_BaseQuantity));data_->setArgument(9,attr);} if (v11_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v11_PredefinedType,::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::ToString(*v11_PredefinedType))));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } } + +// Function implementations for IfcConstructionMaterialResourceType +::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::Value Ifc4x3_add2::IfcConstructionMaterialResourceType::PredefinedType() const { return ::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::FromString(*data_->getArgument(11)); } +void Ifc4x3_add2::IfcConstructionMaterialResourceType::setPredefinedType(::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::ToString(v)));data_->setArgument(11,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcConstructionMaterialResourceType::declaration() const { return *IFC4X3_ADD2_IfcConstructionMaterialResourceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcConstructionMaterialResourceType::Class() { return *IFC4X3_ADD2_IfcConstructionMaterialResourceType_type; } +Ifc4x3_add2::IfcConstructionMaterialResourceType::IfcConstructionMaterialResourceType(IfcEntityInstanceData* e) : IfcConstructionResourceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcConstructionMaterialResourceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcConstructionMaterialResourceType::IfcConstructionMaterialResourceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ResourceType, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v10_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v11_BaseQuantity, ::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::Value v12_PredefinedType) : IfcConstructionResourceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConstructionMaterialResourceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_Identification));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongDescription));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ResourceType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ResourceType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_BaseCosts) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_BaseCosts)->generalize());data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v11_BaseQuantity));data_->setArgument(10,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v12_PredefinedType,::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::ToString(v12_PredefinedType))));data_->setArgument(11,attr);} } + +// Function implementations for IfcConstructionProductResource +boost::optional< ::Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::Value > Ifc4x3_add2::IfcConstructionProductResource::PredefinedType() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::FromString(*data_->getArgument(10)); } +void Ifc4x3_add2::IfcConstructionProductResource::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::ToString(*v)));}data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcConstructionProductResource::declaration() const { return *IFC4X3_ADD2_IfcConstructionProductResource_type; } +const IfcParse::entity& Ifc4x3_add2::IfcConstructionProductResource::Class() { return *IFC4X3_ADD2_IfcConstructionProductResource_type; } +Ifc4x3_add2::IfcConstructionProductResource::IfcConstructionProductResource(IfcEntityInstanceData* e) : IfcConstructionResource((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcConstructionProductResource_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcConstructionProductResource::IfcConstructionProductResource(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, ::Ifc4x3_add2::IfcResourceTime* v8_Usage, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v9_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v10_BaseQuantity, boost::optional< ::Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::Value > v11_PredefinedType) : IfcConstructionResource((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConstructionProductResource_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Identification));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_LongDescription));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_Usage));data_->setArgument(7,attr);} if (v9_BaseCosts) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_BaseCosts)->generalize());data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v10_BaseQuantity));data_->setArgument(9,attr);} if (v11_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v11_PredefinedType,::Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::ToString(*v11_PredefinedType))));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } } + +// Function implementations for IfcConstructionProductResourceType +::Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::Value Ifc4x3_add2::IfcConstructionProductResourceType::PredefinedType() const { return ::Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::FromString(*data_->getArgument(11)); } +void Ifc4x3_add2::IfcConstructionProductResourceType::setPredefinedType(::Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::ToString(v)));data_->setArgument(11,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcConstructionProductResourceType::declaration() const { return *IFC4X3_ADD2_IfcConstructionProductResourceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcConstructionProductResourceType::Class() { return *IFC4X3_ADD2_IfcConstructionProductResourceType_type; } +Ifc4x3_add2::IfcConstructionProductResourceType::IfcConstructionProductResourceType(IfcEntityInstanceData* e) : IfcConstructionResourceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcConstructionProductResourceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcConstructionProductResourceType::IfcConstructionProductResourceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ResourceType, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v10_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v11_BaseQuantity, ::Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::Value v12_PredefinedType) : IfcConstructionResourceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConstructionProductResourceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_Identification));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongDescription));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ResourceType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ResourceType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_BaseCosts) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_BaseCosts)->generalize());data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v11_BaseQuantity));data_->setArgument(10,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v12_PredefinedType,::Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::ToString(v12_PredefinedType))));data_->setArgument(11,attr);} } + +// Function implementations for IfcConstructionResource +::Ifc4x3_add2::IfcResourceTime* Ifc4x3_add2::IfcConstructionResource::Usage() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(7)))->as<::Ifc4x3_add2::IfcResourceTime>(true); } +void Ifc4x3_add2::IfcConstructionResource::setUsage(::Ifc4x3_add2::IfcResourceTime* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(7,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > Ifc4x3_add2::IfcConstructionResource::BaseCosts() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(8); return es->as< ::Ifc4x3_add2::IfcAppliedValue >(); } +void Ifc4x3_add2::IfcConstructionResource::setBaseCosts(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(8,attr);} } +::Ifc4x3_add2::IfcPhysicalQuantity* Ifc4x3_add2::IfcConstructionResource::BaseQuantity() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(9)))->as<::Ifc4x3_add2::IfcPhysicalQuantity>(true); } +void Ifc4x3_add2::IfcConstructionResource::setBaseQuantity(::Ifc4x3_add2::IfcPhysicalQuantity* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcConstructionResource::declaration() const { return *IFC4X3_ADD2_IfcConstructionResource_type; } +const IfcParse::entity& Ifc4x3_add2::IfcConstructionResource::Class() { return *IFC4X3_ADD2_IfcConstructionResource_type; } +Ifc4x3_add2::IfcConstructionResource::IfcConstructionResource(IfcEntityInstanceData* e) : IfcResource((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcConstructionResource_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcConstructionResource::IfcConstructionResource(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, ::Ifc4x3_add2::IfcResourceTime* v8_Usage, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v9_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v10_BaseQuantity) : IfcResource((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConstructionResource_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Identification));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_LongDescription));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_Usage));data_->setArgument(7,attr);} if (v9_BaseCosts) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_BaseCosts)->generalize());data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v10_BaseQuantity));data_->setArgument(9,attr);} } + +// Function implementations for IfcConstructionResourceType +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > Ifc4x3_add2::IfcConstructionResourceType::BaseCosts() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(9); return es->as< ::Ifc4x3_add2::IfcAppliedValue >(); } +void Ifc4x3_add2::IfcConstructionResourceType::setBaseCosts(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(9,attr);} } +::Ifc4x3_add2::IfcPhysicalQuantity* Ifc4x3_add2::IfcConstructionResourceType::BaseQuantity() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(10)))->as<::Ifc4x3_add2::IfcPhysicalQuantity>(true); } +void Ifc4x3_add2::IfcConstructionResourceType::setBaseQuantity(::Ifc4x3_add2::IfcPhysicalQuantity* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcConstructionResourceType::declaration() const { return *IFC4X3_ADD2_IfcConstructionResourceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcConstructionResourceType::Class() { return *IFC4X3_ADD2_IfcConstructionResourceType_type; } +Ifc4x3_add2::IfcConstructionResourceType::IfcConstructionResourceType(IfcEntityInstanceData* e) : IfcTypeResource((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcConstructionResourceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcConstructionResourceType::IfcConstructionResourceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ResourceType, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v10_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v11_BaseQuantity) : IfcTypeResource((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConstructionResourceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_Identification));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongDescription));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ResourceType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ResourceType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_BaseCosts) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_BaseCosts)->generalize());data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v11_BaseQuantity));data_->setArgument(10,attr);} } + +// Function implementations for IfcContext +boost::optional< std::string > Ifc4x3_add2::IfcContext::ObjectType() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcContext::setObjectType(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcContext::LongName() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcContext::setLongName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcContext::Phase() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } std::string v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcContext::setPhase(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationContext >::ptr > Ifc4x3_add2::IfcContext::RepresentationContexts() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(7); return es->as< ::Ifc4x3_add2::IfcRepresentationContext >(); } +void Ifc4x3_add2::IfcContext::setRepresentationContexts(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationContext >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(7,attr);} } +::Ifc4x3_add2::IfcUnitAssignment* Ifc4x3_add2::IfcContext::UnitsInContext() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(8)))->as<::Ifc4x3_add2::IfcUnitAssignment>(true); } +void Ifc4x3_add2::IfcContext::setUnitsInContext(::Ifc4x3_add2::IfcUnitAssignment* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(8,attr);} } + +::Ifc4x3_add2::IfcRelDefinesByProperties::list::ptr Ifc4x3_add2::IfcContext::IsDefinedBy() const { return data_->getInverse(IFC4X3_ADD2_IfcRelDefinesByProperties_type, 4)->as(); } +::Ifc4x3_add2::IfcRelDeclares::list::ptr Ifc4x3_add2::IfcContext::Declares() const { return data_->getInverse(IFC4X3_ADD2_IfcRelDeclares_type, 4)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcContext::declaration() const { return *IFC4X3_ADD2_IfcContext_type; } +const IfcParse::entity& Ifc4x3_add2::IfcContext::Class() { return *IFC4X3_ADD2_IfcContext_type; } +Ifc4x3_add2::IfcContext::IfcContext(IfcEntityInstanceData* e) : IfcObjectDefinition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcContext_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcContext::IfcContext(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_LongName, boost::optional< std::string > v7_Phase, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationContext >::ptr > v8_RepresentationContexts, ::Ifc4x3_add2::IfcUnitAssignment* v9_UnitsInContext) : IfcObjectDefinition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcContext_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_LongName));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_Phase) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_Phase));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_RepresentationContexts) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_RepresentationContexts)->generalize());data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_UnitsInContext));data_->setArgument(8,attr);} } + +// Function implementations for IfcContextDependentUnit +std::string Ifc4x3_add2::IfcContextDependentUnit::Name() const { std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcContextDependentUnit::setName(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + +::Ifc4x3_add2::IfcExternalReferenceRelationship::list::ptr Ifc4x3_add2::IfcContextDependentUnit::HasExternalReference() const { return data_->getInverse(IFC4X3_ADD2_IfcExternalReferenceRelationship_type, 3)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcContextDependentUnit::declaration() const { return *IFC4X3_ADD2_IfcContextDependentUnit_type; } +const IfcParse::entity& Ifc4x3_add2::IfcContextDependentUnit::Class() { return *IFC4X3_ADD2_IfcContextDependentUnit_type; } +Ifc4x3_add2::IfcContextDependentUnit::IfcContextDependentUnit(IfcEntityInstanceData* e) : IfcNamedUnit((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcContextDependentUnit_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcContextDependentUnit::IfcContextDependentUnit(::Ifc4x3_add2::IfcDimensionalExponents* v1_Dimensions, ::Ifc4x3_add2::IfcUnitEnum::Value v2_UnitType, std::string v3_Name) : IfcNamedUnit((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcContextDependentUnit_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Dimensions));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v2_UnitType,::Ifc4x3_add2::IfcUnitEnum::ToString(v2_UnitType))));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Name));data_->setArgument(2,attr);} } + +// Function implementations for IfcControl +boost::optional< std::string > Ifc4x3_add2::IfcControl::Identification() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcControl::setIdentification(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } + +::Ifc4x3_add2::IfcRelAssignsToControl::list::ptr Ifc4x3_add2::IfcControl::Controls() const { return data_->getInverse(IFC4X3_ADD2_IfcRelAssignsToControl_type, 6)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcControl::declaration() const { return *IFC4X3_ADD2_IfcControl_type; } +const IfcParse::entity& Ifc4x3_add2::IfcControl::Class() { return *IFC4X3_ADD2_IfcControl_type; } +Ifc4x3_add2::IfcControl::IfcControl(IfcEntityInstanceData* e) : IfcObject((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcControl_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcControl::IfcControl(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification) : IfcObject((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcControl_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Identification));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } } + +// Function implementations for IfcController +boost::optional< ::Ifc4x3_add2::IfcControllerTypeEnum::Value > Ifc4x3_add2::IfcController::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcControllerTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcController::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcControllerTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcControllerTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcController::declaration() const { return *IFC4X3_ADD2_IfcController_type; } +const IfcParse::entity& Ifc4x3_add2::IfcController::Class() { return *IFC4X3_ADD2_IfcController_type; } +Ifc4x3_add2::IfcController::IfcController(IfcEntityInstanceData* e) : IfcDistributionControlElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcController_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcController::IfcController(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcControllerTypeEnum::Value > v9_PredefinedType) : IfcDistributionControlElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcController_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcControllerTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcControllerType +::Ifc4x3_add2::IfcControllerTypeEnum::Value Ifc4x3_add2::IfcControllerType::PredefinedType() const { return ::Ifc4x3_add2::IfcControllerTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcControllerType::setPredefinedType(::Ifc4x3_add2::IfcControllerTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcControllerTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcControllerType::declaration() const { return *IFC4X3_ADD2_IfcControllerType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcControllerType::Class() { return *IFC4X3_ADD2_IfcControllerType_type; } +Ifc4x3_add2::IfcControllerType::IfcControllerType(IfcEntityInstanceData* e) : IfcDistributionControlElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcControllerType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcControllerType::IfcControllerType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcControllerTypeEnum::Value v10_PredefinedType) : IfcDistributionControlElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcControllerType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcControllerTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcConversionBasedUnit +std::string Ifc4x3_add2::IfcConversionBasedUnit::Name() const { std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcConversionBasedUnit::setName(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcMeasureWithUnit* Ifc4x3_add2::IfcConversionBasedUnit::ConversionFactor() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcMeasureWithUnit>(true); } +void Ifc4x3_add2::IfcConversionBasedUnit::setConversionFactor(::Ifc4x3_add2::IfcMeasureWithUnit* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + +::Ifc4x3_add2::IfcExternalReferenceRelationship::list::ptr Ifc4x3_add2::IfcConversionBasedUnit::HasExternalReference() const { return data_->getInverse(IFC4X3_ADD2_IfcExternalReferenceRelationship_type, 3)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcConversionBasedUnit::declaration() const { return *IFC4X3_ADD2_IfcConversionBasedUnit_type; } +const IfcParse::entity& Ifc4x3_add2::IfcConversionBasedUnit::Class() { return *IFC4X3_ADD2_IfcConversionBasedUnit_type; } +Ifc4x3_add2::IfcConversionBasedUnit::IfcConversionBasedUnit(IfcEntityInstanceData* e) : IfcNamedUnit((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcConversionBasedUnit_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcConversionBasedUnit::IfcConversionBasedUnit(::Ifc4x3_add2::IfcDimensionalExponents* v1_Dimensions, ::Ifc4x3_add2::IfcUnitEnum::Value v2_UnitType, std::string v3_Name, ::Ifc4x3_add2::IfcMeasureWithUnit* v4_ConversionFactor) : IfcNamedUnit((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConversionBasedUnit_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Dimensions));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v2_UnitType,::Ifc4x3_add2::IfcUnitEnum::ToString(v2_UnitType))));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Name));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_ConversionFactor));data_->setArgument(3,attr);} } + +// Function implementations for IfcConversionBasedUnitWithOffset +double Ifc4x3_add2::IfcConversionBasedUnitWithOffset::ConversionOffset() const { double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcConversionBasedUnitWithOffset::setConversionOffset(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcConversionBasedUnitWithOffset::declaration() const { return *IFC4X3_ADD2_IfcConversionBasedUnitWithOffset_type; } +const IfcParse::entity& Ifc4x3_add2::IfcConversionBasedUnitWithOffset::Class() { return *IFC4X3_ADD2_IfcConversionBasedUnitWithOffset_type; } +Ifc4x3_add2::IfcConversionBasedUnitWithOffset::IfcConversionBasedUnitWithOffset(IfcEntityInstanceData* e) : IfcConversionBasedUnit((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcConversionBasedUnitWithOffset_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcConversionBasedUnitWithOffset::IfcConversionBasedUnitWithOffset(::Ifc4x3_add2::IfcDimensionalExponents* v1_Dimensions, ::Ifc4x3_add2::IfcUnitEnum::Value v2_UnitType, std::string v3_Name, ::Ifc4x3_add2::IfcMeasureWithUnit* v4_ConversionFactor, double v5_ConversionOffset) : IfcConversionBasedUnit((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConversionBasedUnitWithOffset_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Dimensions));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v2_UnitType,::Ifc4x3_add2::IfcUnitEnum::ToString(v2_UnitType))));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Name));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_ConversionFactor));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_ConversionOffset));data_->setArgument(4,attr);} } + +// Function implementations for IfcConveyorSegment +boost::optional< ::Ifc4x3_add2::IfcConveyorSegmentTypeEnum::Value > Ifc4x3_add2::IfcConveyorSegment::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcConveyorSegmentTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcConveyorSegment::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcConveyorSegmentTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcConveyorSegmentTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcConveyorSegment::declaration() const { return *IFC4X3_ADD2_IfcConveyorSegment_type; } +const IfcParse::entity& Ifc4x3_add2::IfcConveyorSegment::Class() { return *IFC4X3_ADD2_IfcConveyorSegment_type; } +Ifc4x3_add2::IfcConveyorSegment::IfcConveyorSegment(IfcEntityInstanceData* e) : IfcFlowSegment((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcConveyorSegment_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcConveyorSegment::IfcConveyorSegment(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcConveyorSegmentTypeEnum::Value > v9_PredefinedType) : IfcFlowSegment((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConveyorSegment_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcConveyorSegmentTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcConveyorSegmentType +::Ifc4x3_add2::IfcConveyorSegmentTypeEnum::Value Ifc4x3_add2::IfcConveyorSegmentType::PredefinedType() const { return ::Ifc4x3_add2::IfcConveyorSegmentTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcConveyorSegmentType::setPredefinedType(::Ifc4x3_add2::IfcConveyorSegmentTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcConveyorSegmentTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcConveyorSegmentType::declaration() const { return *IFC4X3_ADD2_IfcConveyorSegmentType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcConveyorSegmentType::Class() { return *IFC4X3_ADD2_IfcConveyorSegmentType_type; } +Ifc4x3_add2::IfcConveyorSegmentType::IfcConveyorSegmentType(IfcEntityInstanceData* e) : IfcFlowSegmentType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcConveyorSegmentType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcConveyorSegmentType::IfcConveyorSegmentType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcConveyorSegmentTypeEnum::Value v10_PredefinedType) : IfcFlowSegmentType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcConveyorSegmentType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcConveyorSegmentTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcCooledBeam +boost::optional< ::Ifc4x3_add2::IfcCooledBeamTypeEnum::Value > Ifc4x3_add2::IfcCooledBeam::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcCooledBeamTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcCooledBeam::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCooledBeamTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcCooledBeamTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCooledBeam::declaration() const { return *IFC4X3_ADD2_IfcCooledBeam_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCooledBeam::Class() { return *IFC4X3_ADD2_IfcCooledBeam_type; } +Ifc4x3_add2::IfcCooledBeam::IfcCooledBeam(IfcEntityInstanceData* e) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCooledBeam_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCooledBeam::IfcCooledBeam(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCooledBeamTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCooledBeam_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcCooledBeamTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcCooledBeamType +::Ifc4x3_add2::IfcCooledBeamTypeEnum::Value Ifc4x3_add2::IfcCooledBeamType::PredefinedType() const { return ::Ifc4x3_add2::IfcCooledBeamTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcCooledBeamType::setPredefinedType(::Ifc4x3_add2::IfcCooledBeamTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcCooledBeamTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCooledBeamType::declaration() const { return *IFC4X3_ADD2_IfcCooledBeamType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCooledBeamType::Class() { return *IFC4X3_ADD2_IfcCooledBeamType_type; } +Ifc4x3_add2::IfcCooledBeamType::IfcCooledBeamType(IfcEntityInstanceData* e) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCooledBeamType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCooledBeamType::IfcCooledBeamType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCooledBeamTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCooledBeamType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcCooledBeamTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcCoolingTower +boost::optional< ::Ifc4x3_add2::IfcCoolingTowerTypeEnum::Value > Ifc4x3_add2::IfcCoolingTower::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcCoolingTowerTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcCoolingTower::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCoolingTowerTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcCoolingTowerTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCoolingTower::declaration() const { return *IFC4X3_ADD2_IfcCoolingTower_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCoolingTower::Class() { return *IFC4X3_ADD2_IfcCoolingTower_type; } +Ifc4x3_add2::IfcCoolingTower::IfcCoolingTower(IfcEntityInstanceData* e) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCoolingTower_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCoolingTower::IfcCoolingTower(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCoolingTowerTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCoolingTower_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcCoolingTowerTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcCoolingTowerType +::Ifc4x3_add2::IfcCoolingTowerTypeEnum::Value Ifc4x3_add2::IfcCoolingTowerType::PredefinedType() const { return ::Ifc4x3_add2::IfcCoolingTowerTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcCoolingTowerType::setPredefinedType(::Ifc4x3_add2::IfcCoolingTowerTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcCoolingTowerTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCoolingTowerType::declaration() const { return *IFC4X3_ADD2_IfcCoolingTowerType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCoolingTowerType::Class() { return *IFC4X3_ADD2_IfcCoolingTowerType_type; } +Ifc4x3_add2::IfcCoolingTowerType::IfcCoolingTowerType(IfcEntityInstanceData* e) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCoolingTowerType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCoolingTowerType::IfcCoolingTowerType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCoolingTowerTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCoolingTowerType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcCoolingTowerTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcCoordinateOperation +::Ifc4x3_add2::IfcCoordinateReferenceSystemSelect* Ifc4x3_add2::IfcCoordinateOperation::SourceCRS() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcCoordinateReferenceSystemSelect>(true); } +void Ifc4x3_add2::IfcCoordinateOperation::setSourceCRS(::Ifc4x3_add2::IfcCoordinateReferenceSystemSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcCoordinateReferenceSystem* Ifc4x3_add2::IfcCoordinateOperation::TargetCRS() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcCoordinateReferenceSystem>(true); } +void Ifc4x3_add2::IfcCoordinateOperation::setTargetCRS(::Ifc4x3_add2::IfcCoordinateReferenceSystem* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCoordinateOperation::declaration() const { return *IFC4X3_ADD2_IfcCoordinateOperation_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCoordinateOperation::Class() { return *IFC4X3_ADD2_IfcCoordinateOperation_type; } +Ifc4x3_add2::IfcCoordinateOperation::IfcCoordinateOperation(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCoordinateOperation_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCoordinateOperation::IfcCoordinateOperation(::Ifc4x3_add2::IfcCoordinateReferenceSystemSelect* v1_SourceCRS, ::Ifc4x3_add2::IfcCoordinateReferenceSystem* v2_TargetCRS) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCoordinateOperation_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_SourceCRS));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_TargetCRS));data_->setArgument(1,attr);} } + +// Function implementations for IfcCoordinateReferenceSystem +boost::optional< std::string > Ifc4x3_add2::IfcCoordinateReferenceSystem::Name() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcCoordinateReferenceSystem::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcCoordinateReferenceSystem::Description() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcCoordinateReferenceSystem::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcCoordinateReferenceSystem::GeodeticDatum() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcCoordinateReferenceSystem::setGeodeticDatum(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } + +::Ifc4x3_add2::IfcCoordinateOperation::list::ptr Ifc4x3_add2::IfcCoordinateReferenceSystem::HasCoordinateOperation() const { return data_->getInverse(IFC4X3_ADD2_IfcCoordinateOperation_type, 0)->as(); } +::Ifc4x3_add2::IfcWellKnownText::list::ptr Ifc4x3_add2::IfcCoordinateReferenceSystem::WellKnownText() const { return data_->getInverse(IFC4X3_ADD2_IfcWellKnownText_type, 1)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcCoordinateReferenceSystem::declaration() const { return *IFC4X3_ADD2_IfcCoordinateReferenceSystem_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCoordinateReferenceSystem::Class() { return *IFC4X3_ADD2_IfcCoordinateReferenceSystem_type; } +Ifc4x3_add2::IfcCoordinateReferenceSystem::IfcCoordinateReferenceSystem(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCoordinateReferenceSystem_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCoordinateReferenceSystem::IfcCoordinateReferenceSystem(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, boost::optional< std::string > v3_GeodeticDatum) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCoordinateReferenceSystem_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_GeodeticDatum) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_GeodeticDatum));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } } + +// Function implementations for IfcCosineSpiral +double Ifc4x3_add2::IfcCosineSpiral::CosineTerm() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcCosineSpiral::setCosineTerm(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +boost::optional< double > Ifc4x3_add2::IfcCosineSpiral::ConstantTerm() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcCosineSpiral::setConstantTerm(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCosineSpiral::declaration() const { return *IFC4X3_ADD2_IfcCosineSpiral_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCosineSpiral::Class() { return *IFC4X3_ADD2_IfcCosineSpiral_type; } +Ifc4x3_add2::IfcCosineSpiral::IfcCosineSpiral(IfcEntityInstanceData* e) : IfcSpiral((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCosineSpiral_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCosineSpiral::IfcCosineSpiral(::Ifc4x3_add2::IfcAxis2Placement* v1_Position, double v2_CosineTerm, boost::optional< double > v3_ConstantTerm) : IfcSpiral((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCosineSpiral_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Position));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_CosineTerm));data_->setArgument(1,attr);} if (v3_ConstantTerm) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_ConstantTerm));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } } + +// Function implementations for IfcCostItem +boost::optional< ::Ifc4x3_add2::IfcCostItemTypeEnum::Value > Ifc4x3_add2::IfcCostItem::PredefinedType() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcCostItemTypeEnum::FromString(*data_->getArgument(6)); } +void Ifc4x3_add2::IfcCostItem::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCostItemTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcCostItemTypeEnum::ToString(*v)));}data_->setArgument(6,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcCostValue >::ptr > Ifc4x3_add2::IfcCostItem::CostValues() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(7); return es->as< ::Ifc4x3_add2::IfcCostValue >(); } +void Ifc4x3_add2::IfcCostItem::setCostValues(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcCostValue >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(7,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPhysicalQuantity >::ptr > Ifc4x3_add2::IfcCostItem::CostQuantities() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(8); return es->as< ::Ifc4x3_add2::IfcPhysicalQuantity >(); } +void Ifc4x3_add2::IfcCostItem::setCostQuantities(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPhysicalQuantity >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCostItem::declaration() const { return *IFC4X3_ADD2_IfcCostItem_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCostItem::Class() { return *IFC4X3_ADD2_IfcCostItem_type; } +Ifc4x3_add2::IfcCostItem::IfcCostItem(IfcEntityInstanceData* e) : IfcControl((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCostItem_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCostItem::IfcCostItem(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< ::Ifc4x3_add2::IfcCostItemTypeEnum::Value > v7_PredefinedType, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcCostValue >::ptr > v8_CostValues, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPhysicalQuantity >::ptr > v9_CostQuantities) : IfcControl((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCostItem_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Identification));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v7_PredefinedType,::Ifc4x3_add2::IfcCostItemTypeEnum::ToString(*v7_PredefinedType))));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_CostValues) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_CostValues)->generalize());data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_CostQuantities) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_CostQuantities)->generalize());data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcCostSchedule +boost::optional< ::Ifc4x3_add2::IfcCostScheduleTypeEnum::Value > Ifc4x3_add2::IfcCostSchedule::PredefinedType() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcCostScheduleTypeEnum::FromString(*data_->getArgument(6)); } +void Ifc4x3_add2::IfcCostSchedule::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCostScheduleTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcCostScheduleTypeEnum::ToString(*v)));}data_->setArgument(6,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcCostSchedule::Status() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } std::string v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcCostSchedule::setStatus(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcCostSchedule::SubmittedOn() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } std::string v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcCostSchedule::setSubmittedOn(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcCostSchedule::UpdateDate() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } std::string v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcCostSchedule::setUpdateDate(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCostSchedule::declaration() const { return *IFC4X3_ADD2_IfcCostSchedule_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCostSchedule::Class() { return *IFC4X3_ADD2_IfcCostSchedule_type; } +Ifc4x3_add2::IfcCostSchedule::IfcCostSchedule(IfcEntityInstanceData* e) : IfcControl((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCostSchedule_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCostSchedule::IfcCostSchedule(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< ::Ifc4x3_add2::IfcCostScheduleTypeEnum::Value > v7_PredefinedType, boost::optional< std::string > v8_Status, boost::optional< std::string > v9_SubmittedOn, boost::optional< std::string > v10_UpdateDate) : IfcControl((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCostSchedule_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Identification));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v7_PredefinedType,::Ifc4x3_add2::IfcCostScheduleTypeEnum::ToString(*v7_PredefinedType))));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Status) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Status));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_SubmittedOn) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_SubmittedOn));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_UpdateDate) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_UpdateDate));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } } + +// Function implementations for IfcCostValue + + +const IfcParse::entity& Ifc4x3_add2::IfcCostValue::declaration() const { return *IFC4X3_ADD2_IfcCostValue_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCostValue::Class() { return *IFC4X3_ADD2_IfcCostValue_type; } +Ifc4x3_add2::IfcCostValue::IfcCostValue(IfcEntityInstanceData* e) : IfcAppliedValue((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCostValue_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCostValue::IfcCostValue(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcAppliedValueSelect* v3_AppliedValue, ::Ifc4x3_add2::IfcMeasureWithUnit* v4_UnitBasis, boost::optional< std::string > v5_ApplicableDate, boost::optional< std::string > v6_FixedUntilDate, boost::optional< std::string > v7_Category, boost::optional< std::string > v8_Condition, boost::optional< ::Ifc4x3_add2::IfcArithmeticOperatorEnum::Value > v9_ArithmeticOperator, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v10_Components) : IfcAppliedValue((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCostValue_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_AppliedValue));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_UnitBasis));data_->setArgument(3,attr);} if (v5_ApplicableDate) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableDate));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_FixedUntilDate) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_FixedUntilDate));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_Category) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_Category));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Condition) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Condition));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ArithmeticOperator) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_ArithmeticOperator,::Ifc4x3_add2::IfcArithmeticOperatorEnum::ToString(*v9_ArithmeticOperator))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_Components) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_Components)->generalize());data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } } + +// Function implementations for IfcCourse +boost::optional< ::Ifc4x3_add2::IfcCourseTypeEnum::Value > Ifc4x3_add2::IfcCourse::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcCourseTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcCourse::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCourseTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcCourseTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCourse::declaration() const { return *IFC4X3_ADD2_IfcCourse_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCourse::Class() { return *IFC4X3_ADD2_IfcCourse_type; } +Ifc4x3_add2::IfcCourse::IfcCourse(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCourse_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCourse::IfcCourse(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCourseTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCourse_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcCourseTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcCourseType +::Ifc4x3_add2::IfcCourseTypeEnum::Value Ifc4x3_add2::IfcCourseType::PredefinedType() const { return ::Ifc4x3_add2::IfcCourseTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcCourseType::setPredefinedType(::Ifc4x3_add2::IfcCourseTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcCourseTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCourseType::declaration() const { return *IFC4X3_ADD2_IfcCourseType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCourseType::Class() { return *IFC4X3_ADD2_IfcCourseType_type; } +Ifc4x3_add2::IfcCourseType::IfcCourseType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCourseType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCourseType::IfcCourseType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCourseTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCourseType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcCourseTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcCovering +boost::optional< ::Ifc4x3_add2::IfcCoveringTypeEnum::Value > Ifc4x3_add2::IfcCovering::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcCoveringTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcCovering::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCoveringTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcCoveringTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + +::Ifc4x3_add2::IfcRelCoversSpaces::list::ptr Ifc4x3_add2::IfcCovering::CoversSpaces() const { return data_->getInverse(IFC4X3_ADD2_IfcRelCoversSpaces_type, 5)->as(); } +::Ifc4x3_add2::IfcRelCoversBldgElements::list::ptr Ifc4x3_add2::IfcCovering::CoversElements() const { return data_->getInverse(IFC4X3_ADD2_IfcRelCoversBldgElements_type, 5)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcCovering::declaration() const { return *IFC4X3_ADD2_IfcCovering_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCovering::Class() { return *IFC4X3_ADD2_IfcCovering_type; } +Ifc4x3_add2::IfcCovering::IfcCovering(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCovering_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCovering::IfcCovering(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCoveringTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCovering_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcCoveringTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcCoveringType +::Ifc4x3_add2::IfcCoveringTypeEnum::Value Ifc4x3_add2::IfcCoveringType::PredefinedType() const { return ::Ifc4x3_add2::IfcCoveringTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcCoveringType::setPredefinedType(::Ifc4x3_add2::IfcCoveringTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcCoveringTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCoveringType::declaration() const { return *IFC4X3_ADD2_IfcCoveringType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCoveringType::Class() { return *IFC4X3_ADD2_IfcCoveringType_type; } +Ifc4x3_add2::IfcCoveringType::IfcCoveringType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCoveringType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCoveringType::IfcCoveringType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCoveringTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCoveringType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcCoveringTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcCrewResource +boost::optional< ::Ifc4x3_add2::IfcCrewResourceTypeEnum::Value > Ifc4x3_add2::IfcCrewResource::PredefinedType() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcCrewResourceTypeEnum::FromString(*data_->getArgument(10)); } +void Ifc4x3_add2::IfcCrewResource::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCrewResourceTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcCrewResourceTypeEnum::ToString(*v)));}data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCrewResource::declaration() const { return *IFC4X3_ADD2_IfcCrewResource_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCrewResource::Class() { return *IFC4X3_ADD2_IfcCrewResource_type; } +Ifc4x3_add2::IfcCrewResource::IfcCrewResource(IfcEntityInstanceData* e) : IfcConstructionResource((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCrewResource_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCrewResource::IfcCrewResource(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, ::Ifc4x3_add2::IfcResourceTime* v8_Usage, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v9_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v10_BaseQuantity, boost::optional< ::Ifc4x3_add2::IfcCrewResourceTypeEnum::Value > v11_PredefinedType) : IfcConstructionResource((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCrewResource_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Identification));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_LongDescription));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_Usage));data_->setArgument(7,attr);} if (v9_BaseCosts) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_BaseCosts)->generalize());data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v10_BaseQuantity));data_->setArgument(9,attr);} if (v11_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v11_PredefinedType,::Ifc4x3_add2::IfcCrewResourceTypeEnum::ToString(*v11_PredefinedType))));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } } + +// Function implementations for IfcCrewResourceType +::Ifc4x3_add2::IfcCrewResourceTypeEnum::Value Ifc4x3_add2::IfcCrewResourceType::PredefinedType() const { return ::Ifc4x3_add2::IfcCrewResourceTypeEnum::FromString(*data_->getArgument(11)); } +void Ifc4x3_add2::IfcCrewResourceType::setPredefinedType(::Ifc4x3_add2::IfcCrewResourceTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcCrewResourceTypeEnum::ToString(v)));data_->setArgument(11,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCrewResourceType::declaration() const { return *IFC4X3_ADD2_IfcCrewResourceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCrewResourceType::Class() { return *IFC4X3_ADD2_IfcCrewResourceType_type; } +Ifc4x3_add2::IfcCrewResourceType::IfcCrewResourceType(IfcEntityInstanceData* e) : IfcConstructionResourceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCrewResourceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCrewResourceType::IfcCrewResourceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ResourceType, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v10_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v11_BaseQuantity, ::Ifc4x3_add2::IfcCrewResourceTypeEnum::Value v12_PredefinedType) : IfcConstructionResourceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCrewResourceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_Identification));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongDescription));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ResourceType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ResourceType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_BaseCosts) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_BaseCosts)->generalize());data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v11_BaseQuantity));data_->setArgument(10,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v12_PredefinedType,::Ifc4x3_add2::IfcCrewResourceTypeEnum::ToString(v12_PredefinedType))));data_->setArgument(11,attr);} } + +// Function implementations for IfcCsgPrimitive3D +::Ifc4x3_add2::IfcAxis2Placement3D* Ifc4x3_add2::IfcCsgPrimitive3D::Position() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcAxis2Placement3D>(true); } +void Ifc4x3_add2::IfcCsgPrimitive3D::setPosition(::Ifc4x3_add2::IfcAxis2Placement3D* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCsgPrimitive3D::declaration() const { return *IFC4X3_ADD2_IfcCsgPrimitive3D_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCsgPrimitive3D::Class() { return *IFC4X3_ADD2_IfcCsgPrimitive3D_type; } +Ifc4x3_add2::IfcCsgPrimitive3D::IfcCsgPrimitive3D(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCsgPrimitive3D_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCsgPrimitive3D::IfcCsgPrimitive3D(::Ifc4x3_add2::IfcAxis2Placement3D* v1_Position) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCsgPrimitive3D_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Position));data_->setArgument(0,attr);} } + +// Function implementations for IfcCsgSolid +::Ifc4x3_add2::IfcCsgSelect* Ifc4x3_add2::IfcCsgSolid::TreeRootExpression() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcCsgSelect>(true); } +void Ifc4x3_add2::IfcCsgSolid::setTreeRootExpression(::Ifc4x3_add2::IfcCsgSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCsgSolid::declaration() const { return *IFC4X3_ADD2_IfcCsgSolid_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCsgSolid::Class() { return *IFC4X3_ADD2_IfcCsgSolid_type; } +Ifc4x3_add2::IfcCsgSolid::IfcCsgSolid(IfcEntityInstanceData* e) : IfcSolidModel((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCsgSolid_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCsgSolid::IfcCsgSolid(::Ifc4x3_add2::IfcCsgSelect* v1_TreeRootExpression) : IfcSolidModel((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCsgSolid_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_TreeRootExpression));data_->setArgument(0,attr);} } + +// Function implementations for IfcCurrencyRelationship +::Ifc4x3_add2::IfcMonetaryUnit* Ifc4x3_add2::IfcCurrencyRelationship::RelatingMonetaryUnit() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcMonetaryUnit>(true); } +void Ifc4x3_add2::IfcCurrencyRelationship::setRelatingMonetaryUnit(::Ifc4x3_add2::IfcMonetaryUnit* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcMonetaryUnit* Ifc4x3_add2::IfcCurrencyRelationship::RelatedMonetaryUnit() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcMonetaryUnit>(true); } +void Ifc4x3_add2::IfcCurrencyRelationship::setRelatedMonetaryUnit(::Ifc4x3_add2::IfcMonetaryUnit* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +double Ifc4x3_add2::IfcCurrencyRelationship::ExchangeRate() const { double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcCurrencyRelationship::setExchangeRate(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcCurrencyRelationship::RateDateTime() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcCurrencyRelationship::setRateDateTime(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +::Ifc4x3_add2::IfcLibraryInformation* Ifc4x3_add2::IfcCurrencyRelationship::RateSource() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcLibraryInformation>(true); } +void Ifc4x3_add2::IfcCurrencyRelationship::setRateSource(::Ifc4x3_add2::IfcLibraryInformation* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCurrencyRelationship::declaration() const { return *IFC4X3_ADD2_IfcCurrencyRelationship_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCurrencyRelationship::Class() { return *IFC4X3_ADD2_IfcCurrencyRelationship_type; } +Ifc4x3_add2::IfcCurrencyRelationship::IfcCurrencyRelationship(IfcEntityInstanceData* e) : IfcResourceLevelRelationship((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCurrencyRelationship_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCurrencyRelationship::IfcCurrencyRelationship(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcMonetaryUnit* v3_RelatingMonetaryUnit, ::Ifc4x3_add2::IfcMonetaryUnit* v4_RelatedMonetaryUnit, double v5_ExchangeRate, boost::optional< std::string > v6_RateDateTime, ::Ifc4x3_add2::IfcLibraryInformation* v7_RateSource) : IfcResourceLevelRelationship((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCurrencyRelationship_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_RelatingMonetaryUnit));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_RelatedMonetaryUnit));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_ExchangeRate));data_->setArgument(4,attr);} if (v6_RateDateTime) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_RateDateTime));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_RateSource));data_->setArgument(6,attr);} } + +// Function implementations for IfcCurtainWall +boost::optional< ::Ifc4x3_add2::IfcCurtainWallTypeEnum::Value > Ifc4x3_add2::IfcCurtainWall::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcCurtainWallTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcCurtainWall::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCurtainWallTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcCurtainWallTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCurtainWall::declaration() const { return *IFC4X3_ADD2_IfcCurtainWall_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCurtainWall::Class() { return *IFC4X3_ADD2_IfcCurtainWall_type; } +Ifc4x3_add2::IfcCurtainWall::IfcCurtainWall(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCurtainWall_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCurtainWall::IfcCurtainWall(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCurtainWallTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCurtainWall_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcCurtainWallTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcCurtainWallType +::Ifc4x3_add2::IfcCurtainWallTypeEnum::Value Ifc4x3_add2::IfcCurtainWallType::PredefinedType() const { return ::Ifc4x3_add2::IfcCurtainWallTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcCurtainWallType::setPredefinedType(::Ifc4x3_add2::IfcCurtainWallTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcCurtainWallTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCurtainWallType::declaration() const { return *IFC4X3_ADD2_IfcCurtainWallType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCurtainWallType::Class() { return *IFC4X3_ADD2_IfcCurtainWallType_type; } +Ifc4x3_add2::IfcCurtainWallType::IfcCurtainWallType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCurtainWallType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCurtainWallType::IfcCurtainWallType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCurtainWallTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCurtainWallType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcCurtainWallTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcCurve + + +const IfcParse::entity& Ifc4x3_add2::IfcCurve::declaration() const { return *IFC4X3_ADD2_IfcCurve_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCurve::Class() { return *IFC4X3_ADD2_IfcCurve_type; } +Ifc4x3_add2::IfcCurve::IfcCurve(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCurve_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCurve::IfcCurve() : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCurve_type); } + +// Function implementations for IfcCurveBoundedPlane +::Ifc4x3_add2::IfcPlane* Ifc4x3_add2::IfcCurveBoundedPlane::BasisSurface() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcPlane>(true); } +void Ifc4x3_add2::IfcCurveBoundedPlane::setBasisSurface(::Ifc4x3_add2::IfcPlane* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcCurve* Ifc4x3_add2::IfcCurveBoundedPlane::OuterBoundary() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcCurve>(true); } +void Ifc4x3_add2::IfcCurveBoundedPlane::setOuterBoundary(::Ifc4x3_add2::IfcCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcCurve >::ptr Ifc4x3_add2::IfcCurveBoundedPlane::InnerBoundaries() const { aggregate_of_instance::ptr es = *data_->getArgument(2); return es->as< ::Ifc4x3_add2::IfcCurve >(); } +void Ifc4x3_add2::IfcCurveBoundedPlane::setInnerBoundaries(aggregate_of< ::Ifc4x3_add2::IfcCurve >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCurveBoundedPlane::declaration() const { return *IFC4X3_ADD2_IfcCurveBoundedPlane_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCurveBoundedPlane::Class() { return *IFC4X3_ADD2_IfcCurveBoundedPlane_type; } +Ifc4x3_add2::IfcCurveBoundedPlane::IfcCurveBoundedPlane(IfcEntityInstanceData* e) : IfcBoundedSurface((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCurveBoundedPlane_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCurveBoundedPlane::IfcCurveBoundedPlane(::Ifc4x3_add2::IfcPlane* v1_BasisSurface, ::Ifc4x3_add2::IfcCurve* v2_OuterBoundary, aggregate_of< ::Ifc4x3_add2::IfcCurve >::ptr v3_InnerBoundaries) : IfcBoundedSurface((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCurveBoundedPlane_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_BasisSurface));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OuterBoundary));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_InnerBoundaries)->generalize());data_->setArgument(2,attr);} } + +// Function implementations for IfcCurveBoundedSurface +::Ifc4x3_add2::IfcSurface* Ifc4x3_add2::IfcCurveBoundedSurface::BasisSurface() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcSurface>(true); } +void Ifc4x3_add2::IfcCurveBoundedSurface::setBasisSurface(::Ifc4x3_add2::IfcSurface* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcBoundaryCurve >::ptr Ifc4x3_add2::IfcCurveBoundedSurface::Boundaries() const { aggregate_of_instance::ptr es = *data_->getArgument(1); return es->as< ::Ifc4x3_add2::IfcBoundaryCurve >(); } +void Ifc4x3_add2::IfcCurveBoundedSurface::setBoundaries(aggregate_of< ::Ifc4x3_add2::IfcBoundaryCurve >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(1,attr);} } +bool Ifc4x3_add2::IfcCurveBoundedSurface::ImplicitOuter() const { bool v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcCurveBoundedSurface::setImplicitOuter(bool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCurveBoundedSurface::declaration() const { return *IFC4X3_ADD2_IfcCurveBoundedSurface_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCurveBoundedSurface::Class() { return *IFC4X3_ADD2_IfcCurveBoundedSurface_type; } +Ifc4x3_add2::IfcCurveBoundedSurface::IfcCurveBoundedSurface(IfcEntityInstanceData* e) : IfcBoundedSurface((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCurveBoundedSurface_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCurveBoundedSurface::IfcCurveBoundedSurface(::Ifc4x3_add2::IfcSurface* v1_BasisSurface, aggregate_of< ::Ifc4x3_add2::IfcBoundaryCurve >::ptr v2_Boundaries, bool v3_ImplicitOuter) : IfcBoundedSurface((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCurveBoundedSurface_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_BasisSurface));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Boundaries)->generalize());data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_ImplicitOuter));data_->setArgument(2,attr);} } + +// Function implementations for IfcCurveSegment +::Ifc4x3_add2::IfcPlacement* Ifc4x3_add2::IfcCurveSegment::Placement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcPlacement>(true); } +void Ifc4x3_add2::IfcCurveSegment::setPlacement(::Ifc4x3_add2::IfcPlacement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcCurveMeasureSelect* Ifc4x3_add2::IfcCurveSegment::SegmentStart() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcCurveMeasureSelect>(true); } +void Ifc4x3_add2::IfcCurveSegment::setSegmentStart(::Ifc4x3_add2::IfcCurveMeasureSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcCurveMeasureSelect* Ifc4x3_add2::IfcCurveSegment::SegmentLength() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcCurveMeasureSelect>(true); } +void Ifc4x3_add2::IfcCurveSegment::setSegmentLength(::Ifc4x3_add2::IfcCurveMeasureSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +::Ifc4x3_add2::IfcCurve* Ifc4x3_add2::IfcCurveSegment::ParentCurve() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcCurve>(true); } +void Ifc4x3_add2::IfcCurveSegment::setParentCurve(::Ifc4x3_add2::IfcCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCurveSegment::declaration() const { return *IFC4X3_ADD2_IfcCurveSegment_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCurveSegment::Class() { return *IFC4X3_ADD2_IfcCurveSegment_type; } +Ifc4x3_add2::IfcCurveSegment::IfcCurveSegment(IfcEntityInstanceData* e) : IfcSegment((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCurveSegment_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCurveSegment::IfcCurveSegment(::Ifc4x3_add2::IfcTransitionCode::Value v1_Transition, ::Ifc4x3_add2::IfcPlacement* v2_Placement, ::Ifc4x3_add2::IfcCurveMeasureSelect* v3_SegmentStart, ::Ifc4x3_add2::IfcCurveMeasureSelect* v4_SegmentLength, ::Ifc4x3_add2::IfcCurve* v5_ParentCurve) : IfcSegment((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCurveSegment_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_Transition,::Ifc4x3_add2::IfcTransitionCode::ToString(v1_Transition))));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Placement));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_SegmentStart));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_SegmentLength));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_ParentCurve));data_->setArgument(4,attr);} } + +// Function implementations for IfcCurveStyle +::Ifc4x3_add2::IfcCurveFontOrScaledCurveFontSelect* Ifc4x3_add2::IfcCurveStyle::CurveFont() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcCurveFontOrScaledCurveFontSelect>(true); } +void Ifc4x3_add2::IfcCurveStyle::setCurveFont(::Ifc4x3_add2::IfcCurveFontOrScaledCurveFontSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcSizeSelect* Ifc4x3_add2::IfcCurveStyle::CurveWidth() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcSizeSelect>(true); } +void Ifc4x3_add2::IfcCurveStyle::setCurveWidth(::Ifc4x3_add2::IfcSizeSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcColour* Ifc4x3_add2::IfcCurveStyle::CurveColour() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcColour>(true); } +void Ifc4x3_add2::IfcCurveStyle::setCurveColour(::Ifc4x3_add2::IfcColour* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +boost::optional< bool > Ifc4x3_add2::IfcCurveStyle::ModelOrDraughting() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } bool v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcCurveStyle::setModelOrDraughting(boost::optional< bool > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCurveStyle::declaration() const { return *IFC4X3_ADD2_IfcCurveStyle_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCurveStyle::Class() { return *IFC4X3_ADD2_IfcCurveStyle_type; } +Ifc4x3_add2::IfcCurveStyle::IfcCurveStyle(IfcEntityInstanceData* e) : IfcPresentationStyle((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCurveStyle_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCurveStyle::IfcCurveStyle(boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcCurveFontOrScaledCurveFontSelect* v2_CurveFont, ::Ifc4x3_add2::IfcSizeSelect* v3_CurveWidth, ::Ifc4x3_add2::IfcColour* v4_CurveColour, boost::optional< bool > v5_ModelOrDraughting) : IfcPresentationStyle((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCurveStyle_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_CurveFont));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_CurveWidth));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_CurveColour));data_->setArgument(3,attr);} if (v5_ModelOrDraughting) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ModelOrDraughting));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcCurveStyleFont +boost::optional< std::string > Ifc4x3_add2::IfcCurveStyleFont::Name() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcCurveStyleFont::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcCurveStyleFontPattern >::ptr Ifc4x3_add2::IfcCurveStyleFont::PatternList() const { aggregate_of_instance::ptr es = *data_->getArgument(1); return es->as< ::Ifc4x3_add2::IfcCurveStyleFontPattern >(); } +void Ifc4x3_add2::IfcCurveStyleFont::setPatternList(aggregate_of< ::Ifc4x3_add2::IfcCurveStyleFontPattern >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCurveStyleFont::declaration() const { return *IFC4X3_ADD2_IfcCurveStyleFont_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCurveStyleFont::Class() { return *IFC4X3_ADD2_IfcCurveStyleFont_type; } +Ifc4x3_add2::IfcCurveStyleFont::IfcCurveStyleFont(IfcEntityInstanceData* e) : IfcPresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCurveStyleFont_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCurveStyleFont::IfcCurveStyleFont(boost::optional< std::string > v1_Name, aggregate_of< ::Ifc4x3_add2::IfcCurveStyleFontPattern >::ptr v2_PatternList) : IfcPresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCurveStyleFont_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_PatternList)->generalize());data_->setArgument(1,attr);} } + +// Function implementations for IfcCurveStyleFontAndScaling +boost::optional< std::string > Ifc4x3_add2::IfcCurveStyleFontAndScaling::Name() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcCurveStyleFontAndScaling::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcCurveStyleFontSelect* Ifc4x3_add2::IfcCurveStyleFontAndScaling::CurveStyleFont() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcCurveStyleFontSelect>(true); } +void Ifc4x3_add2::IfcCurveStyleFontAndScaling::setCurveStyleFont(::Ifc4x3_add2::IfcCurveStyleFontSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +double Ifc4x3_add2::IfcCurveStyleFontAndScaling::CurveFontScaling() const { double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcCurveStyleFontAndScaling::setCurveFontScaling(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCurveStyleFontAndScaling::declaration() const { return *IFC4X3_ADD2_IfcCurveStyleFontAndScaling_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCurveStyleFontAndScaling::Class() { return *IFC4X3_ADD2_IfcCurveStyleFontAndScaling_type; } +Ifc4x3_add2::IfcCurveStyleFontAndScaling::IfcCurveStyleFontAndScaling(IfcEntityInstanceData* e) : IfcPresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCurveStyleFontAndScaling_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCurveStyleFontAndScaling::IfcCurveStyleFontAndScaling(boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcCurveStyleFontSelect* v2_CurveStyleFont, double v3_CurveFontScaling) : IfcPresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCurveStyleFontAndScaling_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_CurveStyleFont));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_CurveFontScaling));data_->setArgument(2,attr);} } + +// Function implementations for IfcCurveStyleFontPattern +double Ifc4x3_add2::IfcCurveStyleFontPattern::VisibleSegmentLength() const { double v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcCurveStyleFontPattern::setVisibleSegmentLength(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +double Ifc4x3_add2::IfcCurveStyleFontPattern::InvisibleSegmentLength() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcCurveStyleFontPattern::setInvisibleSegmentLength(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCurveStyleFontPattern::declaration() const { return *IFC4X3_ADD2_IfcCurveStyleFontPattern_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCurveStyleFontPattern::Class() { return *IFC4X3_ADD2_IfcCurveStyleFontPattern_type; } +Ifc4x3_add2::IfcCurveStyleFontPattern::IfcCurveStyleFontPattern(IfcEntityInstanceData* e) : IfcPresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCurveStyleFontPattern_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCurveStyleFontPattern::IfcCurveStyleFontPattern(double v1_VisibleSegmentLength, double v2_InvisibleSegmentLength) : IfcPresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCurveStyleFontPattern_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_VisibleSegmentLength));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_InvisibleSegmentLength));data_->setArgument(1,attr);} } + +// Function implementations for IfcCylindricalSurface +double Ifc4x3_add2::IfcCylindricalSurface::Radius() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcCylindricalSurface::setRadius(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcCylindricalSurface::declaration() const { return *IFC4X3_ADD2_IfcCylindricalSurface_type; } +const IfcParse::entity& Ifc4x3_add2::IfcCylindricalSurface::Class() { return *IFC4X3_ADD2_IfcCylindricalSurface_type; } +Ifc4x3_add2::IfcCylindricalSurface::IfcCylindricalSurface(IfcEntityInstanceData* e) : IfcElementarySurface((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcCylindricalSurface_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcCylindricalSurface::IfcCylindricalSurface(::Ifc4x3_add2::IfcAxis2Placement3D* v1_Position, double v2_Radius) : IfcElementarySurface((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcCylindricalSurface_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Position));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Radius));data_->setArgument(1,attr);} } + +// Function implementations for IfcDamper +boost::optional< ::Ifc4x3_add2::IfcDamperTypeEnum::Value > Ifc4x3_add2::IfcDamper::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcDamperTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcDamper::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcDamperTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcDamperTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDamper::declaration() const { return *IFC4X3_ADD2_IfcDamper_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDamper::Class() { return *IFC4X3_ADD2_IfcDamper_type; } +Ifc4x3_add2::IfcDamper::IfcDamper(IfcEntityInstanceData* e) : IfcFlowController((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDamper_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDamper::IfcDamper(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcDamperTypeEnum::Value > v9_PredefinedType) : IfcFlowController((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDamper_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcDamperTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcDamperType +::Ifc4x3_add2::IfcDamperTypeEnum::Value Ifc4x3_add2::IfcDamperType::PredefinedType() const { return ::Ifc4x3_add2::IfcDamperTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcDamperType::setPredefinedType(::Ifc4x3_add2::IfcDamperTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcDamperTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDamperType::declaration() const { return *IFC4X3_ADD2_IfcDamperType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDamperType::Class() { return *IFC4X3_ADD2_IfcDamperType_type; } +Ifc4x3_add2::IfcDamperType::IfcDamperType(IfcEntityInstanceData* e) : IfcFlowControllerType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDamperType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDamperType::IfcDamperType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcDamperTypeEnum::Value v10_PredefinedType) : IfcFlowControllerType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDamperType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcDamperTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcDeepFoundation + + +const IfcParse::entity& Ifc4x3_add2::IfcDeepFoundation::declaration() const { return *IFC4X3_ADD2_IfcDeepFoundation_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDeepFoundation::Class() { return *IFC4X3_ADD2_IfcDeepFoundation_type; } +Ifc4x3_add2::IfcDeepFoundation::IfcDeepFoundation(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDeepFoundation_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDeepFoundation::IfcDeepFoundation(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDeepFoundation_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcDeepFoundationType + + +const IfcParse::entity& Ifc4x3_add2::IfcDeepFoundationType::declaration() const { return *IFC4X3_ADD2_IfcDeepFoundationType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDeepFoundationType::Class() { return *IFC4X3_ADD2_IfcDeepFoundationType_type; } +Ifc4x3_add2::IfcDeepFoundationType::IfcDeepFoundationType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDeepFoundationType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDeepFoundationType::IfcDeepFoundationType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDeepFoundationType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcDerivedProfileDef +::Ifc4x3_add2::IfcProfileDef* Ifc4x3_add2::IfcDerivedProfileDef::ParentProfile() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcProfileDef>(true); } +void Ifc4x3_add2::IfcDerivedProfileDef::setParentProfile(::Ifc4x3_add2::IfcProfileDef* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcCartesianTransformationOperator2D* Ifc4x3_add2::IfcDerivedProfileDef::Operator() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcCartesianTransformationOperator2D>(true); } +void Ifc4x3_add2::IfcDerivedProfileDef::setOperator(::Ifc4x3_add2::IfcCartesianTransformationOperator2D* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcDerivedProfileDef::Label() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcDerivedProfileDef::setLabel(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDerivedProfileDef::declaration() const { return *IFC4X3_ADD2_IfcDerivedProfileDef_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDerivedProfileDef::Class() { return *IFC4X3_ADD2_IfcDerivedProfileDef_type; } +Ifc4x3_add2::IfcDerivedProfileDef::IfcDerivedProfileDef(IfcEntityInstanceData* e) : IfcProfileDef((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDerivedProfileDef_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDerivedProfileDef::IfcDerivedProfileDef(::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcProfileDef* v3_ParentProfile, ::Ifc4x3_add2::IfcCartesianTransformationOperator2D* v4_Operator, boost::optional< std::string > v5_Label) : IfcProfileDef((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDerivedProfileDef_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_ProfileType,::Ifc4x3_add2::IfcProfileTypeEnum::ToString(v1_ProfileType))));data_->setArgument(0,attr);} if (v2_ProfileName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ProfileName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_ParentProfile));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Operator));data_->setArgument(3,attr);} if (v5_Label) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Label));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcDerivedUnit +aggregate_of< ::Ifc4x3_add2::IfcDerivedUnitElement >::ptr Ifc4x3_add2::IfcDerivedUnit::Elements() const { aggregate_of_instance::ptr es = *data_->getArgument(0); return es->as< ::Ifc4x3_add2::IfcDerivedUnitElement >(); } +void Ifc4x3_add2::IfcDerivedUnit::setElements(aggregate_of< ::Ifc4x3_add2::IfcDerivedUnitElement >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcDerivedUnitEnum::Value Ifc4x3_add2::IfcDerivedUnit::UnitType() const { return ::Ifc4x3_add2::IfcDerivedUnitEnum::FromString(*data_->getArgument(1)); } +void Ifc4x3_add2::IfcDerivedUnit::setUnitType(::Ifc4x3_add2::IfcDerivedUnitEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcDerivedUnitEnum::ToString(v)));data_->setArgument(1,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcDerivedUnit::UserDefinedType() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcDerivedUnit::setUserDefinedType(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcDerivedUnit::Name() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } std::string v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcDerivedUnit::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDerivedUnit::declaration() const { return *IFC4X3_ADD2_IfcDerivedUnit_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDerivedUnit::Class() { return *IFC4X3_ADD2_IfcDerivedUnit_type; } +Ifc4x3_add2::IfcDerivedUnit::IfcDerivedUnit(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDerivedUnit_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDerivedUnit::IfcDerivedUnit(aggregate_of< ::Ifc4x3_add2::IfcDerivedUnitElement >::ptr v1_Elements, ::Ifc4x3_add2::IfcDerivedUnitEnum::Value v2_UnitType, boost::optional< std::string > v3_UserDefinedType, boost::optional< std::string > v4_Name) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDerivedUnit_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Elements)->generalize());data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v2_UnitType,::Ifc4x3_add2::IfcDerivedUnitEnum::ToString(v2_UnitType))));data_->setArgument(1,attr);} if (v3_UserDefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_UserDefinedType));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Name));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcDerivedUnitElement +::Ifc4x3_add2::IfcNamedUnit* Ifc4x3_add2::IfcDerivedUnitElement::Unit() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcNamedUnit>(true); } +void Ifc4x3_add2::IfcDerivedUnitElement::setUnit(::Ifc4x3_add2::IfcNamedUnit* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +int Ifc4x3_add2::IfcDerivedUnitElement::Exponent() const { int v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcDerivedUnitElement::setExponent(int v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDerivedUnitElement::declaration() const { return *IFC4X3_ADD2_IfcDerivedUnitElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDerivedUnitElement::Class() { return *IFC4X3_ADD2_IfcDerivedUnitElement_type; } +Ifc4x3_add2::IfcDerivedUnitElement::IfcDerivedUnitElement(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDerivedUnitElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDerivedUnitElement::IfcDerivedUnitElement(::Ifc4x3_add2::IfcNamedUnit* v1_Unit, int v2_Exponent) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDerivedUnitElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Unit));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Exponent));data_->setArgument(1,attr);} } + +// Function implementations for IfcDimensionalExponents +int Ifc4x3_add2::IfcDimensionalExponents::LengthExponent() const { int v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcDimensionalExponents::setLengthExponent(int v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +int Ifc4x3_add2::IfcDimensionalExponents::MassExponent() const { int v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcDimensionalExponents::setMassExponent(int v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +int Ifc4x3_add2::IfcDimensionalExponents::TimeExponent() const { int v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcDimensionalExponents::setTimeExponent(int v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +int Ifc4x3_add2::IfcDimensionalExponents::ElectricCurrentExponent() const { int v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcDimensionalExponents::setElectricCurrentExponent(int v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +int Ifc4x3_add2::IfcDimensionalExponents::ThermodynamicTemperatureExponent() const { int v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcDimensionalExponents::setThermodynamicTemperatureExponent(int v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +int Ifc4x3_add2::IfcDimensionalExponents::AmountOfSubstanceExponent() const { int v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcDimensionalExponents::setAmountOfSubstanceExponent(int v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +int Ifc4x3_add2::IfcDimensionalExponents::LuminousIntensityExponent() const { int v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcDimensionalExponents::setLuminousIntensityExponent(int v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDimensionalExponents::declaration() const { return *IFC4X3_ADD2_IfcDimensionalExponents_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDimensionalExponents::Class() { return *IFC4X3_ADD2_IfcDimensionalExponents_type; } +Ifc4x3_add2::IfcDimensionalExponents::IfcDimensionalExponents(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDimensionalExponents_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDimensionalExponents::IfcDimensionalExponents(int v1_LengthExponent, int v2_MassExponent, int v3_TimeExponent, int v4_ElectricCurrentExponent, int v5_ThermodynamicTemperatureExponent, int v6_AmountOfSubstanceExponent, int v7_LuminousIntensityExponent) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDimensionalExponents_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_LengthExponent));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_MassExponent));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_TimeExponent));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_ElectricCurrentExponent));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_ThermodynamicTemperatureExponent));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_AmountOfSubstanceExponent));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_LuminousIntensityExponent));data_->setArgument(6,attr);} } + +// Function implementations for IfcDirection +std::vector< double > /*[2:3]*/ Ifc4x3_add2::IfcDirection::DirectionRatios() const { std::vector< double > /*[2:3]*/ v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcDirection::setDirectionRatios(std::vector< double > /*[2:3]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDirection::declaration() const { return *IFC4X3_ADD2_IfcDirection_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDirection::Class() { return *IFC4X3_ADD2_IfcDirection_type; } +Ifc4x3_add2::IfcDirection::IfcDirection(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDirection_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDirection::IfcDirection(std::vector< double > /*[2:3]*/ v1_DirectionRatios) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDirection_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_DirectionRatios));data_->setArgument(0,attr);} } + +// Function implementations for IfcDirectrixCurveSweptAreaSolid +::Ifc4x3_add2::IfcCurve* Ifc4x3_add2::IfcDirectrixCurveSweptAreaSolid::Directrix() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcCurve>(true); } +void Ifc4x3_add2::IfcDirectrixCurveSweptAreaSolid::setDirectrix(::Ifc4x3_add2::IfcCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcCurveMeasureSelect* Ifc4x3_add2::IfcDirectrixCurveSweptAreaSolid::StartParam() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcCurveMeasureSelect>(true); } +void Ifc4x3_add2::IfcDirectrixCurveSweptAreaSolid::setStartParam(::Ifc4x3_add2::IfcCurveMeasureSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +::Ifc4x3_add2::IfcCurveMeasureSelect* Ifc4x3_add2::IfcDirectrixCurveSweptAreaSolid::EndParam() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcCurveMeasureSelect>(true); } +void Ifc4x3_add2::IfcDirectrixCurveSweptAreaSolid::setEndParam(::Ifc4x3_add2::IfcCurveMeasureSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDirectrixCurveSweptAreaSolid::declaration() const { return *IFC4X3_ADD2_IfcDirectrixCurveSweptAreaSolid_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDirectrixCurveSweptAreaSolid::Class() { return *IFC4X3_ADD2_IfcDirectrixCurveSweptAreaSolid_type; } +Ifc4x3_add2::IfcDirectrixCurveSweptAreaSolid::IfcDirectrixCurveSweptAreaSolid(IfcEntityInstanceData* e) : IfcSweptAreaSolid((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDirectrixCurveSweptAreaSolid_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDirectrixCurveSweptAreaSolid::IfcDirectrixCurveSweptAreaSolid(::Ifc4x3_add2::IfcProfileDef* v1_SweptArea, ::Ifc4x3_add2::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_add2::IfcCurve* v3_Directrix, ::Ifc4x3_add2::IfcCurveMeasureSelect* v4_StartParam, ::Ifc4x3_add2::IfcCurveMeasureSelect* v5_EndParam) : IfcSweptAreaSolid((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDirectrixCurveSweptAreaSolid_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_SweptArea));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Position));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Directrix));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_StartParam));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_EndParam));data_->setArgument(4,attr);} } + +// Function implementations for IfcDirectrixDerivedReferenceSweptAreaSolid + + +const IfcParse::entity& Ifc4x3_add2::IfcDirectrixDerivedReferenceSweptAreaSolid::declaration() const { return *IFC4X3_ADD2_IfcDirectrixDerivedReferenceSweptAreaSolid_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDirectrixDerivedReferenceSweptAreaSolid::Class() { return *IFC4X3_ADD2_IfcDirectrixDerivedReferenceSweptAreaSolid_type; } +Ifc4x3_add2::IfcDirectrixDerivedReferenceSweptAreaSolid::IfcDirectrixDerivedReferenceSweptAreaSolid(IfcEntityInstanceData* e) : IfcFixedReferenceSweptAreaSolid((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDirectrixDerivedReferenceSweptAreaSolid_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDirectrixDerivedReferenceSweptAreaSolid::IfcDirectrixDerivedReferenceSweptAreaSolid(::Ifc4x3_add2::IfcProfileDef* v1_SweptArea, ::Ifc4x3_add2::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_add2::IfcCurve* v3_Directrix, ::Ifc4x3_add2::IfcCurveMeasureSelect* v4_StartParam, ::Ifc4x3_add2::IfcCurveMeasureSelect* v5_EndParam, ::Ifc4x3_add2::IfcDirection* v6_FixedReference) : IfcFixedReferenceSweptAreaSolid((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDirectrixDerivedReferenceSweptAreaSolid_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_SweptArea));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Position));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Directrix));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_StartParam));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_EndParam));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_FixedReference));data_->setArgument(5,attr);} } + +// Function implementations for IfcDiscreteAccessory +boost::optional< ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::Value > Ifc4x3_add2::IfcDiscreteAccessory::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcDiscreteAccessory::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDiscreteAccessory::declaration() const { return *IFC4X3_ADD2_IfcDiscreteAccessory_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDiscreteAccessory::Class() { return *IFC4X3_ADD2_IfcDiscreteAccessory_type; } +Ifc4x3_add2::IfcDiscreteAccessory::IfcDiscreteAccessory(IfcEntityInstanceData* e) : IfcElementComponent((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDiscreteAccessory_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDiscreteAccessory::IfcDiscreteAccessory(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::Value > v9_PredefinedType) : IfcElementComponent((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDiscreteAccessory_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcDiscreteAccessoryType +::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::Value Ifc4x3_add2::IfcDiscreteAccessoryType::PredefinedType() const { return ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcDiscreteAccessoryType::setPredefinedType(::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDiscreteAccessoryType::declaration() const { return *IFC4X3_ADD2_IfcDiscreteAccessoryType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDiscreteAccessoryType::Class() { return *IFC4X3_ADD2_IfcDiscreteAccessoryType_type; } +Ifc4x3_add2::IfcDiscreteAccessoryType::IfcDiscreteAccessoryType(IfcEntityInstanceData* e) : IfcElementComponentType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDiscreteAccessoryType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDiscreteAccessoryType::IfcDiscreteAccessoryType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::Value v10_PredefinedType) : IfcElementComponentType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDiscreteAccessoryType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcDistributionBoard +boost::optional< ::Ifc4x3_add2::IfcDistributionBoardTypeEnum::Value > Ifc4x3_add2::IfcDistributionBoard::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcDistributionBoardTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcDistributionBoard::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcDistributionBoardTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcDistributionBoardTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDistributionBoard::declaration() const { return *IFC4X3_ADD2_IfcDistributionBoard_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDistributionBoard::Class() { return *IFC4X3_ADD2_IfcDistributionBoard_type; } +Ifc4x3_add2::IfcDistributionBoard::IfcDistributionBoard(IfcEntityInstanceData* e) : IfcFlowController((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDistributionBoard_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDistributionBoard::IfcDistributionBoard(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcDistributionBoardTypeEnum::Value > v9_PredefinedType) : IfcFlowController((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDistributionBoard_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcDistributionBoardTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcDistributionBoardType +::Ifc4x3_add2::IfcDistributionBoardTypeEnum::Value Ifc4x3_add2::IfcDistributionBoardType::PredefinedType() const { return ::Ifc4x3_add2::IfcDistributionBoardTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcDistributionBoardType::setPredefinedType(::Ifc4x3_add2::IfcDistributionBoardTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcDistributionBoardTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDistributionBoardType::declaration() const { return *IFC4X3_ADD2_IfcDistributionBoardType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDistributionBoardType::Class() { return *IFC4X3_ADD2_IfcDistributionBoardType_type; } +Ifc4x3_add2::IfcDistributionBoardType::IfcDistributionBoardType(IfcEntityInstanceData* e) : IfcFlowControllerType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDistributionBoardType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDistributionBoardType::IfcDistributionBoardType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcDistributionBoardTypeEnum::Value v10_PredefinedType) : IfcFlowControllerType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDistributionBoardType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcDistributionBoardTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcDistributionChamberElement +boost::optional< ::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::Value > Ifc4x3_add2::IfcDistributionChamberElement::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcDistributionChamberElement::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDistributionChamberElement::declaration() const { return *IFC4X3_ADD2_IfcDistributionChamberElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDistributionChamberElement::Class() { return *IFC4X3_ADD2_IfcDistributionChamberElement_type; } +Ifc4x3_add2::IfcDistributionChamberElement::IfcDistributionChamberElement(IfcEntityInstanceData* e) : IfcDistributionFlowElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDistributionChamberElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDistributionChamberElement::IfcDistributionChamberElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::Value > v9_PredefinedType) : IfcDistributionFlowElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDistributionChamberElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcDistributionChamberElementType +::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::Value Ifc4x3_add2::IfcDistributionChamberElementType::PredefinedType() const { return ::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcDistributionChamberElementType::setPredefinedType(::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDistributionChamberElementType::declaration() const { return *IFC4X3_ADD2_IfcDistributionChamberElementType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDistributionChamberElementType::Class() { return *IFC4X3_ADD2_IfcDistributionChamberElementType_type; } +Ifc4x3_add2::IfcDistributionChamberElementType::IfcDistributionChamberElementType(IfcEntityInstanceData* e) : IfcDistributionFlowElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDistributionChamberElementType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDistributionChamberElementType::IfcDistributionChamberElementType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::Value v10_PredefinedType) : IfcDistributionFlowElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDistributionChamberElementType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcDistributionCircuit + + +const IfcParse::entity& Ifc4x3_add2::IfcDistributionCircuit::declaration() const { return *IFC4X3_ADD2_IfcDistributionCircuit_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDistributionCircuit::Class() { return *IFC4X3_ADD2_IfcDistributionCircuit_type; } +Ifc4x3_add2::IfcDistributionCircuit::IfcDistributionCircuit(IfcEntityInstanceData* e) : IfcDistributionSystem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDistributionCircuit_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDistributionCircuit::IfcDistributionCircuit(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_LongName, boost::optional< ::Ifc4x3_add2::IfcDistributionSystemEnum::Value > v7_PredefinedType) : IfcDistributionSystem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDistributionCircuit_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_LongName));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v7_PredefinedType,::Ifc4x3_add2::IfcDistributionSystemEnum::ToString(*v7_PredefinedType))));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } } + +// Function implementations for IfcDistributionControlElement + +::Ifc4x3_add2::IfcRelFlowControlElements::list::ptr Ifc4x3_add2::IfcDistributionControlElement::AssignedToFlowElement() const { return data_->getInverse(IFC4X3_ADD2_IfcRelFlowControlElements_type, 4)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcDistributionControlElement::declaration() const { return *IFC4X3_ADD2_IfcDistributionControlElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDistributionControlElement::Class() { return *IFC4X3_ADD2_IfcDistributionControlElement_type; } +Ifc4x3_add2::IfcDistributionControlElement::IfcDistributionControlElement(IfcEntityInstanceData* e) : IfcDistributionElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDistributionControlElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDistributionControlElement::IfcDistributionControlElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcDistributionElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDistributionControlElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcDistributionControlElementType + + +const IfcParse::entity& Ifc4x3_add2::IfcDistributionControlElementType::declaration() const { return *IFC4X3_ADD2_IfcDistributionControlElementType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDistributionControlElementType::Class() { return *IFC4X3_ADD2_IfcDistributionControlElementType_type; } +Ifc4x3_add2::IfcDistributionControlElementType::IfcDistributionControlElementType(IfcEntityInstanceData* e) : IfcDistributionElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDistributionControlElementType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDistributionControlElementType::IfcDistributionControlElementType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcDistributionElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDistributionControlElementType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcDistributionElement + +::Ifc4x3_add2::IfcRelConnectsPortToElement::list::ptr Ifc4x3_add2::IfcDistributionElement::HasPorts() const { return data_->getInverse(IFC4X3_ADD2_IfcRelConnectsPortToElement_type, 5)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcDistributionElement::declaration() const { return *IFC4X3_ADD2_IfcDistributionElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDistributionElement::Class() { return *IFC4X3_ADD2_IfcDistributionElement_type; } +Ifc4x3_add2::IfcDistributionElement::IfcDistributionElement(IfcEntityInstanceData* e) : IfcElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDistributionElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDistributionElement::IfcDistributionElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDistributionElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcDistributionElementType + + +const IfcParse::entity& Ifc4x3_add2::IfcDistributionElementType::declaration() const { return *IFC4X3_ADD2_IfcDistributionElementType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDistributionElementType::Class() { return *IFC4X3_ADD2_IfcDistributionElementType_type; } +Ifc4x3_add2::IfcDistributionElementType::IfcDistributionElementType(IfcEntityInstanceData* e) : IfcElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDistributionElementType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDistributionElementType::IfcDistributionElementType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDistributionElementType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcDistributionFlowElement + +::Ifc4x3_add2::IfcRelFlowControlElements::list::ptr Ifc4x3_add2::IfcDistributionFlowElement::HasControlElements() const { return data_->getInverse(IFC4X3_ADD2_IfcRelFlowControlElements_type, 5)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcDistributionFlowElement::declaration() const { return *IFC4X3_ADD2_IfcDistributionFlowElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDistributionFlowElement::Class() { return *IFC4X3_ADD2_IfcDistributionFlowElement_type; } +Ifc4x3_add2::IfcDistributionFlowElement::IfcDistributionFlowElement(IfcEntityInstanceData* e) : IfcDistributionElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDistributionFlowElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDistributionFlowElement::IfcDistributionFlowElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcDistributionElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDistributionFlowElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcDistributionFlowElementType + + +const IfcParse::entity& Ifc4x3_add2::IfcDistributionFlowElementType::declaration() const { return *IFC4X3_ADD2_IfcDistributionFlowElementType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDistributionFlowElementType::Class() { return *IFC4X3_ADD2_IfcDistributionFlowElementType_type; } +Ifc4x3_add2::IfcDistributionFlowElementType::IfcDistributionFlowElementType(IfcEntityInstanceData* e) : IfcDistributionElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDistributionFlowElementType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDistributionFlowElementType::IfcDistributionFlowElementType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcDistributionElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDistributionFlowElementType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcDistributionPort +boost::optional< ::Ifc4x3_add2::IfcFlowDirectionEnum::Value > Ifc4x3_add2::IfcDistributionPort::FlowDirection() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcFlowDirectionEnum::FromString(*data_->getArgument(7)); } +void Ifc4x3_add2::IfcDistributionPort::setFlowDirection(boost::optional< ::Ifc4x3_add2::IfcFlowDirectionEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcFlowDirectionEnum::ToString(*v)));}data_->setArgument(7,attr);} } +boost::optional< ::Ifc4x3_add2::IfcDistributionPortTypeEnum::Value > Ifc4x3_add2::IfcDistributionPort::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcDistributionPortTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcDistributionPort::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcDistributionPortTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcDistributionPortTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } +boost::optional< ::Ifc4x3_add2::IfcDistributionSystemEnum::Value > Ifc4x3_add2::IfcDistributionPort::SystemType() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcDistributionSystemEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcDistributionPort::setSystemType(boost::optional< ::Ifc4x3_add2::IfcDistributionSystemEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcDistributionSystemEnum::ToString(*v)));}data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDistributionPort::declaration() const { return *IFC4X3_ADD2_IfcDistributionPort_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDistributionPort::Class() { return *IFC4X3_ADD2_IfcDistributionPort_type; } +Ifc4x3_add2::IfcDistributionPort::IfcDistributionPort(IfcEntityInstanceData* e) : IfcPort((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDistributionPort_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDistributionPort::IfcDistributionPort(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< ::Ifc4x3_add2::IfcFlowDirectionEnum::Value > v8_FlowDirection, boost::optional< ::Ifc4x3_add2::IfcDistributionPortTypeEnum::Value > v9_PredefinedType, boost::optional< ::Ifc4x3_add2::IfcDistributionSystemEnum::Value > v10_SystemType) : IfcPort((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDistributionPort_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_FlowDirection) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v8_FlowDirection,::Ifc4x3_add2::IfcFlowDirectionEnum::ToString(*v8_FlowDirection))));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcDistributionPortTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_SystemType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v10_SystemType,::Ifc4x3_add2::IfcDistributionSystemEnum::ToString(*v10_SystemType))));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } } + +// Function implementations for IfcDistributionSystem +boost::optional< std::string > Ifc4x3_add2::IfcDistributionSystem::LongName() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcDistributionSystem::setLongName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< ::Ifc4x3_add2::IfcDistributionSystemEnum::Value > Ifc4x3_add2::IfcDistributionSystem::PredefinedType() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcDistributionSystemEnum::FromString(*data_->getArgument(6)); } +void Ifc4x3_add2::IfcDistributionSystem::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcDistributionSystemEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcDistributionSystemEnum::ToString(*v)));}data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDistributionSystem::declaration() const { return *IFC4X3_ADD2_IfcDistributionSystem_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDistributionSystem::Class() { return *IFC4X3_ADD2_IfcDistributionSystem_type; } +Ifc4x3_add2::IfcDistributionSystem::IfcDistributionSystem(IfcEntityInstanceData* e) : IfcSystem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDistributionSystem_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDistributionSystem::IfcDistributionSystem(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_LongName, boost::optional< ::Ifc4x3_add2::IfcDistributionSystemEnum::Value > v7_PredefinedType) : IfcSystem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDistributionSystem_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_LongName));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v7_PredefinedType,::Ifc4x3_add2::IfcDistributionSystemEnum::ToString(*v7_PredefinedType))));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } } + +// Function implementations for IfcDocumentInformation +std::string Ifc4x3_add2::IfcDocumentInformation::Identification() const { std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcDocumentInformation::setIdentification(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +std::string Ifc4x3_add2::IfcDocumentInformation::Name() const { std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcDocumentInformation::setName(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcDocumentInformation::Description() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcDocumentInformation::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcDocumentInformation::Location() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } std::string v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcDocumentInformation::setLocation(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcDocumentInformation::Purpose() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcDocumentInformation::setPurpose(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcDocumentInformation::IntendedUse() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcDocumentInformation::setIntendedUse(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcDocumentInformation::Scope() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } std::string v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcDocumentInformation::setScope(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcDocumentInformation::Revision() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } std::string v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcDocumentInformation::setRevision(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +::Ifc4x3_add2::IfcActorSelect* Ifc4x3_add2::IfcDocumentInformation::DocumentOwner() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(8)))->as<::Ifc4x3_add2::IfcActorSelect>(true); } +void Ifc4x3_add2::IfcDocumentInformation::setDocumentOwner(::Ifc4x3_add2::IfcActorSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(8,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcActorSelect >::ptr > Ifc4x3_add2::IfcDocumentInformation::Editors() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(9); return es->as< ::Ifc4x3_add2::IfcActorSelect >(); } +void Ifc4x3_add2::IfcDocumentInformation::setEditors(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcActorSelect >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(9,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcDocumentInformation::CreationTime() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } std::string v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcDocumentInformation::setCreationTime(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcDocumentInformation::LastRevisionTime() const { if(!data_->getArgument(11) || data_->getArgument(11)->isNull()) { return boost::none; } std::string v = *data_->getArgument(11); return v; } +void Ifc4x3_add2::IfcDocumentInformation::setLastRevisionTime(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(11,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcDocumentInformation::ElectronicFormat() const { if(!data_->getArgument(12) || data_->getArgument(12)->isNull()) { return boost::none; } std::string v = *data_->getArgument(12); return v; } +void Ifc4x3_add2::IfcDocumentInformation::setElectronicFormat(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(12,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcDocumentInformation::ValidFrom() const { if(!data_->getArgument(13) || data_->getArgument(13)->isNull()) { return boost::none; } std::string v = *data_->getArgument(13); return v; } +void Ifc4x3_add2::IfcDocumentInformation::setValidFrom(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(13,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcDocumentInformation::ValidUntil() const { if(!data_->getArgument(14) || data_->getArgument(14)->isNull()) { return boost::none; } std::string v = *data_->getArgument(14); return v; } +void Ifc4x3_add2::IfcDocumentInformation::setValidUntil(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(14,attr);} } +boost::optional< ::Ifc4x3_add2::IfcDocumentConfidentialityEnum::Value > Ifc4x3_add2::IfcDocumentInformation::Confidentiality() const { if(!data_->getArgument(15) || data_->getArgument(15)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcDocumentConfidentialityEnum::FromString(*data_->getArgument(15)); } +void Ifc4x3_add2::IfcDocumentInformation::setConfidentiality(boost::optional< ::Ifc4x3_add2::IfcDocumentConfidentialityEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcDocumentConfidentialityEnum::ToString(*v)));}data_->setArgument(15,attr);} } +boost::optional< ::Ifc4x3_add2::IfcDocumentStatusEnum::Value > Ifc4x3_add2::IfcDocumentInformation::Status() const { if(!data_->getArgument(16) || data_->getArgument(16)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcDocumentStatusEnum::FromString(*data_->getArgument(16)); } +void Ifc4x3_add2::IfcDocumentInformation::setStatus(boost::optional< ::Ifc4x3_add2::IfcDocumentStatusEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcDocumentStatusEnum::ToString(*v)));}data_->setArgument(16,attr);} } + +::Ifc4x3_add2::IfcRelAssociatesDocument::list::ptr Ifc4x3_add2::IfcDocumentInformation::DocumentInfoForObjects() const { return data_->getInverse(IFC4X3_ADD2_IfcRelAssociatesDocument_type, 5)->as(); } +::Ifc4x3_add2::IfcDocumentReference::list::ptr Ifc4x3_add2::IfcDocumentInformation::HasDocumentReferences() const { return data_->getInverse(IFC4X3_ADD2_IfcDocumentReference_type, 4)->as(); } +::Ifc4x3_add2::IfcDocumentInformationRelationship::list::ptr Ifc4x3_add2::IfcDocumentInformation::IsPointedTo() const { return data_->getInverse(IFC4X3_ADD2_IfcDocumentInformationRelationship_type, 3)->as(); } +::Ifc4x3_add2::IfcDocumentInformationRelationship::list::ptr Ifc4x3_add2::IfcDocumentInformation::IsPointer() const { return data_->getInverse(IFC4X3_ADD2_IfcDocumentInformationRelationship_type, 2)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcDocumentInformation::declaration() const { return *IFC4X3_ADD2_IfcDocumentInformation_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDocumentInformation::Class() { return *IFC4X3_ADD2_IfcDocumentInformation_type; } +Ifc4x3_add2::IfcDocumentInformation::IfcDocumentInformation(IfcEntityInstanceData* e) : IfcExternalInformation((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDocumentInformation_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDocumentInformation::IfcDocumentInformation(std::string v1_Identification, std::string v2_Name, boost::optional< std::string > v3_Description, boost::optional< std::string > v4_Location, boost::optional< std::string > v5_Purpose, boost::optional< std::string > v6_IntendedUse, boost::optional< std::string > v7_Scope, boost::optional< std::string > v8_Revision, ::Ifc4x3_add2::IfcActorSelect* v9_DocumentOwner, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcActorSelect >::ptr > v10_Editors, boost::optional< std::string > v11_CreationTime, boost::optional< std::string > v12_LastRevisionTime, boost::optional< std::string > v13_ElectronicFormat, boost::optional< std::string > v14_ValidFrom, boost::optional< std::string > v15_ValidUntil, boost::optional< ::Ifc4x3_add2::IfcDocumentConfidentialityEnum::Value > v16_Confidentiality, boost::optional< ::Ifc4x3_add2::IfcDocumentStatusEnum::Value > v17_Status) : IfcExternalInformation((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDocumentInformation_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Identification));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Name));data_->setArgument(1,attr);} if (v3_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Description));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Location) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Location));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_Purpose) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Purpose));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_IntendedUse) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_IntendedUse));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_Scope) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_Scope));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Revision) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Revision));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_DocumentOwner));data_->setArgument(8,attr);} if (v10_Editors) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_Editors)->generalize());data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_CreationTime) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_CreationTime));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } if (v12_LastRevisionTime) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v12_LastRevisionTime));data_->setArgument(11,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(11, attr); } if (v13_ElectronicFormat) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v13_ElectronicFormat));data_->setArgument(12,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(12, attr); } if (v14_ValidFrom) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v14_ValidFrom));data_->setArgument(13,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(13, attr); } if (v15_ValidUntil) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v15_ValidUntil));data_->setArgument(14,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(14, attr); } if (v16_Confidentiality) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v16_Confidentiality,::Ifc4x3_add2::IfcDocumentConfidentialityEnum::ToString(*v16_Confidentiality))));data_->setArgument(15,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(15, attr); } if (v17_Status) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v17_Status,::Ifc4x3_add2::IfcDocumentStatusEnum::ToString(*v17_Status))));data_->setArgument(16,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(16, attr); } } + +// Function implementations for IfcDocumentInformationRelationship +::Ifc4x3_add2::IfcDocumentInformation* Ifc4x3_add2::IfcDocumentInformationRelationship::RelatingDocument() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcDocumentInformation>(true); } +void Ifc4x3_add2::IfcDocumentInformationRelationship::setRelatingDocument(::Ifc4x3_add2::IfcDocumentInformation* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcDocumentInformation >::ptr Ifc4x3_add2::IfcDocumentInformationRelationship::RelatedDocuments() const { aggregate_of_instance::ptr es = *data_->getArgument(3); return es->as< ::Ifc4x3_add2::IfcDocumentInformation >(); } +void Ifc4x3_add2::IfcDocumentInformationRelationship::setRelatedDocuments(aggregate_of< ::Ifc4x3_add2::IfcDocumentInformation >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcDocumentInformationRelationship::RelationshipType() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcDocumentInformationRelationship::setRelationshipType(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDocumentInformationRelationship::declaration() const { return *IFC4X3_ADD2_IfcDocumentInformationRelationship_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDocumentInformationRelationship::Class() { return *IFC4X3_ADD2_IfcDocumentInformationRelationship_type; } +Ifc4x3_add2::IfcDocumentInformationRelationship::IfcDocumentInformationRelationship(IfcEntityInstanceData* e) : IfcResourceLevelRelationship((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDocumentInformationRelationship_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDocumentInformationRelationship::IfcDocumentInformationRelationship(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcDocumentInformation* v3_RelatingDocument, aggregate_of< ::Ifc4x3_add2::IfcDocumentInformation >::ptr v4_RelatedDocuments, boost::optional< std::string > v5_RelationshipType) : IfcResourceLevelRelationship((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDocumentInformationRelationship_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_RelatingDocument));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_RelatedDocuments)->generalize());data_->setArgument(3,attr);} if (v5_RelationshipType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_RelationshipType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcDocumentReference +boost::optional< std::string > Ifc4x3_add2::IfcDocumentReference::Description() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } std::string v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcDocumentReference::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +::Ifc4x3_add2::IfcDocumentInformation* Ifc4x3_add2::IfcDocumentReference::ReferencedDocument() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcDocumentInformation>(true); } +void Ifc4x3_add2::IfcDocumentReference::setReferencedDocument(::Ifc4x3_add2::IfcDocumentInformation* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } + +::Ifc4x3_add2::IfcRelAssociatesDocument::list::ptr Ifc4x3_add2::IfcDocumentReference::DocumentRefForObjects() const { return data_->getInverse(IFC4X3_ADD2_IfcRelAssociatesDocument_type, 5)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcDocumentReference::declaration() const { return *IFC4X3_ADD2_IfcDocumentReference_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDocumentReference::Class() { return *IFC4X3_ADD2_IfcDocumentReference_type; } +Ifc4x3_add2::IfcDocumentReference::IfcDocumentReference(IfcEntityInstanceData* e) : IfcExternalReference((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDocumentReference_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDocumentReference::IfcDocumentReference(boost::optional< std::string > v1_Location, boost::optional< std::string > v2_Identification, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcDocumentInformation* v5_ReferencedDocument) : IfcExternalReference((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDocumentReference_type); if (v1_Location) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Location));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Identification));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_ReferencedDocument));data_->setArgument(4,attr);} } + +// Function implementations for IfcDoor +boost::optional< double > Ifc4x3_add2::IfcDoor::OverallHeight() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } double v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcDoor::setOverallHeight(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } +boost::optional< double > Ifc4x3_add2::IfcDoor::OverallWidth() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } double v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcDoor::setOverallWidth(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(9,attr);} } +boost::optional< ::Ifc4x3_add2::IfcDoorTypeEnum::Value > Ifc4x3_add2::IfcDoor::PredefinedType() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcDoorTypeEnum::FromString(*data_->getArgument(10)); } +void Ifc4x3_add2::IfcDoor::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcDoorTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcDoorTypeEnum::ToString(*v)));}data_->setArgument(10,attr);} } +boost::optional< ::Ifc4x3_add2::IfcDoorTypeOperationEnum::Value > Ifc4x3_add2::IfcDoor::OperationType() const { if(!data_->getArgument(11) || data_->getArgument(11)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::FromString(*data_->getArgument(11)); } +void Ifc4x3_add2::IfcDoor::setOperationType(boost::optional< ::Ifc4x3_add2::IfcDoorTypeOperationEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcDoorTypeOperationEnum::ToString(*v)));}data_->setArgument(11,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcDoor::UserDefinedOperationType() const { if(!data_->getArgument(12) || data_->getArgument(12)->isNull()) { return boost::none; } std::string v = *data_->getArgument(12); return v; } +void Ifc4x3_add2::IfcDoor::setUserDefinedOperationType(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(12,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDoor::declaration() const { return *IFC4X3_ADD2_IfcDoor_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDoor::Class() { return *IFC4X3_ADD2_IfcDoor_type; } +Ifc4x3_add2::IfcDoor::IfcDoor(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDoor_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDoor::IfcDoor(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< double > v9_OverallHeight, boost::optional< double > v10_OverallWidth, boost::optional< ::Ifc4x3_add2::IfcDoorTypeEnum::Value > v11_PredefinedType, boost::optional< ::Ifc4x3_add2::IfcDoorTypeOperationEnum::Value > v12_OperationType, boost::optional< std::string > v13_UserDefinedOperationType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDoor_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_OverallHeight) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_OverallHeight));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_OverallWidth) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_OverallWidth));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v11_PredefinedType,::Ifc4x3_add2::IfcDoorTypeEnum::ToString(*v11_PredefinedType))));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } if (v12_OperationType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v12_OperationType,::Ifc4x3_add2::IfcDoorTypeOperationEnum::ToString(*v12_OperationType))));data_->setArgument(11,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(11, attr); } if (v13_UserDefinedOperationType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v13_UserDefinedOperationType));data_->setArgument(12,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(12, attr); } } + +// Function implementations for IfcDoorLiningProperties +boost::optional< double > Ifc4x3_add2::IfcDoorLiningProperties::LiningDepth() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcDoorLiningProperties::setLiningDepth(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< double > Ifc4x3_add2::IfcDoorLiningProperties::LiningThickness() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } double v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcDoorLiningProperties::setLiningThickness(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< double > Ifc4x3_add2::IfcDoorLiningProperties::ThresholdDepth() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcDoorLiningProperties::setThresholdDepth(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } +boost::optional< double > Ifc4x3_add2::IfcDoorLiningProperties::ThresholdThickness() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } double v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcDoorLiningProperties::setThresholdThickness(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +boost::optional< double > Ifc4x3_add2::IfcDoorLiningProperties::TransomThickness() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } double v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcDoorLiningProperties::setTransomThickness(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } +boost::optional< double > Ifc4x3_add2::IfcDoorLiningProperties::TransomOffset() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } double v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcDoorLiningProperties::setTransomOffset(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(9,attr);} } +boost::optional< double > Ifc4x3_add2::IfcDoorLiningProperties::LiningOffset() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } double v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcDoorLiningProperties::setLiningOffset(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } +boost::optional< double > Ifc4x3_add2::IfcDoorLiningProperties::ThresholdOffset() const { if(!data_->getArgument(11) || data_->getArgument(11)->isNull()) { return boost::none; } double v = *data_->getArgument(11); return v; } +void Ifc4x3_add2::IfcDoorLiningProperties::setThresholdOffset(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(11,attr);} } +boost::optional< double > Ifc4x3_add2::IfcDoorLiningProperties::CasingThickness() const { if(!data_->getArgument(12) || data_->getArgument(12)->isNull()) { return boost::none; } double v = *data_->getArgument(12); return v; } +void Ifc4x3_add2::IfcDoorLiningProperties::setCasingThickness(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(12,attr);} } +boost::optional< double > Ifc4x3_add2::IfcDoorLiningProperties::CasingDepth() const { if(!data_->getArgument(13) || data_->getArgument(13)->isNull()) { return boost::none; } double v = *data_->getArgument(13); return v; } +void Ifc4x3_add2::IfcDoorLiningProperties::setCasingDepth(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(13,attr);} } +::Ifc4x3_add2::IfcShapeAspect* Ifc4x3_add2::IfcDoorLiningProperties::ShapeAspectStyle() const { if(!data_->getArgument(14) || data_->getArgument(14)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(14)))->as<::Ifc4x3_add2::IfcShapeAspect>(true); } +void Ifc4x3_add2::IfcDoorLiningProperties::setShapeAspectStyle(::Ifc4x3_add2::IfcShapeAspect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(14,attr);} } +boost::optional< double > Ifc4x3_add2::IfcDoorLiningProperties::LiningToPanelOffsetX() const { if(!data_->getArgument(15) || data_->getArgument(15)->isNull()) { return boost::none; } double v = *data_->getArgument(15); return v; } +void Ifc4x3_add2::IfcDoorLiningProperties::setLiningToPanelOffsetX(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(15,attr);} } +boost::optional< double > Ifc4x3_add2::IfcDoorLiningProperties::LiningToPanelOffsetY() const { if(!data_->getArgument(16) || data_->getArgument(16)->isNull()) { return boost::none; } double v = *data_->getArgument(16); return v; } +void Ifc4x3_add2::IfcDoorLiningProperties::setLiningToPanelOffsetY(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(16,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDoorLiningProperties::declaration() const { return *IFC4X3_ADD2_IfcDoorLiningProperties_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDoorLiningProperties::Class() { return *IFC4X3_ADD2_IfcDoorLiningProperties_type; } +Ifc4x3_add2::IfcDoorLiningProperties::IfcDoorLiningProperties(IfcEntityInstanceData* e) : IfcPreDefinedPropertySet((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDoorLiningProperties_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDoorLiningProperties::IfcDoorLiningProperties(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< double > v5_LiningDepth, boost::optional< double > v6_LiningThickness, boost::optional< double > v7_ThresholdDepth, boost::optional< double > v8_ThresholdThickness, boost::optional< double > v9_TransomThickness, boost::optional< double > v10_TransomOffset, boost::optional< double > v11_LiningOffset, boost::optional< double > v12_ThresholdOffset, boost::optional< double > v13_CasingThickness, boost::optional< double > v14_CasingDepth, ::Ifc4x3_add2::IfcShapeAspect* v15_ShapeAspectStyle, boost::optional< double > v16_LiningToPanelOffsetX, boost::optional< double > v17_LiningToPanelOffsetY) : IfcPreDefinedPropertySet((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDoorLiningProperties_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_LiningDepth) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_LiningDepth));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_LiningThickness) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_LiningThickness));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_ThresholdDepth) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_ThresholdDepth));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_ThresholdThickness) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_ThresholdThickness));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_TransomThickness) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_TransomThickness));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_TransomOffset) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_TransomOffset));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_LiningOffset) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_LiningOffset));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } if (v12_ThresholdOffset) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v12_ThresholdOffset));data_->setArgument(11,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(11, attr); } if (v13_CasingThickness) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v13_CasingThickness));data_->setArgument(12,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(12, attr); } if (v14_CasingDepth) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v14_CasingDepth));data_->setArgument(13,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(13, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v15_ShapeAspectStyle));data_->setArgument(14,attr);} if (v16_LiningToPanelOffsetX) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v16_LiningToPanelOffsetX));data_->setArgument(15,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(15, attr); } if (v17_LiningToPanelOffsetY) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v17_LiningToPanelOffsetY));data_->setArgument(16,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(16, attr); } } + +// Function implementations for IfcDoorPanelProperties +boost::optional< double > Ifc4x3_add2::IfcDoorPanelProperties::PanelDepth() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcDoorPanelProperties::setPanelDepth(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcDoorPanelOperationEnum::Value Ifc4x3_add2::IfcDoorPanelProperties::PanelOperation() const { return ::Ifc4x3_add2::IfcDoorPanelOperationEnum::FromString(*data_->getArgument(5)); } +void Ifc4x3_add2::IfcDoorPanelProperties::setPanelOperation(::Ifc4x3_add2::IfcDoorPanelOperationEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcDoorPanelOperationEnum::ToString(v)));data_->setArgument(5,attr);} } +boost::optional< double > Ifc4x3_add2::IfcDoorPanelProperties::PanelWidth() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcDoorPanelProperties::setPanelWidth(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } +::Ifc4x3_add2::IfcDoorPanelPositionEnum::Value Ifc4x3_add2::IfcDoorPanelProperties::PanelPosition() const { return ::Ifc4x3_add2::IfcDoorPanelPositionEnum::FromString(*data_->getArgument(7)); } +void Ifc4x3_add2::IfcDoorPanelProperties::setPanelPosition(::Ifc4x3_add2::IfcDoorPanelPositionEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcDoorPanelPositionEnum::ToString(v)));data_->setArgument(7,attr);} } +::Ifc4x3_add2::IfcShapeAspect* Ifc4x3_add2::IfcDoorPanelProperties::ShapeAspectStyle() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(8)))->as<::Ifc4x3_add2::IfcShapeAspect>(true); } +void Ifc4x3_add2::IfcDoorPanelProperties::setShapeAspectStyle(::Ifc4x3_add2::IfcShapeAspect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDoorPanelProperties::declaration() const { return *IFC4X3_ADD2_IfcDoorPanelProperties_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDoorPanelProperties::Class() { return *IFC4X3_ADD2_IfcDoorPanelProperties_type; } +Ifc4x3_add2::IfcDoorPanelProperties::IfcDoorPanelProperties(IfcEntityInstanceData* e) : IfcPreDefinedPropertySet((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDoorPanelProperties_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDoorPanelProperties::IfcDoorPanelProperties(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< double > v5_PanelDepth, ::Ifc4x3_add2::IfcDoorPanelOperationEnum::Value v6_PanelOperation, boost::optional< double > v7_PanelWidth, ::Ifc4x3_add2::IfcDoorPanelPositionEnum::Value v8_PanelPosition, ::Ifc4x3_add2::IfcShapeAspect* v9_ShapeAspectStyle) : IfcPreDefinedPropertySet((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDoorPanelProperties_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_PanelDepth) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_PanelDepth));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v6_PanelOperation,::Ifc4x3_add2::IfcDoorPanelOperationEnum::ToString(v6_PanelOperation))));data_->setArgument(5,attr);} if (v7_PanelWidth) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_PanelWidth));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v8_PanelPosition,::Ifc4x3_add2::IfcDoorPanelPositionEnum::ToString(v8_PanelPosition))));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_ShapeAspectStyle));data_->setArgument(8,attr);} } + +// Function implementations for IfcDoorType +::Ifc4x3_add2::IfcDoorTypeEnum::Value Ifc4x3_add2::IfcDoorType::PredefinedType() const { return ::Ifc4x3_add2::IfcDoorTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcDoorType::setPredefinedType(::Ifc4x3_add2::IfcDoorTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcDoorTypeEnum::ToString(v)));data_->setArgument(9,attr);} } +::Ifc4x3_add2::IfcDoorTypeOperationEnum::Value Ifc4x3_add2::IfcDoorType::OperationType() const { return ::Ifc4x3_add2::IfcDoorTypeOperationEnum::FromString(*data_->getArgument(10)); } +void Ifc4x3_add2::IfcDoorType::setOperationType(::Ifc4x3_add2::IfcDoorTypeOperationEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcDoorTypeOperationEnum::ToString(v)));data_->setArgument(10,attr);} } +boost::optional< bool > Ifc4x3_add2::IfcDoorType::ParameterTakesPrecedence() const { if(!data_->getArgument(11) || data_->getArgument(11)->isNull()) { return boost::none; } bool v = *data_->getArgument(11); return v; } +void Ifc4x3_add2::IfcDoorType::setParameterTakesPrecedence(boost::optional< bool > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(11,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcDoorType::UserDefinedOperationType() const { if(!data_->getArgument(12) || data_->getArgument(12)->isNull()) { return boost::none; } std::string v = *data_->getArgument(12); return v; } +void Ifc4x3_add2::IfcDoorType::setUserDefinedOperationType(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(12,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDoorType::declaration() const { return *IFC4X3_ADD2_IfcDoorType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDoorType::Class() { return *IFC4X3_ADD2_IfcDoorType_type; } +Ifc4x3_add2::IfcDoorType::IfcDoorType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDoorType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDoorType::IfcDoorType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcDoorTypeEnum::Value v10_PredefinedType, ::Ifc4x3_add2::IfcDoorTypeOperationEnum::Value v11_OperationType, boost::optional< bool > v12_ParameterTakesPrecedence, boost::optional< std::string > v13_UserDefinedOperationType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDoorType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcDoorTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v11_OperationType,::Ifc4x3_add2::IfcDoorTypeOperationEnum::ToString(v11_OperationType))));data_->setArgument(10,attr);} if (v12_ParameterTakesPrecedence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v12_ParameterTakesPrecedence));data_->setArgument(11,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(11, attr); } if (v13_UserDefinedOperationType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v13_UserDefinedOperationType));data_->setArgument(12,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(12, attr); } } + +// Function implementations for IfcDraughtingPreDefinedColour + + +const IfcParse::entity& Ifc4x3_add2::IfcDraughtingPreDefinedColour::declaration() const { return *IFC4X3_ADD2_IfcDraughtingPreDefinedColour_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDraughtingPreDefinedColour::Class() { return *IFC4X3_ADD2_IfcDraughtingPreDefinedColour_type; } +Ifc4x3_add2::IfcDraughtingPreDefinedColour::IfcDraughtingPreDefinedColour(IfcEntityInstanceData* e) : IfcPreDefinedColour((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDraughtingPreDefinedColour_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDraughtingPreDefinedColour::IfcDraughtingPreDefinedColour(std::string v1_Name) : IfcPreDefinedColour((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDraughtingPreDefinedColour_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} } + +// Function implementations for IfcDraughtingPreDefinedCurveFont + + +const IfcParse::entity& Ifc4x3_add2::IfcDraughtingPreDefinedCurveFont::declaration() const { return *IFC4X3_ADD2_IfcDraughtingPreDefinedCurveFont_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDraughtingPreDefinedCurveFont::Class() { return *IFC4X3_ADD2_IfcDraughtingPreDefinedCurveFont_type; } +Ifc4x3_add2::IfcDraughtingPreDefinedCurveFont::IfcDraughtingPreDefinedCurveFont(IfcEntityInstanceData* e) : IfcPreDefinedCurveFont((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDraughtingPreDefinedCurveFont_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDraughtingPreDefinedCurveFont::IfcDraughtingPreDefinedCurveFont(std::string v1_Name) : IfcPreDefinedCurveFont((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDraughtingPreDefinedCurveFont_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} } + +// Function implementations for IfcDuctFitting +boost::optional< ::Ifc4x3_add2::IfcDuctFittingTypeEnum::Value > Ifc4x3_add2::IfcDuctFitting::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcDuctFittingTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcDuctFitting::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcDuctFittingTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcDuctFittingTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDuctFitting::declaration() const { return *IFC4X3_ADD2_IfcDuctFitting_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDuctFitting::Class() { return *IFC4X3_ADD2_IfcDuctFitting_type; } +Ifc4x3_add2::IfcDuctFitting::IfcDuctFitting(IfcEntityInstanceData* e) : IfcFlowFitting((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDuctFitting_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDuctFitting::IfcDuctFitting(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcDuctFittingTypeEnum::Value > v9_PredefinedType) : IfcFlowFitting((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDuctFitting_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcDuctFittingTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcDuctFittingType +::Ifc4x3_add2::IfcDuctFittingTypeEnum::Value Ifc4x3_add2::IfcDuctFittingType::PredefinedType() const { return ::Ifc4x3_add2::IfcDuctFittingTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcDuctFittingType::setPredefinedType(::Ifc4x3_add2::IfcDuctFittingTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcDuctFittingTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDuctFittingType::declaration() const { return *IFC4X3_ADD2_IfcDuctFittingType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDuctFittingType::Class() { return *IFC4X3_ADD2_IfcDuctFittingType_type; } +Ifc4x3_add2::IfcDuctFittingType::IfcDuctFittingType(IfcEntityInstanceData* e) : IfcFlowFittingType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDuctFittingType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDuctFittingType::IfcDuctFittingType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcDuctFittingTypeEnum::Value v10_PredefinedType) : IfcFlowFittingType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDuctFittingType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcDuctFittingTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcDuctSegment +boost::optional< ::Ifc4x3_add2::IfcDuctSegmentTypeEnum::Value > Ifc4x3_add2::IfcDuctSegment::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcDuctSegmentTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcDuctSegment::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcDuctSegmentTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcDuctSegmentTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDuctSegment::declaration() const { return *IFC4X3_ADD2_IfcDuctSegment_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDuctSegment::Class() { return *IFC4X3_ADD2_IfcDuctSegment_type; } +Ifc4x3_add2::IfcDuctSegment::IfcDuctSegment(IfcEntityInstanceData* e) : IfcFlowSegment((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDuctSegment_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDuctSegment::IfcDuctSegment(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcDuctSegmentTypeEnum::Value > v9_PredefinedType) : IfcFlowSegment((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDuctSegment_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcDuctSegmentTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcDuctSegmentType +::Ifc4x3_add2::IfcDuctSegmentTypeEnum::Value Ifc4x3_add2::IfcDuctSegmentType::PredefinedType() const { return ::Ifc4x3_add2::IfcDuctSegmentTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcDuctSegmentType::setPredefinedType(::Ifc4x3_add2::IfcDuctSegmentTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcDuctSegmentTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDuctSegmentType::declaration() const { return *IFC4X3_ADD2_IfcDuctSegmentType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDuctSegmentType::Class() { return *IFC4X3_ADD2_IfcDuctSegmentType_type; } +Ifc4x3_add2::IfcDuctSegmentType::IfcDuctSegmentType(IfcEntityInstanceData* e) : IfcFlowSegmentType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDuctSegmentType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDuctSegmentType::IfcDuctSegmentType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcDuctSegmentTypeEnum::Value v10_PredefinedType) : IfcFlowSegmentType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDuctSegmentType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcDuctSegmentTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcDuctSilencer +boost::optional< ::Ifc4x3_add2::IfcDuctSilencerTypeEnum::Value > Ifc4x3_add2::IfcDuctSilencer::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcDuctSilencerTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcDuctSilencer::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcDuctSilencerTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcDuctSilencerTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDuctSilencer::declaration() const { return *IFC4X3_ADD2_IfcDuctSilencer_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDuctSilencer::Class() { return *IFC4X3_ADD2_IfcDuctSilencer_type; } +Ifc4x3_add2::IfcDuctSilencer::IfcDuctSilencer(IfcEntityInstanceData* e) : IfcFlowTreatmentDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDuctSilencer_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDuctSilencer::IfcDuctSilencer(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcDuctSilencerTypeEnum::Value > v9_PredefinedType) : IfcFlowTreatmentDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDuctSilencer_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcDuctSilencerTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcDuctSilencerType +::Ifc4x3_add2::IfcDuctSilencerTypeEnum::Value Ifc4x3_add2::IfcDuctSilencerType::PredefinedType() const { return ::Ifc4x3_add2::IfcDuctSilencerTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcDuctSilencerType::setPredefinedType(::Ifc4x3_add2::IfcDuctSilencerTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcDuctSilencerTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcDuctSilencerType::declaration() const { return *IFC4X3_ADD2_IfcDuctSilencerType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcDuctSilencerType::Class() { return *IFC4X3_ADD2_IfcDuctSilencerType_type; } +Ifc4x3_add2::IfcDuctSilencerType::IfcDuctSilencerType(IfcEntityInstanceData* e) : IfcFlowTreatmentDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcDuctSilencerType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcDuctSilencerType::IfcDuctSilencerType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcDuctSilencerTypeEnum::Value v10_PredefinedType) : IfcFlowTreatmentDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcDuctSilencerType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcDuctSilencerTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcEarthworksCut +boost::optional< ::Ifc4x3_add2::IfcEarthworksCutTypeEnum::Value > Ifc4x3_add2::IfcEarthworksCut::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcEarthworksCutTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcEarthworksCut::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcEarthworksCutTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcEarthworksCutTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcEarthworksCut::declaration() const { return *IFC4X3_ADD2_IfcEarthworksCut_type; } +const IfcParse::entity& Ifc4x3_add2::IfcEarthworksCut::Class() { return *IFC4X3_ADD2_IfcEarthworksCut_type; } +Ifc4x3_add2::IfcEarthworksCut::IfcEarthworksCut(IfcEntityInstanceData* e) : IfcFeatureElementSubtraction((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcEarthworksCut_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcEarthworksCut::IfcEarthworksCut(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcEarthworksCutTypeEnum::Value > v9_PredefinedType) : IfcFeatureElementSubtraction((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEarthworksCut_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcEarthworksCutTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcEarthworksElement + + +const IfcParse::entity& Ifc4x3_add2::IfcEarthworksElement::declaration() const { return *IFC4X3_ADD2_IfcEarthworksElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcEarthworksElement::Class() { return *IFC4X3_ADD2_IfcEarthworksElement_type; } +Ifc4x3_add2::IfcEarthworksElement::IfcEarthworksElement(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcEarthworksElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcEarthworksElement::IfcEarthworksElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEarthworksElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcEarthworksFill +boost::optional< ::Ifc4x3_add2::IfcEarthworksFillTypeEnum::Value > Ifc4x3_add2::IfcEarthworksFill::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcEarthworksFillTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcEarthworksFill::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcEarthworksFillTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcEarthworksFillTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcEarthworksFill::declaration() const { return *IFC4X3_ADD2_IfcEarthworksFill_type; } +const IfcParse::entity& Ifc4x3_add2::IfcEarthworksFill::Class() { return *IFC4X3_ADD2_IfcEarthworksFill_type; } +Ifc4x3_add2::IfcEarthworksFill::IfcEarthworksFill(IfcEntityInstanceData* e) : IfcEarthworksElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcEarthworksFill_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcEarthworksFill::IfcEarthworksFill(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcEarthworksFillTypeEnum::Value > v9_PredefinedType) : IfcEarthworksElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEarthworksFill_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcEarthworksFillTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcEdge +::Ifc4x3_add2::IfcVertex* Ifc4x3_add2::IfcEdge::EdgeStart() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcVertex>(true); } +void Ifc4x3_add2::IfcEdge::setEdgeStart(::Ifc4x3_add2::IfcVertex* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcVertex* Ifc4x3_add2::IfcEdge::EdgeEnd() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcVertex>(true); } +void Ifc4x3_add2::IfcEdge::setEdgeEnd(::Ifc4x3_add2::IfcVertex* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcEdge::declaration() const { return *IFC4X3_ADD2_IfcEdge_type; } +const IfcParse::entity& Ifc4x3_add2::IfcEdge::Class() { return *IFC4X3_ADD2_IfcEdge_type; } +Ifc4x3_add2::IfcEdge::IfcEdge(IfcEntityInstanceData* e) : IfcTopologicalRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcEdge_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcEdge::IfcEdge(::Ifc4x3_add2::IfcVertex* v1_EdgeStart, ::Ifc4x3_add2::IfcVertex* v2_EdgeEnd) : IfcTopologicalRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEdge_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_EdgeStart));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_EdgeEnd));data_->setArgument(1,attr);} } + +// Function implementations for IfcEdgeCurve +::Ifc4x3_add2::IfcCurve* Ifc4x3_add2::IfcEdgeCurve::EdgeGeometry() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcCurve>(true); } +void Ifc4x3_add2::IfcEdgeCurve::setEdgeGeometry(::Ifc4x3_add2::IfcCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +bool Ifc4x3_add2::IfcEdgeCurve::SameSense() const { bool v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcEdgeCurve::setSameSense(bool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcEdgeCurve::declaration() const { return *IFC4X3_ADD2_IfcEdgeCurve_type; } +const IfcParse::entity& Ifc4x3_add2::IfcEdgeCurve::Class() { return *IFC4X3_ADD2_IfcEdgeCurve_type; } +Ifc4x3_add2::IfcEdgeCurve::IfcEdgeCurve(IfcEntityInstanceData* e) : IfcEdge((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcEdgeCurve_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcEdgeCurve::IfcEdgeCurve(::Ifc4x3_add2::IfcVertex* v1_EdgeStart, ::Ifc4x3_add2::IfcVertex* v2_EdgeEnd, ::Ifc4x3_add2::IfcCurve* v3_EdgeGeometry, bool v4_SameSense) : IfcEdge((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEdgeCurve_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_EdgeStart));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_EdgeEnd));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_EdgeGeometry));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_SameSense));data_->setArgument(3,attr);} } + +// Function implementations for IfcEdgeLoop +aggregate_of< ::Ifc4x3_add2::IfcOrientedEdge >::ptr Ifc4x3_add2::IfcEdgeLoop::EdgeList() const { aggregate_of_instance::ptr es = *data_->getArgument(0); return es->as< ::Ifc4x3_add2::IfcOrientedEdge >(); } +void Ifc4x3_add2::IfcEdgeLoop::setEdgeList(aggregate_of< ::Ifc4x3_add2::IfcOrientedEdge >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcEdgeLoop::declaration() const { return *IFC4X3_ADD2_IfcEdgeLoop_type; } +const IfcParse::entity& Ifc4x3_add2::IfcEdgeLoop::Class() { return *IFC4X3_ADD2_IfcEdgeLoop_type; } +Ifc4x3_add2::IfcEdgeLoop::IfcEdgeLoop(IfcEntityInstanceData* e) : IfcLoop((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcEdgeLoop_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcEdgeLoop::IfcEdgeLoop(aggregate_of< ::Ifc4x3_add2::IfcOrientedEdge >::ptr v1_EdgeList) : IfcLoop((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEdgeLoop_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_EdgeList)->generalize());data_->setArgument(0,attr);} } + +// Function implementations for IfcElectricAppliance +boost::optional< ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::Value > Ifc4x3_add2::IfcElectricAppliance::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcElectricAppliance::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcElectricApplianceTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcElectricAppliance::declaration() const { return *IFC4X3_ADD2_IfcElectricAppliance_type; } +const IfcParse::entity& Ifc4x3_add2::IfcElectricAppliance::Class() { return *IFC4X3_ADD2_IfcElectricAppliance_type; } +Ifc4x3_add2::IfcElectricAppliance::IfcElectricAppliance(IfcEntityInstanceData* e) : IfcFlowTerminal((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcElectricAppliance_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcElectricAppliance::IfcElectricAppliance(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricAppliance_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcElectricApplianceTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcElectricApplianceType +::Ifc4x3_add2::IfcElectricApplianceTypeEnum::Value Ifc4x3_add2::IfcElectricApplianceType::PredefinedType() const { return ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcElectricApplianceType::setPredefinedType(::Ifc4x3_add2::IfcElectricApplianceTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcElectricApplianceTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcElectricApplianceType::declaration() const { return *IFC4X3_ADD2_IfcElectricApplianceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcElectricApplianceType::Class() { return *IFC4X3_ADD2_IfcElectricApplianceType_type; } +Ifc4x3_add2::IfcElectricApplianceType::IfcElectricApplianceType(IfcEntityInstanceData* e) : IfcFlowTerminalType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcElectricApplianceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcElectricApplianceType::IfcElectricApplianceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricApplianceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcElectricApplianceTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcElectricDistributionBoard +boost::optional< ::Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::Value > Ifc4x3_add2::IfcElectricDistributionBoard::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcElectricDistributionBoard::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcElectricDistributionBoard::declaration() const { return *IFC4X3_ADD2_IfcElectricDistributionBoard_type; } +const IfcParse::entity& Ifc4x3_add2::IfcElectricDistributionBoard::Class() { return *IFC4X3_ADD2_IfcElectricDistributionBoard_type; } +Ifc4x3_add2::IfcElectricDistributionBoard::IfcElectricDistributionBoard(IfcEntityInstanceData* e) : IfcFlowController((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcElectricDistributionBoard_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcElectricDistributionBoard::IfcElectricDistributionBoard(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::Value > v9_PredefinedType) : IfcFlowController((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricDistributionBoard_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcElectricDistributionBoardType +::Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::Value Ifc4x3_add2::IfcElectricDistributionBoardType::PredefinedType() const { return ::Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcElectricDistributionBoardType::setPredefinedType(::Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcElectricDistributionBoardType::declaration() const { return *IFC4X3_ADD2_IfcElectricDistributionBoardType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcElectricDistributionBoardType::Class() { return *IFC4X3_ADD2_IfcElectricDistributionBoardType_type; } +Ifc4x3_add2::IfcElectricDistributionBoardType::IfcElectricDistributionBoardType(IfcEntityInstanceData* e) : IfcFlowControllerType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcElectricDistributionBoardType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcElectricDistributionBoardType::IfcElectricDistributionBoardType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::Value v10_PredefinedType) : IfcFlowControllerType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricDistributionBoardType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcElectricFlowStorageDevice +boost::optional< ::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::Value > Ifc4x3_add2::IfcElectricFlowStorageDevice::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcElectricFlowStorageDevice::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcElectricFlowStorageDevice::declaration() const { return *IFC4X3_ADD2_IfcElectricFlowStorageDevice_type; } +const IfcParse::entity& Ifc4x3_add2::IfcElectricFlowStorageDevice::Class() { return *IFC4X3_ADD2_IfcElectricFlowStorageDevice_type; } +Ifc4x3_add2::IfcElectricFlowStorageDevice::IfcElectricFlowStorageDevice(IfcEntityInstanceData* e) : IfcFlowStorageDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcElectricFlowStorageDevice_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcElectricFlowStorageDevice::IfcElectricFlowStorageDevice(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::Value > v9_PredefinedType) : IfcFlowStorageDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricFlowStorageDevice_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcElectricFlowStorageDeviceType +::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::Value Ifc4x3_add2::IfcElectricFlowStorageDeviceType::PredefinedType() const { return ::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcElectricFlowStorageDeviceType::setPredefinedType(::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcElectricFlowStorageDeviceType::declaration() const { return *IFC4X3_ADD2_IfcElectricFlowStorageDeviceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcElectricFlowStorageDeviceType::Class() { return *IFC4X3_ADD2_IfcElectricFlowStorageDeviceType_type; } +Ifc4x3_add2::IfcElectricFlowStorageDeviceType::IfcElectricFlowStorageDeviceType(IfcEntityInstanceData* e) : IfcFlowStorageDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcElectricFlowStorageDeviceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcElectricFlowStorageDeviceType::IfcElectricFlowStorageDeviceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::Value v10_PredefinedType) : IfcFlowStorageDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricFlowStorageDeviceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcElectricFlowTreatmentDevice +boost::optional< ::Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::Value > Ifc4x3_add2::IfcElectricFlowTreatmentDevice::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcElectricFlowTreatmentDevice::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcElectricFlowTreatmentDevice::declaration() const { return *IFC4X3_ADD2_IfcElectricFlowTreatmentDevice_type; } +const IfcParse::entity& Ifc4x3_add2::IfcElectricFlowTreatmentDevice::Class() { return *IFC4X3_ADD2_IfcElectricFlowTreatmentDevice_type; } +Ifc4x3_add2::IfcElectricFlowTreatmentDevice::IfcElectricFlowTreatmentDevice(IfcEntityInstanceData* e) : IfcFlowTreatmentDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcElectricFlowTreatmentDevice_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcElectricFlowTreatmentDevice::IfcElectricFlowTreatmentDevice(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::Value > v9_PredefinedType) : IfcFlowTreatmentDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricFlowTreatmentDevice_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcElectricFlowTreatmentDeviceType +::Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::Value Ifc4x3_add2::IfcElectricFlowTreatmentDeviceType::PredefinedType() const { return ::Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcElectricFlowTreatmentDeviceType::setPredefinedType(::Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcElectricFlowTreatmentDeviceType::declaration() const { return *IFC4X3_ADD2_IfcElectricFlowTreatmentDeviceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcElectricFlowTreatmentDeviceType::Class() { return *IFC4X3_ADD2_IfcElectricFlowTreatmentDeviceType_type; } +Ifc4x3_add2::IfcElectricFlowTreatmentDeviceType::IfcElectricFlowTreatmentDeviceType(IfcEntityInstanceData* e) : IfcFlowTreatmentDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcElectricFlowTreatmentDeviceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcElectricFlowTreatmentDeviceType::IfcElectricFlowTreatmentDeviceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::Value v10_PredefinedType) : IfcFlowTreatmentDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricFlowTreatmentDeviceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcElectricGenerator +boost::optional< ::Ifc4x3_add2::IfcElectricGeneratorTypeEnum::Value > Ifc4x3_add2::IfcElectricGenerator::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcElectricGeneratorTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcElectricGenerator::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcElectricGeneratorTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcElectricGeneratorTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcElectricGenerator::declaration() const { return *IFC4X3_ADD2_IfcElectricGenerator_type; } +const IfcParse::entity& Ifc4x3_add2::IfcElectricGenerator::Class() { return *IFC4X3_ADD2_IfcElectricGenerator_type; } +Ifc4x3_add2::IfcElectricGenerator::IfcElectricGenerator(IfcEntityInstanceData* e) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcElectricGenerator_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcElectricGenerator::IfcElectricGenerator(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcElectricGeneratorTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricGenerator_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcElectricGeneratorTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcElectricGeneratorType +::Ifc4x3_add2::IfcElectricGeneratorTypeEnum::Value Ifc4x3_add2::IfcElectricGeneratorType::PredefinedType() const { return ::Ifc4x3_add2::IfcElectricGeneratorTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcElectricGeneratorType::setPredefinedType(::Ifc4x3_add2::IfcElectricGeneratorTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcElectricGeneratorTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcElectricGeneratorType::declaration() const { return *IFC4X3_ADD2_IfcElectricGeneratorType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcElectricGeneratorType::Class() { return *IFC4X3_ADD2_IfcElectricGeneratorType_type; } +Ifc4x3_add2::IfcElectricGeneratorType::IfcElectricGeneratorType(IfcEntityInstanceData* e) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcElectricGeneratorType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcElectricGeneratorType::IfcElectricGeneratorType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcElectricGeneratorTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricGeneratorType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcElectricGeneratorTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcElectricMotor +boost::optional< ::Ifc4x3_add2::IfcElectricMotorTypeEnum::Value > Ifc4x3_add2::IfcElectricMotor::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcElectricMotorTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcElectricMotor::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcElectricMotorTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcElectricMotorTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcElectricMotor::declaration() const { return *IFC4X3_ADD2_IfcElectricMotor_type; } +const IfcParse::entity& Ifc4x3_add2::IfcElectricMotor::Class() { return *IFC4X3_ADD2_IfcElectricMotor_type; } +Ifc4x3_add2::IfcElectricMotor::IfcElectricMotor(IfcEntityInstanceData* e) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcElectricMotor_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcElectricMotor::IfcElectricMotor(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcElectricMotorTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricMotor_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcElectricMotorTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcElectricMotorType +::Ifc4x3_add2::IfcElectricMotorTypeEnum::Value Ifc4x3_add2::IfcElectricMotorType::PredefinedType() const { return ::Ifc4x3_add2::IfcElectricMotorTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcElectricMotorType::setPredefinedType(::Ifc4x3_add2::IfcElectricMotorTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcElectricMotorTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcElectricMotorType::declaration() const { return *IFC4X3_ADD2_IfcElectricMotorType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcElectricMotorType::Class() { return *IFC4X3_ADD2_IfcElectricMotorType_type; } +Ifc4x3_add2::IfcElectricMotorType::IfcElectricMotorType(IfcEntityInstanceData* e) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcElectricMotorType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcElectricMotorType::IfcElectricMotorType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcElectricMotorTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricMotorType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcElectricMotorTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcElectricTimeControl +boost::optional< ::Ifc4x3_add2::IfcElectricTimeControlTypeEnum::Value > Ifc4x3_add2::IfcElectricTimeControl::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcElectricTimeControlTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcElectricTimeControl::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcElectricTimeControlTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcElectricTimeControlTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcElectricTimeControl::declaration() const { return *IFC4X3_ADD2_IfcElectricTimeControl_type; } +const IfcParse::entity& Ifc4x3_add2::IfcElectricTimeControl::Class() { return *IFC4X3_ADD2_IfcElectricTimeControl_type; } +Ifc4x3_add2::IfcElectricTimeControl::IfcElectricTimeControl(IfcEntityInstanceData* e) : IfcFlowController((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcElectricTimeControl_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcElectricTimeControl::IfcElectricTimeControl(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcElectricTimeControlTypeEnum::Value > v9_PredefinedType) : IfcFlowController((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricTimeControl_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcElectricTimeControlTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcElectricTimeControlType +::Ifc4x3_add2::IfcElectricTimeControlTypeEnum::Value Ifc4x3_add2::IfcElectricTimeControlType::PredefinedType() const { return ::Ifc4x3_add2::IfcElectricTimeControlTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcElectricTimeControlType::setPredefinedType(::Ifc4x3_add2::IfcElectricTimeControlTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcElectricTimeControlTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcElectricTimeControlType::declaration() const { return *IFC4X3_ADD2_IfcElectricTimeControlType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcElectricTimeControlType::Class() { return *IFC4X3_ADD2_IfcElectricTimeControlType_type; } +Ifc4x3_add2::IfcElectricTimeControlType::IfcElectricTimeControlType(IfcEntityInstanceData* e) : IfcFlowControllerType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcElectricTimeControlType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcElectricTimeControlType::IfcElectricTimeControlType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcElectricTimeControlTypeEnum::Value v10_PredefinedType) : IfcFlowControllerType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElectricTimeControlType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcElectricTimeControlTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcElement +boost::optional< std::string > Ifc4x3_add2::IfcElement::Tag() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } std::string v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcElement::setTag(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } + +::Ifc4x3_add2::IfcRelFillsElement::list::ptr Ifc4x3_add2::IfcElement::FillsVoids() const { return data_->getInverse(IFC4X3_ADD2_IfcRelFillsElement_type, 5)->as(); } +::Ifc4x3_add2::IfcRelConnectsElements::list::ptr Ifc4x3_add2::IfcElement::ConnectedTo() const { return data_->getInverse(IFC4X3_ADD2_IfcRelConnectsElements_type, 5)->as(); } +::Ifc4x3_add2::IfcRelInterferesElements::list::ptr Ifc4x3_add2::IfcElement::IsInterferedByElements() const { return data_->getInverse(IFC4X3_ADD2_IfcRelInterferesElements_type, 5)->as(); } +::Ifc4x3_add2::IfcRelInterferesElements::list::ptr Ifc4x3_add2::IfcElement::InterferesElements() const { return data_->getInverse(IFC4X3_ADD2_IfcRelInterferesElements_type, 4)->as(); } +::Ifc4x3_add2::IfcRelProjectsElement::list::ptr Ifc4x3_add2::IfcElement::HasProjections() const { return data_->getInverse(IFC4X3_ADD2_IfcRelProjectsElement_type, 4)->as(); } +::Ifc4x3_add2::IfcRelVoidsElement::list::ptr Ifc4x3_add2::IfcElement::HasOpenings() const { return data_->getInverse(IFC4X3_ADD2_IfcRelVoidsElement_type, 4)->as(); } +::Ifc4x3_add2::IfcRelConnectsWithRealizingElements::list::ptr Ifc4x3_add2::IfcElement::IsConnectionRealization() const { return data_->getInverse(IFC4X3_ADD2_IfcRelConnectsWithRealizingElements_type, 7)->as(); } +::Ifc4x3_add2::IfcRelSpaceBoundary::list::ptr Ifc4x3_add2::IfcElement::ProvidesBoundaries() const { return data_->getInverse(IFC4X3_ADD2_IfcRelSpaceBoundary_type, 5)->as(); } +::Ifc4x3_add2::IfcRelConnectsElements::list::ptr Ifc4x3_add2::IfcElement::ConnectedFrom() const { return data_->getInverse(IFC4X3_ADD2_IfcRelConnectsElements_type, 6)->as(); } +::Ifc4x3_add2::IfcRelContainedInSpatialStructure::list::ptr Ifc4x3_add2::IfcElement::ContainedInStructure() const { return data_->getInverse(IFC4X3_ADD2_IfcRelContainedInSpatialStructure_type, 4)->as(); } +::Ifc4x3_add2::IfcRelCoversBldgElements::list::ptr Ifc4x3_add2::IfcElement::HasCoverings() const { return data_->getInverse(IFC4X3_ADD2_IfcRelCoversBldgElements_type, 4)->as(); } +::Ifc4x3_add2::IfcRelAdheresToElement::list::ptr Ifc4x3_add2::IfcElement::HasSurfaceFeatures() const { return data_->getInverse(IFC4X3_ADD2_IfcRelAdheresToElement_type, 4)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcElement::declaration() const { return *IFC4X3_ADD2_IfcElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcElement::Class() { return *IFC4X3_ADD2_IfcElement_type; } +Ifc4x3_add2::IfcElement::IfcElement(IfcEntityInstanceData* e) : IfcProduct((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcElement::IfcElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcProduct((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcElementAssembly +boost::optional< ::Ifc4x3_add2::IfcAssemblyPlaceEnum::Value > Ifc4x3_add2::IfcElementAssembly::AssemblyPlace() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcAssemblyPlaceEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcElementAssembly::setAssemblyPlace(boost::optional< ::Ifc4x3_add2::IfcAssemblyPlaceEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcAssemblyPlaceEnum::ToString(*v)));}data_->setArgument(8,attr);} } +boost::optional< ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::Value > Ifc4x3_add2::IfcElementAssembly::PredefinedType() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcElementAssembly::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcElementAssemblyTypeEnum::ToString(*v)));}data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcElementAssembly::declaration() const { return *IFC4X3_ADD2_IfcElementAssembly_type; } +const IfcParse::entity& Ifc4x3_add2::IfcElementAssembly::Class() { return *IFC4X3_ADD2_IfcElementAssembly_type; } +Ifc4x3_add2::IfcElementAssembly::IfcElementAssembly(IfcEntityInstanceData* e) : IfcElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcElementAssembly_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcElementAssembly::IfcElementAssembly(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcAssemblyPlaceEnum::Value > v9_AssemblyPlace, boost::optional< ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::Value > v10_PredefinedType) : IfcElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElementAssembly_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_AssemblyPlace) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_AssemblyPlace,::Ifc4x3_add2::IfcAssemblyPlaceEnum::ToString(*v9_AssemblyPlace))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v10_PredefinedType,::Ifc4x3_add2::IfcElementAssemblyTypeEnum::ToString(*v10_PredefinedType))));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } } + +// Function implementations for IfcElementAssemblyType +::Ifc4x3_add2::IfcElementAssemblyTypeEnum::Value Ifc4x3_add2::IfcElementAssemblyType::PredefinedType() const { return ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcElementAssemblyType::setPredefinedType(::Ifc4x3_add2::IfcElementAssemblyTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcElementAssemblyTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcElementAssemblyType::declaration() const { return *IFC4X3_ADD2_IfcElementAssemblyType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcElementAssemblyType::Class() { return *IFC4X3_ADD2_IfcElementAssemblyType_type; } +Ifc4x3_add2::IfcElementAssemblyType::IfcElementAssemblyType(IfcEntityInstanceData* e) : IfcElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcElementAssemblyType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcElementAssemblyType::IfcElementAssemblyType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::Value v10_PredefinedType) : IfcElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElementAssemblyType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcElementAssemblyTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcElementComponent + + +const IfcParse::entity& Ifc4x3_add2::IfcElementComponent::declaration() const { return *IFC4X3_ADD2_IfcElementComponent_type; } +const IfcParse::entity& Ifc4x3_add2::IfcElementComponent::Class() { return *IFC4X3_ADD2_IfcElementComponent_type; } +Ifc4x3_add2::IfcElementComponent::IfcElementComponent(IfcEntityInstanceData* e) : IfcElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcElementComponent_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcElementComponent::IfcElementComponent(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElementComponent_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcElementComponentType + + +const IfcParse::entity& Ifc4x3_add2::IfcElementComponentType::declaration() const { return *IFC4X3_ADD2_IfcElementComponentType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcElementComponentType::Class() { return *IFC4X3_ADD2_IfcElementComponentType_type; } +Ifc4x3_add2::IfcElementComponentType::IfcElementComponentType(IfcEntityInstanceData* e) : IfcElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcElementComponentType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcElementComponentType::IfcElementComponentType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElementComponentType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcElementQuantity +boost::optional< std::string > Ifc4x3_add2::IfcElementQuantity::MethodOfMeasurement() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcElementQuantity::setMethodOfMeasurement(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcPhysicalQuantity >::ptr Ifc4x3_add2::IfcElementQuantity::Quantities() const { aggregate_of_instance::ptr es = *data_->getArgument(5); return es->as< ::Ifc4x3_add2::IfcPhysicalQuantity >(); } +void Ifc4x3_add2::IfcElementQuantity::setQuantities(aggregate_of< ::Ifc4x3_add2::IfcPhysicalQuantity >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcElementQuantity::declaration() const { return *IFC4X3_ADD2_IfcElementQuantity_type; } +const IfcParse::entity& Ifc4x3_add2::IfcElementQuantity::Class() { return *IFC4X3_ADD2_IfcElementQuantity_type; } +Ifc4x3_add2::IfcElementQuantity::IfcElementQuantity(IfcEntityInstanceData* e) : IfcQuantitySet((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcElementQuantity_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcElementQuantity::IfcElementQuantity(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_MethodOfMeasurement, aggregate_of< ::Ifc4x3_add2::IfcPhysicalQuantity >::ptr v6_Quantities) : IfcQuantitySet((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElementQuantity_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_MethodOfMeasurement) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_MethodOfMeasurement));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_Quantities)->generalize());data_->setArgument(5,attr);} } + +// Function implementations for IfcElementType +boost::optional< std::string > Ifc4x3_add2::IfcElementType::ElementType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } std::string v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcElementType::setElementType(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcElementType::declaration() const { return *IFC4X3_ADD2_IfcElementType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcElementType::Class() { return *IFC4X3_ADD2_IfcElementType_type; } +Ifc4x3_add2::IfcElementType::IfcElementType(IfcEntityInstanceData* e) : IfcTypeProduct((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcElementType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcElementType::IfcElementType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcTypeProduct((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElementType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcElementarySurface +::Ifc4x3_add2::IfcAxis2Placement3D* Ifc4x3_add2::IfcElementarySurface::Position() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcAxis2Placement3D>(true); } +void Ifc4x3_add2::IfcElementarySurface::setPosition(::Ifc4x3_add2::IfcAxis2Placement3D* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcElementarySurface::declaration() const { return *IFC4X3_ADD2_IfcElementarySurface_type; } +const IfcParse::entity& Ifc4x3_add2::IfcElementarySurface::Class() { return *IFC4X3_ADD2_IfcElementarySurface_type; } +Ifc4x3_add2::IfcElementarySurface::IfcElementarySurface(IfcEntityInstanceData* e) : IfcSurface((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcElementarySurface_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcElementarySurface::IfcElementarySurface(::Ifc4x3_add2::IfcAxis2Placement3D* v1_Position) : IfcSurface((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcElementarySurface_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Position));data_->setArgument(0,attr);} } + +// Function implementations for IfcEllipse +double Ifc4x3_add2::IfcEllipse::SemiAxis1() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcEllipse::setSemiAxis1(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +double Ifc4x3_add2::IfcEllipse::SemiAxis2() const { double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcEllipse::setSemiAxis2(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcEllipse::declaration() const { return *IFC4X3_ADD2_IfcEllipse_type; } +const IfcParse::entity& Ifc4x3_add2::IfcEllipse::Class() { return *IFC4X3_ADD2_IfcEllipse_type; } +Ifc4x3_add2::IfcEllipse::IfcEllipse(IfcEntityInstanceData* e) : IfcConic((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcEllipse_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcEllipse::IfcEllipse(::Ifc4x3_add2::IfcAxis2Placement* v1_Position, double v2_SemiAxis1, double v3_SemiAxis2) : IfcConic((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEllipse_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Position));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_SemiAxis1));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_SemiAxis2));data_->setArgument(2,attr);} } + +// Function implementations for IfcEllipseProfileDef +double Ifc4x3_add2::IfcEllipseProfileDef::SemiAxis1() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcEllipseProfileDef::setSemiAxis1(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +double Ifc4x3_add2::IfcEllipseProfileDef::SemiAxis2() const { double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcEllipseProfileDef::setSemiAxis2(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcEllipseProfileDef::declaration() const { return *IFC4X3_ADD2_IfcEllipseProfileDef_type; } +const IfcParse::entity& Ifc4x3_add2::IfcEllipseProfileDef::Class() { return *IFC4X3_ADD2_IfcEllipseProfileDef_type; } +Ifc4x3_add2::IfcEllipseProfileDef::IfcEllipseProfileDef(IfcEntityInstanceData* e) : IfcParameterizedProfileDef((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcEllipseProfileDef_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcEllipseProfileDef::IfcEllipseProfileDef(::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_SemiAxis1, double v5_SemiAxis2) : IfcParameterizedProfileDef((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEllipseProfileDef_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_ProfileType,::Ifc4x3_add2::IfcProfileTypeEnum::ToString(v1_ProfileType))));data_->setArgument(0,attr);} if (v2_ProfileName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ProfileName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Position));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_SemiAxis1));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_SemiAxis2));data_->setArgument(4,attr);} } + +// Function implementations for IfcEnergyConversionDevice + + +const IfcParse::entity& Ifc4x3_add2::IfcEnergyConversionDevice::declaration() const { return *IFC4X3_ADD2_IfcEnergyConversionDevice_type; } +const IfcParse::entity& Ifc4x3_add2::IfcEnergyConversionDevice::Class() { return *IFC4X3_ADD2_IfcEnergyConversionDevice_type; } +Ifc4x3_add2::IfcEnergyConversionDevice::IfcEnergyConversionDevice(IfcEntityInstanceData* e) : IfcDistributionFlowElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcEnergyConversionDevice_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcEnergyConversionDevice::IfcEnergyConversionDevice(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcDistributionFlowElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEnergyConversionDevice_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcEnergyConversionDeviceType + + +const IfcParse::entity& Ifc4x3_add2::IfcEnergyConversionDeviceType::declaration() const { return *IFC4X3_ADD2_IfcEnergyConversionDeviceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcEnergyConversionDeviceType::Class() { return *IFC4X3_ADD2_IfcEnergyConversionDeviceType_type; } +Ifc4x3_add2::IfcEnergyConversionDeviceType::IfcEnergyConversionDeviceType(IfcEntityInstanceData* e) : IfcDistributionFlowElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcEnergyConversionDeviceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcEnergyConversionDeviceType::IfcEnergyConversionDeviceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcDistributionFlowElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEnergyConversionDeviceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcEngine +boost::optional< ::Ifc4x3_add2::IfcEngineTypeEnum::Value > Ifc4x3_add2::IfcEngine::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcEngineTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcEngine::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcEngineTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcEngineTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcEngine::declaration() const { return *IFC4X3_ADD2_IfcEngine_type; } +const IfcParse::entity& Ifc4x3_add2::IfcEngine::Class() { return *IFC4X3_ADD2_IfcEngine_type; } +Ifc4x3_add2::IfcEngine::IfcEngine(IfcEntityInstanceData* e) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcEngine_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcEngine::IfcEngine(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcEngineTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEngine_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcEngineTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcEngineType +::Ifc4x3_add2::IfcEngineTypeEnum::Value Ifc4x3_add2::IfcEngineType::PredefinedType() const { return ::Ifc4x3_add2::IfcEngineTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcEngineType::setPredefinedType(::Ifc4x3_add2::IfcEngineTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcEngineTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcEngineType::declaration() const { return *IFC4X3_ADD2_IfcEngineType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcEngineType::Class() { return *IFC4X3_ADD2_IfcEngineType_type; } +Ifc4x3_add2::IfcEngineType::IfcEngineType(IfcEntityInstanceData* e) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcEngineType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcEngineType::IfcEngineType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcEngineTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEngineType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcEngineTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcEvaporativeCooler +boost::optional< ::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::Value > Ifc4x3_add2::IfcEvaporativeCooler::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcEvaporativeCooler::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcEvaporativeCooler::declaration() const { return *IFC4X3_ADD2_IfcEvaporativeCooler_type; } +const IfcParse::entity& Ifc4x3_add2::IfcEvaporativeCooler::Class() { return *IFC4X3_ADD2_IfcEvaporativeCooler_type; } +Ifc4x3_add2::IfcEvaporativeCooler::IfcEvaporativeCooler(IfcEntityInstanceData* e) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcEvaporativeCooler_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcEvaporativeCooler::IfcEvaporativeCooler(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEvaporativeCooler_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcEvaporativeCoolerType +::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::Value Ifc4x3_add2::IfcEvaporativeCoolerType::PredefinedType() const { return ::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcEvaporativeCoolerType::setPredefinedType(::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcEvaporativeCoolerType::declaration() const { return *IFC4X3_ADD2_IfcEvaporativeCoolerType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcEvaporativeCoolerType::Class() { return *IFC4X3_ADD2_IfcEvaporativeCoolerType_type; } +Ifc4x3_add2::IfcEvaporativeCoolerType::IfcEvaporativeCoolerType(IfcEntityInstanceData* e) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcEvaporativeCoolerType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcEvaporativeCoolerType::IfcEvaporativeCoolerType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEvaporativeCoolerType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcEvaporator +boost::optional< ::Ifc4x3_add2::IfcEvaporatorTypeEnum::Value > Ifc4x3_add2::IfcEvaporator::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcEvaporatorTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcEvaporator::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcEvaporatorTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcEvaporatorTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcEvaporator::declaration() const { return *IFC4X3_ADD2_IfcEvaporator_type; } +const IfcParse::entity& Ifc4x3_add2::IfcEvaporator::Class() { return *IFC4X3_ADD2_IfcEvaporator_type; } +Ifc4x3_add2::IfcEvaporator::IfcEvaporator(IfcEntityInstanceData* e) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcEvaporator_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcEvaporator::IfcEvaporator(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcEvaporatorTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEvaporator_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcEvaporatorTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcEvaporatorType +::Ifc4x3_add2::IfcEvaporatorTypeEnum::Value Ifc4x3_add2::IfcEvaporatorType::PredefinedType() const { return ::Ifc4x3_add2::IfcEvaporatorTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcEvaporatorType::setPredefinedType(::Ifc4x3_add2::IfcEvaporatorTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcEvaporatorTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcEvaporatorType::declaration() const { return *IFC4X3_ADD2_IfcEvaporatorType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcEvaporatorType::Class() { return *IFC4X3_ADD2_IfcEvaporatorType_type; } +Ifc4x3_add2::IfcEvaporatorType::IfcEvaporatorType(IfcEntityInstanceData* e) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcEvaporatorType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcEvaporatorType::IfcEvaporatorType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcEvaporatorTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEvaporatorType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcEvaporatorTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcEvent +boost::optional< ::Ifc4x3_add2::IfcEventTypeEnum::Value > Ifc4x3_add2::IfcEvent::PredefinedType() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcEventTypeEnum::FromString(*data_->getArgument(7)); } +void Ifc4x3_add2::IfcEvent::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcEventTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcEventTypeEnum::ToString(*v)));}data_->setArgument(7,attr);} } +boost::optional< ::Ifc4x3_add2::IfcEventTriggerTypeEnum::Value > Ifc4x3_add2::IfcEvent::EventTriggerType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcEventTriggerTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcEvent::setEventTriggerType(boost::optional< ::Ifc4x3_add2::IfcEventTriggerTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcEventTriggerTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcEvent::UserDefinedEventTriggerType() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } std::string v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcEvent::setUserDefinedEventTriggerType(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(9,attr);} } +::Ifc4x3_add2::IfcEventTime* Ifc4x3_add2::IfcEvent::EventOccurenceTime() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(10)))->as<::Ifc4x3_add2::IfcEventTime>(true); } +void Ifc4x3_add2::IfcEvent::setEventOccurenceTime(::Ifc4x3_add2::IfcEventTime* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcEvent::declaration() const { return *IFC4X3_ADD2_IfcEvent_type; } +const IfcParse::entity& Ifc4x3_add2::IfcEvent::Class() { return *IFC4X3_ADD2_IfcEvent_type; } +Ifc4x3_add2::IfcEvent::IfcEvent(IfcEntityInstanceData* e) : IfcProcess((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcEvent_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcEvent::IfcEvent(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, boost::optional< ::Ifc4x3_add2::IfcEventTypeEnum::Value > v8_PredefinedType, boost::optional< ::Ifc4x3_add2::IfcEventTriggerTypeEnum::Value > v9_EventTriggerType, boost::optional< std::string > v10_UserDefinedEventTriggerType, ::Ifc4x3_add2::IfcEventTime* v11_EventOccurenceTime) : IfcProcess((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEvent_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Identification));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_LongDescription));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v8_PredefinedType,::Ifc4x3_add2::IfcEventTypeEnum::ToString(*v8_PredefinedType))));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_EventTriggerType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_EventTriggerType,::Ifc4x3_add2::IfcEventTriggerTypeEnum::ToString(*v9_EventTriggerType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_UserDefinedEventTriggerType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_UserDefinedEventTriggerType));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v11_EventOccurenceTime));data_->setArgument(10,attr);} } + +// Function implementations for IfcEventTime +boost::optional< std::string > Ifc4x3_add2::IfcEventTime::ActualDate() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } std::string v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcEventTime::setActualDate(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcEventTime::EarlyDate() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcEventTime::setEarlyDate(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcEventTime::LateDate() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcEventTime::setLateDate(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcEventTime::ScheduleDate() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } std::string v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcEventTime::setScheduleDate(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcEventTime::declaration() const { return *IFC4X3_ADD2_IfcEventTime_type; } +const IfcParse::entity& Ifc4x3_add2::IfcEventTime::Class() { return *IFC4X3_ADD2_IfcEventTime_type; } +Ifc4x3_add2::IfcEventTime::IfcEventTime(IfcEntityInstanceData* e) : IfcSchedulingTime((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcEventTime_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcEventTime::IfcEventTime(boost::optional< std::string > v1_Name, boost::optional< ::Ifc4x3_add2::IfcDataOriginEnum::Value > v2_DataOrigin, boost::optional< std::string > v3_UserDefinedDataOrigin, boost::optional< std::string > v4_ActualDate, boost::optional< std::string > v5_EarlyDate, boost::optional< std::string > v6_LateDate, boost::optional< std::string > v7_ScheduleDate) : IfcSchedulingTime((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEventTime_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_DataOrigin) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v2_DataOrigin,::Ifc4x3_add2::IfcDataOriginEnum::ToString(*v2_DataOrigin))));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_UserDefinedDataOrigin) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_UserDefinedDataOrigin));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_ActualDate) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_ActualDate));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_EarlyDate) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_EarlyDate));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_LateDate) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_LateDate));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_ScheduleDate) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_ScheduleDate));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } } + +// Function implementations for IfcEventType +::Ifc4x3_add2::IfcEventTypeEnum::Value Ifc4x3_add2::IfcEventType::PredefinedType() const { return ::Ifc4x3_add2::IfcEventTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcEventType::setPredefinedType(::Ifc4x3_add2::IfcEventTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcEventTypeEnum::ToString(v)));data_->setArgument(9,attr);} } +::Ifc4x3_add2::IfcEventTriggerTypeEnum::Value Ifc4x3_add2::IfcEventType::EventTriggerType() const { return ::Ifc4x3_add2::IfcEventTriggerTypeEnum::FromString(*data_->getArgument(10)); } +void Ifc4x3_add2::IfcEventType::setEventTriggerType(::Ifc4x3_add2::IfcEventTriggerTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcEventTriggerTypeEnum::ToString(v)));data_->setArgument(10,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcEventType::UserDefinedEventTriggerType() const { if(!data_->getArgument(11) || data_->getArgument(11)->isNull()) { return boost::none; } std::string v = *data_->getArgument(11); return v; } +void Ifc4x3_add2::IfcEventType::setUserDefinedEventTriggerType(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(11,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcEventType::declaration() const { return *IFC4X3_ADD2_IfcEventType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcEventType::Class() { return *IFC4X3_ADD2_IfcEventType_type; } +Ifc4x3_add2::IfcEventType::IfcEventType(IfcEntityInstanceData* e) : IfcTypeProcess((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcEventType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcEventType::IfcEventType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ProcessType, ::Ifc4x3_add2::IfcEventTypeEnum::Value v10_PredefinedType, ::Ifc4x3_add2::IfcEventTriggerTypeEnum::Value v11_EventTriggerType, boost::optional< std::string > v12_UserDefinedEventTriggerType) : IfcTypeProcess((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcEventType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_Identification));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongDescription));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ProcessType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ProcessType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcEventTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v11_EventTriggerType,::Ifc4x3_add2::IfcEventTriggerTypeEnum::ToString(v11_EventTriggerType))));data_->setArgument(10,attr);} if (v12_UserDefinedEventTriggerType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v12_UserDefinedEventTriggerType));data_->setArgument(11,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(11, attr); } } + +// Function implementations for IfcExtendedProperties +boost::optional< std::string > Ifc4x3_add2::IfcExtendedProperties::Name() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcExtendedProperties::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcExtendedProperties::Description() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcExtendedProperties::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcProperty >::ptr Ifc4x3_add2::IfcExtendedProperties::Properties() const { aggregate_of_instance::ptr es = *data_->getArgument(2); return es->as< ::Ifc4x3_add2::IfcProperty >(); } +void Ifc4x3_add2::IfcExtendedProperties::setProperties(aggregate_of< ::Ifc4x3_add2::IfcProperty >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcExtendedProperties::declaration() const { return *IFC4X3_ADD2_IfcExtendedProperties_type; } +const IfcParse::entity& Ifc4x3_add2::IfcExtendedProperties::Class() { return *IFC4X3_ADD2_IfcExtendedProperties_type; } +Ifc4x3_add2::IfcExtendedProperties::IfcExtendedProperties(IfcEntityInstanceData* e) : IfcPropertyAbstraction((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcExtendedProperties_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcExtendedProperties::IfcExtendedProperties(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_add2::IfcProperty >::ptr v3_Properties) : IfcPropertyAbstraction((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcExtendedProperties_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Properties)->generalize());data_->setArgument(2,attr);} } + +// Function implementations for IfcExternalInformation + + +const IfcParse::entity& Ifc4x3_add2::IfcExternalInformation::declaration() const { return *IFC4X3_ADD2_IfcExternalInformation_type; } +const IfcParse::entity& Ifc4x3_add2::IfcExternalInformation::Class() { return *IFC4X3_ADD2_IfcExternalInformation_type; } +Ifc4x3_add2::IfcExternalInformation::IfcExternalInformation(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcExternalInformation_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcExternalInformation::IfcExternalInformation() : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcExternalInformation_type); } + +// Function implementations for IfcExternalReference +boost::optional< std::string > Ifc4x3_add2::IfcExternalReference::Location() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcExternalReference::setLocation(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcExternalReference::Identification() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcExternalReference::setIdentification(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcExternalReference::Name() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcExternalReference::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } + +::Ifc4x3_add2::IfcExternalReferenceRelationship::list::ptr Ifc4x3_add2::IfcExternalReference::ExternalReferenceForResources() const { return data_->getInverse(IFC4X3_ADD2_IfcExternalReferenceRelationship_type, 2)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcExternalReference::declaration() const { return *IFC4X3_ADD2_IfcExternalReference_type; } +const IfcParse::entity& Ifc4x3_add2::IfcExternalReference::Class() { return *IFC4X3_ADD2_IfcExternalReference_type; } +Ifc4x3_add2::IfcExternalReference::IfcExternalReference(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcExternalReference_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcExternalReference::IfcExternalReference(boost::optional< std::string > v1_Location, boost::optional< std::string > v2_Identification, boost::optional< std::string > v3_Name) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcExternalReference_type); if (v1_Location) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Location));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Identification));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } } + +// Function implementations for IfcExternalReferenceRelationship +::Ifc4x3_add2::IfcExternalReference* Ifc4x3_add2::IfcExternalReferenceRelationship::RelatingReference() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcExternalReference>(true); } +void Ifc4x3_add2::IfcExternalReferenceRelationship::setRelatingReference(::Ifc4x3_add2::IfcExternalReference* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcResourceObjectSelect >::ptr Ifc4x3_add2::IfcExternalReferenceRelationship::RelatedResourceObjects() const { aggregate_of_instance::ptr es = *data_->getArgument(3); return es->as< ::Ifc4x3_add2::IfcResourceObjectSelect >(); } +void Ifc4x3_add2::IfcExternalReferenceRelationship::setRelatedResourceObjects(aggregate_of< ::Ifc4x3_add2::IfcResourceObjectSelect >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcExternalReferenceRelationship::declaration() const { return *IFC4X3_ADD2_IfcExternalReferenceRelationship_type; } +const IfcParse::entity& Ifc4x3_add2::IfcExternalReferenceRelationship::Class() { return *IFC4X3_ADD2_IfcExternalReferenceRelationship_type; } +Ifc4x3_add2::IfcExternalReferenceRelationship::IfcExternalReferenceRelationship(IfcEntityInstanceData* e) : IfcResourceLevelRelationship((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcExternalReferenceRelationship_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcExternalReferenceRelationship::IfcExternalReferenceRelationship(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcExternalReference* v3_RelatingReference, aggregate_of< ::Ifc4x3_add2::IfcResourceObjectSelect >::ptr v4_RelatedResourceObjects) : IfcResourceLevelRelationship((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcExternalReferenceRelationship_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_RelatingReference));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_RelatedResourceObjects)->generalize());data_->setArgument(3,attr);} } + +// Function implementations for IfcExternalSpatialElement +boost::optional< ::Ifc4x3_add2::IfcExternalSpatialElementTypeEnum::Value > Ifc4x3_add2::IfcExternalSpatialElement::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcExternalSpatialElementTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcExternalSpatialElement::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcExternalSpatialElementTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcExternalSpatialElementTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + +::Ifc4x3_add2::IfcRelSpaceBoundary::list::ptr Ifc4x3_add2::IfcExternalSpatialElement::BoundedBy() const { return data_->getInverse(IFC4X3_ADD2_IfcRelSpaceBoundary_type, 4)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcExternalSpatialElement::declaration() const { return *IFC4X3_ADD2_IfcExternalSpatialElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcExternalSpatialElement::Class() { return *IFC4X3_ADD2_IfcExternalSpatialElement_type; } +Ifc4x3_add2::IfcExternalSpatialElement::IfcExternalSpatialElement(IfcEntityInstanceData* e) : IfcExternalSpatialStructureElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcExternalSpatialElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcExternalSpatialElement::IfcExternalSpatialElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcExternalSpatialElementTypeEnum::Value > v9_PredefinedType) : IfcExternalSpatialStructureElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcExternalSpatialElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongName));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcExternalSpatialElementTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcExternalSpatialStructureElement + + +const IfcParse::entity& Ifc4x3_add2::IfcExternalSpatialStructureElement::declaration() const { return *IFC4X3_ADD2_IfcExternalSpatialStructureElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcExternalSpatialStructureElement::Class() { return *IFC4X3_ADD2_IfcExternalSpatialStructureElement_type; } +Ifc4x3_add2::IfcExternalSpatialStructureElement::IfcExternalSpatialStructureElement(IfcEntityInstanceData* e) : IfcSpatialElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcExternalSpatialStructureElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcExternalSpatialStructureElement::IfcExternalSpatialStructureElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName) : IfcSpatialElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcExternalSpatialStructureElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongName));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcExternallyDefinedHatchStyle + + +const IfcParse::entity& Ifc4x3_add2::IfcExternallyDefinedHatchStyle::declaration() const { return *IFC4X3_ADD2_IfcExternallyDefinedHatchStyle_type; } +const IfcParse::entity& Ifc4x3_add2::IfcExternallyDefinedHatchStyle::Class() { return *IFC4X3_ADD2_IfcExternallyDefinedHatchStyle_type; } +Ifc4x3_add2::IfcExternallyDefinedHatchStyle::IfcExternallyDefinedHatchStyle(IfcEntityInstanceData* e) : IfcExternalReference((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcExternallyDefinedHatchStyle_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcExternallyDefinedHatchStyle::IfcExternallyDefinedHatchStyle(boost::optional< std::string > v1_Location, boost::optional< std::string > v2_Identification, boost::optional< std::string > v3_Name) : IfcExternalReference((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcExternallyDefinedHatchStyle_type); if (v1_Location) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Location));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Identification));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } } + +// Function implementations for IfcExternallyDefinedSurfaceStyle + + +const IfcParse::entity& Ifc4x3_add2::IfcExternallyDefinedSurfaceStyle::declaration() const { return *IFC4X3_ADD2_IfcExternallyDefinedSurfaceStyle_type; } +const IfcParse::entity& Ifc4x3_add2::IfcExternallyDefinedSurfaceStyle::Class() { return *IFC4X3_ADD2_IfcExternallyDefinedSurfaceStyle_type; } +Ifc4x3_add2::IfcExternallyDefinedSurfaceStyle::IfcExternallyDefinedSurfaceStyle(IfcEntityInstanceData* e) : IfcExternalReference((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcExternallyDefinedSurfaceStyle_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcExternallyDefinedSurfaceStyle::IfcExternallyDefinedSurfaceStyle(boost::optional< std::string > v1_Location, boost::optional< std::string > v2_Identification, boost::optional< std::string > v3_Name) : IfcExternalReference((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcExternallyDefinedSurfaceStyle_type); if (v1_Location) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Location));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Identification));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } } + +// Function implementations for IfcExternallyDefinedTextFont + + +const IfcParse::entity& Ifc4x3_add2::IfcExternallyDefinedTextFont::declaration() const { return *IFC4X3_ADD2_IfcExternallyDefinedTextFont_type; } +const IfcParse::entity& Ifc4x3_add2::IfcExternallyDefinedTextFont::Class() { return *IFC4X3_ADD2_IfcExternallyDefinedTextFont_type; } +Ifc4x3_add2::IfcExternallyDefinedTextFont::IfcExternallyDefinedTextFont(IfcEntityInstanceData* e) : IfcExternalReference((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcExternallyDefinedTextFont_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcExternallyDefinedTextFont::IfcExternallyDefinedTextFont(boost::optional< std::string > v1_Location, boost::optional< std::string > v2_Identification, boost::optional< std::string > v3_Name) : IfcExternalReference((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcExternallyDefinedTextFont_type); if (v1_Location) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Location));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Identification));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } } + +// Function implementations for IfcExtrudedAreaSolid +::Ifc4x3_add2::IfcDirection* Ifc4x3_add2::IfcExtrudedAreaSolid::ExtrudedDirection() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcDirection>(true); } +void Ifc4x3_add2::IfcExtrudedAreaSolid::setExtrudedDirection(::Ifc4x3_add2::IfcDirection* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +double Ifc4x3_add2::IfcExtrudedAreaSolid::Depth() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcExtrudedAreaSolid::setDepth(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcExtrudedAreaSolid::declaration() const { return *IFC4X3_ADD2_IfcExtrudedAreaSolid_type; } +const IfcParse::entity& Ifc4x3_add2::IfcExtrudedAreaSolid::Class() { return *IFC4X3_ADD2_IfcExtrudedAreaSolid_type; } +Ifc4x3_add2::IfcExtrudedAreaSolid::IfcExtrudedAreaSolid(IfcEntityInstanceData* e) : IfcSweptAreaSolid((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcExtrudedAreaSolid_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcExtrudedAreaSolid::IfcExtrudedAreaSolid(::Ifc4x3_add2::IfcProfileDef* v1_SweptArea, ::Ifc4x3_add2::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_add2::IfcDirection* v3_ExtrudedDirection, double v4_Depth) : IfcSweptAreaSolid((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcExtrudedAreaSolid_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_SweptArea));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Position));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_ExtrudedDirection));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Depth));data_->setArgument(3,attr);} } + +// Function implementations for IfcExtrudedAreaSolidTapered +::Ifc4x3_add2::IfcProfileDef* Ifc4x3_add2::IfcExtrudedAreaSolidTapered::EndSweptArea() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcProfileDef>(true); } +void Ifc4x3_add2::IfcExtrudedAreaSolidTapered::setEndSweptArea(::Ifc4x3_add2::IfcProfileDef* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcExtrudedAreaSolidTapered::declaration() const { return *IFC4X3_ADD2_IfcExtrudedAreaSolidTapered_type; } +const IfcParse::entity& Ifc4x3_add2::IfcExtrudedAreaSolidTapered::Class() { return *IFC4X3_ADD2_IfcExtrudedAreaSolidTapered_type; } +Ifc4x3_add2::IfcExtrudedAreaSolidTapered::IfcExtrudedAreaSolidTapered(IfcEntityInstanceData* e) : IfcExtrudedAreaSolid((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcExtrudedAreaSolidTapered_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcExtrudedAreaSolidTapered::IfcExtrudedAreaSolidTapered(::Ifc4x3_add2::IfcProfileDef* v1_SweptArea, ::Ifc4x3_add2::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_add2::IfcDirection* v3_ExtrudedDirection, double v4_Depth, ::Ifc4x3_add2::IfcProfileDef* v5_EndSweptArea) : IfcExtrudedAreaSolid((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcExtrudedAreaSolidTapered_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_SweptArea));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Position));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_ExtrudedDirection));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Depth));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_EndSweptArea));data_->setArgument(4,attr);} } + +// Function implementations for IfcFace +aggregate_of< ::Ifc4x3_add2::IfcFaceBound >::ptr Ifc4x3_add2::IfcFace::Bounds() const { aggregate_of_instance::ptr es = *data_->getArgument(0); return es->as< ::Ifc4x3_add2::IfcFaceBound >(); } +void Ifc4x3_add2::IfcFace::setBounds(aggregate_of< ::Ifc4x3_add2::IfcFaceBound >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(0,attr);} } + +::Ifc4x3_add2::IfcTextureMap::list::ptr Ifc4x3_add2::IfcFace::HasTextureMaps() const { return data_->getInverse(IFC4X3_ADD2_IfcTextureMap_type, 2)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcFace::declaration() const { return *IFC4X3_ADD2_IfcFace_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFace::Class() { return *IFC4X3_ADD2_IfcFace_type; } +Ifc4x3_add2::IfcFace::IfcFace(IfcEntityInstanceData* e) : IfcTopologicalRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFace_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFace::IfcFace(aggregate_of< ::Ifc4x3_add2::IfcFaceBound >::ptr v1_Bounds) : IfcTopologicalRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFace_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Bounds)->generalize());data_->setArgument(0,attr);} } + +// Function implementations for IfcFaceBasedSurfaceModel +aggregate_of< ::Ifc4x3_add2::IfcConnectedFaceSet >::ptr Ifc4x3_add2::IfcFaceBasedSurfaceModel::FbsmFaces() const { aggregate_of_instance::ptr es = *data_->getArgument(0); return es->as< ::Ifc4x3_add2::IfcConnectedFaceSet >(); } +void Ifc4x3_add2::IfcFaceBasedSurfaceModel::setFbsmFaces(aggregate_of< ::Ifc4x3_add2::IfcConnectedFaceSet >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFaceBasedSurfaceModel::declaration() const { return *IFC4X3_ADD2_IfcFaceBasedSurfaceModel_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFaceBasedSurfaceModel::Class() { return *IFC4X3_ADD2_IfcFaceBasedSurfaceModel_type; } +Ifc4x3_add2::IfcFaceBasedSurfaceModel::IfcFaceBasedSurfaceModel(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFaceBasedSurfaceModel_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFaceBasedSurfaceModel::IfcFaceBasedSurfaceModel(aggregate_of< ::Ifc4x3_add2::IfcConnectedFaceSet >::ptr v1_FbsmFaces) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFaceBasedSurfaceModel_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_FbsmFaces)->generalize());data_->setArgument(0,attr);} } + +// Function implementations for IfcFaceBound +::Ifc4x3_add2::IfcLoop* Ifc4x3_add2::IfcFaceBound::Bound() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcLoop>(true); } +void Ifc4x3_add2::IfcFaceBound::setBound(::Ifc4x3_add2::IfcLoop* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +bool Ifc4x3_add2::IfcFaceBound::Orientation() const { bool v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcFaceBound::setOrientation(bool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFaceBound::declaration() const { return *IFC4X3_ADD2_IfcFaceBound_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFaceBound::Class() { return *IFC4X3_ADD2_IfcFaceBound_type; } +Ifc4x3_add2::IfcFaceBound::IfcFaceBound(IfcEntityInstanceData* e) : IfcTopologicalRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFaceBound_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFaceBound::IfcFaceBound(::Ifc4x3_add2::IfcLoop* v1_Bound, bool v2_Orientation) : IfcTopologicalRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFaceBound_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Bound));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Orientation));data_->setArgument(1,attr);} } + +// Function implementations for IfcFaceOuterBound + + +const IfcParse::entity& Ifc4x3_add2::IfcFaceOuterBound::declaration() const { return *IFC4X3_ADD2_IfcFaceOuterBound_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFaceOuterBound::Class() { return *IFC4X3_ADD2_IfcFaceOuterBound_type; } +Ifc4x3_add2::IfcFaceOuterBound::IfcFaceOuterBound(IfcEntityInstanceData* e) : IfcFaceBound((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFaceOuterBound_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFaceOuterBound::IfcFaceOuterBound(::Ifc4x3_add2::IfcLoop* v1_Bound, bool v2_Orientation) : IfcFaceBound((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFaceOuterBound_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Bound));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Orientation));data_->setArgument(1,attr);} } + +// Function implementations for IfcFaceSurface +::Ifc4x3_add2::IfcSurface* Ifc4x3_add2::IfcFaceSurface::FaceSurface() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcSurface>(true); } +void Ifc4x3_add2::IfcFaceSurface::setFaceSurface(::Ifc4x3_add2::IfcSurface* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +bool Ifc4x3_add2::IfcFaceSurface::SameSense() const { bool v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcFaceSurface::setSameSense(bool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFaceSurface::declaration() const { return *IFC4X3_ADD2_IfcFaceSurface_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFaceSurface::Class() { return *IFC4X3_ADD2_IfcFaceSurface_type; } +Ifc4x3_add2::IfcFaceSurface::IfcFaceSurface(IfcEntityInstanceData* e) : IfcFace((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFaceSurface_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFaceSurface::IfcFaceSurface(aggregate_of< ::Ifc4x3_add2::IfcFaceBound >::ptr v1_Bounds, ::Ifc4x3_add2::IfcSurface* v2_FaceSurface, bool v3_SameSense) : IfcFace((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFaceSurface_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Bounds)->generalize());data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_FaceSurface));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_SameSense));data_->setArgument(2,attr);} } + +// Function implementations for IfcFacetedBrep + + +const IfcParse::entity& Ifc4x3_add2::IfcFacetedBrep::declaration() const { return *IFC4X3_ADD2_IfcFacetedBrep_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFacetedBrep::Class() { return *IFC4X3_ADD2_IfcFacetedBrep_type; } +Ifc4x3_add2::IfcFacetedBrep::IfcFacetedBrep(IfcEntityInstanceData* e) : IfcManifoldSolidBrep((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFacetedBrep_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFacetedBrep::IfcFacetedBrep(::Ifc4x3_add2::IfcClosedShell* v1_Outer) : IfcManifoldSolidBrep((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFacetedBrep_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Outer));data_->setArgument(0,attr);} } + +// Function implementations for IfcFacetedBrepWithVoids +aggregate_of< ::Ifc4x3_add2::IfcClosedShell >::ptr Ifc4x3_add2::IfcFacetedBrepWithVoids::Voids() const { aggregate_of_instance::ptr es = *data_->getArgument(1); return es->as< ::Ifc4x3_add2::IfcClosedShell >(); } +void Ifc4x3_add2::IfcFacetedBrepWithVoids::setVoids(aggregate_of< ::Ifc4x3_add2::IfcClosedShell >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFacetedBrepWithVoids::declaration() const { return *IFC4X3_ADD2_IfcFacetedBrepWithVoids_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFacetedBrepWithVoids::Class() { return *IFC4X3_ADD2_IfcFacetedBrepWithVoids_type; } +Ifc4x3_add2::IfcFacetedBrepWithVoids::IfcFacetedBrepWithVoids(IfcEntityInstanceData* e) : IfcFacetedBrep((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFacetedBrepWithVoids_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFacetedBrepWithVoids::IfcFacetedBrepWithVoids(::Ifc4x3_add2::IfcClosedShell* v1_Outer, aggregate_of< ::Ifc4x3_add2::IfcClosedShell >::ptr v2_Voids) : IfcFacetedBrep((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFacetedBrepWithVoids_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Outer));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Voids)->generalize());data_->setArgument(1,attr);} } + +// Function implementations for IfcFacility + + +const IfcParse::entity& Ifc4x3_add2::IfcFacility::declaration() const { return *IFC4X3_ADD2_IfcFacility_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFacility::Class() { return *IFC4X3_ADD2_IfcFacility_type; } +Ifc4x3_add2::IfcFacility::IfcFacility(IfcEntityInstanceData* e) : IfcSpatialStructureElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFacility_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFacility::IfcFacility(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType) : IfcSpatialStructureElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFacility_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongName));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_CompositionType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_CompositionType,::Ifc4x3_add2::IfcElementCompositionEnum::ToString(*v9_CompositionType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcFacilityPart +::Ifc4x3_add2::IfcFacilityUsageEnum::Value Ifc4x3_add2::IfcFacilityPart::UsageType() const { return ::Ifc4x3_add2::IfcFacilityUsageEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcFacilityPart::setUsageType(::Ifc4x3_add2::IfcFacilityUsageEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcFacilityUsageEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFacilityPart::declaration() const { return *IFC4X3_ADD2_IfcFacilityPart_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFacilityPart::Class() { return *IFC4X3_ADD2_IfcFacilityPart_type; } +Ifc4x3_add2::IfcFacilityPart::IfcFacilityPart(IfcEntityInstanceData* e) : IfcSpatialStructureElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFacilityPart_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFacilityPart::IfcFacilityPart(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, ::Ifc4x3_add2::IfcFacilityUsageEnum::Value v10_UsageType) : IfcSpatialStructureElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFacilityPart_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongName));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_CompositionType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_CompositionType,::Ifc4x3_add2::IfcElementCompositionEnum::ToString(*v9_CompositionType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_UsageType,::Ifc4x3_add2::IfcFacilityUsageEnum::ToString(v10_UsageType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcFacilityPartCommon +boost::optional< ::Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::Value > Ifc4x3_add2::IfcFacilityPartCommon::PredefinedType() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::FromString(*data_->getArgument(10)); } +void Ifc4x3_add2::IfcFacilityPartCommon::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::ToString(*v)));}data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFacilityPartCommon::declaration() const { return *IFC4X3_ADD2_IfcFacilityPartCommon_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFacilityPartCommon::Class() { return *IFC4X3_ADD2_IfcFacilityPartCommon_type; } +Ifc4x3_add2::IfcFacilityPartCommon::IfcFacilityPartCommon(IfcEntityInstanceData* e) : IfcFacilityPart((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFacilityPartCommon_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFacilityPartCommon::IfcFacilityPartCommon(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, ::Ifc4x3_add2::IfcFacilityUsageEnum::Value v10_UsageType, boost::optional< ::Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::Value > v11_PredefinedType) : IfcFacilityPart((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFacilityPartCommon_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongName));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_CompositionType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_CompositionType,::Ifc4x3_add2::IfcElementCompositionEnum::ToString(*v9_CompositionType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_UsageType,::Ifc4x3_add2::IfcFacilityUsageEnum::ToString(v10_UsageType))));data_->setArgument(9,attr);} if (v11_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v11_PredefinedType,::Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::ToString(*v11_PredefinedType))));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } } + +// Function implementations for IfcFailureConnectionCondition +boost::optional< double > Ifc4x3_add2::IfcFailureConnectionCondition::TensionFailureX() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcFailureConnectionCondition::setTensionFailureX(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< double > Ifc4x3_add2::IfcFailureConnectionCondition::TensionFailureY() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcFailureConnectionCondition::setTensionFailureY(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< double > Ifc4x3_add2::IfcFailureConnectionCondition::TensionFailureZ() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcFailureConnectionCondition::setTensionFailureZ(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +boost::optional< double > Ifc4x3_add2::IfcFailureConnectionCondition::CompressionFailureX() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcFailureConnectionCondition::setCompressionFailureX(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< double > Ifc4x3_add2::IfcFailureConnectionCondition::CompressionFailureY() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } double v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcFailureConnectionCondition::setCompressionFailureY(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< double > Ifc4x3_add2::IfcFailureConnectionCondition::CompressionFailureZ() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcFailureConnectionCondition::setCompressionFailureZ(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFailureConnectionCondition::declaration() const { return *IFC4X3_ADD2_IfcFailureConnectionCondition_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFailureConnectionCondition::Class() { return *IFC4X3_ADD2_IfcFailureConnectionCondition_type; } +Ifc4x3_add2::IfcFailureConnectionCondition::IfcFailureConnectionCondition(IfcEntityInstanceData* e) : IfcStructuralConnectionCondition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFailureConnectionCondition_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFailureConnectionCondition::IfcFailureConnectionCondition(boost::optional< std::string > v1_Name, boost::optional< double > v2_TensionFailureX, boost::optional< double > v3_TensionFailureY, boost::optional< double > v4_TensionFailureZ, boost::optional< double > v5_CompressionFailureX, boost::optional< double > v6_CompressionFailureY, boost::optional< double > v7_CompressionFailureZ) : IfcStructuralConnectionCondition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFailureConnectionCondition_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_TensionFailureX) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_TensionFailureX));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_TensionFailureY) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_TensionFailureY));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_TensionFailureZ) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_TensionFailureZ));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_CompressionFailureX) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_CompressionFailureX));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_CompressionFailureY) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_CompressionFailureY));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_CompressionFailureZ) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_CompressionFailureZ));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } } + +// Function implementations for IfcFan +boost::optional< ::Ifc4x3_add2::IfcFanTypeEnum::Value > Ifc4x3_add2::IfcFan::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcFanTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcFan::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcFanTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcFanTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFan::declaration() const { return *IFC4X3_ADD2_IfcFan_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFan::Class() { return *IFC4X3_ADD2_IfcFan_type; } +Ifc4x3_add2::IfcFan::IfcFan(IfcEntityInstanceData* e) : IfcFlowMovingDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFan_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFan::IfcFan(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcFanTypeEnum::Value > v9_PredefinedType) : IfcFlowMovingDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFan_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcFanTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcFanType +::Ifc4x3_add2::IfcFanTypeEnum::Value Ifc4x3_add2::IfcFanType::PredefinedType() const { return ::Ifc4x3_add2::IfcFanTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcFanType::setPredefinedType(::Ifc4x3_add2::IfcFanTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcFanTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFanType::declaration() const { return *IFC4X3_ADD2_IfcFanType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFanType::Class() { return *IFC4X3_ADD2_IfcFanType_type; } +Ifc4x3_add2::IfcFanType::IfcFanType(IfcEntityInstanceData* e) : IfcFlowMovingDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFanType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFanType::IfcFanType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcFanTypeEnum::Value v10_PredefinedType) : IfcFlowMovingDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFanType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcFanTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcFastener +boost::optional< ::Ifc4x3_add2::IfcFastenerTypeEnum::Value > Ifc4x3_add2::IfcFastener::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcFastenerTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcFastener::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcFastenerTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcFastenerTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFastener::declaration() const { return *IFC4X3_ADD2_IfcFastener_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFastener::Class() { return *IFC4X3_ADD2_IfcFastener_type; } +Ifc4x3_add2::IfcFastener::IfcFastener(IfcEntityInstanceData* e) : IfcElementComponent((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFastener_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFastener::IfcFastener(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcFastenerTypeEnum::Value > v9_PredefinedType) : IfcElementComponent((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFastener_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcFastenerTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcFastenerType +::Ifc4x3_add2::IfcFastenerTypeEnum::Value Ifc4x3_add2::IfcFastenerType::PredefinedType() const { return ::Ifc4x3_add2::IfcFastenerTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcFastenerType::setPredefinedType(::Ifc4x3_add2::IfcFastenerTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcFastenerTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFastenerType::declaration() const { return *IFC4X3_ADD2_IfcFastenerType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFastenerType::Class() { return *IFC4X3_ADD2_IfcFastenerType_type; } +Ifc4x3_add2::IfcFastenerType::IfcFastenerType(IfcEntityInstanceData* e) : IfcElementComponentType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFastenerType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFastenerType::IfcFastenerType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcFastenerTypeEnum::Value v10_PredefinedType) : IfcElementComponentType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFastenerType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcFastenerTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcFeatureElement + + +const IfcParse::entity& Ifc4x3_add2::IfcFeatureElement::declaration() const { return *IFC4X3_ADD2_IfcFeatureElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFeatureElement::Class() { return *IFC4X3_ADD2_IfcFeatureElement_type; } +Ifc4x3_add2::IfcFeatureElement::IfcFeatureElement(IfcEntityInstanceData* e) : IfcElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFeatureElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFeatureElement::IfcFeatureElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFeatureElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcFeatureElementAddition + +::Ifc4x3_add2::IfcRelProjectsElement::list::ptr Ifc4x3_add2::IfcFeatureElementAddition::ProjectsElements() const { return data_->getInverse(IFC4X3_ADD2_IfcRelProjectsElement_type, 5)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcFeatureElementAddition::declaration() const { return *IFC4X3_ADD2_IfcFeatureElementAddition_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFeatureElementAddition::Class() { return *IFC4X3_ADD2_IfcFeatureElementAddition_type; } +Ifc4x3_add2::IfcFeatureElementAddition::IfcFeatureElementAddition(IfcEntityInstanceData* e) : IfcFeatureElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFeatureElementAddition_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFeatureElementAddition::IfcFeatureElementAddition(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcFeatureElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFeatureElementAddition_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcFeatureElementSubtraction + +::Ifc4x3_add2::IfcRelVoidsElement::list::ptr Ifc4x3_add2::IfcFeatureElementSubtraction::VoidsElements() const { return data_->getInverse(IFC4X3_ADD2_IfcRelVoidsElement_type, 5)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcFeatureElementSubtraction::declaration() const { return *IFC4X3_ADD2_IfcFeatureElementSubtraction_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFeatureElementSubtraction::Class() { return *IFC4X3_ADD2_IfcFeatureElementSubtraction_type; } +Ifc4x3_add2::IfcFeatureElementSubtraction::IfcFeatureElementSubtraction(IfcEntityInstanceData* e) : IfcFeatureElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFeatureElementSubtraction_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFeatureElementSubtraction::IfcFeatureElementSubtraction(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcFeatureElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFeatureElementSubtraction_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcFillAreaStyle +aggregate_of< ::Ifc4x3_add2::IfcFillStyleSelect >::ptr Ifc4x3_add2::IfcFillAreaStyle::FillStyles() const { aggregate_of_instance::ptr es = *data_->getArgument(1); return es->as< ::Ifc4x3_add2::IfcFillStyleSelect >(); } +void Ifc4x3_add2::IfcFillAreaStyle::setFillStyles(aggregate_of< ::Ifc4x3_add2::IfcFillStyleSelect >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(1,attr);} } +boost::optional< bool > Ifc4x3_add2::IfcFillAreaStyle::ModelOrDraughting() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } bool v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcFillAreaStyle::setModelOrDraughting(boost::optional< bool > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFillAreaStyle::declaration() const { return *IFC4X3_ADD2_IfcFillAreaStyle_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFillAreaStyle::Class() { return *IFC4X3_ADD2_IfcFillAreaStyle_type; } +Ifc4x3_add2::IfcFillAreaStyle::IfcFillAreaStyle(IfcEntityInstanceData* e) : IfcPresentationStyle((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFillAreaStyle_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFillAreaStyle::IfcFillAreaStyle(boost::optional< std::string > v1_Name, aggregate_of< ::Ifc4x3_add2::IfcFillStyleSelect >::ptr v2_FillStyles, boost::optional< bool > v3_ModelOrDraughting) : IfcPresentationStyle((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFillAreaStyle_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_FillStyles)->generalize());data_->setArgument(1,attr);} if (v3_ModelOrDraughting) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_ModelOrDraughting));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } } + +// Function implementations for IfcFillAreaStyleHatching +::Ifc4x3_add2::IfcCurveStyle* Ifc4x3_add2::IfcFillAreaStyleHatching::HatchLineAppearance() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcCurveStyle>(true); } +void Ifc4x3_add2::IfcFillAreaStyleHatching::setHatchLineAppearance(::Ifc4x3_add2::IfcCurveStyle* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcHatchLineDistanceSelect* Ifc4x3_add2::IfcFillAreaStyleHatching::StartOfNextHatchLine() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcHatchLineDistanceSelect>(true); } +void Ifc4x3_add2::IfcFillAreaStyleHatching::setStartOfNextHatchLine(::Ifc4x3_add2::IfcHatchLineDistanceSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcCartesianPoint* Ifc4x3_add2::IfcFillAreaStyleHatching::PointOfReferenceHatchLine() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcCartesianPoint>(true); } +void Ifc4x3_add2::IfcFillAreaStyleHatching::setPointOfReferenceHatchLine(::Ifc4x3_add2::IfcCartesianPoint* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcCartesianPoint* Ifc4x3_add2::IfcFillAreaStyleHatching::PatternStart() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcCartesianPoint>(true); } +void Ifc4x3_add2::IfcFillAreaStyleHatching::setPatternStart(::Ifc4x3_add2::IfcCartesianPoint* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +double Ifc4x3_add2::IfcFillAreaStyleHatching::HatchLineAngle() const { double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcFillAreaStyleHatching::setHatchLineAngle(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFillAreaStyleHatching::declaration() const { return *IFC4X3_ADD2_IfcFillAreaStyleHatching_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFillAreaStyleHatching::Class() { return *IFC4X3_ADD2_IfcFillAreaStyleHatching_type; } +Ifc4x3_add2::IfcFillAreaStyleHatching::IfcFillAreaStyleHatching(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFillAreaStyleHatching_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFillAreaStyleHatching::IfcFillAreaStyleHatching(::Ifc4x3_add2::IfcCurveStyle* v1_HatchLineAppearance, ::Ifc4x3_add2::IfcHatchLineDistanceSelect* v2_StartOfNextHatchLine, ::Ifc4x3_add2::IfcCartesianPoint* v3_PointOfReferenceHatchLine, ::Ifc4x3_add2::IfcCartesianPoint* v4_PatternStart, double v5_HatchLineAngle) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFillAreaStyleHatching_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_HatchLineAppearance));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_StartOfNextHatchLine));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_PointOfReferenceHatchLine));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_PatternStart));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_HatchLineAngle));data_->setArgument(4,attr);} } + +// Function implementations for IfcFillAreaStyleTiles +aggregate_of< ::Ifc4x3_add2::IfcVector >::ptr Ifc4x3_add2::IfcFillAreaStyleTiles::TilingPattern() const { aggregate_of_instance::ptr es = *data_->getArgument(0); return es->as< ::Ifc4x3_add2::IfcVector >(); } +void Ifc4x3_add2::IfcFillAreaStyleTiles::setTilingPattern(aggregate_of< ::Ifc4x3_add2::IfcVector >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(0,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcStyledItem >::ptr Ifc4x3_add2::IfcFillAreaStyleTiles::Tiles() const { aggregate_of_instance::ptr es = *data_->getArgument(1); return es->as< ::Ifc4x3_add2::IfcStyledItem >(); } +void Ifc4x3_add2::IfcFillAreaStyleTiles::setTiles(aggregate_of< ::Ifc4x3_add2::IfcStyledItem >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(1,attr);} } +double Ifc4x3_add2::IfcFillAreaStyleTiles::TilingScale() const { double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcFillAreaStyleTiles::setTilingScale(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFillAreaStyleTiles::declaration() const { return *IFC4X3_ADD2_IfcFillAreaStyleTiles_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFillAreaStyleTiles::Class() { return *IFC4X3_ADD2_IfcFillAreaStyleTiles_type; } +Ifc4x3_add2::IfcFillAreaStyleTiles::IfcFillAreaStyleTiles(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFillAreaStyleTiles_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFillAreaStyleTiles::IfcFillAreaStyleTiles(aggregate_of< ::Ifc4x3_add2::IfcVector >::ptr v1_TilingPattern, aggregate_of< ::Ifc4x3_add2::IfcStyledItem >::ptr v2_Tiles, double v3_TilingScale) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFillAreaStyleTiles_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_TilingPattern)->generalize());data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Tiles)->generalize());data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_TilingScale));data_->setArgument(2,attr);} } + +// Function implementations for IfcFilter +boost::optional< ::Ifc4x3_add2::IfcFilterTypeEnum::Value > Ifc4x3_add2::IfcFilter::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcFilterTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcFilter::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcFilterTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcFilterTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFilter::declaration() const { return *IFC4X3_ADD2_IfcFilter_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFilter::Class() { return *IFC4X3_ADD2_IfcFilter_type; } +Ifc4x3_add2::IfcFilter::IfcFilter(IfcEntityInstanceData* e) : IfcFlowTreatmentDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFilter_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFilter::IfcFilter(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcFilterTypeEnum::Value > v9_PredefinedType) : IfcFlowTreatmentDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFilter_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcFilterTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcFilterType +::Ifc4x3_add2::IfcFilterTypeEnum::Value Ifc4x3_add2::IfcFilterType::PredefinedType() const { return ::Ifc4x3_add2::IfcFilterTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcFilterType::setPredefinedType(::Ifc4x3_add2::IfcFilterTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcFilterTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFilterType::declaration() const { return *IFC4X3_ADD2_IfcFilterType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFilterType::Class() { return *IFC4X3_ADD2_IfcFilterType_type; } +Ifc4x3_add2::IfcFilterType::IfcFilterType(IfcEntityInstanceData* e) : IfcFlowTreatmentDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFilterType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFilterType::IfcFilterType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcFilterTypeEnum::Value v10_PredefinedType) : IfcFlowTreatmentDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFilterType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcFilterTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcFireSuppressionTerminal +boost::optional< ::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::Value > Ifc4x3_add2::IfcFireSuppressionTerminal::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcFireSuppressionTerminal::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFireSuppressionTerminal::declaration() const { return *IFC4X3_ADD2_IfcFireSuppressionTerminal_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFireSuppressionTerminal::Class() { return *IFC4X3_ADD2_IfcFireSuppressionTerminal_type; } +Ifc4x3_add2::IfcFireSuppressionTerminal::IfcFireSuppressionTerminal(IfcEntityInstanceData* e) : IfcFlowTerminal((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFireSuppressionTerminal_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFireSuppressionTerminal::IfcFireSuppressionTerminal(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFireSuppressionTerminal_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcFireSuppressionTerminalType +::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::Value Ifc4x3_add2::IfcFireSuppressionTerminalType::PredefinedType() const { return ::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcFireSuppressionTerminalType::setPredefinedType(::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFireSuppressionTerminalType::declaration() const { return *IFC4X3_ADD2_IfcFireSuppressionTerminalType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFireSuppressionTerminalType::Class() { return *IFC4X3_ADD2_IfcFireSuppressionTerminalType_type; } +Ifc4x3_add2::IfcFireSuppressionTerminalType::IfcFireSuppressionTerminalType(IfcEntityInstanceData* e) : IfcFlowTerminalType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFireSuppressionTerminalType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFireSuppressionTerminalType::IfcFireSuppressionTerminalType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFireSuppressionTerminalType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcFixedReferenceSweptAreaSolid +::Ifc4x3_add2::IfcDirection* Ifc4x3_add2::IfcFixedReferenceSweptAreaSolid::FixedReference() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcDirection>(true); } +void Ifc4x3_add2::IfcFixedReferenceSweptAreaSolid::setFixedReference(::Ifc4x3_add2::IfcDirection* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFixedReferenceSweptAreaSolid::declaration() const { return *IFC4X3_ADD2_IfcFixedReferenceSweptAreaSolid_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFixedReferenceSweptAreaSolid::Class() { return *IFC4X3_ADD2_IfcFixedReferenceSweptAreaSolid_type; } +Ifc4x3_add2::IfcFixedReferenceSweptAreaSolid::IfcFixedReferenceSweptAreaSolid(IfcEntityInstanceData* e) : IfcDirectrixCurveSweptAreaSolid((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFixedReferenceSweptAreaSolid_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFixedReferenceSweptAreaSolid::IfcFixedReferenceSweptAreaSolid(::Ifc4x3_add2::IfcProfileDef* v1_SweptArea, ::Ifc4x3_add2::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_add2::IfcCurve* v3_Directrix, ::Ifc4x3_add2::IfcCurveMeasureSelect* v4_StartParam, ::Ifc4x3_add2::IfcCurveMeasureSelect* v5_EndParam, ::Ifc4x3_add2::IfcDirection* v6_FixedReference) : IfcDirectrixCurveSweptAreaSolid((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFixedReferenceSweptAreaSolid_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_SweptArea));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Position));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Directrix));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_StartParam));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_EndParam));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_FixedReference));data_->setArgument(5,attr);} } + +// Function implementations for IfcFlowController + + +const IfcParse::entity& Ifc4x3_add2::IfcFlowController::declaration() const { return *IFC4X3_ADD2_IfcFlowController_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFlowController::Class() { return *IFC4X3_ADD2_IfcFlowController_type; } +Ifc4x3_add2::IfcFlowController::IfcFlowController(IfcEntityInstanceData* e) : IfcDistributionFlowElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFlowController_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFlowController::IfcFlowController(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcDistributionFlowElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFlowController_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcFlowControllerType + + +const IfcParse::entity& Ifc4x3_add2::IfcFlowControllerType::declaration() const { return *IFC4X3_ADD2_IfcFlowControllerType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFlowControllerType::Class() { return *IFC4X3_ADD2_IfcFlowControllerType_type; } +Ifc4x3_add2::IfcFlowControllerType::IfcFlowControllerType(IfcEntityInstanceData* e) : IfcDistributionFlowElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFlowControllerType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFlowControllerType::IfcFlowControllerType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcDistributionFlowElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFlowControllerType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcFlowFitting + + +const IfcParse::entity& Ifc4x3_add2::IfcFlowFitting::declaration() const { return *IFC4X3_ADD2_IfcFlowFitting_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFlowFitting::Class() { return *IFC4X3_ADD2_IfcFlowFitting_type; } +Ifc4x3_add2::IfcFlowFitting::IfcFlowFitting(IfcEntityInstanceData* e) : IfcDistributionFlowElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFlowFitting_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFlowFitting::IfcFlowFitting(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcDistributionFlowElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFlowFitting_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcFlowFittingType + + +const IfcParse::entity& Ifc4x3_add2::IfcFlowFittingType::declaration() const { return *IFC4X3_ADD2_IfcFlowFittingType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFlowFittingType::Class() { return *IFC4X3_ADD2_IfcFlowFittingType_type; } +Ifc4x3_add2::IfcFlowFittingType::IfcFlowFittingType(IfcEntityInstanceData* e) : IfcDistributionFlowElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFlowFittingType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFlowFittingType::IfcFlowFittingType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcDistributionFlowElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFlowFittingType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcFlowInstrument +boost::optional< ::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::Value > Ifc4x3_add2::IfcFlowInstrument::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcFlowInstrument::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFlowInstrument::declaration() const { return *IFC4X3_ADD2_IfcFlowInstrument_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFlowInstrument::Class() { return *IFC4X3_ADD2_IfcFlowInstrument_type; } +Ifc4x3_add2::IfcFlowInstrument::IfcFlowInstrument(IfcEntityInstanceData* e) : IfcDistributionControlElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFlowInstrument_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFlowInstrument::IfcFlowInstrument(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::Value > v9_PredefinedType) : IfcDistributionControlElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFlowInstrument_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcFlowInstrumentType +::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::Value Ifc4x3_add2::IfcFlowInstrumentType::PredefinedType() const { return ::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcFlowInstrumentType::setPredefinedType(::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFlowInstrumentType::declaration() const { return *IFC4X3_ADD2_IfcFlowInstrumentType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFlowInstrumentType::Class() { return *IFC4X3_ADD2_IfcFlowInstrumentType_type; } +Ifc4x3_add2::IfcFlowInstrumentType::IfcFlowInstrumentType(IfcEntityInstanceData* e) : IfcDistributionControlElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFlowInstrumentType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFlowInstrumentType::IfcFlowInstrumentType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::Value v10_PredefinedType) : IfcDistributionControlElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFlowInstrumentType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcFlowMeter +boost::optional< ::Ifc4x3_add2::IfcFlowMeterTypeEnum::Value > Ifc4x3_add2::IfcFlowMeter::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcFlowMeterTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcFlowMeter::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcFlowMeterTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcFlowMeterTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFlowMeter::declaration() const { return *IFC4X3_ADD2_IfcFlowMeter_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFlowMeter::Class() { return *IFC4X3_ADD2_IfcFlowMeter_type; } +Ifc4x3_add2::IfcFlowMeter::IfcFlowMeter(IfcEntityInstanceData* e) : IfcFlowController((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFlowMeter_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFlowMeter::IfcFlowMeter(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcFlowMeterTypeEnum::Value > v9_PredefinedType) : IfcFlowController((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFlowMeter_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcFlowMeterTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcFlowMeterType +::Ifc4x3_add2::IfcFlowMeterTypeEnum::Value Ifc4x3_add2::IfcFlowMeterType::PredefinedType() const { return ::Ifc4x3_add2::IfcFlowMeterTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcFlowMeterType::setPredefinedType(::Ifc4x3_add2::IfcFlowMeterTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcFlowMeterTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFlowMeterType::declaration() const { return *IFC4X3_ADD2_IfcFlowMeterType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFlowMeterType::Class() { return *IFC4X3_ADD2_IfcFlowMeterType_type; } +Ifc4x3_add2::IfcFlowMeterType::IfcFlowMeterType(IfcEntityInstanceData* e) : IfcFlowControllerType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFlowMeterType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFlowMeterType::IfcFlowMeterType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcFlowMeterTypeEnum::Value v10_PredefinedType) : IfcFlowControllerType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFlowMeterType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcFlowMeterTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcFlowMovingDevice + + +const IfcParse::entity& Ifc4x3_add2::IfcFlowMovingDevice::declaration() const { return *IFC4X3_ADD2_IfcFlowMovingDevice_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFlowMovingDevice::Class() { return *IFC4X3_ADD2_IfcFlowMovingDevice_type; } +Ifc4x3_add2::IfcFlowMovingDevice::IfcFlowMovingDevice(IfcEntityInstanceData* e) : IfcDistributionFlowElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFlowMovingDevice_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFlowMovingDevice::IfcFlowMovingDevice(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcDistributionFlowElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFlowMovingDevice_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcFlowMovingDeviceType + + +const IfcParse::entity& Ifc4x3_add2::IfcFlowMovingDeviceType::declaration() const { return *IFC4X3_ADD2_IfcFlowMovingDeviceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFlowMovingDeviceType::Class() { return *IFC4X3_ADD2_IfcFlowMovingDeviceType_type; } +Ifc4x3_add2::IfcFlowMovingDeviceType::IfcFlowMovingDeviceType(IfcEntityInstanceData* e) : IfcDistributionFlowElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFlowMovingDeviceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFlowMovingDeviceType::IfcFlowMovingDeviceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcDistributionFlowElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFlowMovingDeviceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcFlowSegment + + +const IfcParse::entity& Ifc4x3_add2::IfcFlowSegment::declaration() const { return *IFC4X3_ADD2_IfcFlowSegment_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFlowSegment::Class() { return *IFC4X3_ADD2_IfcFlowSegment_type; } +Ifc4x3_add2::IfcFlowSegment::IfcFlowSegment(IfcEntityInstanceData* e) : IfcDistributionFlowElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFlowSegment_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFlowSegment::IfcFlowSegment(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcDistributionFlowElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFlowSegment_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcFlowSegmentType + + +const IfcParse::entity& Ifc4x3_add2::IfcFlowSegmentType::declaration() const { return *IFC4X3_ADD2_IfcFlowSegmentType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFlowSegmentType::Class() { return *IFC4X3_ADD2_IfcFlowSegmentType_type; } +Ifc4x3_add2::IfcFlowSegmentType::IfcFlowSegmentType(IfcEntityInstanceData* e) : IfcDistributionFlowElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFlowSegmentType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFlowSegmentType::IfcFlowSegmentType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcDistributionFlowElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFlowSegmentType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcFlowStorageDevice + + +const IfcParse::entity& Ifc4x3_add2::IfcFlowStorageDevice::declaration() const { return *IFC4X3_ADD2_IfcFlowStorageDevice_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFlowStorageDevice::Class() { return *IFC4X3_ADD2_IfcFlowStorageDevice_type; } +Ifc4x3_add2::IfcFlowStorageDevice::IfcFlowStorageDevice(IfcEntityInstanceData* e) : IfcDistributionFlowElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFlowStorageDevice_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFlowStorageDevice::IfcFlowStorageDevice(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcDistributionFlowElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFlowStorageDevice_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcFlowStorageDeviceType + + +const IfcParse::entity& Ifc4x3_add2::IfcFlowStorageDeviceType::declaration() const { return *IFC4X3_ADD2_IfcFlowStorageDeviceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFlowStorageDeviceType::Class() { return *IFC4X3_ADD2_IfcFlowStorageDeviceType_type; } +Ifc4x3_add2::IfcFlowStorageDeviceType::IfcFlowStorageDeviceType(IfcEntityInstanceData* e) : IfcDistributionFlowElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFlowStorageDeviceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFlowStorageDeviceType::IfcFlowStorageDeviceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcDistributionFlowElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFlowStorageDeviceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcFlowTerminal + + +const IfcParse::entity& Ifc4x3_add2::IfcFlowTerminal::declaration() const { return *IFC4X3_ADD2_IfcFlowTerminal_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFlowTerminal::Class() { return *IFC4X3_ADD2_IfcFlowTerminal_type; } +Ifc4x3_add2::IfcFlowTerminal::IfcFlowTerminal(IfcEntityInstanceData* e) : IfcDistributionFlowElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFlowTerminal_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFlowTerminal::IfcFlowTerminal(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcDistributionFlowElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFlowTerminal_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcFlowTerminalType + + +const IfcParse::entity& Ifc4x3_add2::IfcFlowTerminalType::declaration() const { return *IFC4X3_ADD2_IfcFlowTerminalType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFlowTerminalType::Class() { return *IFC4X3_ADD2_IfcFlowTerminalType_type; } +Ifc4x3_add2::IfcFlowTerminalType::IfcFlowTerminalType(IfcEntityInstanceData* e) : IfcDistributionFlowElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFlowTerminalType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFlowTerminalType::IfcFlowTerminalType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcDistributionFlowElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFlowTerminalType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcFlowTreatmentDevice + + +const IfcParse::entity& Ifc4x3_add2::IfcFlowTreatmentDevice::declaration() const { return *IFC4X3_ADD2_IfcFlowTreatmentDevice_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFlowTreatmentDevice::Class() { return *IFC4X3_ADD2_IfcFlowTreatmentDevice_type; } +Ifc4x3_add2::IfcFlowTreatmentDevice::IfcFlowTreatmentDevice(IfcEntityInstanceData* e) : IfcDistributionFlowElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFlowTreatmentDevice_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFlowTreatmentDevice::IfcFlowTreatmentDevice(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcDistributionFlowElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFlowTreatmentDevice_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcFlowTreatmentDeviceType + + +const IfcParse::entity& Ifc4x3_add2::IfcFlowTreatmentDeviceType::declaration() const { return *IFC4X3_ADD2_IfcFlowTreatmentDeviceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFlowTreatmentDeviceType::Class() { return *IFC4X3_ADD2_IfcFlowTreatmentDeviceType_type; } +Ifc4x3_add2::IfcFlowTreatmentDeviceType::IfcFlowTreatmentDeviceType(IfcEntityInstanceData* e) : IfcDistributionFlowElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFlowTreatmentDeviceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFlowTreatmentDeviceType::IfcFlowTreatmentDeviceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcDistributionFlowElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFlowTreatmentDeviceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcFooting +boost::optional< ::Ifc4x3_add2::IfcFootingTypeEnum::Value > Ifc4x3_add2::IfcFooting::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcFootingTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcFooting::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcFootingTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcFootingTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFooting::declaration() const { return *IFC4X3_ADD2_IfcFooting_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFooting::Class() { return *IFC4X3_ADD2_IfcFooting_type; } +Ifc4x3_add2::IfcFooting::IfcFooting(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFooting_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFooting::IfcFooting(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcFootingTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFooting_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcFootingTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcFootingType +::Ifc4x3_add2::IfcFootingTypeEnum::Value Ifc4x3_add2::IfcFootingType::PredefinedType() const { return ::Ifc4x3_add2::IfcFootingTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcFootingType::setPredefinedType(::Ifc4x3_add2::IfcFootingTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcFootingTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFootingType::declaration() const { return *IFC4X3_ADD2_IfcFootingType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFootingType::Class() { return *IFC4X3_ADD2_IfcFootingType_type; } +Ifc4x3_add2::IfcFootingType::IfcFootingType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFootingType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFootingType::IfcFootingType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcFootingTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFootingType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcFootingTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcFurnishingElement + + +const IfcParse::entity& Ifc4x3_add2::IfcFurnishingElement::declaration() const { return *IFC4X3_ADD2_IfcFurnishingElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFurnishingElement::Class() { return *IFC4X3_ADD2_IfcFurnishingElement_type; } +Ifc4x3_add2::IfcFurnishingElement::IfcFurnishingElement(IfcEntityInstanceData* e) : IfcElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFurnishingElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFurnishingElement::IfcFurnishingElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFurnishingElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcFurnishingElementType + + +const IfcParse::entity& Ifc4x3_add2::IfcFurnishingElementType::declaration() const { return *IFC4X3_ADD2_IfcFurnishingElementType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFurnishingElementType::Class() { return *IFC4X3_ADD2_IfcFurnishingElementType_type; } +Ifc4x3_add2::IfcFurnishingElementType::IfcFurnishingElementType(IfcEntityInstanceData* e) : IfcElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFurnishingElementType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFurnishingElementType::IfcFurnishingElementType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFurnishingElementType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcFurniture +boost::optional< ::Ifc4x3_add2::IfcFurnitureTypeEnum::Value > Ifc4x3_add2::IfcFurniture::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcFurnitureTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcFurniture::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcFurnitureTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcFurnitureTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFurniture::declaration() const { return *IFC4X3_ADD2_IfcFurniture_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFurniture::Class() { return *IFC4X3_ADD2_IfcFurniture_type; } +Ifc4x3_add2::IfcFurniture::IfcFurniture(IfcEntityInstanceData* e) : IfcFurnishingElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFurniture_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFurniture::IfcFurniture(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcFurnitureTypeEnum::Value > v9_PredefinedType) : IfcFurnishingElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFurniture_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcFurnitureTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcFurnitureType +::Ifc4x3_add2::IfcAssemblyPlaceEnum::Value Ifc4x3_add2::IfcFurnitureType::AssemblyPlace() const { return ::Ifc4x3_add2::IfcAssemblyPlaceEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcFurnitureType::setAssemblyPlace(::Ifc4x3_add2::IfcAssemblyPlaceEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcAssemblyPlaceEnum::ToString(v)));data_->setArgument(9,attr);} } +boost::optional< ::Ifc4x3_add2::IfcFurnitureTypeEnum::Value > Ifc4x3_add2::IfcFurnitureType::PredefinedType() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcFurnitureTypeEnum::FromString(*data_->getArgument(10)); } +void Ifc4x3_add2::IfcFurnitureType::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcFurnitureTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcFurnitureTypeEnum::ToString(*v)));}data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcFurnitureType::declaration() const { return *IFC4X3_ADD2_IfcFurnitureType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcFurnitureType::Class() { return *IFC4X3_ADD2_IfcFurnitureType_type; } +Ifc4x3_add2::IfcFurnitureType::IfcFurnitureType(IfcEntityInstanceData* e) : IfcFurnishingElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcFurnitureType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcFurnitureType::IfcFurnitureType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcAssemblyPlaceEnum::Value v10_AssemblyPlace, boost::optional< ::Ifc4x3_add2::IfcFurnitureTypeEnum::Value > v11_PredefinedType) : IfcFurnishingElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcFurnitureType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_AssemblyPlace,::Ifc4x3_add2::IfcAssemblyPlaceEnum::ToString(v10_AssemblyPlace))));data_->setArgument(9,attr);} if (v11_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v11_PredefinedType,::Ifc4x3_add2::IfcFurnitureTypeEnum::ToString(*v11_PredefinedType))));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } } + +// Function implementations for IfcGeographicCRS +boost::optional< std::string > Ifc4x3_add2::IfcGeographicCRS::PrimeMeridian() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } std::string v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcGeographicCRS::setPrimeMeridian(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +::Ifc4x3_add2::IfcNamedUnit* Ifc4x3_add2::IfcGeographicCRS::AngleUnit() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcNamedUnit>(true); } +void Ifc4x3_add2::IfcGeographicCRS::setAngleUnit(::Ifc4x3_add2::IfcNamedUnit* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcNamedUnit* Ifc4x3_add2::IfcGeographicCRS::HeightUnit() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcNamedUnit>(true); } +void Ifc4x3_add2::IfcGeographicCRS::setHeightUnit(::Ifc4x3_add2::IfcNamedUnit* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcGeographicCRS::declaration() const { return *IFC4X3_ADD2_IfcGeographicCRS_type; } +const IfcParse::entity& Ifc4x3_add2::IfcGeographicCRS::Class() { return *IFC4X3_ADD2_IfcGeographicCRS_type; } +Ifc4x3_add2::IfcGeographicCRS::IfcGeographicCRS(IfcEntityInstanceData* e) : IfcCoordinateReferenceSystem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcGeographicCRS_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcGeographicCRS::IfcGeographicCRS(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, boost::optional< std::string > v3_GeodeticDatum, boost::optional< std::string > v4_PrimeMeridian, ::Ifc4x3_add2::IfcNamedUnit* v5_AngleUnit, ::Ifc4x3_add2::IfcNamedUnit* v6_HeightUnit) : IfcCoordinateReferenceSystem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGeographicCRS_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_GeodeticDatum) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_GeodeticDatum));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_PrimeMeridian) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_PrimeMeridian));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_AngleUnit));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_HeightUnit));data_->setArgument(5,attr);} } + +// Function implementations for IfcGeographicElement +boost::optional< ::Ifc4x3_add2::IfcGeographicElementTypeEnum::Value > Ifc4x3_add2::IfcGeographicElement::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcGeographicElementTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcGeographicElement::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcGeographicElementTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcGeographicElementTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcGeographicElement::declaration() const { return *IFC4X3_ADD2_IfcGeographicElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcGeographicElement::Class() { return *IFC4X3_ADD2_IfcGeographicElement_type; } +Ifc4x3_add2::IfcGeographicElement::IfcGeographicElement(IfcEntityInstanceData* e) : IfcElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcGeographicElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcGeographicElement::IfcGeographicElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcGeographicElementTypeEnum::Value > v9_PredefinedType) : IfcElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGeographicElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcGeographicElementTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcGeographicElementType +::Ifc4x3_add2::IfcGeographicElementTypeEnum::Value Ifc4x3_add2::IfcGeographicElementType::PredefinedType() const { return ::Ifc4x3_add2::IfcGeographicElementTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcGeographicElementType::setPredefinedType(::Ifc4x3_add2::IfcGeographicElementTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcGeographicElementTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcGeographicElementType::declaration() const { return *IFC4X3_ADD2_IfcGeographicElementType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcGeographicElementType::Class() { return *IFC4X3_ADD2_IfcGeographicElementType_type; } +Ifc4x3_add2::IfcGeographicElementType::IfcGeographicElementType(IfcEntityInstanceData* e) : IfcElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcGeographicElementType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcGeographicElementType::IfcGeographicElementType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcGeographicElementTypeEnum::Value v10_PredefinedType) : IfcElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGeographicElementType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcGeographicElementTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcGeometricCurveSet + + +const IfcParse::entity& Ifc4x3_add2::IfcGeometricCurveSet::declaration() const { return *IFC4X3_ADD2_IfcGeometricCurveSet_type; } +const IfcParse::entity& Ifc4x3_add2::IfcGeometricCurveSet::Class() { return *IFC4X3_ADD2_IfcGeometricCurveSet_type; } +Ifc4x3_add2::IfcGeometricCurveSet::IfcGeometricCurveSet(IfcEntityInstanceData* e) : IfcGeometricSet((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcGeometricCurveSet_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcGeometricCurveSet::IfcGeometricCurveSet(aggregate_of< ::Ifc4x3_add2::IfcGeometricSetSelect >::ptr v1_Elements) : IfcGeometricSet((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGeometricCurveSet_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Elements)->generalize());data_->setArgument(0,attr);} } + +// Function implementations for IfcGeometricRepresentationContext +int Ifc4x3_add2::IfcGeometricRepresentationContext::CoordinateSpaceDimension() const { int v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcGeometricRepresentationContext::setCoordinateSpaceDimension(int v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +boost::optional< double > Ifc4x3_add2::IfcGeometricRepresentationContext::Precision() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcGeometricRepresentationContext::setPrecision(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +::Ifc4x3_add2::IfcAxis2Placement* Ifc4x3_add2::IfcGeometricRepresentationContext::WorldCoordinateSystem() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcAxis2Placement>(true); } +void Ifc4x3_add2::IfcGeometricRepresentationContext::setWorldCoordinateSystem(::Ifc4x3_add2::IfcAxis2Placement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcDirection* Ifc4x3_add2::IfcGeometricRepresentationContext::TrueNorth() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcDirection>(true); } +void Ifc4x3_add2::IfcGeometricRepresentationContext::setTrueNorth(::Ifc4x3_add2::IfcDirection* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + +::Ifc4x3_add2::IfcGeometricRepresentationSubContext::list::ptr Ifc4x3_add2::IfcGeometricRepresentationContext::HasSubContexts() const { return data_->getInverse(IFC4X3_ADD2_IfcGeometricRepresentationSubContext_type, 6)->as(); } +::Ifc4x3_add2::IfcCoordinateOperation::list::ptr Ifc4x3_add2::IfcGeometricRepresentationContext::HasCoordinateOperation() const { return data_->getInverse(IFC4X3_ADD2_IfcCoordinateOperation_type, 0)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcGeometricRepresentationContext::declaration() const { return *IFC4X3_ADD2_IfcGeometricRepresentationContext_type; } +const IfcParse::entity& Ifc4x3_add2::IfcGeometricRepresentationContext::Class() { return *IFC4X3_ADD2_IfcGeometricRepresentationContext_type; } +Ifc4x3_add2::IfcGeometricRepresentationContext::IfcGeometricRepresentationContext(IfcEntityInstanceData* e) : IfcRepresentationContext((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcGeometricRepresentationContext_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcGeometricRepresentationContext::IfcGeometricRepresentationContext(boost::optional< std::string > v1_ContextIdentifier, boost::optional< std::string > v2_ContextType, int v3_CoordinateSpaceDimension, boost::optional< double > v4_Precision, ::Ifc4x3_add2::IfcAxis2Placement* v5_WorldCoordinateSystem, ::Ifc4x3_add2::IfcDirection* v6_TrueNorth) : IfcRepresentationContext((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGeometricRepresentationContext_type); if (v1_ContextIdentifier) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_ContextIdentifier));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_ContextType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ContextType));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_CoordinateSpaceDimension));data_->setArgument(2,attr);} if (v4_Precision) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Precision));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_WorldCoordinateSystem));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_TrueNorth));data_->setArgument(5,attr);} } + +// Function implementations for IfcGeometricRepresentationItem + + +const IfcParse::entity& Ifc4x3_add2::IfcGeometricRepresentationItem::declaration() const { return *IFC4X3_ADD2_IfcGeometricRepresentationItem_type; } +const IfcParse::entity& Ifc4x3_add2::IfcGeometricRepresentationItem::Class() { return *IFC4X3_ADD2_IfcGeometricRepresentationItem_type; } +Ifc4x3_add2::IfcGeometricRepresentationItem::IfcGeometricRepresentationItem(IfcEntityInstanceData* e) : IfcRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcGeometricRepresentationItem_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcGeometricRepresentationItem::IfcGeometricRepresentationItem() : IfcRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGeometricRepresentationItem_type); } + +// Function implementations for IfcGeometricRepresentationSubContext +::Ifc4x3_add2::IfcGeometricRepresentationContext* Ifc4x3_add2::IfcGeometricRepresentationSubContext::ParentContext() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcGeometricRepresentationContext>(true); } +void Ifc4x3_add2::IfcGeometricRepresentationSubContext::setParentContext(::Ifc4x3_add2::IfcGeometricRepresentationContext* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +boost::optional< double > Ifc4x3_add2::IfcGeometricRepresentationSubContext::TargetScale() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } double v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcGeometricRepresentationSubContext::setTargetScale(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +::Ifc4x3_add2::IfcGeometricProjectionEnum::Value Ifc4x3_add2::IfcGeometricRepresentationSubContext::TargetView() const { return ::Ifc4x3_add2::IfcGeometricProjectionEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcGeometricRepresentationSubContext::setTargetView(::Ifc4x3_add2::IfcGeometricProjectionEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcGeometricProjectionEnum::ToString(v)));data_->setArgument(8,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcGeometricRepresentationSubContext::UserDefinedTargetView() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } std::string v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcGeometricRepresentationSubContext::setUserDefinedTargetView(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcGeometricRepresentationSubContext::declaration() const { return *IFC4X3_ADD2_IfcGeometricRepresentationSubContext_type; } +const IfcParse::entity& Ifc4x3_add2::IfcGeometricRepresentationSubContext::Class() { return *IFC4X3_ADD2_IfcGeometricRepresentationSubContext_type; } +Ifc4x3_add2::IfcGeometricRepresentationSubContext::IfcGeometricRepresentationSubContext(IfcEntityInstanceData* e) : IfcGeometricRepresentationContext((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcGeometricRepresentationSubContext_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcGeometricRepresentationSubContext::IfcGeometricRepresentationSubContext(boost::optional< std::string > v1_ContextIdentifier, boost::optional< std::string > v2_ContextType, ::Ifc4x3_add2::IfcGeometricRepresentationContext* v7_ParentContext, boost::optional< double > v8_TargetScale, ::Ifc4x3_add2::IfcGeometricProjectionEnum::Value v9_TargetView, boost::optional< std::string > v10_UserDefinedTargetView) : IfcGeometricRepresentationContext((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGeometricRepresentationSubContext_type); if (v1_ContextIdentifier) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_ContextIdentifier));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_ContextType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ContextType));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::Derived());data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::Derived());data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::Derived());data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::Derived());data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_ParentContext));data_->setArgument(6,attr);} if (v8_TargetScale) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_TargetScale));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v9_TargetView,::Ifc4x3_add2::IfcGeometricProjectionEnum::ToString(v9_TargetView))));data_->setArgument(8,attr);} if (v10_UserDefinedTargetView) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_UserDefinedTargetView));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } } + +// Function implementations for IfcGeometricSet +aggregate_of< ::Ifc4x3_add2::IfcGeometricSetSelect >::ptr Ifc4x3_add2::IfcGeometricSet::Elements() const { aggregate_of_instance::ptr es = *data_->getArgument(0); return es->as< ::Ifc4x3_add2::IfcGeometricSetSelect >(); } +void Ifc4x3_add2::IfcGeometricSet::setElements(aggregate_of< ::Ifc4x3_add2::IfcGeometricSetSelect >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcGeometricSet::declaration() const { return *IFC4X3_ADD2_IfcGeometricSet_type; } +const IfcParse::entity& Ifc4x3_add2::IfcGeometricSet::Class() { return *IFC4X3_ADD2_IfcGeometricSet_type; } +Ifc4x3_add2::IfcGeometricSet::IfcGeometricSet(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcGeometricSet_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcGeometricSet::IfcGeometricSet(aggregate_of< ::Ifc4x3_add2::IfcGeometricSetSelect >::ptr v1_Elements) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGeometricSet_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Elements)->generalize());data_->setArgument(0,attr);} } + +// Function implementations for IfcGeomodel + + +const IfcParse::entity& Ifc4x3_add2::IfcGeomodel::declaration() const { return *IFC4X3_ADD2_IfcGeomodel_type; } +const IfcParse::entity& Ifc4x3_add2::IfcGeomodel::Class() { return *IFC4X3_ADD2_IfcGeomodel_type; } +Ifc4x3_add2::IfcGeomodel::IfcGeomodel(IfcEntityInstanceData* e) : IfcGeotechnicalAssembly((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcGeomodel_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcGeomodel::IfcGeomodel(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcGeotechnicalAssembly((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGeomodel_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcGeoslice + + +const IfcParse::entity& Ifc4x3_add2::IfcGeoslice::declaration() const { return *IFC4X3_ADD2_IfcGeoslice_type; } +const IfcParse::entity& Ifc4x3_add2::IfcGeoslice::Class() { return *IFC4X3_ADD2_IfcGeoslice_type; } +Ifc4x3_add2::IfcGeoslice::IfcGeoslice(IfcEntityInstanceData* e) : IfcGeotechnicalAssembly((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcGeoslice_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcGeoslice::IfcGeoslice(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcGeotechnicalAssembly((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGeoslice_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcGeotechnicalAssembly + + +const IfcParse::entity& Ifc4x3_add2::IfcGeotechnicalAssembly::declaration() const { return *IFC4X3_ADD2_IfcGeotechnicalAssembly_type; } +const IfcParse::entity& Ifc4x3_add2::IfcGeotechnicalAssembly::Class() { return *IFC4X3_ADD2_IfcGeotechnicalAssembly_type; } +Ifc4x3_add2::IfcGeotechnicalAssembly::IfcGeotechnicalAssembly(IfcEntityInstanceData* e) : IfcGeotechnicalElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcGeotechnicalAssembly_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcGeotechnicalAssembly::IfcGeotechnicalAssembly(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcGeotechnicalElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGeotechnicalAssembly_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcGeotechnicalElement + + +const IfcParse::entity& Ifc4x3_add2::IfcGeotechnicalElement::declaration() const { return *IFC4X3_ADD2_IfcGeotechnicalElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcGeotechnicalElement::Class() { return *IFC4X3_ADD2_IfcGeotechnicalElement_type; } +Ifc4x3_add2::IfcGeotechnicalElement::IfcGeotechnicalElement(IfcEntityInstanceData* e) : IfcElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcGeotechnicalElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcGeotechnicalElement::IfcGeotechnicalElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGeotechnicalElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcGeotechnicalStratum +boost::optional< ::Ifc4x3_add2::IfcGeotechnicalStratumTypeEnum::Value > Ifc4x3_add2::IfcGeotechnicalStratum::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcGeotechnicalStratumTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcGeotechnicalStratum::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcGeotechnicalStratumTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcGeotechnicalStratumTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcGeotechnicalStratum::declaration() const { return *IFC4X3_ADD2_IfcGeotechnicalStratum_type; } +const IfcParse::entity& Ifc4x3_add2::IfcGeotechnicalStratum::Class() { return *IFC4X3_ADD2_IfcGeotechnicalStratum_type; } +Ifc4x3_add2::IfcGeotechnicalStratum::IfcGeotechnicalStratum(IfcEntityInstanceData* e) : IfcGeotechnicalElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcGeotechnicalStratum_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcGeotechnicalStratum::IfcGeotechnicalStratum(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcGeotechnicalStratumTypeEnum::Value > v9_PredefinedType) : IfcGeotechnicalElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGeotechnicalStratum_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcGeotechnicalStratumTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcGradientCurve +::Ifc4x3_add2::IfcBoundedCurve* Ifc4x3_add2::IfcGradientCurve::BaseCurve() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcBoundedCurve>(true); } +void Ifc4x3_add2::IfcGradientCurve::setBaseCurve(::Ifc4x3_add2::IfcBoundedCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcPlacement* Ifc4x3_add2::IfcGradientCurve::EndPoint() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcPlacement>(true); } +void Ifc4x3_add2::IfcGradientCurve::setEndPoint(::Ifc4x3_add2::IfcPlacement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcGradientCurve::declaration() const { return *IFC4X3_ADD2_IfcGradientCurve_type; } +const IfcParse::entity& Ifc4x3_add2::IfcGradientCurve::Class() { return *IFC4X3_ADD2_IfcGradientCurve_type; } +Ifc4x3_add2::IfcGradientCurve::IfcGradientCurve(IfcEntityInstanceData* e) : IfcCompositeCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcGradientCurve_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcGradientCurve::IfcGradientCurve(aggregate_of< ::Ifc4x3_add2::IfcSegment >::ptr v1_Segments, boost::logic::tribool v2_SelfIntersect, ::Ifc4x3_add2::IfcBoundedCurve* v3_BaseCurve, ::Ifc4x3_add2::IfcPlacement* v4_EndPoint) : IfcCompositeCurve((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGradientCurve_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Segments)->generalize());data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_SelfIntersect));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_BaseCurve));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_EndPoint));data_->setArgument(3,attr);} } + +// Function implementations for IfcGrid +aggregate_of< ::Ifc4x3_add2::IfcGridAxis >::ptr Ifc4x3_add2::IfcGrid::UAxes() const { aggregate_of_instance::ptr es = *data_->getArgument(7); return es->as< ::Ifc4x3_add2::IfcGridAxis >(); } +void Ifc4x3_add2::IfcGrid::setUAxes(aggregate_of< ::Ifc4x3_add2::IfcGridAxis >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(7,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcGridAxis >::ptr Ifc4x3_add2::IfcGrid::VAxes() const { aggregate_of_instance::ptr es = *data_->getArgument(8); return es->as< ::Ifc4x3_add2::IfcGridAxis >(); } +void Ifc4x3_add2::IfcGrid::setVAxes(aggregate_of< ::Ifc4x3_add2::IfcGridAxis >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(8,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcGridAxis >::ptr > Ifc4x3_add2::IfcGrid::WAxes() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(9); return es->as< ::Ifc4x3_add2::IfcGridAxis >(); } +void Ifc4x3_add2::IfcGrid::setWAxes(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcGridAxis >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(9,attr);} } +boost::optional< ::Ifc4x3_add2::IfcGridTypeEnum::Value > Ifc4x3_add2::IfcGrid::PredefinedType() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcGridTypeEnum::FromString(*data_->getArgument(10)); } +void Ifc4x3_add2::IfcGrid::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcGridTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcGridTypeEnum::ToString(*v)));}data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcGrid::declaration() const { return *IFC4X3_ADD2_IfcGrid_type; } +const IfcParse::entity& Ifc4x3_add2::IfcGrid::Class() { return *IFC4X3_ADD2_IfcGrid_type; } +Ifc4x3_add2::IfcGrid::IfcGrid(IfcEntityInstanceData* e) : IfcPositioningElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcGrid_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcGrid::IfcGrid(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, aggregate_of< ::Ifc4x3_add2::IfcGridAxis >::ptr v8_UAxes, aggregate_of< ::Ifc4x3_add2::IfcGridAxis >::ptr v9_VAxes, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcGridAxis >::ptr > v10_WAxes, boost::optional< ::Ifc4x3_add2::IfcGridTypeEnum::Value > v11_PredefinedType) : IfcPositioningElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGrid_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_UAxes)->generalize());data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_VAxes)->generalize());data_->setArgument(8,attr);} if (v10_WAxes) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_WAxes)->generalize());data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v11_PredefinedType,::Ifc4x3_add2::IfcGridTypeEnum::ToString(*v11_PredefinedType))));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } } + +// Function implementations for IfcGridAxis +boost::optional< std::string > Ifc4x3_add2::IfcGridAxis::AxisTag() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcGridAxis::setAxisTag(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcCurve* Ifc4x3_add2::IfcGridAxis::AxisCurve() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcCurve>(true); } +void Ifc4x3_add2::IfcGridAxis::setAxisCurve(::Ifc4x3_add2::IfcCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +bool Ifc4x3_add2::IfcGridAxis::SameSense() const { bool v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcGridAxis::setSameSense(bool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + +::Ifc4x3_add2::IfcGrid::list::ptr Ifc4x3_add2::IfcGridAxis::PartOfW() const { return data_->getInverse(IFC4X3_ADD2_IfcGrid_type, 9)->as(); } +::Ifc4x3_add2::IfcGrid::list::ptr Ifc4x3_add2::IfcGridAxis::PartOfV() const { return data_->getInverse(IFC4X3_ADD2_IfcGrid_type, 8)->as(); } +::Ifc4x3_add2::IfcGrid::list::ptr Ifc4x3_add2::IfcGridAxis::PartOfU() const { return data_->getInverse(IFC4X3_ADD2_IfcGrid_type, 7)->as(); } +::Ifc4x3_add2::IfcVirtualGridIntersection::list::ptr Ifc4x3_add2::IfcGridAxis::HasIntersections() const { return data_->getInverse(IFC4X3_ADD2_IfcVirtualGridIntersection_type, 0)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcGridAxis::declaration() const { return *IFC4X3_ADD2_IfcGridAxis_type; } +const IfcParse::entity& Ifc4x3_add2::IfcGridAxis::Class() { return *IFC4X3_ADD2_IfcGridAxis_type; } +Ifc4x3_add2::IfcGridAxis::IfcGridAxis(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcGridAxis_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcGridAxis::IfcGridAxis(boost::optional< std::string > v1_AxisTag, ::Ifc4x3_add2::IfcCurve* v2_AxisCurve, bool v3_SameSense) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGridAxis_type); if (v1_AxisTag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_AxisTag));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_AxisCurve));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_SameSense));data_->setArgument(2,attr);} } + +// Function implementations for IfcGridPlacement +::Ifc4x3_add2::IfcVirtualGridIntersection* Ifc4x3_add2::IfcGridPlacement::PlacementLocation() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcVirtualGridIntersection>(true); } +void Ifc4x3_add2::IfcGridPlacement::setPlacementLocation(::Ifc4x3_add2::IfcVirtualGridIntersection* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcGridPlacementDirectionSelect* Ifc4x3_add2::IfcGridPlacement::PlacementRefDirection() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcGridPlacementDirectionSelect>(true); } +void Ifc4x3_add2::IfcGridPlacement::setPlacementRefDirection(::Ifc4x3_add2::IfcGridPlacementDirectionSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcGridPlacement::declaration() const { return *IFC4X3_ADD2_IfcGridPlacement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcGridPlacement::Class() { return *IFC4X3_ADD2_IfcGridPlacement_type; } +Ifc4x3_add2::IfcGridPlacement::IfcGridPlacement(IfcEntityInstanceData* e) : IfcObjectPlacement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcGridPlacement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcGridPlacement::IfcGridPlacement(::Ifc4x3_add2::IfcObjectPlacement* v1_PlacementRelTo, ::Ifc4x3_add2::IfcVirtualGridIntersection* v2_PlacementLocation, ::Ifc4x3_add2::IfcGridPlacementDirectionSelect* v3_PlacementRefDirection) : IfcObjectPlacement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGridPlacement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_PlacementRelTo));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_PlacementLocation));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_PlacementRefDirection));data_->setArgument(2,attr);} } + +// Function implementations for IfcGroup + +::Ifc4x3_add2::IfcRelAssignsToGroup::list::ptr Ifc4x3_add2::IfcGroup::IsGroupedBy() const { return data_->getInverse(IFC4X3_ADD2_IfcRelAssignsToGroup_type, 6)->as(); } +::Ifc4x3_add2::IfcRelReferencedInSpatialStructure::list::ptr Ifc4x3_add2::IfcGroup::ReferencedInStructures() const { return data_->getInverse(IFC4X3_ADD2_IfcRelReferencedInSpatialStructure_type, 4)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcGroup::declaration() const { return *IFC4X3_ADD2_IfcGroup_type; } +const IfcParse::entity& Ifc4x3_add2::IfcGroup::Class() { return *IFC4X3_ADD2_IfcGroup_type; } +Ifc4x3_add2::IfcGroup::IfcGroup(IfcEntityInstanceData* e) : IfcObject((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcGroup_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcGroup::IfcGroup(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType) : IfcObject((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcGroup_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcHalfSpaceSolid +::Ifc4x3_add2::IfcSurface* Ifc4x3_add2::IfcHalfSpaceSolid::BaseSurface() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcSurface>(true); } +void Ifc4x3_add2::IfcHalfSpaceSolid::setBaseSurface(::Ifc4x3_add2::IfcSurface* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +bool Ifc4x3_add2::IfcHalfSpaceSolid::AgreementFlag() const { bool v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcHalfSpaceSolid::setAgreementFlag(bool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcHalfSpaceSolid::declaration() const { return *IFC4X3_ADD2_IfcHalfSpaceSolid_type; } +const IfcParse::entity& Ifc4x3_add2::IfcHalfSpaceSolid::Class() { return *IFC4X3_ADD2_IfcHalfSpaceSolid_type; } +Ifc4x3_add2::IfcHalfSpaceSolid::IfcHalfSpaceSolid(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcHalfSpaceSolid_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcHalfSpaceSolid::IfcHalfSpaceSolid(::Ifc4x3_add2::IfcSurface* v1_BaseSurface, bool v2_AgreementFlag) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcHalfSpaceSolid_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_BaseSurface));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_AgreementFlag));data_->setArgument(1,attr);} } + +// Function implementations for IfcHeatExchanger +boost::optional< ::Ifc4x3_add2::IfcHeatExchangerTypeEnum::Value > Ifc4x3_add2::IfcHeatExchanger::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcHeatExchangerTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcHeatExchanger::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcHeatExchangerTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcHeatExchangerTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcHeatExchanger::declaration() const { return *IFC4X3_ADD2_IfcHeatExchanger_type; } +const IfcParse::entity& Ifc4x3_add2::IfcHeatExchanger::Class() { return *IFC4X3_ADD2_IfcHeatExchanger_type; } +Ifc4x3_add2::IfcHeatExchanger::IfcHeatExchanger(IfcEntityInstanceData* e) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcHeatExchanger_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcHeatExchanger::IfcHeatExchanger(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcHeatExchangerTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcHeatExchanger_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcHeatExchangerTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcHeatExchangerType +::Ifc4x3_add2::IfcHeatExchangerTypeEnum::Value Ifc4x3_add2::IfcHeatExchangerType::PredefinedType() const { return ::Ifc4x3_add2::IfcHeatExchangerTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcHeatExchangerType::setPredefinedType(::Ifc4x3_add2::IfcHeatExchangerTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcHeatExchangerTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcHeatExchangerType::declaration() const { return *IFC4X3_ADD2_IfcHeatExchangerType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcHeatExchangerType::Class() { return *IFC4X3_ADD2_IfcHeatExchangerType_type; } +Ifc4x3_add2::IfcHeatExchangerType::IfcHeatExchangerType(IfcEntityInstanceData* e) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcHeatExchangerType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcHeatExchangerType::IfcHeatExchangerType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcHeatExchangerTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcHeatExchangerType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcHeatExchangerTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcHumidifier +boost::optional< ::Ifc4x3_add2::IfcHumidifierTypeEnum::Value > Ifc4x3_add2::IfcHumidifier::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcHumidifierTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcHumidifier::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcHumidifierTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcHumidifierTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcHumidifier::declaration() const { return *IFC4X3_ADD2_IfcHumidifier_type; } +const IfcParse::entity& Ifc4x3_add2::IfcHumidifier::Class() { return *IFC4X3_ADD2_IfcHumidifier_type; } +Ifc4x3_add2::IfcHumidifier::IfcHumidifier(IfcEntityInstanceData* e) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcHumidifier_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcHumidifier::IfcHumidifier(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcHumidifierTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcHumidifier_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcHumidifierTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcHumidifierType +::Ifc4x3_add2::IfcHumidifierTypeEnum::Value Ifc4x3_add2::IfcHumidifierType::PredefinedType() const { return ::Ifc4x3_add2::IfcHumidifierTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcHumidifierType::setPredefinedType(::Ifc4x3_add2::IfcHumidifierTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcHumidifierTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcHumidifierType::declaration() const { return *IFC4X3_ADD2_IfcHumidifierType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcHumidifierType::Class() { return *IFC4X3_ADD2_IfcHumidifierType_type; } +Ifc4x3_add2::IfcHumidifierType::IfcHumidifierType(IfcEntityInstanceData* e) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcHumidifierType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcHumidifierType::IfcHumidifierType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcHumidifierTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcHumidifierType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcHumidifierTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcIShapeProfileDef +double Ifc4x3_add2::IfcIShapeProfileDef::OverallWidth() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcIShapeProfileDef::setOverallWidth(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +double Ifc4x3_add2::IfcIShapeProfileDef::OverallDepth() const { double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcIShapeProfileDef::setOverallDepth(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +double Ifc4x3_add2::IfcIShapeProfileDef::WebThickness() const { double v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcIShapeProfileDef::setWebThickness(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +double Ifc4x3_add2::IfcIShapeProfileDef::FlangeThickness() const { double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcIShapeProfileDef::setFlangeThickness(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +boost::optional< double > Ifc4x3_add2::IfcIShapeProfileDef::FilletRadius() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } double v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcIShapeProfileDef::setFilletRadius(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +boost::optional< double > Ifc4x3_add2::IfcIShapeProfileDef::FlangeEdgeRadius() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } double v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcIShapeProfileDef::setFlangeEdgeRadius(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } +boost::optional< double > Ifc4x3_add2::IfcIShapeProfileDef::FlangeSlope() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } double v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcIShapeProfileDef::setFlangeSlope(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcIShapeProfileDef::declaration() const { return *IFC4X3_ADD2_IfcIShapeProfileDef_type; } +const IfcParse::entity& Ifc4x3_add2::IfcIShapeProfileDef::Class() { return *IFC4X3_ADD2_IfcIShapeProfileDef_type; } +Ifc4x3_add2::IfcIShapeProfileDef::IfcIShapeProfileDef(IfcEntityInstanceData* e) : IfcParameterizedProfileDef((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcIShapeProfileDef_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcIShapeProfileDef::IfcIShapeProfileDef(::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_OverallWidth, double v5_OverallDepth, double v6_WebThickness, double v7_FlangeThickness, boost::optional< double > v8_FilletRadius, boost::optional< double > v9_FlangeEdgeRadius, boost::optional< double > v10_FlangeSlope) : IfcParameterizedProfileDef((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcIShapeProfileDef_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_ProfileType,::Ifc4x3_add2::IfcProfileTypeEnum::ToString(v1_ProfileType))));data_->setArgument(0,attr);} if (v2_ProfileName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ProfileName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Position));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_OverallWidth));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_OverallDepth));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_WebThickness));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_FlangeThickness));data_->setArgument(6,attr);} if (v8_FilletRadius) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_FilletRadius));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_FlangeEdgeRadius) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_FlangeEdgeRadius));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_FlangeSlope) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_FlangeSlope));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } } + +// Function implementations for IfcImageTexture +std::string Ifc4x3_add2::IfcImageTexture::URLReference() const { std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcImageTexture::setURLReference(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcImageTexture::declaration() const { return *IFC4X3_ADD2_IfcImageTexture_type; } +const IfcParse::entity& Ifc4x3_add2::IfcImageTexture::Class() { return *IFC4X3_ADD2_IfcImageTexture_type; } +Ifc4x3_add2::IfcImageTexture::IfcImageTexture(IfcEntityInstanceData* e) : IfcSurfaceTexture((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcImageTexture_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcImageTexture::IfcImageTexture(bool v1_RepeatS, bool v2_RepeatT, boost::optional< std::string > v3_Mode, ::Ifc4x3_add2::IfcCartesianTransformationOperator2D* v4_TextureTransform, boost::optional< std::vector< std::string > /*[1:?]*/ > v5_Parameter, std::string v6_URLReference) : IfcSurfaceTexture((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcImageTexture_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_RepeatS));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_RepeatT));data_->setArgument(1,attr);} if (v3_Mode) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Mode));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_TextureTransform));data_->setArgument(3,attr);} if (v5_Parameter) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Parameter));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_URLReference));data_->setArgument(5,attr);} } + +// Function implementations for IfcImpactProtectionDevice +boost::optional< ::Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::Value > Ifc4x3_add2::IfcImpactProtectionDevice::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcImpactProtectionDevice::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcImpactProtectionDevice::declaration() const { return *IFC4X3_ADD2_IfcImpactProtectionDevice_type; } +const IfcParse::entity& Ifc4x3_add2::IfcImpactProtectionDevice::Class() { return *IFC4X3_ADD2_IfcImpactProtectionDevice_type; } +Ifc4x3_add2::IfcImpactProtectionDevice::IfcImpactProtectionDevice(IfcEntityInstanceData* e) : IfcElementComponent((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcImpactProtectionDevice_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcImpactProtectionDevice::IfcImpactProtectionDevice(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::Value > v9_PredefinedType) : IfcElementComponent((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcImpactProtectionDevice_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcImpactProtectionDeviceType +::Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::Value Ifc4x3_add2::IfcImpactProtectionDeviceType::PredefinedType() const { return ::Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcImpactProtectionDeviceType::setPredefinedType(::Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcImpactProtectionDeviceType::declaration() const { return *IFC4X3_ADD2_IfcImpactProtectionDeviceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcImpactProtectionDeviceType::Class() { return *IFC4X3_ADD2_IfcImpactProtectionDeviceType_type; } +Ifc4x3_add2::IfcImpactProtectionDeviceType::IfcImpactProtectionDeviceType(IfcEntityInstanceData* e) : IfcElementComponentType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcImpactProtectionDeviceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcImpactProtectionDeviceType::IfcImpactProtectionDeviceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::Value v10_PredefinedType) : IfcElementComponentType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcImpactProtectionDeviceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcIndexedColourMap +::Ifc4x3_add2::IfcTessellatedFaceSet* Ifc4x3_add2::IfcIndexedColourMap::MappedTo() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcTessellatedFaceSet>(true); } +void Ifc4x3_add2::IfcIndexedColourMap::setMappedTo(::Ifc4x3_add2::IfcTessellatedFaceSet* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +boost::optional< double > Ifc4x3_add2::IfcIndexedColourMap::Opacity() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcIndexedColourMap::setOpacity(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcColourRgbList* Ifc4x3_add2::IfcIndexedColourMap::Colours() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcColourRgbList>(true); } +void Ifc4x3_add2::IfcIndexedColourMap::setColours(::Ifc4x3_add2::IfcColourRgbList* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +std::vector< int > /*[1:?]*/ Ifc4x3_add2::IfcIndexedColourMap::ColourIndex() const { std::vector< int > /*[1:?]*/ v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcIndexedColourMap::setColourIndex(std::vector< int > /*[1:?]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcIndexedColourMap::declaration() const { return *IFC4X3_ADD2_IfcIndexedColourMap_type; } +const IfcParse::entity& Ifc4x3_add2::IfcIndexedColourMap::Class() { return *IFC4X3_ADD2_IfcIndexedColourMap_type; } +Ifc4x3_add2::IfcIndexedColourMap::IfcIndexedColourMap(IfcEntityInstanceData* e) : IfcPresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcIndexedColourMap_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcIndexedColourMap::IfcIndexedColourMap(::Ifc4x3_add2::IfcTessellatedFaceSet* v1_MappedTo, boost::optional< double > v2_Opacity, ::Ifc4x3_add2::IfcColourRgbList* v3_Colours, std::vector< int > /*[1:?]*/ v4_ColourIndex) : IfcPresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcIndexedColourMap_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_MappedTo));data_->setArgument(0,attr);} if (v2_Opacity) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Opacity));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Colours));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_ColourIndex));data_->setArgument(3,attr);} } + +// Function implementations for IfcIndexedPolyCurve +::Ifc4x3_add2::IfcCartesianPointList* Ifc4x3_add2::IfcIndexedPolyCurve::Points() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcCartesianPointList>(true); } +void Ifc4x3_add2::IfcIndexedPolyCurve::setPoints(::Ifc4x3_add2::IfcCartesianPointList* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcSegmentIndexSelect >::ptr > Ifc4x3_add2::IfcIndexedPolyCurve::Segments() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(1); return es->as< ::Ifc4x3_add2::IfcSegmentIndexSelect >(); } +void Ifc4x3_add2::IfcIndexedPolyCurve::setSegments(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcSegmentIndexSelect >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(1,attr);} } +boost::optional< bool > Ifc4x3_add2::IfcIndexedPolyCurve::SelfIntersect() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } bool v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcIndexedPolyCurve::setSelfIntersect(boost::optional< bool > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcIndexedPolyCurve::declaration() const { return *IFC4X3_ADD2_IfcIndexedPolyCurve_type; } +const IfcParse::entity& Ifc4x3_add2::IfcIndexedPolyCurve::Class() { return *IFC4X3_ADD2_IfcIndexedPolyCurve_type; } +Ifc4x3_add2::IfcIndexedPolyCurve::IfcIndexedPolyCurve(IfcEntityInstanceData* e) : IfcBoundedCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcIndexedPolyCurve_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcIndexedPolyCurve::IfcIndexedPolyCurve(::Ifc4x3_add2::IfcCartesianPointList* v1_Points, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcSegmentIndexSelect >::ptr > v2_Segments, boost::optional< bool > v3_SelfIntersect) : IfcBoundedCurve((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcIndexedPolyCurve_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Points));data_->setArgument(0,attr);} if (v2_Segments) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Segments)->generalize());data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_SelfIntersect) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_SelfIntersect));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } } + +// Function implementations for IfcIndexedPolygonalFace +std::vector< int > /*[3:?]*/ Ifc4x3_add2::IfcIndexedPolygonalFace::CoordIndex() const { std::vector< int > /*[3:?]*/ v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcIndexedPolygonalFace::setCoordIndex(std::vector< int > /*[3:?]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } + +::Ifc4x3_add2::IfcPolygonalFaceSet::list::ptr Ifc4x3_add2::IfcIndexedPolygonalFace::ToFaceSet() const { return data_->getInverse(IFC4X3_ADD2_IfcPolygonalFaceSet_type, 2)->as(); } +::Ifc4x3_add2::IfcTextureCoordinateIndices::list::ptr Ifc4x3_add2::IfcIndexedPolygonalFace::HasTexCoords() const { return data_->getInverse(IFC4X3_ADD2_IfcTextureCoordinateIndices_type, 1)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcIndexedPolygonalFace::declaration() const { return *IFC4X3_ADD2_IfcIndexedPolygonalFace_type; } +const IfcParse::entity& Ifc4x3_add2::IfcIndexedPolygonalFace::Class() { return *IFC4X3_ADD2_IfcIndexedPolygonalFace_type; } +Ifc4x3_add2::IfcIndexedPolygonalFace::IfcIndexedPolygonalFace(IfcEntityInstanceData* e) : IfcTessellatedItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcIndexedPolygonalFace_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcIndexedPolygonalFace::IfcIndexedPolygonalFace(std::vector< int > /*[3:?]*/ v1_CoordIndex) : IfcTessellatedItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcIndexedPolygonalFace_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_CoordIndex));data_->setArgument(0,attr);} } + +// Function implementations for IfcIndexedPolygonalFaceWithVoids +std::vector< std::vector< int > > Ifc4x3_add2::IfcIndexedPolygonalFaceWithVoids::InnerCoordIndices() const { std::vector< std::vector< int > > v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcIndexedPolygonalFaceWithVoids::setInnerCoordIndices(std::vector< std::vector< int > > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcIndexedPolygonalFaceWithVoids::declaration() const { return *IFC4X3_ADD2_IfcIndexedPolygonalFaceWithVoids_type; } +const IfcParse::entity& Ifc4x3_add2::IfcIndexedPolygonalFaceWithVoids::Class() { return *IFC4X3_ADD2_IfcIndexedPolygonalFaceWithVoids_type; } +Ifc4x3_add2::IfcIndexedPolygonalFaceWithVoids::IfcIndexedPolygonalFaceWithVoids(IfcEntityInstanceData* e) : IfcIndexedPolygonalFace((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcIndexedPolygonalFaceWithVoids_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcIndexedPolygonalFaceWithVoids::IfcIndexedPolygonalFaceWithVoids(std::vector< int > /*[3:?]*/ v1_CoordIndex, std::vector< std::vector< int > > v2_InnerCoordIndices) : IfcIndexedPolygonalFace((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcIndexedPolygonalFaceWithVoids_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_CoordIndex));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_InnerCoordIndices));data_->setArgument(1,attr);} } + +// Function implementations for IfcIndexedPolygonalTextureMap +aggregate_of< ::Ifc4x3_add2::IfcTextureCoordinateIndices >::ptr Ifc4x3_add2::IfcIndexedPolygonalTextureMap::TexCoordIndices() const { aggregate_of_instance::ptr es = *data_->getArgument(3); return es->as< ::Ifc4x3_add2::IfcTextureCoordinateIndices >(); } +void Ifc4x3_add2::IfcIndexedPolygonalTextureMap::setTexCoordIndices(aggregate_of< ::Ifc4x3_add2::IfcTextureCoordinateIndices >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcIndexedPolygonalTextureMap::declaration() const { return *IFC4X3_ADD2_IfcIndexedPolygonalTextureMap_type; } +const IfcParse::entity& Ifc4x3_add2::IfcIndexedPolygonalTextureMap::Class() { return *IFC4X3_ADD2_IfcIndexedPolygonalTextureMap_type; } +Ifc4x3_add2::IfcIndexedPolygonalTextureMap::IfcIndexedPolygonalTextureMap(IfcEntityInstanceData* e) : IfcIndexedTextureMap((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcIndexedPolygonalTextureMap_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcIndexedPolygonalTextureMap::IfcIndexedPolygonalTextureMap(aggregate_of< ::Ifc4x3_add2::IfcSurfaceTexture >::ptr v1_Maps, ::Ifc4x3_add2::IfcTessellatedFaceSet* v2_MappedTo, ::Ifc4x3_add2::IfcTextureVertexList* v3_TexCoords, aggregate_of< ::Ifc4x3_add2::IfcTextureCoordinateIndices >::ptr v4_TexCoordIndices) : IfcIndexedTextureMap((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcIndexedPolygonalTextureMap_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Maps)->generalize());data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_MappedTo));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_TexCoords));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_TexCoordIndices)->generalize());data_->setArgument(3,attr);} } + +// Function implementations for IfcIndexedTextureMap +::Ifc4x3_add2::IfcTessellatedFaceSet* Ifc4x3_add2::IfcIndexedTextureMap::MappedTo() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcTessellatedFaceSet>(true); } +void Ifc4x3_add2::IfcIndexedTextureMap::setMappedTo(::Ifc4x3_add2::IfcTessellatedFaceSet* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcTextureVertexList* Ifc4x3_add2::IfcIndexedTextureMap::TexCoords() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcTextureVertexList>(true); } +void Ifc4x3_add2::IfcIndexedTextureMap::setTexCoords(::Ifc4x3_add2::IfcTextureVertexList* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcIndexedTextureMap::declaration() const { return *IFC4X3_ADD2_IfcIndexedTextureMap_type; } +const IfcParse::entity& Ifc4x3_add2::IfcIndexedTextureMap::Class() { return *IFC4X3_ADD2_IfcIndexedTextureMap_type; } +Ifc4x3_add2::IfcIndexedTextureMap::IfcIndexedTextureMap(IfcEntityInstanceData* e) : IfcTextureCoordinate((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcIndexedTextureMap_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcIndexedTextureMap::IfcIndexedTextureMap(aggregate_of< ::Ifc4x3_add2::IfcSurfaceTexture >::ptr v1_Maps, ::Ifc4x3_add2::IfcTessellatedFaceSet* v2_MappedTo, ::Ifc4x3_add2::IfcTextureVertexList* v3_TexCoords) : IfcTextureCoordinate((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcIndexedTextureMap_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Maps)->generalize());data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_MappedTo));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_TexCoords));data_->setArgument(2,attr);} } + +// Function implementations for IfcIndexedTriangleTextureMap +boost::optional< std::vector< std::vector< int > > > Ifc4x3_add2::IfcIndexedTriangleTextureMap::TexCoordIndex() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } std::vector< std::vector< int > > v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcIndexedTriangleTextureMap::setTexCoordIndex(boost::optional< std::vector< std::vector< int > > > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcIndexedTriangleTextureMap::declaration() const { return *IFC4X3_ADD2_IfcIndexedTriangleTextureMap_type; } +const IfcParse::entity& Ifc4x3_add2::IfcIndexedTriangleTextureMap::Class() { return *IFC4X3_ADD2_IfcIndexedTriangleTextureMap_type; } +Ifc4x3_add2::IfcIndexedTriangleTextureMap::IfcIndexedTriangleTextureMap(IfcEntityInstanceData* e) : IfcIndexedTextureMap((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcIndexedTriangleTextureMap_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcIndexedTriangleTextureMap::IfcIndexedTriangleTextureMap(aggregate_of< ::Ifc4x3_add2::IfcSurfaceTexture >::ptr v1_Maps, ::Ifc4x3_add2::IfcTessellatedFaceSet* v2_MappedTo, ::Ifc4x3_add2::IfcTextureVertexList* v3_TexCoords, boost::optional< std::vector< std::vector< int > > > v4_TexCoordIndex) : IfcIndexedTextureMap((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcIndexedTriangleTextureMap_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Maps)->generalize());data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_MappedTo));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_TexCoords));data_->setArgument(2,attr);} if (v4_TexCoordIndex) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_TexCoordIndex));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcInterceptor +boost::optional< ::Ifc4x3_add2::IfcInterceptorTypeEnum::Value > Ifc4x3_add2::IfcInterceptor::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcInterceptorTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcInterceptor::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcInterceptorTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcInterceptorTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcInterceptor::declaration() const { return *IFC4X3_ADD2_IfcInterceptor_type; } +const IfcParse::entity& Ifc4x3_add2::IfcInterceptor::Class() { return *IFC4X3_ADD2_IfcInterceptor_type; } +Ifc4x3_add2::IfcInterceptor::IfcInterceptor(IfcEntityInstanceData* e) : IfcFlowTreatmentDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcInterceptor_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcInterceptor::IfcInterceptor(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcInterceptorTypeEnum::Value > v9_PredefinedType) : IfcFlowTreatmentDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcInterceptor_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcInterceptorTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcInterceptorType +::Ifc4x3_add2::IfcInterceptorTypeEnum::Value Ifc4x3_add2::IfcInterceptorType::PredefinedType() const { return ::Ifc4x3_add2::IfcInterceptorTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcInterceptorType::setPredefinedType(::Ifc4x3_add2::IfcInterceptorTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcInterceptorTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcInterceptorType::declaration() const { return *IFC4X3_ADD2_IfcInterceptorType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcInterceptorType::Class() { return *IFC4X3_ADD2_IfcInterceptorType_type; } +Ifc4x3_add2::IfcInterceptorType::IfcInterceptorType(IfcEntityInstanceData* e) : IfcFlowTreatmentDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcInterceptorType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcInterceptorType::IfcInterceptorType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcInterceptorTypeEnum::Value v10_PredefinedType) : IfcFlowTreatmentDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcInterceptorType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcInterceptorTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcIntersectionCurve + + +const IfcParse::entity& Ifc4x3_add2::IfcIntersectionCurve::declaration() const { return *IFC4X3_ADD2_IfcIntersectionCurve_type; } +const IfcParse::entity& Ifc4x3_add2::IfcIntersectionCurve::Class() { return *IFC4X3_ADD2_IfcIntersectionCurve_type; } +Ifc4x3_add2::IfcIntersectionCurve::IfcIntersectionCurve(IfcEntityInstanceData* e) : IfcSurfaceCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcIntersectionCurve_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcIntersectionCurve::IfcIntersectionCurve(::Ifc4x3_add2::IfcCurve* v1_Curve3D, aggregate_of< ::Ifc4x3_add2::IfcPcurve >::ptr v2_AssociatedGeometry, ::Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::Value v3_MasterRepresentation) : IfcSurfaceCurve((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcIntersectionCurve_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Curve3D));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_AssociatedGeometry)->generalize());data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v3_MasterRepresentation,::Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::ToString(v3_MasterRepresentation))));data_->setArgument(2,attr);} } + +// Function implementations for IfcInventory +boost::optional< ::Ifc4x3_add2::IfcInventoryTypeEnum::Value > Ifc4x3_add2::IfcInventory::PredefinedType() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcInventoryTypeEnum::FromString(*data_->getArgument(5)); } +void Ifc4x3_add2::IfcInventory::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcInventoryTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcInventoryTypeEnum::ToString(*v)));}data_->setArgument(5,attr);} } +::Ifc4x3_add2::IfcActorSelect* Ifc4x3_add2::IfcInventory::Jurisdiction() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcActorSelect>(true); } +void Ifc4x3_add2::IfcInventory::setJurisdiction(::Ifc4x3_add2::IfcActorSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPerson >::ptr > Ifc4x3_add2::IfcInventory::ResponsiblePersons() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(7); return es->as< ::Ifc4x3_add2::IfcPerson >(); } +void Ifc4x3_add2::IfcInventory::setResponsiblePersons(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPerson >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(7,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcInventory::LastUpdateDate() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } std::string v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcInventory::setLastUpdateDate(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } +::Ifc4x3_add2::IfcCostValue* Ifc4x3_add2::IfcInventory::CurrentValue() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(9)))->as<::Ifc4x3_add2::IfcCostValue>(true); } +void Ifc4x3_add2::IfcInventory::setCurrentValue(::Ifc4x3_add2::IfcCostValue* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(9,attr);} } +::Ifc4x3_add2::IfcCostValue* Ifc4x3_add2::IfcInventory::OriginalValue() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(10)))->as<::Ifc4x3_add2::IfcCostValue>(true); } +void Ifc4x3_add2::IfcInventory::setOriginalValue(::Ifc4x3_add2::IfcCostValue* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcInventory::declaration() const { return *IFC4X3_ADD2_IfcInventory_type; } +const IfcParse::entity& Ifc4x3_add2::IfcInventory::Class() { return *IFC4X3_ADD2_IfcInventory_type; } +Ifc4x3_add2::IfcInventory::IfcInventory(IfcEntityInstanceData* e) : IfcGroup((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcInventory_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcInventory::IfcInventory(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< ::Ifc4x3_add2::IfcInventoryTypeEnum::Value > v6_PredefinedType, ::Ifc4x3_add2::IfcActorSelect* v7_Jurisdiction, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPerson >::ptr > v8_ResponsiblePersons, boost::optional< std::string > v9_LastUpdateDate, ::Ifc4x3_add2::IfcCostValue* v10_CurrentValue, ::Ifc4x3_add2::IfcCostValue* v11_OriginalValue) : IfcGroup((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcInventory_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v6_PredefinedType,::Ifc4x3_add2::IfcInventoryTypeEnum::ToString(*v6_PredefinedType))));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Jurisdiction));data_->setArgument(6,attr);} if (v8_ResponsiblePersons) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_ResponsiblePersons)->generalize());data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_LastUpdateDate) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_LastUpdateDate));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v10_CurrentValue));data_->setArgument(9,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v11_OriginalValue));data_->setArgument(10,attr);} } + +// Function implementations for IfcIrregularTimeSeries +aggregate_of< ::Ifc4x3_add2::IfcIrregularTimeSeriesValue >::ptr Ifc4x3_add2::IfcIrregularTimeSeries::Values() const { aggregate_of_instance::ptr es = *data_->getArgument(8); return es->as< ::Ifc4x3_add2::IfcIrregularTimeSeriesValue >(); } +void Ifc4x3_add2::IfcIrregularTimeSeries::setValues(aggregate_of< ::Ifc4x3_add2::IfcIrregularTimeSeriesValue >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcIrregularTimeSeries::declaration() const { return *IFC4X3_ADD2_IfcIrregularTimeSeries_type; } +const IfcParse::entity& Ifc4x3_add2::IfcIrregularTimeSeries::Class() { return *IFC4X3_ADD2_IfcIrregularTimeSeries_type; } +Ifc4x3_add2::IfcIrregularTimeSeries::IfcIrregularTimeSeries(IfcEntityInstanceData* e) : IfcTimeSeries((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcIrregularTimeSeries_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcIrregularTimeSeries::IfcIrregularTimeSeries(std::string v1_Name, boost::optional< std::string > v2_Description, std::string v3_StartTime, std::string v4_EndTime, ::Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::Value v5_TimeSeriesDataType, ::Ifc4x3_add2::IfcDataOriginEnum::Value v6_DataOrigin, boost::optional< std::string > v7_UserDefinedDataOrigin, ::Ifc4x3_add2::IfcUnit* v8_Unit, aggregate_of< ::Ifc4x3_add2::IfcIrregularTimeSeriesValue >::ptr v9_Values) : IfcTimeSeries((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcIrregularTimeSeries_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_StartTime));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_EndTime));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v5_TimeSeriesDataType,::Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::ToString(v5_TimeSeriesDataType))));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v6_DataOrigin,::Ifc4x3_add2::IfcDataOriginEnum::ToString(v6_DataOrigin))));data_->setArgument(5,attr);} if (v7_UserDefinedDataOrigin) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_UserDefinedDataOrigin));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_Unit));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_Values)->generalize());data_->setArgument(8,attr);} } + +// Function implementations for IfcIrregularTimeSeriesValue +std::string Ifc4x3_add2::IfcIrregularTimeSeriesValue::TimeStamp() const { std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcIrregularTimeSeriesValue::setTimeStamp(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr Ifc4x3_add2::IfcIrregularTimeSeriesValue::ListValues() const { aggregate_of_instance::ptr es = *data_->getArgument(1); return es->as< ::Ifc4x3_add2::IfcValue >(); } +void Ifc4x3_add2::IfcIrregularTimeSeriesValue::setListValues(aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcIrregularTimeSeriesValue::declaration() const { return *IFC4X3_ADD2_IfcIrregularTimeSeriesValue_type; } +const IfcParse::entity& Ifc4x3_add2::IfcIrregularTimeSeriesValue::Class() { return *IFC4X3_ADD2_IfcIrregularTimeSeriesValue_type; } +Ifc4x3_add2::IfcIrregularTimeSeriesValue::IfcIrregularTimeSeriesValue(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcIrregularTimeSeriesValue_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcIrregularTimeSeriesValue::IfcIrregularTimeSeriesValue(std::string v1_TimeStamp, aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr v2_ListValues) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcIrregularTimeSeriesValue_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_TimeStamp));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_ListValues)->generalize());data_->setArgument(1,attr);} } + +// Function implementations for IfcJunctionBox +boost::optional< ::Ifc4x3_add2::IfcJunctionBoxTypeEnum::Value > Ifc4x3_add2::IfcJunctionBox::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcJunctionBoxTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcJunctionBox::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcJunctionBoxTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcJunctionBoxTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcJunctionBox::declaration() const { return *IFC4X3_ADD2_IfcJunctionBox_type; } +const IfcParse::entity& Ifc4x3_add2::IfcJunctionBox::Class() { return *IFC4X3_ADD2_IfcJunctionBox_type; } +Ifc4x3_add2::IfcJunctionBox::IfcJunctionBox(IfcEntityInstanceData* e) : IfcFlowFitting((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcJunctionBox_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcJunctionBox::IfcJunctionBox(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcJunctionBoxTypeEnum::Value > v9_PredefinedType) : IfcFlowFitting((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcJunctionBox_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcJunctionBoxTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcJunctionBoxType +::Ifc4x3_add2::IfcJunctionBoxTypeEnum::Value Ifc4x3_add2::IfcJunctionBoxType::PredefinedType() const { return ::Ifc4x3_add2::IfcJunctionBoxTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcJunctionBoxType::setPredefinedType(::Ifc4x3_add2::IfcJunctionBoxTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcJunctionBoxTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcJunctionBoxType::declaration() const { return *IFC4X3_ADD2_IfcJunctionBoxType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcJunctionBoxType::Class() { return *IFC4X3_ADD2_IfcJunctionBoxType_type; } +Ifc4x3_add2::IfcJunctionBoxType::IfcJunctionBoxType(IfcEntityInstanceData* e) : IfcFlowFittingType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcJunctionBoxType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcJunctionBoxType::IfcJunctionBoxType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcJunctionBoxTypeEnum::Value v10_PredefinedType) : IfcFlowFittingType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcJunctionBoxType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcJunctionBoxTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcKerb +boost::optional< ::Ifc4x3_add2::IfcKerbTypeEnum::Value > Ifc4x3_add2::IfcKerb::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcKerbTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcKerb::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcKerbTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcKerbTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcKerb::declaration() const { return *IFC4X3_ADD2_IfcKerb_type; } +const IfcParse::entity& Ifc4x3_add2::IfcKerb::Class() { return *IFC4X3_ADD2_IfcKerb_type; } +Ifc4x3_add2::IfcKerb::IfcKerb(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcKerb_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcKerb::IfcKerb(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcKerbTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcKerb_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcKerbTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcKerbType +::Ifc4x3_add2::IfcKerbTypeEnum::Value Ifc4x3_add2::IfcKerbType::PredefinedType() const { return ::Ifc4x3_add2::IfcKerbTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcKerbType::setPredefinedType(::Ifc4x3_add2::IfcKerbTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcKerbTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcKerbType::declaration() const { return *IFC4X3_ADD2_IfcKerbType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcKerbType::Class() { return *IFC4X3_ADD2_IfcKerbType_type; } +Ifc4x3_add2::IfcKerbType::IfcKerbType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcKerbType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcKerbType::IfcKerbType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcKerbTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcKerbType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcKerbTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcLShapeProfileDef +double Ifc4x3_add2::IfcLShapeProfileDef::Depth() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcLShapeProfileDef::setDepth(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +boost::optional< double > Ifc4x3_add2::IfcLShapeProfileDef::Width() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcLShapeProfileDef::setWidth(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +double Ifc4x3_add2::IfcLShapeProfileDef::Thickness() const { double v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcLShapeProfileDef::setThickness(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +boost::optional< double > Ifc4x3_add2::IfcLShapeProfileDef::FilletRadius() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcLShapeProfileDef::setFilletRadius(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } +boost::optional< double > Ifc4x3_add2::IfcLShapeProfileDef::EdgeRadius() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } double v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcLShapeProfileDef::setEdgeRadius(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +boost::optional< double > Ifc4x3_add2::IfcLShapeProfileDef::LegSlope() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } double v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcLShapeProfileDef::setLegSlope(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcLShapeProfileDef::declaration() const { return *IFC4X3_ADD2_IfcLShapeProfileDef_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLShapeProfileDef::Class() { return *IFC4X3_ADD2_IfcLShapeProfileDef_type; } +Ifc4x3_add2::IfcLShapeProfileDef::IfcLShapeProfileDef(IfcEntityInstanceData* e) : IfcParameterizedProfileDef((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLShapeProfileDef_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLShapeProfileDef::IfcLShapeProfileDef(::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_Depth, boost::optional< double > v5_Width, double v6_Thickness, boost::optional< double > v7_FilletRadius, boost::optional< double > v8_EdgeRadius, boost::optional< double > v9_LegSlope) : IfcParameterizedProfileDef((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLShapeProfileDef_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_ProfileType,::Ifc4x3_add2::IfcProfileTypeEnum::ToString(v1_ProfileType))));data_->setArgument(0,attr);} if (v2_ProfileName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ProfileName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Position));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Depth));data_->setArgument(3,attr);} if (v5_Width) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Width));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_Thickness));data_->setArgument(5,attr);} if (v7_FilletRadius) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_FilletRadius));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_EdgeRadius) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_EdgeRadius));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_LegSlope) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_LegSlope));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcLaborResource +boost::optional< ::Ifc4x3_add2::IfcLaborResourceTypeEnum::Value > Ifc4x3_add2::IfcLaborResource::PredefinedType() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcLaborResourceTypeEnum::FromString(*data_->getArgument(10)); } +void Ifc4x3_add2::IfcLaborResource::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcLaborResourceTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcLaborResourceTypeEnum::ToString(*v)));}data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcLaborResource::declaration() const { return *IFC4X3_ADD2_IfcLaborResource_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLaborResource::Class() { return *IFC4X3_ADD2_IfcLaborResource_type; } +Ifc4x3_add2::IfcLaborResource::IfcLaborResource(IfcEntityInstanceData* e) : IfcConstructionResource((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLaborResource_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLaborResource::IfcLaborResource(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, ::Ifc4x3_add2::IfcResourceTime* v8_Usage, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v9_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v10_BaseQuantity, boost::optional< ::Ifc4x3_add2::IfcLaborResourceTypeEnum::Value > v11_PredefinedType) : IfcConstructionResource((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLaborResource_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Identification));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_LongDescription));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_Usage));data_->setArgument(7,attr);} if (v9_BaseCosts) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_BaseCosts)->generalize());data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v10_BaseQuantity));data_->setArgument(9,attr);} if (v11_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v11_PredefinedType,::Ifc4x3_add2::IfcLaborResourceTypeEnum::ToString(*v11_PredefinedType))));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } } + +// Function implementations for IfcLaborResourceType +::Ifc4x3_add2::IfcLaborResourceTypeEnum::Value Ifc4x3_add2::IfcLaborResourceType::PredefinedType() const { return ::Ifc4x3_add2::IfcLaborResourceTypeEnum::FromString(*data_->getArgument(11)); } +void Ifc4x3_add2::IfcLaborResourceType::setPredefinedType(::Ifc4x3_add2::IfcLaborResourceTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcLaborResourceTypeEnum::ToString(v)));data_->setArgument(11,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcLaborResourceType::declaration() const { return *IFC4X3_ADD2_IfcLaborResourceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLaborResourceType::Class() { return *IFC4X3_ADD2_IfcLaborResourceType_type; } +Ifc4x3_add2::IfcLaborResourceType::IfcLaborResourceType(IfcEntityInstanceData* e) : IfcConstructionResourceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLaborResourceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLaborResourceType::IfcLaborResourceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ResourceType, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v10_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v11_BaseQuantity, ::Ifc4x3_add2::IfcLaborResourceTypeEnum::Value v12_PredefinedType) : IfcConstructionResourceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLaborResourceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_Identification));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongDescription));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ResourceType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ResourceType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_BaseCosts) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_BaseCosts)->generalize());data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v11_BaseQuantity));data_->setArgument(10,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v12_PredefinedType,::Ifc4x3_add2::IfcLaborResourceTypeEnum::ToString(v12_PredefinedType))));data_->setArgument(11,attr);} } + +// Function implementations for IfcLagTime +::Ifc4x3_add2::IfcTimeOrRatioSelect* Ifc4x3_add2::IfcLagTime::LagValue() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcTimeOrRatioSelect>(true); } +void Ifc4x3_add2::IfcLagTime::setLagValue(::Ifc4x3_add2::IfcTimeOrRatioSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +::Ifc4x3_add2::IfcTaskDurationEnum::Value Ifc4x3_add2::IfcLagTime::DurationType() const { return ::Ifc4x3_add2::IfcTaskDurationEnum::FromString(*data_->getArgument(4)); } +void Ifc4x3_add2::IfcLagTime::setDurationType(::Ifc4x3_add2::IfcTaskDurationEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcTaskDurationEnum::ToString(v)));data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcLagTime::declaration() const { return *IFC4X3_ADD2_IfcLagTime_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLagTime::Class() { return *IFC4X3_ADD2_IfcLagTime_type; } +Ifc4x3_add2::IfcLagTime::IfcLagTime(IfcEntityInstanceData* e) : IfcSchedulingTime((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLagTime_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLagTime::IfcLagTime(boost::optional< std::string > v1_Name, boost::optional< ::Ifc4x3_add2::IfcDataOriginEnum::Value > v2_DataOrigin, boost::optional< std::string > v3_UserDefinedDataOrigin, ::Ifc4x3_add2::IfcTimeOrRatioSelect* v4_LagValue, ::Ifc4x3_add2::IfcTaskDurationEnum::Value v5_DurationType) : IfcSchedulingTime((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLagTime_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_DataOrigin) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v2_DataOrigin,::Ifc4x3_add2::IfcDataOriginEnum::ToString(*v2_DataOrigin))));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_UserDefinedDataOrigin) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_UserDefinedDataOrigin));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_LagValue));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v5_DurationType,::Ifc4x3_add2::IfcTaskDurationEnum::ToString(v5_DurationType))));data_->setArgument(4,attr);} } + +// Function implementations for IfcLamp +boost::optional< ::Ifc4x3_add2::IfcLampTypeEnum::Value > Ifc4x3_add2::IfcLamp::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcLampTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcLamp::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcLampTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcLampTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcLamp::declaration() const { return *IFC4X3_ADD2_IfcLamp_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLamp::Class() { return *IFC4X3_ADD2_IfcLamp_type; } +Ifc4x3_add2::IfcLamp::IfcLamp(IfcEntityInstanceData* e) : IfcFlowTerminal((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLamp_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLamp::IfcLamp(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcLampTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLamp_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcLampTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcLampType +::Ifc4x3_add2::IfcLampTypeEnum::Value Ifc4x3_add2::IfcLampType::PredefinedType() const { return ::Ifc4x3_add2::IfcLampTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcLampType::setPredefinedType(::Ifc4x3_add2::IfcLampTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcLampTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcLampType::declaration() const { return *IFC4X3_ADD2_IfcLampType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLampType::Class() { return *IFC4X3_ADD2_IfcLampType_type; } +Ifc4x3_add2::IfcLampType::IfcLampType(IfcEntityInstanceData* e) : IfcFlowTerminalType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLampType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLampType::IfcLampType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcLampTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLampType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcLampTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcLibraryInformation +std::string Ifc4x3_add2::IfcLibraryInformation::Name() const { std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcLibraryInformation::setName(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcLibraryInformation::Version() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcLibraryInformation::setVersion(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcActorSelect* Ifc4x3_add2::IfcLibraryInformation::Publisher() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcActorSelect>(true); } +void Ifc4x3_add2::IfcLibraryInformation::setPublisher(::Ifc4x3_add2::IfcActorSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcLibraryInformation::VersionDate() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } std::string v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcLibraryInformation::setVersionDate(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcLibraryInformation::Location() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcLibraryInformation::setLocation(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcLibraryInformation::Description() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcLibraryInformation::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } + +::Ifc4x3_add2::IfcRelAssociatesLibrary::list::ptr Ifc4x3_add2::IfcLibraryInformation::LibraryInfoForObjects() const { return data_->getInverse(IFC4X3_ADD2_IfcRelAssociatesLibrary_type, 5)->as(); } +::Ifc4x3_add2::IfcLibraryReference::list::ptr Ifc4x3_add2::IfcLibraryInformation::HasLibraryReferences() const { return data_->getInverse(IFC4X3_ADD2_IfcLibraryReference_type, 5)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcLibraryInformation::declaration() const { return *IFC4X3_ADD2_IfcLibraryInformation_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLibraryInformation::Class() { return *IFC4X3_ADD2_IfcLibraryInformation_type; } +Ifc4x3_add2::IfcLibraryInformation::IfcLibraryInformation(IfcEntityInstanceData* e) : IfcExternalInformation((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLibraryInformation_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLibraryInformation::IfcLibraryInformation(std::string v1_Name, boost::optional< std::string > v2_Version, ::Ifc4x3_add2::IfcActorSelect* v3_Publisher, boost::optional< std::string > v4_VersionDate, boost::optional< std::string > v5_Location, boost::optional< std::string > v6_Description) : IfcExternalInformation((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLibraryInformation_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Version) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Version));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Publisher));data_->setArgument(2,attr);} if (v4_VersionDate) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_VersionDate));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_Location) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Location));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Description));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } } + +// Function implementations for IfcLibraryReference +boost::optional< std::string > Ifc4x3_add2::IfcLibraryReference::Description() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } std::string v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcLibraryReference::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcLibraryReference::Language() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcLibraryReference::setLanguage(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcLibraryInformation* Ifc4x3_add2::IfcLibraryReference::ReferencedLibrary() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcLibraryInformation>(true); } +void Ifc4x3_add2::IfcLibraryReference::setReferencedLibrary(::Ifc4x3_add2::IfcLibraryInformation* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + +::Ifc4x3_add2::IfcRelAssociatesLibrary::list::ptr Ifc4x3_add2::IfcLibraryReference::LibraryRefForObjects() const { return data_->getInverse(IFC4X3_ADD2_IfcRelAssociatesLibrary_type, 5)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcLibraryReference::declaration() const { return *IFC4X3_ADD2_IfcLibraryReference_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLibraryReference::Class() { return *IFC4X3_ADD2_IfcLibraryReference_type; } +Ifc4x3_add2::IfcLibraryReference::IfcLibraryReference(IfcEntityInstanceData* e) : IfcExternalReference((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLibraryReference_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLibraryReference::IfcLibraryReference(boost::optional< std::string > v1_Location, boost::optional< std::string > v2_Identification, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_Language, ::Ifc4x3_add2::IfcLibraryInformation* v6_ReferencedLibrary) : IfcExternalReference((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLibraryReference_type); if (v1_Location) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Location));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Identification));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_Language) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Language));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ReferencedLibrary));data_->setArgument(5,attr);} } + +// Function implementations for IfcLightDistributionData +double Ifc4x3_add2::IfcLightDistributionData::MainPlaneAngle() const { double v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcLightDistributionData::setMainPlaneAngle(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +std::vector< double > /*[1:?]*/ Ifc4x3_add2::IfcLightDistributionData::SecondaryPlaneAngle() const { std::vector< double > /*[1:?]*/ v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcLightDistributionData::setSecondaryPlaneAngle(std::vector< double > /*[1:?]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +std::vector< double > /*[1:?]*/ Ifc4x3_add2::IfcLightDistributionData::LuminousIntensity() const { std::vector< double > /*[1:?]*/ v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcLightDistributionData::setLuminousIntensity(std::vector< double > /*[1:?]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcLightDistributionData::declaration() const { return *IFC4X3_ADD2_IfcLightDistributionData_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLightDistributionData::Class() { return *IFC4X3_ADD2_IfcLightDistributionData_type; } +Ifc4x3_add2::IfcLightDistributionData::IfcLightDistributionData(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLightDistributionData_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLightDistributionData::IfcLightDistributionData(double v1_MainPlaneAngle, std::vector< double > /*[1:?]*/ v2_SecondaryPlaneAngle, std::vector< double > /*[1:?]*/ v3_LuminousIntensity) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLightDistributionData_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_MainPlaneAngle));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_SecondaryPlaneAngle));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_LuminousIntensity));data_->setArgument(2,attr);} } + +// Function implementations for IfcLightFixture +boost::optional< ::Ifc4x3_add2::IfcLightFixtureTypeEnum::Value > Ifc4x3_add2::IfcLightFixture::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcLightFixtureTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcLightFixture::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcLightFixtureTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcLightFixtureTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcLightFixture::declaration() const { return *IFC4X3_ADD2_IfcLightFixture_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLightFixture::Class() { return *IFC4X3_ADD2_IfcLightFixture_type; } +Ifc4x3_add2::IfcLightFixture::IfcLightFixture(IfcEntityInstanceData* e) : IfcFlowTerminal((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLightFixture_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLightFixture::IfcLightFixture(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcLightFixtureTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLightFixture_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcLightFixtureTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcLightFixtureType +::Ifc4x3_add2::IfcLightFixtureTypeEnum::Value Ifc4x3_add2::IfcLightFixtureType::PredefinedType() const { return ::Ifc4x3_add2::IfcLightFixtureTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcLightFixtureType::setPredefinedType(::Ifc4x3_add2::IfcLightFixtureTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcLightFixtureTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcLightFixtureType::declaration() const { return *IFC4X3_ADD2_IfcLightFixtureType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLightFixtureType::Class() { return *IFC4X3_ADD2_IfcLightFixtureType_type; } +Ifc4x3_add2::IfcLightFixtureType::IfcLightFixtureType(IfcEntityInstanceData* e) : IfcFlowTerminalType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLightFixtureType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLightFixtureType::IfcLightFixtureType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcLightFixtureTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLightFixtureType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcLightFixtureTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcLightIntensityDistribution +::Ifc4x3_add2::IfcLightDistributionCurveEnum::Value Ifc4x3_add2::IfcLightIntensityDistribution::LightDistributionCurve() const { return ::Ifc4x3_add2::IfcLightDistributionCurveEnum::FromString(*data_->getArgument(0)); } +void Ifc4x3_add2::IfcLightIntensityDistribution::setLightDistributionCurve(::Ifc4x3_add2::IfcLightDistributionCurveEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcLightDistributionCurveEnum::ToString(v)));data_->setArgument(0,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcLightDistributionData >::ptr Ifc4x3_add2::IfcLightIntensityDistribution::DistributionData() const { aggregate_of_instance::ptr es = *data_->getArgument(1); return es->as< ::Ifc4x3_add2::IfcLightDistributionData >(); } +void Ifc4x3_add2::IfcLightIntensityDistribution::setDistributionData(aggregate_of< ::Ifc4x3_add2::IfcLightDistributionData >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcLightIntensityDistribution::declaration() const { return *IFC4X3_ADD2_IfcLightIntensityDistribution_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLightIntensityDistribution::Class() { return *IFC4X3_ADD2_IfcLightIntensityDistribution_type; } +Ifc4x3_add2::IfcLightIntensityDistribution::IfcLightIntensityDistribution(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLightIntensityDistribution_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLightIntensityDistribution::IfcLightIntensityDistribution(::Ifc4x3_add2::IfcLightDistributionCurveEnum::Value v1_LightDistributionCurve, aggregate_of< ::Ifc4x3_add2::IfcLightDistributionData >::ptr v2_DistributionData) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLightIntensityDistribution_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_LightDistributionCurve,::Ifc4x3_add2::IfcLightDistributionCurveEnum::ToString(v1_LightDistributionCurve))));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_DistributionData)->generalize());data_->setArgument(1,attr);} } + +// Function implementations for IfcLightSource +boost::optional< std::string > Ifc4x3_add2::IfcLightSource::Name() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcLightSource::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcColourRgb* Ifc4x3_add2::IfcLightSource::LightColour() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcColourRgb>(true); } +void Ifc4x3_add2::IfcLightSource::setLightColour(::Ifc4x3_add2::IfcColourRgb* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +boost::optional< double > Ifc4x3_add2::IfcLightSource::AmbientIntensity() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcLightSource::setAmbientIntensity(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< double > Ifc4x3_add2::IfcLightSource::Intensity() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcLightSource::setIntensity(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcLightSource::declaration() const { return *IFC4X3_ADD2_IfcLightSource_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLightSource::Class() { return *IFC4X3_ADD2_IfcLightSource_type; } +Ifc4x3_add2::IfcLightSource::IfcLightSource(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLightSource_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLightSource::IfcLightSource(boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcColourRgb* v2_LightColour, boost::optional< double > v3_AmbientIntensity, boost::optional< double > v4_Intensity) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLightSource_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_LightColour));data_->setArgument(1,attr);} if (v3_AmbientIntensity) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_AmbientIntensity));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Intensity) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Intensity));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcLightSourceAmbient + + +const IfcParse::entity& Ifc4x3_add2::IfcLightSourceAmbient::declaration() const { return *IFC4X3_ADD2_IfcLightSourceAmbient_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLightSourceAmbient::Class() { return *IFC4X3_ADD2_IfcLightSourceAmbient_type; } +Ifc4x3_add2::IfcLightSourceAmbient::IfcLightSourceAmbient(IfcEntityInstanceData* e) : IfcLightSource((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLightSourceAmbient_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLightSourceAmbient::IfcLightSourceAmbient(boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcColourRgb* v2_LightColour, boost::optional< double > v3_AmbientIntensity, boost::optional< double > v4_Intensity) : IfcLightSource((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLightSourceAmbient_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_LightColour));data_->setArgument(1,attr);} if (v3_AmbientIntensity) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_AmbientIntensity));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Intensity) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Intensity));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcLightSourceDirectional +::Ifc4x3_add2::IfcDirection* Ifc4x3_add2::IfcLightSourceDirectional::Orientation() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcDirection>(true); } +void Ifc4x3_add2::IfcLightSourceDirectional::setOrientation(::Ifc4x3_add2::IfcDirection* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcLightSourceDirectional::declaration() const { return *IFC4X3_ADD2_IfcLightSourceDirectional_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLightSourceDirectional::Class() { return *IFC4X3_ADD2_IfcLightSourceDirectional_type; } +Ifc4x3_add2::IfcLightSourceDirectional::IfcLightSourceDirectional(IfcEntityInstanceData* e) : IfcLightSource((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLightSourceDirectional_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLightSourceDirectional::IfcLightSourceDirectional(boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcColourRgb* v2_LightColour, boost::optional< double > v3_AmbientIntensity, boost::optional< double > v4_Intensity, ::Ifc4x3_add2::IfcDirection* v5_Orientation) : IfcLightSource((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLightSourceDirectional_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_LightColour));data_->setArgument(1,attr);} if (v3_AmbientIntensity) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_AmbientIntensity));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Intensity) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Intensity));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_Orientation));data_->setArgument(4,attr);} } + +// Function implementations for IfcLightSourceGoniometric +::Ifc4x3_add2::IfcAxis2Placement3D* Ifc4x3_add2::IfcLightSourceGoniometric::Position() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcAxis2Placement3D>(true); } +void Ifc4x3_add2::IfcLightSourceGoniometric::setPosition(::Ifc4x3_add2::IfcAxis2Placement3D* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcColourRgb* Ifc4x3_add2::IfcLightSourceGoniometric::ColourAppearance() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcColourRgb>(true); } +void Ifc4x3_add2::IfcLightSourceGoniometric::setColourAppearance(::Ifc4x3_add2::IfcColourRgb* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +double Ifc4x3_add2::IfcLightSourceGoniometric::ColourTemperature() const { double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcLightSourceGoniometric::setColourTemperature(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +double Ifc4x3_add2::IfcLightSourceGoniometric::LuminousFlux() const { double v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcLightSourceGoniometric::setLuminousFlux(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(7,attr);} } +::Ifc4x3_add2::IfcLightEmissionSourceEnum::Value Ifc4x3_add2::IfcLightSourceGoniometric::LightEmissionSource() const { return ::Ifc4x3_add2::IfcLightEmissionSourceEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcLightSourceGoniometric::setLightEmissionSource(::Ifc4x3_add2::IfcLightEmissionSourceEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcLightEmissionSourceEnum::ToString(v)));data_->setArgument(8,attr);} } +::Ifc4x3_add2::IfcLightDistributionDataSourceSelect* Ifc4x3_add2::IfcLightSourceGoniometric::LightDistributionDataSource() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(9)))->as<::Ifc4x3_add2::IfcLightDistributionDataSourceSelect>(true); } +void Ifc4x3_add2::IfcLightSourceGoniometric::setLightDistributionDataSource(::Ifc4x3_add2::IfcLightDistributionDataSourceSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcLightSourceGoniometric::declaration() const { return *IFC4X3_ADD2_IfcLightSourceGoniometric_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLightSourceGoniometric::Class() { return *IFC4X3_ADD2_IfcLightSourceGoniometric_type; } +Ifc4x3_add2::IfcLightSourceGoniometric::IfcLightSourceGoniometric(IfcEntityInstanceData* e) : IfcLightSource((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLightSourceGoniometric_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLightSourceGoniometric::IfcLightSourceGoniometric(boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcColourRgb* v2_LightColour, boost::optional< double > v3_AmbientIntensity, boost::optional< double > v4_Intensity, ::Ifc4x3_add2::IfcAxis2Placement3D* v5_Position, ::Ifc4x3_add2::IfcColourRgb* v6_ColourAppearance, double v7_ColourTemperature, double v8_LuminousFlux, ::Ifc4x3_add2::IfcLightEmissionSourceEnum::Value v9_LightEmissionSource, ::Ifc4x3_add2::IfcLightDistributionDataSourceSelect* v10_LightDistributionDataSource) : IfcLightSource((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLightSourceGoniometric_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_LightColour));data_->setArgument(1,attr);} if (v3_AmbientIntensity) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_AmbientIntensity));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Intensity) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Intensity));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_Position));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ColourAppearance));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_ColourTemperature));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_LuminousFlux));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v9_LightEmissionSource,::Ifc4x3_add2::IfcLightEmissionSourceEnum::ToString(v9_LightEmissionSource))));data_->setArgument(8,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v10_LightDistributionDataSource));data_->setArgument(9,attr);} } + +// Function implementations for IfcLightSourcePositional +::Ifc4x3_add2::IfcCartesianPoint* Ifc4x3_add2::IfcLightSourcePositional::Position() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcCartesianPoint>(true); } +void Ifc4x3_add2::IfcLightSourcePositional::setPosition(::Ifc4x3_add2::IfcCartesianPoint* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +double Ifc4x3_add2::IfcLightSourcePositional::Radius() const { double v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcLightSourcePositional::setRadius(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +double Ifc4x3_add2::IfcLightSourcePositional::ConstantAttenuation() const { double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcLightSourcePositional::setConstantAttenuation(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +double Ifc4x3_add2::IfcLightSourcePositional::DistanceAttenuation() const { double v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcLightSourcePositional::setDistanceAttenuation(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(7,attr);} } +double Ifc4x3_add2::IfcLightSourcePositional::QuadricAttenuation() const { double v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcLightSourcePositional::setQuadricAttenuation(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcLightSourcePositional::declaration() const { return *IFC4X3_ADD2_IfcLightSourcePositional_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLightSourcePositional::Class() { return *IFC4X3_ADD2_IfcLightSourcePositional_type; } +Ifc4x3_add2::IfcLightSourcePositional::IfcLightSourcePositional(IfcEntityInstanceData* e) : IfcLightSource((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLightSourcePositional_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLightSourcePositional::IfcLightSourcePositional(boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcColourRgb* v2_LightColour, boost::optional< double > v3_AmbientIntensity, boost::optional< double > v4_Intensity, ::Ifc4x3_add2::IfcCartesianPoint* v5_Position, double v6_Radius, double v7_ConstantAttenuation, double v8_DistanceAttenuation, double v9_QuadricAttenuation) : IfcLightSource((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLightSourcePositional_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_LightColour));data_->setArgument(1,attr);} if (v3_AmbientIntensity) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_AmbientIntensity));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Intensity) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Intensity));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_Position));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_Radius));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_ConstantAttenuation));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_DistanceAttenuation));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_QuadricAttenuation));data_->setArgument(8,attr);} } + +// Function implementations for IfcLightSourceSpot +::Ifc4x3_add2::IfcDirection* Ifc4x3_add2::IfcLightSourceSpot::Orientation() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(9)))->as<::Ifc4x3_add2::IfcDirection>(true); } +void Ifc4x3_add2::IfcLightSourceSpot::setOrientation(::Ifc4x3_add2::IfcDirection* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(9,attr);} } +boost::optional< double > Ifc4x3_add2::IfcLightSourceSpot::ConcentrationExponent() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } double v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcLightSourceSpot::setConcentrationExponent(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } +double Ifc4x3_add2::IfcLightSourceSpot::SpreadAngle() const { double v = *data_->getArgument(11); return v; } +void Ifc4x3_add2::IfcLightSourceSpot::setSpreadAngle(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(11,attr);} } +double Ifc4x3_add2::IfcLightSourceSpot::BeamWidthAngle() const { double v = *data_->getArgument(12); return v; } +void Ifc4x3_add2::IfcLightSourceSpot::setBeamWidthAngle(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(12,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcLightSourceSpot::declaration() const { return *IFC4X3_ADD2_IfcLightSourceSpot_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLightSourceSpot::Class() { return *IFC4X3_ADD2_IfcLightSourceSpot_type; } +Ifc4x3_add2::IfcLightSourceSpot::IfcLightSourceSpot(IfcEntityInstanceData* e) : IfcLightSourcePositional((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLightSourceSpot_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLightSourceSpot::IfcLightSourceSpot(boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcColourRgb* v2_LightColour, boost::optional< double > v3_AmbientIntensity, boost::optional< double > v4_Intensity, ::Ifc4x3_add2::IfcCartesianPoint* v5_Position, double v6_Radius, double v7_ConstantAttenuation, double v8_DistanceAttenuation, double v9_QuadricAttenuation, ::Ifc4x3_add2::IfcDirection* v10_Orientation, boost::optional< double > v11_ConcentrationExponent, double v12_SpreadAngle, double v13_BeamWidthAngle) : IfcLightSourcePositional((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLightSourceSpot_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_LightColour));data_->setArgument(1,attr);} if (v3_AmbientIntensity) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_AmbientIntensity));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Intensity) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Intensity));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_Position));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_Radius));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_ConstantAttenuation));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_DistanceAttenuation));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_QuadricAttenuation));data_->setArgument(8,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v10_Orientation));data_->setArgument(9,attr);} if (v11_ConcentrationExponent) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_ConcentrationExponent));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v12_SpreadAngle));data_->setArgument(11,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v13_BeamWidthAngle));data_->setArgument(12,attr);} } + +// Function implementations for IfcLine +::Ifc4x3_add2::IfcCartesianPoint* Ifc4x3_add2::IfcLine::Pnt() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcCartesianPoint>(true); } +void Ifc4x3_add2::IfcLine::setPnt(::Ifc4x3_add2::IfcCartesianPoint* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcVector* Ifc4x3_add2::IfcLine::Dir() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcVector>(true); } +void Ifc4x3_add2::IfcLine::setDir(::Ifc4x3_add2::IfcVector* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcLine::declaration() const { return *IFC4X3_ADD2_IfcLine_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLine::Class() { return *IFC4X3_ADD2_IfcLine_type; } +Ifc4x3_add2::IfcLine::IfcLine(IfcEntityInstanceData* e) : IfcCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLine_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLine::IfcLine(::Ifc4x3_add2::IfcCartesianPoint* v1_Pnt, ::Ifc4x3_add2::IfcVector* v2_Dir) : IfcCurve((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLine_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Pnt));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Dir));data_->setArgument(1,attr);} } + +// Function implementations for IfcLinearElement + + +const IfcParse::entity& Ifc4x3_add2::IfcLinearElement::declaration() const { return *IFC4X3_ADD2_IfcLinearElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLinearElement::Class() { return *IFC4X3_ADD2_IfcLinearElement_type; } +Ifc4x3_add2::IfcLinearElement::IfcLinearElement(IfcEntityInstanceData* e) : IfcProduct((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLinearElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLinearElement::IfcLinearElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation) : IfcProduct((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLinearElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} } + +// Function implementations for IfcLinearPlacement +::Ifc4x3_add2::IfcAxis2PlacementLinear* Ifc4x3_add2::IfcLinearPlacement::RelativePlacement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcAxis2PlacementLinear>(true); } +void Ifc4x3_add2::IfcLinearPlacement::setRelativePlacement(::Ifc4x3_add2::IfcAxis2PlacementLinear* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcAxis2Placement3D* Ifc4x3_add2::IfcLinearPlacement::CartesianPosition() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcAxis2Placement3D>(true); } +void Ifc4x3_add2::IfcLinearPlacement::setCartesianPosition(::Ifc4x3_add2::IfcAxis2Placement3D* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcLinearPlacement::declaration() const { return *IFC4X3_ADD2_IfcLinearPlacement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLinearPlacement::Class() { return *IFC4X3_ADD2_IfcLinearPlacement_type; } +Ifc4x3_add2::IfcLinearPlacement::IfcLinearPlacement(IfcEntityInstanceData* e) : IfcObjectPlacement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLinearPlacement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLinearPlacement::IfcLinearPlacement(::Ifc4x3_add2::IfcObjectPlacement* v1_PlacementRelTo, ::Ifc4x3_add2::IfcAxis2PlacementLinear* v2_RelativePlacement, ::Ifc4x3_add2::IfcAxis2Placement3D* v3_CartesianPosition) : IfcObjectPlacement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLinearPlacement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_PlacementRelTo));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_RelativePlacement));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_CartesianPosition));data_->setArgument(2,attr);} } + +// Function implementations for IfcLinearPositioningElement + + +const IfcParse::entity& Ifc4x3_add2::IfcLinearPositioningElement::declaration() const { return *IFC4X3_ADD2_IfcLinearPositioningElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLinearPositioningElement::Class() { return *IFC4X3_ADD2_IfcLinearPositioningElement_type; } +Ifc4x3_add2::IfcLinearPositioningElement::IfcLinearPositioningElement(IfcEntityInstanceData* e) : IfcPositioningElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLinearPositioningElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLinearPositioningElement::IfcLinearPositioningElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation) : IfcPositioningElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLinearPositioningElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} } + +// Function implementations for IfcLiquidTerminal +boost::optional< ::Ifc4x3_add2::IfcLiquidTerminalTypeEnum::Value > Ifc4x3_add2::IfcLiquidTerminal::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcLiquidTerminalTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcLiquidTerminal::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcLiquidTerminalTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcLiquidTerminalTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcLiquidTerminal::declaration() const { return *IFC4X3_ADD2_IfcLiquidTerminal_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLiquidTerminal::Class() { return *IFC4X3_ADD2_IfcLiquidTerminal_type; } +Ifc4x3_add2::IfcLiquidTerminal::IfcLiquidTerminal(IfcEntityInstanceData* e) : IfcFlowTerminal((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLiquidTerminal_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLiquidTerminal::IfcLiquidTerminal(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcLiquidTerminalTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLiquidTerminal_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcLiquidTerminalTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcLiquidTerminalType +::Ifc4x3_add2::IfcLiquidTerminalTypeEnum::Value Ifc4x3_add2::IfcLiquidTerminalType::PredefinedType() const { return ::Ifc4x3_add2::IfcLiquidTerminalTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcLiquidTerminalType::setPredefinedType(::Ifc4x3_add2::IfcLiquidTerminalTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcLiquidTerminalTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcLiquidTerminalType::declaration() const { return *IFC4X3_ADD2_IfcLiquidTerminalType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLiquidTerminalType::Class() { return *IFC4X3_ADD2_IfcLiquidTerminalType_type; } +Ifc4x3_add2::IfcLiquidTerminalType::IfcLiquidTerminalType(IfcEntityInstanceData* e) : IfcFlowTerminalType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLiquidTerminalType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLiquidTerminalType::IfcLiquidTerminalType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcLiquidTerminalTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLiquidTerminalType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcLiquidTerminalTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcLocalPlacement +::Ifc4x3_add2::IfcAxis2Placement* Ifc4x3_add2::IfcLocalPlacement::RelativePlacement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcAxis2Placement>(true); } +void Ifc4x3_add2::IfcLocalPlacement::setRelativePlacement(::Ifc4x3_add2::IfcAxis2Placement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcLocalPlacement::declaration() const { return *IFC4X3_ADD2_IfcLocalPlacement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLocalPlacement::Class() { return *IFC4X3_ADD2_IfcLocalPlacement_type; } +Ifc4x3_add2::IfcLocalPlacement::IfcLocalPlacement(IfcEntityInstanceData* e) : IfcObjectPlacement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLocalPlacement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLocalPlacement::IfcLocalPlacement(::Ifc4x3_add2::IfcObjectPlacement* v1_PlacementRelTo, ::Ifc4x3_add2::IfcAxis2Placement* v2_RelativePlacement) : IfcObjectPlacement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLocalPlacement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_PlacementRelTo));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_RelativePlacement));data_->setArgument(1,attr);} } + +// Function implementations for IfcLoop + + +const IfcParse::entity& Ifc4x3_add2::IfcLoop::declaration() const { return *IFC4X3_ADD2_IfcLoop_type; } +const IfcParse::entity& Ifc4x3_add2::IfcLoop::Class() { return *IFC4X3_ADD2_IfcLoop_type; } +Ifc4x3_add2::IfcLoop::IfcLoop(IfcEntityInstanceData* e) : IfcTopologicalRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcLoop_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcLoop::IfcLoop() : IfcTopologicalRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcLoop_type); } + +// Function implementations for IfcManifoldSolidBrep +::Ifc4x3_add2::IfcClosedShell* Ifc4x3_add2::IfcManifoldSolidBrep::Outer() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcClosedShell>(true); } +void Ifc4x3_add2::IfcManifoldSolidBrep::setOuter(::Ifc4x3_add2::IfcClosedShell* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcManifoldSolidBrep::declaration() const { return *IFC4X3_ADD2_IfcManifoldSolidBrep_type; } +const IfcParse::entity& Ifc4x3_add2::IfcManifoldSolidBrep::Class() { return *IFC4X3_ADD2_IfcManifoldSolidBrep_type; } +Ifc4x3_add2::IfcManifoldSolidBrep::IfcManifoldSolidBrep(IfcEntityInstanceData* e) : IfcSolidModel((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcManifoldSolidBrep_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcManifoldSolidBrep::IfcManifoldSolidBrep(::Ifc4x3_add2::IfcClosedShell* v1_Outer) : IfcSolidModel((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcManifoldSolidBrep_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Outer));data_->setArgument(0,attr);} } + +// Function implementations for IfcMapConversion +double Ifc4x3_add2::IfcMapConversion::Eastings() const { double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcMapConversion::setEastings(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +double Ifc4x3_add2::IfcMapConversion::Northings() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcMapConversion::setNorthings(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +double Ifc4x3_add2::IfcMapConversion::OrthogonalHeight() const { double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcMapConversion::setOrthogonalHeight(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +boost::optional< double > Ifc4x3_add2::IfcMapConversion::XAxisAbscissa() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } double v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcMapConversion::setXAxisAbscissa(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< double > Ifc4x3_add2::IfcMapConversion::XAxisOrdinate() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcMapConversion::setXAxisOrdinate(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } +boost::optional< double > Ifc4x3_add2::IfcMapConversion::Scale() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } double v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcMapConversion::setScale(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMapConversion::declaration() const { return *IFC4X3_ADD2_IfcMapConversion_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMapConversion::Class() { return *IFC4X3_ADD2_IfcMapConversion_type; } +Ifc4x3_add2::IfcMapConversion::IfcMapConversion(IfcEntityInstanceData* e) : IfcCoordinateOperation((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMapConversion_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMapConversion::IfcMapConversion(::Ifc4x3_add2::IfcCoordinateReferenceSystemSelect* v1_SourceCRS, ::Ifc4x3_add2::IfcCoordinateReferenceSystem* v2_TargetCRS, double v3_Eastings, double v4_Northings, double v5_OrthogonalHeight, boost::optional< double > v6_XAxisAbscissa, boost::optional< double > v7_XAxisOrdinate, boost::optional< double > v8_Scale) : IfcCoordinateOperation((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMapConversion_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_SourceCRS));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_TargetCRS));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Eastings));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Northings));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_OrthogonalHeight));data_->setArgument(4,attr);} if (v6_XAxisAbscissa) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_XAxisAbscissa));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_XAxisOrdinate) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_XAxisOrdinate));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Scale) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Scale));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcMapConversionScaled +double Ifc4x3_add2::IfcMapConversionScaled::FactorX() const { double v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcMapConversionScaled::setFactorX(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(8,attr);} } +double Ifc4x3_add2::IfcMapConversionScaled::FactorY() const { double v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcMapConversionScaled::setFactorY(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(9,attr);} } +double Ifc4x3_add2::IfcMapConversionScaled::FactorZ() const { double v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcMapConversionScaled::setFactorZ(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMapConversionScaled::declaration() const { return *IFC4X3_ADD2_IfcMapConversionScaled_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMapConversionScaled::Class() { return *IFC4X3_ADD2_IfcMapConversionScaled_type; } +Ifc4x3_add2::IfcMapConversionScaled::IfcMapConversionScaled(IfcEntityInstanceData* e) : IfcMapConversion((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMapConversionScaled_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMapConversionScaled::IfcMapConversionScaled(::Ifc4x3_add2::IfcCoordinateReferenceSystemSelect* v1_SourceCRS, ::Ifc4x3_add2::IfcCoordinateReferenceSystem* v2_TargetCRS, double v3_Eastings, double v4_Northings, double v5_OrthogonalHeight, boost::optional< double > v6_XAxisAbscissa, boost::optional< double > v7_XAxisOrdinate, boost::optional< double > v8_Scale, double v9_FactorX, double v10_FactorY, double v11_FactorZ) : IfcMapConversion((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMapConversionScaled_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_SourceCRS));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_TargetCRS));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Eastings));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Northings));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_OrthogonalHeight));data_->setArgument(4,attr);} if (v6_XAxisAbscissa) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_XAxisAbscissa));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_XAxisOrdinate) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_XAxisOrdinate));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Scale) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Scale));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_FactorX));data_->setArgument(8,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v10_FactorY));data_->setArgument(9,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v11_FactorZ));data_->setArgument(10,attr);} } + +// Function implementations for IfcMappedItem +::Ifc4x3_add2::IfcRepresentationMap* Ifc4x3_add2::IfcMappedItem::MappingSource() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcRepresentationMap>(true); } +void Ifc4x3_add2::IfcMappedItem::setMappingSource(::Ifc4x3_add2::IfcRepresentationMap* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcCartesianTransformationOperator* Ifc4x3_add2::IfcMappedItem::MappingTarget() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcCartesianTransformationOperator>(true); } +void Ifc4x3_add2::IfcMappedItem::setMappingTarget(::Ifc4x3_add2::IfcCartesianTransformationOperator* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMappedItem::declaration() const { return *IFC4X3_ADD2_IfcMappedItem_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMappedItem::Class() { return *IFC4X3_ADD2_IfcMappedItem_type; } +Ifc4x3_add2::IfcMappedItem::IfcMappedItem(IfcEntityInstanceData* e) : IfcRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMappedItem_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMappedItem::IfcMappedItem(::Ifc4x3_add2::IfcRepresentationMap* v1_MappingSource, ::Ifc4x3_add2::IfcCartesianTransformationOperator* v2_MappingTarget) : IfcRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMappedItem_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_MappingSource));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_MappingTarget));data_->setArgument(1,attr);} } + +// Function implementations for IfcMarineFacility +boost::optional< ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::Value > Ifc4x3_add2::IfcMarineFacility::PredefinedType() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcMarineFacility::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcMarineFacilityTypeEnum::ToString(*v)));}data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMarineFacility::declaration() const { return *IFC4X3_ADD2_IfcMarineFacility_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMarineFacility::Class() { return *IFC4X3_ADD2_IfcMarineFacility_type; } +Ifc4x3_add2::IfcMarineFacility::IfcMarineFacility(IfcEntityInstanceData* e) : IfcFacility((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMarineFacility_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMarineFacility::IfcMarineFacility(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, boost::optional< ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::Value > v10_PredefinedType) : IfcFacility((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMarineFacility_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongName));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_CompositionType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_CompositionType,::Ifc4x3_add2::IfcElementCompositionEnum::ToString(*v9_CompositionType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v10_PredefinedType,::Ifc4x3_add2::IfcMarineFacilityTypeEnum::ToString(*v10_PredefinedType))));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } } + +// Function implementations for IfcMarinePart +boost::optional< ::Ifc4x3_add2::IfcMarinePartTypeEnum::Value > Ifc4x3_add2::IfcMarinePart::PredefinedType() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcMarinePartTypeEnum::FromString(*data_->getArgument(10)); } +void Ifc4x3_add2::IfcMarinePart::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcMarinePartTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcMarinePartTypeEnum::ToString(*v)));}data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMarinePart::declaration() const { return *IFC4X3_ADD2_IfcMarinePart_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMarinePart::Class() { return *IFC4X3_ADD2_IfcMarinePart_type; } +Ifc4x3_add2::IfcMarinePart::IfcMarinePart(IfcEntityInstanceData* e) : IfcFacilityPart((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMarinePart_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMarinePart::IfcMarinePart(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, ::Ifc4x3_add2::IfcFacilityUsageEnum::Value v10_UsageType, boost::optional< ::Ifc4x3_add2::IfcMarinePartTypeEnum::Value > v11_PredefinedType) : IfcFacilityPart((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMarinePart_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongName));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_CompositionType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_CompositionType,::Ifc4x3_add2::IfcElementCompositionEnum::ToString(*v9_CompositionType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_UsageType,::Ifc4x3_add2::IfcFacilityUsageEnum::ToString(v10_UsageType))));data_->setArgument(9,attr);} if (v11_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v11_PredefinedType,::Ifc4x3_add2::IfcMarinePartTypeEnum::ToString(*v11_PredefinedType))));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } } + +// Function implementations for IfcMaterial +std::string Ifc4x3_add2::IfcMaterial::Name() const { std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcMaterial::setName(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcMaterial::Description() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcMaterial::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcMaterial::Category() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcMaterial::setCategory(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } + +::Ifc4x3_add2::IfcMaterialDefinitionRepresentation::list::ptr Ifc4x3_add2::IfcMaterial::HasRepresentation() const { return data_->getInverse(IFC4X3_ADD2_IfcMaterialDefinitionRepresentation_type, 3)->as(); } +::Ifc4x3_add2::IfcMaterialRelationship::list::ptr Ifc4x3_add2::IfcMaterial::IsRelatedWith() const { return data_->getInverse(IFC4X3_ADD2_IfcMaterialRelationship_type, 3)->as(); } +::Ifc4x3_add2::IfcMaterialRelationship::list::ptr Ifc4x3_add2::IfcMaterial::RelatesTo() const { return data_->getInverse(IFC4X3_ADD2_IfcMaterialRelationship_type, 2)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcMaterial::declaration() const { return *IFC4X3_ADD2_IfcMaterial_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMaterial::Class() { return *IFC4X3_ADD2_IfcMaterial_type; } +Ifc4x3_add2::IfcMaterial::IfcMaterial(IfcEntityInstanceData* e) : IfcMaterialDefinition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMaterial_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMaterial::IfcMaterial(std::string v1_Name, boost::optional< std::string > v2_Description, boost::optional< std::string > v3_Category) : IfcMaterialDefinition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMaterial_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_Category) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Category));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } } + +// Function implementations for IfcMaterialClassificationRelationship +aggregate_of< ::Ifc4x3_add2::IfcClassificationSelect >::ptr Ifc4x3_add2::IfcMaterialClassificationRelationship::MaterialClassifications() const { aggregate_of_instance::ptr es = *data_->getArgument(0); return es->as< ::Ifc4x3_add2::IfcClassificationSelect >(); } +void Ifc4x3_add2::IfcMaterialClassificationRelationship::setMaterialClassifications(aggregate_of< ::Ifc4x3_add2::IfcClassificationSelect >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcMaterial* Ifc4x3_add2::IfcMaterialClassificationRelationship::ClassifiedMaterial() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcMaterial>(true); } +void Ifc4x3_add2::IfcMaterialClassificationRelationship::setClassifiedMaterial(::Ifc4x3_add2::IfcMaterial* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMaterialClassificationRelationship::declaration() const { return *IFC4X3_ADD2_IfcMaterialClassificationRelationship_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMaterialClassificationRelationship::Class() { return *IFC4X3_ADD2_IfcMaterialClassificationRelationship_type; } +Ifc4x3_add2::IfcMaterialClassificationRelationship::IfcMaterialClassificationRelationship(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMaterialClassificationRelationship_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMaterialClassificationRelationship::IfcMaterialClassificationRelationship(aggregate_of< ::Ifc4x3_add2::IfcClassificationSelect >::ptr v1_MaterialClassifications, ::Ifc4x3_add2::IfcMaterial* v2_ClassifiedMaterial) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMaterialClassificationRelationship_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_MaterialClassifications)->generalize());data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_ClassifiedMaterial));data_->setArgument(1,attr);} } + +// Function implementations for IfcMaterialConstituent +boost::optional< std::string > Ifc4x3_add2::IfcMaterialConstituent::Name() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcMaterialConstituent::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcMaterialConstituent::Description() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcMaterialConstituent::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcMaterial* Ifc4x3_add2::IfcMaterialConstituent::Material() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcMaterial>(true); } +void Ifc4x3_add2::IfcMaterialConstituent::setMaterial(::Ifc4x3_add2::IfcMaterial* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +boost::optional< double > Ifc4x3_add2::IfcMaterialConstituent::Fraction() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcMaterialConstituent::setFraction(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcMaterialConstituent::Category() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcMaterialConstituent::setCategory(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } + +::Ifc4x3_add2::IfcMaterialConstituentSet::list::ptr Ifc4x3_add2::IfcMaterialConstituent::ToMaterialConstituentSet() const { return data_->getInverse(IFC4X3_ADD2_IfcMaterialConstituentSet_type, 2)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcMaterialConstituent::declaration() const { return *IFC4X3_ADD2_IfcMaterialConstituent_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMaterialConstituent::Class() { return *IFC4X3_ADD2_IfcMaterialConstituent_type; } +Ifc4x3_add2::IfcMaterialConstituent::IfcMaterialConstituent(IfcEntityInstanceData* e) : IfcMaterialDefinition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMaterialConstituent_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMaterialConstituent::IfcMaterialConstituent(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcMaterial* v3_Material, boost::optional< double > v4_Fraction, boost::optional< std::string > v5_Category) : IfcMaterialDefinition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMaterialConstituent_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Material));data_->setArgument(2,attr);} if (v4_Fraction) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Fraction));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_Category) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Category));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcMaterialConstituentSet +boost::optional< std::string > Ifc4x3_add2::IfcMaterialConstituentSet::Name() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcMaterialConstituentSet::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcMaterialConstituentSet::Description() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcMaterialConstituentSet::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcMaterialConstituent >::ptr > Ifc4x3_add2::IfcMaterialConstituentSet::MaterialConstituents() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(2); return es->as< ::Ifc4x3_add2::IfcMaterialConstituent >(); } +void Ifc4x3_add2::IfcMaterialConstituentSet::setMaterialConstituents(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcMaterialConstituent >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMaterialConstituentSet::declaration() const { return *IFC4X3_ADD2_IfcMaterialConstituentSet_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMaterialConstituentSet::Class() { return *IFC4X3_ADD2_IfcMaterialConstituentSet_type; } +Ifc4x3_add2::IfcMaterialConstituentSet::IfcMaterialConstituentSet(IfcEntityInstanceData* e) : IfcMaterialDefinition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMaterialConstituentSet_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMaterialConstituentSet::IfcMaterialConstituentSet(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcMaterialConstituent >::ptr > v3_MaterialConstituents) : IfcMaterialDefinition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMaterialConstituentSet_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_MaterialConstituents) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_MaterialConstituents)->generalize());data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } } + +// Function implementations for IfcMaterialDefinition + +::Ifc4x3_add2::IfcRelAssociatesMaterial::list::ptr Ifc4x3_add2::IfcMaterialDefinition::AssociatedTo() const { return data_->getInverse(IFC4X3_ADD2_IfcRelAssociatesMaterial_type, 5)->as(); } +::Ifc4x3_add2::IfcExternalReferenceRelationship::list::ptr Ifc4x3_add2::IfcMaterialDefinition::HasExternalReferences() const { return data_->getInverse(IFC4X3_ADD2_IfcExternalReferenceRelationship_type, 3)->as(); } +::Ifc4x3_add2::IfcMaterialProperties::list::ptr Ifc4x3_add2::IfcMaterialDefinition::HasProperties() const { return data_->getInverse(IFC4X3_ADD2_IfcMaterialProperties_type, 3)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcMaterialDefinition::declaration() const { return *IFC4X3_ADD2_IfcMaterialDefinition_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMaterialDefinition::Class() { return *IFC4X3_ADD2_IfcMaterialDefinition_type; } +Ifc4x3_add2::IfcMaterialDefinition::IfcMaterialDefinition(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMaterialDefinition_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMaterialDefinition::IfcMaterialDefinition() : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMaterialDefinition_type); } + +// Function implementations for IfcMaterialDefinitionRepresentation +::Ifc4x3_add2::IfcMaterial* Ifc4x3_add2::IfcMaterialDefinitionRepresentation::RepresentedMaterial() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcMaterial>(true); } +void Ifc4x3_add2::IfcMaterialDefinitionRepresentation::setRepresentedMaterial(::Ifc4x3_add2::IfcMaterial* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMaterialDefinitionRepresentation::declaration() const { return *IFC4X3_ADD2_IfcMaterialDefinitionRepresentation_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMaterialDefinitionRepresentation::Class() { return *IFC4X3_ADD2_IfcMaterialDefinitionRepresentation_type; } +Ifc4x3_add2::IfcMaterialDefinitionRepresentation::IfcMaterialDefinitionRepresentation(IfcEntityInstanceData* e) : IfcProductRepresentation((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMaterialDefinitionRepresentation_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMaterialDefinitionRepresentation::IfcMaterialDefinitionRepresentation(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_add2::IfcRepresentation >::ptr v3_Representations, ::Ifc4x3_add2::IfcMaterial* v4_RepresentedMaterial) : IfcProductRepresentation((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMaterialDefinitionRepresentation_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Representations)->generalize());data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_RepresentedMaterial));data_->setArgument(3,attr);} } + +// Function implementations for IfcMaterialLayer +::Ifc4x3_add2::IfcMaterial* Ifc4x3_add2::IfcMaterialLayer::Material() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcMaterial>(true); } +void Ifc4x3_add2::IfcMaterialLayer::setMaterial(::Ifc4x3_add2::IfcMaterial* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +double Ifc4x3_add2::IfcMaterialLayer::LayerThickness() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcMaterialLayer::setLayerThickness(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +boost::optional< boost::logic::tribool > Ifc4x3_add2::IfcMaterialLayer::IsVentilated() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } boost::logic::tribool v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcMaterialLayer::setIsVentilated(boost::optional< boost::logic::tribool > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcMaterialLayer::Name() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } std::string v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcMaterialLayer::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcMaterialLayer::Description() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcMaterialLayer::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcMaterialLayer::Category() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcMaterialLayer::setCategory(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< int > Ifc4x3_add2::IfcMaterialLayer::Priority() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } int v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcMaterialLayer::setPriority(boost::optional< int > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } + +::Ifc4x3_add2::IfcMaterialLayerSet::list::ptr Ifc4x3_add2::IfcMaterialLayer::ToMaterialLayerSet() const { return data_->getInverse(IFC4X3_ADD2_IfcMaterialLayerSet_type, 0)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcMaterialLayer::declaration() const { return *IFC4X3_ADD2_IfcMaterialLayer_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMaterialLayer::Class() { return *IFC4X3_ADD2_IfcMaterialLayer_type; } +Ifc4x3_add2::IfcMaterialLayer::IfcMaterialLayer(IfcEntityInstanceData* e) : IfcMaterialDefinition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMaterialLayer_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMaterialLayer::IfcMaterialLayer(::Ifc4x3_add2::IfcMaterial* v1_Material, double v2_LayerThickness, boost::optional< boost::logic::tribool > v3_IsVentilated, boost::optional< std::string > v4_Name, boost::optional< std::string > v5_Description, boost::optional< std::string > v6_Category, boost::optional< int > v7_Priority) : IfcMaterialDefinition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMaterialLayer_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Material));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_LayerThickness));data_->setArgument(1,attr);} if (v3_IsVentilated) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_IsVentilated));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Name));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Description));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Category) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Category));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_Priority) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_Priority));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } } + +// Function implementations for IfcMaterialLayerSet +aggregate_of< ::Ifc4x3_add2::IfcMaterialLayer >::ptr Ifc4x3_add2::IfcMaterialLayerSet::MaterialLayers() const { aggregate_of_instance::ptr es = *data_->getArgument(0); return es->as< ::Ifc4x3_add2::IfcMaterialLayer >(); } +void Ifc4x3_add2::IfcMaterialLayerSet::setMaterialLayers(aggregate_of< ::Ifc4x3_add2::IfcMaterialLayer >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcMaterialLayerSet::LayerSetName() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcMaterialLayerSet::setLayerSetName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcMaterialLayerSet::Description() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcMaterialLayerSet::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMaterialLayerSet::declaration() const { return *IFC4X3_ADD2_IfcMaterialLayerSet_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMaterialLayerSet::Class() { return *IFC4X3_ADD2_IfcMaterialLayerSet_type; } +Ifc4x3_add2::IfcMaterialLayerSet::IfcMaterialLayerSet(IfcEntityInstanceData* e) : IfcMaterialDefinition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMaterialLayerSet_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMaterialLayerSet::IfcMaterialLayerSet(aggregate_of< ::Ifc4x3_add2::IfcMaterialLayer >::ptr v1_MaterialLayers, boost::optional< std::string > v2_LayerSetName, boost::optional< std::string > v3_Description) : IfcMaterialDefinition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMaterialLayerSet_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_MaterialLayers)->generalize());data_->setArgument(0,attr);} if (v2_LayerSetName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_LayerSetName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Description));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } } + +// Function implementations for IfcMaterialLayerSetUsage +::Ifc4x3_add2::IfcMaterialLayerSet* Ifc4x3_add2::IfcMaterialLayerSetUsage::ForLayerSet() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcMaterialLayerSet>(true); } +void Ifc4x3_add2::IfcMaterialLayerSetUsage::setForLayerSet(::Ifc4x3_add2::IfcMaterialLayerSet* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcLayerSetDirectionEnum::Value Ifc4x3_add2::IfcMaterialLayerSetUsage::LayerSetDirection() const { return ::Ifc4x3_add2::IfcLayerSetDirectionEnum::FromString(*data_->getArgument(1)); } +void Ifc4x3_add2::IfcMaterialLayerSetUsage::setLayerSetDirection(::Ifc4x3_add2::IfcLayerSetDirectionEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcLayerSetDirectionEnum::ToString(v)));data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcDirectionSenseEnum::Value Ifc4x3_add2::IfcMaterialLayerSetUsage::DirectionSense() const { return ::Ifc4x3_add2::IfcDirectionSenseEnum::FromString(*data_->getArgument(2)); } +void Ifc4x3_add2::IfcMaterialLayerSetUsage::setDirectionSense(::Ifc4x3_add2::IfcDirectionSenseEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcDirectionSenseEnum::ToString(v)));data_->setArgument(2,attr);} } +double Ifc4x3_add2::IfcMaterialLayerSetUsage::OffsetFromReferenceLine() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcMaterialLayerSetUsage::setOffsetFromReferenceLine(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +boost::optional< double > Ifc4x3_add2::IfcMaterialLayerSetUsage::ReferenceExtent() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcMaterialLayerSetUsage::setReferenceExtent(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMaterialLayerSetUsage::declaration() const { return *IFC4X3_ADD2_IfcMaterialLayerSetUsage_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMaterialLayerSetUsage::Class() { return *IFC4X3_ADD2_IfcMaterialLayerSetUsage_type; } +Ifc4x3_add2::IfcMaterialLayerSetUsage::IfcMaterialLayerSetUsage(IfcEntityInstanceData* e) : IfcMaterialUsageDefinition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMaterialLayerSetUsage_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMaterialLayerSetUsage::IfcMaterialLayerSetUsage(::Ifc4x3_add2::IfcMaterialLayerSet* v1_ForLayerSet, ::Ifc4x3_add2::IfcLayerSetDirectionEnum::Value v2_LayerSetDirection, ::Ifc4x3_add2::IfcDirectionSenseEnum::Value v3_DirectionSense, double v4_OffsetFromReferenceLine, boost::optional< double > v5_ReferenceExtent) : IfcMaterialUsageDefinition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMaterialLayerSetUsage_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_ForLayerSet));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v2_LayerSetDirection,::Ifc4x3_add2::IfcLayerSetDirectionEnum::ToString(v2_LayerSetDirection))));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v3_DirectionSense,::Ifc4x3_add2::IfcDirectionSenseEnum::ToString(v3_DirectionSense))));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_OffsetFromReferenceLine));data_->setArgument(3,attr);} if (v5_ReferenceExtent) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ReferenceExtent));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcMaterialLayerWithOffsets +::Ifc4x3_add2::IfcLayerSetDirectionEnum::Value Ifc4x3_add2::IfcMaterialLayerWithOffsets::OffsetDirection() const { return ::Ifc4x3_add2::IfcLayerSetDirectionEnum::FromString(*data_->getArgument(7)); } +void Ifc4x3_add2::IfcMaterialLayerWithOffsets::setOffsetDirection(::Ifc4x3_add2::IfcLayerSetDirectionEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcLayerSetDirectionEnum::ToString(v)));data_->setArgument(7,attr);} } +std::vector< double > /*[1:2]*/ Ifc4x3_add2::IfcMaterialLayerWithOffsets::OffsetValues() const { std::vector< double > /*[1:2]*/ v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcMaterialLayerWithOffsets::setOffsetValues(std::vector< double > /*[1:2]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMaterialLayerWithOffsets::declaration() const { return *IFC4X3_ADD2_IfcMaterialLayerWithOffsets_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMaterialLayerWithOffsets::Class() { return *IFC4X3_ADD2_IfcMaterialLayerWithOffsets_type; } +Ifc4x3_add2::IfcMaterialLayerWithOffsets::IfcMaterialLayerWithOffsets(IfcEntityInstanceData* e) : IfcMaterialLayer((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMaterialLayerWithOffsets_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMaterialLayerWithOffsets::IfcMaterialLayerWithOffsets(::Ifc4x3_add2::IfcMaterial* v1_Material, double v2_LayerThickness, boost::optional< boost::logic::tribool > v3_IsVentilated, boost::optional< std::string > v4_Name, boost::optional< std::string > v5_Description, boost::optional< std::string > v6_Category, boost::optional< int > v7_Priority, ::Ifc4x3_add2::IfcLayerSetDirectionEnum::Value v8_OffsetDirection, std::vector< double > /*[1:2]*/ v9_OffsetValues) : IfcMaterialLayer((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMaterialLayerWithOffsets_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Material));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_LayerThickness));data_->setArgument(1,attr);} if (v3_IsVentilated) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_IsVentilated));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Name));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Description));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Category) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Category));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_Priority) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_Priority));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v8_OffsetDirection,::Ifc4x3_add2::IfcLayerSetDirectionEnum::ToString(v8_OffsetDirection))));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_OffsetValues));data_->setArgument(8,attr);} } + +// Function implementations for IfcMaterialList +aggregate_of< ::Ifc4x3_add2::IfcMaterial >::ptr Ifc4x3_add2::IfcMaterialList::Materials() const { aggregate_of_instance::ptr es = *data_->getArgument(0); return es->as< ::Ifc4x3_add2::IfcMaterial >(); } +void Ifc4x3_add2::IfcMaterialList::setMaterials(aggregate_of< ::Ifc4x3_add2::IfcMaterial >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMaterialList::declaration() const { return *IFC4X3_ADD2_IfcMaterialList_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMaterialList::Class() { return *IFC4X3_ADD2_IfcMaterialList_type; } +Ifc4x3_add2::IfcMaterialList::IfcMaterialList(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMaterialList_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMaterialList::IfcMaterialList(aggregate_of< ::Ifc4x3_add2::IfcMaterial >::ptr v1_Materials) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMaterialList_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Materials)->generalize());data_->setArgument(0,attr);} } + +// Function implementations for IfcMaterialProfile +boost::optional< std::string > Ifc4x3_add2::IfcMaterialProfile::Name() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcMaterialProfile::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcMaterialProfile::Description() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcMaterialProfile::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcMaterial* Ifc4x3_add2::IfcMaterialProfile::Material() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcMaterial>(true); } +void Ifc4x3_add2::IfcMaterialProfile::setMaterial(::Ifc4x3_add2::IfcMaterial* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcProfileDef* Ifc4x3_add2::IfcMaterialProfile::Profile() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcProfileDef>(true); } +void Ifc4x3_add2::IfcMaterialProfile::setProfile(::Ifc4x3_add2::IfcProfileDef* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +boost::optional< int > Ifc4x3_add2::IfcMaterialProfile::Priority() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } int v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcMaterialProfile::setPriority(boost::optional< int > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcMaterialProfile::Category() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcMaterialProfile::setCategory(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } + +::Ifc4x3_add2::IfcMaterialProfileSet::list::ptr Ifc4x3_add2::IfcMaterialProfile::ToMaterialProfileSet() const { return data_->getInverse(IFC4X3_ADD2_IfcMaterialProfileSet_type, 2)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcMaterialProfile::declaration() const { return *IFC4X3_ADD2_IfcMaterialProfile_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMaterialProfile::Class() { return *IFC4X3_ADD2_IfcMaterialProfile_type; } +Ifc4x3_add2::IfcMaterialProfile::IfcMaterialProfile(IfcEntityInstanceData* e) : IfcMaterialDefinition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMaterialProfile_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMaterialProfile::IfcMaterialProfile(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcMaterial* v3_Material, ::Ifc4x3_add2::IfcProfileDef* v4_Profile, boost::optional< int > v5_Priority, boost::optional< std::string > v6_Category) : IfcMaterialDefinition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMaterialProfile_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Material));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Profile));data_->setArgument(3,attr);} if (v5_Priority) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Priority));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Category) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Category));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } } + +// Function implementations for IfcMaterialProfileSet +boost::optional< std::string > Ifc4x3_add2::IfcMaterialProfileSet::Name() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcMaterialProfileSet::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcMaterialProfileSet::Description() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcMaterialProfileSet::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcMaterialProfile >::ptr Ifc4x3_add2::IfcMaterialProfileSet::MaterialProfiles() const { aggregate_of_instance::ptr es = *data_->getArgument(2); return es->as< ::Ifc4x3_add2::IfcMaterialProfile >(); } +void Ifc4x3_add2::IfcMaterialProfileSet::setMaterialProfiles(aggregate_of< ::Ifc4x3_add2::IfcMaterialProfile >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcCompositeProfileDef* Ifc4x3_add2::IfcMaterialProfileSet::CompositeProfile() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcCompositeProfileDef>(true); } +void Ifc4x3_add2::IfcMaterialProfileSet::setCompositeProfile(::Ifc4x3_add2::IfcCompositeProfileDef* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMaterialProfileSet::declaration() const { return *IFC4X3_ADD2_IfcMaterialProfileSet_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMaterialProfileSet::Class() { return *IFC4X3_ADD2_IfcMaterialProfileSet_type; } +Ifc4x3_add2::IfcMaterialProfileSet::IfcMaterialProfileSet(IfcEntityInstanceData* e) : IfcMaterialDefinition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMaterialProfileSet_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMaterialProfileSet::IfcMaterialProfileSet(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_add2::IfcMaterialProfile >::ptr v3_MaterialProfiles, ::Ifc4x3_add2::IfcCompositeProfileDef* v4_CompositeProfile) : IfcMaterialDefinition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMaterialProfileSet_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_MaterialProfiles)->generalize());data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_CompositeProfile));data_->setArgument(3,attr);} } + +// Function implementations for IfcMaterialProfileSetUsage +::Ifc4x3_add2::IfcMaterialProfileSet* Ifc4x3_add2::IfcMaterialProfileSetUsage::ForProfileSet() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcMaterialProfileSet>(true); } +void Ifc4x3_add2::IfcMaterialProfileSetUsage::setForProfileSet(::Ifc4x3_add2::IfcMaterialProfileSet* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +boost::optional< int > Ifc4x3_add2::IfcMaterialProfileSetUsage::CardinalPoint() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } int v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcMaterialProfileSetUsage::setCardinalPoint(boost::optional< int > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< double > Ifc4x3_add2::IfcMaterialProfileSetUsage::ReferenceExtent() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcMaterialProfileSetUsage::setReferenceExtent(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMaterialProfileSetUsage::declaration() const { return *IFC4X3_ADD2_IfcMaterialProfileSetUsage_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMaterialProfileSetUsage::Class() { return *IFC4X3_ADD2_IfcMaterialProfileSetUsage_type; } +Ifc4x3_add2::IfcMaterialProfileSetUsage::IfcMaterialProfileSetUsage(IfcEntityInstanceData* e) : IfcMaterialUsageDefinition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMaterialProfileSetUsage_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMaterialProfileSetUsage::IfcMaterialProfileSetUsage(::Ifc4x3_add2::IfcMaterialProfileSet* v1_ForProfileSet, boost::optional< int > v2_CardinalPoint, boost::optional< double > v3_ReferenceExtent) : IfcMaterialUsageDefinition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMaterialProfileSetUsage_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_ForProfileSet));data_->setArgument(0,attr);} if (v2_CardinalPoint) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_CardinalPoint));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_ReferenceExtent) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_ReferenceExtent));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } } + +// Function implementations for IfcMaterialProfileSetUsageTapering +::Ifc4x3_add2::IfcMaterialProfileSet* Ifc4x3_add2::IfcMaterialProfileSetUsageTapering::ForProfileEndSet() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcMaterialProfileSet>(true); } +void Ifc4x3_add2::IfcMaterialProfileSetUsageTapering::setForProfileEndSet(::Ifc4x3_add2::IfcMaterialProfileSet* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +boost::optional< int > Ifc4x3_add2::IfcMaterialProfileSetUsageTapering::CardinalEndPoint() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } int v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcMaterialProfileSetUsageTapering::setCardinalEndPoint(boost::optional< int > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMaterialProfileSetUsageTapering::declaration() const { return *IFC4X3_ADD2_IfcMaterialProfileSetUsageTapering_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMaterialProfileSetUsageTapering::Class() { return *IFC4X3_ADD2_IfcMaterialProfileSetUsageTapering_type; } +Ifc4x3_add2::IfcMaterialProfileSetUsageTapering::IfcMaterialProfileSetUsageTapering(IfcEntityInstanceData* e) : IfcMaterialProfileSetUsage((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMaterialProfileSetUsageTapering_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMaterialProfileSetUsageTapering::IfcMaterialProfileSetUsageTapering(::Ifc4x3_add2::IfcMaterialProfileSet* v1_ForProfileSet, boost::optional< int > v2_CardinalPoint, boost::optional< double > v3_ReferenceExtent, ::Ifc4x3_add2::IfcMaterialProfileSet* v4_ForProfileEndSet, boost::optional< int > v5_CardinalEndPoint) : IfcMaterialProfileSetUsage((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMaterialProfileSetUsageTapering_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_ForProfileSet));data_->setArgument(0,attr);} if (v2_CardinalPoint) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_CardinalPoint));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_ReferenceExtent) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_ReferenceExtent));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_ForProfileEndSet));data_->setArgument(3,attr);} if (v5_CardinalEndPoint) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_CardinalEndPoint));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcMaterialProfileWithOffsets +std::vector< double > /*[1:2]*/ Ifc4x3_add2::IfcMaterialProfileWithOffsets::OffsetValues() const { std::vector< double > /*[1:2]*/ v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcMaterialProfileWithOffsets::setOffsetValues(std::vector< double > /*[1:2]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMaterialProfileWithOffsets::declaration() const { return *IFC4X3_ADD2_IfcMaterialProfileWithOffsets_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMaterialProfileWithOffsets::Class() { return *IFC4X3_ADD2_IfcMaterialProfileWithOffsets_type; } +Ifc4x3_add2::IfcMaterialProfileWithOffsets::IfcMaterialProfileWithOffsets(IfcEntityInstanceData* e) : IfcMaterialProfile((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMaterialProfileWithOffsets_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMaterialProfileWithOffsets::IfcMaterialProfileWithOffsets(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcMaterial* v3_Material, ::Ifc4x3_add2::IfcProfileDef* v4_Profile, boost::optional< int > v5_Priority, boost::optional< std::string > v6_Category, std::vector< double > /*[1:2]*/ v7_OffsetValues) : IfcMaterialProfile((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMaterialProfileWithOffsets_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Material));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Profile));data_->setArgument(3,attr);} if (v5_Priority) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Priority));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Category) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Category));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_OffsetValues));data_->setArgument(6,attr);} } + +// Function implementations for IfcMaterialProperties +::Ifc4x3_add2::IfcMaterialDefinition* Ifc4x3_add2::IfcMaterialProperties::Material() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcMaterialDefinition>(true); } +void Ifc4x3_add2::IfcMaterialProperties::setMaterial(::Ifc4x3_add2::IfcMaterialDefinition* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMaterialProperties::declaration() const { return *IFC4X3_ADD2_IfcMaterialProperties_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMaterialProperties::Class() { return *IFC4X3_ADD2_IfcMaterialProperties_type; } +Ifc4x3_add2::IfcMaterialProperties::IfcMaterialProperties(IfcEntityInstanceData* e) : IfcExtendedProperties((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMaterialProperties_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMaterialProperties::IfcMaterialProperties(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_add2::IfcProperty >::ptr v3_Properties, ::Ifc4x3_add2::IfcMaterialDefinition* v4_Material) : IfcExtendedProperties((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMaterialProperties_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Properties)->generalize());data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Material));data_->setArgument(3,attr);} } + +// Function implementations for IfcMaterialRelationship +::Ifc4x3_add2::IfcMaterial* Ifc4x3_add2::IfcMaterialRelationship::RelatingMaterial() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcMaterial>(true); } +void Ifc4x3_add2::IfcMaterialRelationship::setRelatingMaterial(::Ifc4x3_add2::IfcMaterial* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcMaterial >::ptr Ifc4x3_add2::IfcMaterialRelationship::RelatedMaterials() const { aggregate_of_instance::ptr es = *data_->getArgument(3); return es->as< ::Ifc4x3_add2::IfcMaterial >(); } +void Ifc4x3_add2::IfcMaterialRelationship::setRelatedMaterials(aggregate_of< ::Ifc4x3_add2::IfcMaterial >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcMaterialRelationship::MaterialExpression() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcMaterialRelationship::setMaterialExpression(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMaterialRelationship::declaration() const { return *IFC4X3_ADD2_IfcMaterialRelationship_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMaterialRelationship::Class() { return *IFC4X3_ADD2_IfcMaterialRelationship_type; } +Ifc4x3_add2::IfcMaterialRelationship::IfcMaterialRelationship(IfcEntityInstanceData* e) : IfcResourceLevelRelationship((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMaterialRelationship_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMaterialRelationship::IfcMaterialRelationship(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcMaterial* v3_RelatingMaterial, aggregate_of< ::Ifc4x3_add2::IfcMaterial >::ptr v4_RelatedMaterials, boost::optional< std::string > v5_MaterialExpression) : IfcResourceLevelRelationship((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMaterialRelationship_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_RelatingMaterial));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_RelatedMaterials)->generalize());data_->setArgument(3,attr);} if (v5_MaterialExpression) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_MaterialExpression));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcMaterialUsageDefinition + +::Ifc4x3_add2::IfcRelAssociatesMaterial::list::ptr Ifc4x3_add2::IfcMaterialUsageDefinition::AssociatedTo() const { return data_->getInverse(IFC4X3_ADD2_IfcRelAssociatesMaterial_type, 5)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcMaterialUsageDefinition::declaration() const { return *IFC4X3_ADD2_IfcMaterialUsageDefinition_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMaterialUsageDefinition::Class() { return *IFC4X3_ADD2_IfcMaterialUsageDefinition_type; } +Ifc4x3_add2::IfcMaterialUsageDefinition::IfcMaterialUsageDefinition(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMaterialUsageDefinition_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMaterialUsageDefinition::IfcMaterialUsageDefinition() : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMaterialUsageDefinition_type); } + +// Function implementations for IfcMeasureWithUnit +::Ifc4x3_add2::IfcValue* Ifc4x3_add2::IfcMeasureWithUnit::ValueComponent() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcValue>(true); } +void Ifc4x3_add2::IfcMeasureWithUnit::setValueComponent(::Ifc4x3_add2::IfcValue* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcUnit* Ifc4x3_add2::IfcMeasureWithUnit::UnitComponent() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcUnit>(true); } +void Ifc4x3_add2::IfcMeasureWithUnit::setUnitComponent(::Ifc4x3_add2::IfcUnit* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMeasureWithUnit::declaration() const { return *IFC4X3_ADD2_IfcMeasureWithUnit_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMeasureWithUnit::Class() { return *IFC4X3_ADD2_IfcMeasureWithUnit_type; } +Ifc4x3_add2::IfcMeasureWithUnit::IfcMeasureWithUnit(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMeasureWithUnit_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMeasureWithUnit::IfcMeasureWithUnit(::Ifc4x3_add2::IfcValue* v1_ValueComponent, ::Ifc4x3_add2::IfcUnit* v2_UnitComponent) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMeasureWithUnit_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_ValueComponent));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_UnitComponent));data_->setArgument(1,attr);} } + +// Function implementations for IfcMechanicalFastener +boost::optional< double > Ifc4x3_add2::IfcMechanicalFastener::NominalDiameter() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } double v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcMechanicalFastener::setNominalDiameter(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } +boost::optional< double > Ifc4x3_add2::IfcMechanicalFastener::NominalLength() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } double v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcMechanicalFastener::setNominalLength(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(9,attr);} } +boost::optional< ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::Value > Ifc4x3_add2::IfcMechanicalFastener::PredefinedType() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::FromString(*data_->getArgument(10)); } +void Ifc4x3_add2::IfcMechanicalFastener::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::ToString(*v)));}data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMechanicalFastener::declaration() const { return *IFC4X3_ADD2_IfcMechanicalFastener_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMechanicalFastener::Class() { return *IFC4X3_ADD2_IfcMechanicalFastener_type; } +Ifc4x3_add2::IfcMechanicalFastener::IfcMechanicalFastener(IfcEntityInstanceData* e) : IfcElementComponent((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMechanicalFastener_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMechanicalFastener::IfcMechanicalFastener(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< double > v9_NominalDiameter, boost::optional< double > v10_NominalLength, boost::optional< ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::Value > v11_PredefinedType) : IfcElementComponent((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMechanicalFastener_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_NominalDiameter) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_NominalDiameter));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_NominalLength) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_NominalLength));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v11_PredefinedType,::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::ToString(*v11_PredefinedType))));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } } + +// Function implementations for IfcMechanicalFastenerType +::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::Value Ifc4x3_add2::IfcMechanicalFastenerType::PredefinedType() const { return ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcMechanicalFastenerType::setPredefinedType(::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::ToString(v)));data_->setArgument(9,attr);} } +boost::optional< double > Ifc4x3_add2::IfcMechanicalFastenerType::NominalDiameter() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } double v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcMechanicalFastenerType::setNominalDiameter(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } +boost::optional< double > Ifc4x3_add2::IfcMechanicalFastenerType::NominalLength() const { if(!data_->getArgument(11) || data_->getArgument(11)->isNull()) { return boost::none; } double v = *data_->getArgument(11); return v; } +void Ifc4x3_add2::IfcMechanicalFastenerType::setNominalLength(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(11,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMechanicalFastenerType::declaration() const { return *IFC4X3_ADD2_IfcMechanicalFastenerType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMechanicalFastenerType::Class() { return *IFC4X3_ADD2_IfcMechanicalFastenerType_type; } +Ifc4x3_add2::IfcMechanicalFastenerType::IfcMechanicalFastenerType(IfcEntityInstanceData* e) : IfcElementComponentType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMechanicalFastenerType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMechanicalFastenerType::IfcMechanicalFastenerType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::Value v10_PredefinedType, boost::optional< double > v11_NominalDiameter, boost::optional< double > v12_NominalLength) : IfcElementComponentType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMechanicalFastenerType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} if (v11_NominalDiameter) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_NominalDiameter));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } if (v12_NominalLength) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v12_NominalLength));data_->setArgument(11,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(11, attr); } } + +// Function implementations for IfcMedicalDevice +boost::optional< ::Ifc4x3_add2::IfcMedicalDeviceTypeEnum::Value > Ifc4x3_add2::IfcMedicalDevice::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcMedicalDeviceTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcMedicalDevice::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcMedicalDeviceTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcMedicalDeviceTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMedicalDevice::declaration() const { return *IFC4X3_ADD2_IfcMedicalDevice_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMedicalDevice::Class() { return *IFC4X3_ADD2_IfcMedicalDevice_type; } +Ifc4x3_add2::IfcMedicalDevice::IfcMedicalDevice(IfcEntityInstanceData* e) : IfcFlowTerminal((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMedicalDevice_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMedicalDevice::IfcMedicalDevice(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcMedicalDeviceTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMedicalDevice_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcMedicalDeviceTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcMedicalDeviceType +::Ifc4x3_add2::IfcMedicalDeviceTypeEnum::Value Ifc4x3_add2::IfcMedicalDeviceType::PredefinedType() const { return ::Ifc4x3_add2::IfcMedicalDeviceTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcMedicalDeviceType::setPredefinedType(::Ifc4x3_add2::IfcMedicalDeviceTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcMedicalDeviceTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMedicalDeviceType::declaration() const { return *IFC4X3_ADD2_IfcMedicalDeviceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMedicalDeviceType::Class() { return *IFC4X3_ADD2_IfcMedicalDeviceType_type; } +Ifc4x3_add2::IfcMedicalDeviceType::IfcMedicalDeviceType(IfcEntityInstanceData* e) : IfcFlowTerminalType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMedicalDeviceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMedicalDeviceType::IfcMedicalDeviceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcMedicalDeviceTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMedicalDeviceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcMedicalDeviceTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcMember +boost::optional< ::Ifc4x3_add2::IfcMemberTypeEnum::Value > Ifc4x3_add2::IfcMember::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcMemberTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcMember::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcMemberTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcMemberTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMember::declaration() const { return *IFC4X3_ADD2_IfcMember_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMember::Class() { return *IFC4X3_ADD2_IfcMember_type; } +Ifc4x3_add2::IfcMember::IfcMember(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMember_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMember::IfcMember(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcMemberTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMember_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcMemberTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcMemberType +::Ifc4x3_add2::IfcMemberTypeEnum::Value Ifc4x3_add2::IfcMemberType::PredefinedType() const { return ::Ifc4x3_add2::IfcMemberTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcMemberType::setPredefinedType(::Ifc4x3_add2::IfcMemberTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcMemberTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMemberType::declaration() const { return *IFC4X3_ADD2_IfcMemberType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMemberType::Class() { return *IFC4X3_ADD2_IfcMemberType_type; } +Ifc4x3_add2::IfcMemberType::IfcMemberType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMemberType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMemberType::IfcMemberType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcMemberTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMemberType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcMemberTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcMetric +::Ifc4x3_add2::IfcBenchmarkEnum::Value Ifc4x3_add2::IfcMetric::Benchmark() const { return ::Ifc4x3_add2::IfcBenchmarkEnum::FromString(*data_->getArgument(7)); } +void Ifc4x3_add2::IfcMetric::setBenchmark(::Ifc4x3_add2::IfcBenchmarkEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcBenchmarkEnum::ToString(v)));data_->setArgument(7,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcMetric::ValueSource() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } std::string v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcMetric::setValueSource(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } +::Ifc4x3_add2::IfcMetricValueSelect* Ifc4x3_add2::IfcMetric::DataValue() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(9)))->as<::Ifc4x3_add2::IfcMetricValueSelect>(true); } +void Ifc4x3_add2::IfcMetric::setDataValue(::Ifc4x3_add2::IfcMetricValueSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(9,attr);} } +::Ifc4x3_add2::IfcReference* Ifc4x3_add2::IfcMetric::ReferencePath() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(10)))->as<::Ifc4x3_add2::IfcReference>(true); } +void Ifc4x3_add2::IfcMetric::setReferencePath(::Ifc4x3_add2::IfcReference* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMetric::declaration() const { return *IFC4X3_ADD2_IfcMetric_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMetric::Class() { return *IFC4X3_ADD2_IfcMetric_type; } +Ifc4x3_add2::IfcMetric::IfcMetric(IfcEntityInstanceData* e) : IfcConstraint((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMetric_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMetric::IfcMetric(std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcConstraintEnum::Value v3_ConstraintGrade, boost::optional< std::string > v4_ConstraintSource, ::Ifc4x3_add2::IfcActorSelect* v5_CreatingActor, boost::optional< std::string > v6_CreationTime, boost::optional< std::string > v7_UserDefinedGrade, ::Ifc4x3_add2::IfcBenchmarkEnum::Value v8_Benchmark, boost::optional< std::string > v9_ValueSource, ::Ifc4x3_add2::IfcMetricValueSelect* v10_DataValue, ::Ifc4x3_add2::IfcReference* v11_ReferencePath) : IfcConstraint((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMetric_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v3_ConstraintGrade,::Ifc4x3_add2::IfcConstraintEnum::ToString(v3_ConstraintGrade))));data_->setArgument(2,attr);} if (v4_ConstraintSource) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_ConstraintSource));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_CreatingActor));data_->setArgument(4,attr);} if (v6_CreationTime) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_CreationTime));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_UserDefinedGrade) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_UserDefinedGrade));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v8_Benchmark,::Ifc4x3_add2::IfcBenchmarkEnum::ToString(v8_Benchmark))));data_->setArgument(7,attr);} if (v9_ValueSource) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ValueSource));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v10_DataValue));data_->setArgument(9,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v11_ReferencePath));data_->setArgument(10,attr);} } + +// Function implementations for IfcMirroredProfileDef + + +const IfcParse::entity& Ifc4x3_add2::IfcMirroredProfileDef::declaration() const { return *IFC4X3_ADD2_IfcMirroredProfileDef_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMirroredProfileDef::Class() { return *IFC4X3_ADD2_IfcMirroredProfileDef_type; } +Ifc4x3_add2::IfcMirroredProfileDef::IfcMirroredProfileDef(IfcEntityInstanceData* e) : IfcDerivedProfileDef((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMirroredProfileDef_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMirroredProfileDef::IfcMirroredProfileDef(::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcProfileDef* v3_ParentProfile, boost::optional< std::string > v5_Label) : IfcDerivedProfileDef((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMirroredProfileDef_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_ProfileType,::Ifc4x3_add2::IfcProfileTypeEnum::ToString(v1_ProfileType))));data_->setArgument(0,attr);} if (v2_ProfileName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ProfileName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_ParentProfile));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::Derived());data_->setArgument(3,attr);} if (v5_Label) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Label));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcMobileTelecommunicationsAppliance +boost::optional< ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::Value > Ifc4x3_add2::IfcMobileTelecommunicationsAppliance::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcMobileTelecommunicationsAppliance::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMobileTelecommunicationsAppliance::declaration() const { return *IFC4X3_ADD2_IfcMobileTelecommunicationsAppliance_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMobileTelecommunicationsAppliance::Class() { return *IFC4X3_ADD2_IfcMobileTelecommunicationsAppliance_type; } +Ifc4x3_add2::IfcMobileTelecommunicationsAppliance::IfcMobileTelecommunicationsAppliance(IfcEntityInstanceData* e) : IfcFlowTerminal((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMobileTelecommunicationsAppliance_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMobileTelecommunicationsAppliance::IfcMobileTelecommunicationsAppliance(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMobileTelecommunicationsAppliance_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcMobileTelecommunicationsApplianceType +::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::Value Ifc4x3_add2::IfcMobileTelecommunicationsApplianceType::PredefinedType() const { return ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcMobileTelecommunicationsApplianceType::setPredefinedType(::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMobileTelecommunicationsApplianceType::declaration() const { return *IFC4X3_ADD2_IfcMobileTelecommunicationsApplianceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMobileTelecommunicationsApplianceType::Class() { return *IFC4X3_ADD2_IfcMobileTelecommunicationsApplianceType_type; } +Ifc4x3_add2::IfcMobileTelecommunicationsApplianceType::IfcMobileTelecommunicationsApplianceType(IfcEntityInstanceData* e) : IfcFlowTerminalType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMobileTelecommunicationsApplianceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMobileTelecommunicationsApplianceType::IfcMobileTelecommunicationsApplianceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMobileTelecommunicationsApplianceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcMonetaryUnit +std::string Ifc4x3_add2::IfcMonetaryUnit::Currency() const { std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcMonetaryUnit::setCurrency(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMonetaryUnit::declaration() const { return *IFC4X3_ADD2_IfcMonetaryUnit_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMonetaryUnit::Class() { return *IFC4X3_ADD2_IfcMonetaryUnit_type; } +Ifc4x3_add2::IfcMonetaryUnit::IfcMonetaryUnit(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMonetaryUnit_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMonetaryUnit::IfcMonetaryUnit(std::string v1_Currency) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMonetaryUnit_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Currency));data_->setArgument(0,attr);} } + +// Function implementations for IfcMooringDevice +boost::optional< ::Ifc4x3_add2::IfcMooringDeviceTypeEnum::Value > Ifc4x3_add2::IfcMooringDevice::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcMooringDeviceTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcMooringDevice::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcMooringDeviceTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcMooringDeviceTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMooringDevice::declaration() const { return *IFC4X3_ADD2_IfcMooringDevice_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMooringDevice::Class() { return *IFC4X3_ADD2_IfcMooringDevice_type; } +Ifc4x3_add2::IfcMooringDevice::IfcMooringDevice(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMooringDevice_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMooringDevice::IfcMooringDevice(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcMooringDeviceTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMooringDevice_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcMooringDeviceTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcMooringDeviceType +::Ifc4x3_add2::IfcMooringDeviceTypeEnum::Value Ifc4x3_add2::IfcMooringDeviceType::PredefinedType() const { return ::Ifc4x3_add2::IfcMooringDeviceTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcMooringDeviceType::setPredefinedType(::Ifc4x3_add2::IfcMooringDeviceTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcMooringDeviceTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMooringDeviceType::declaration() const { return *IFC4X3_ADD2_IfcMooringDeviceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMooringDeviceType::Class() { return *IFC4X3_ADD2_IfcMooringDeviceType_type; } +Ifc4x3_add2::IfcMooringDeviceType::IfcMooringDeviceType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMooringDeviceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMooringDeviceType::IfcMooringDeviceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcMooringDeviceTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMooringDeviceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcMooringDeviceTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcMotorConnection +boost::optional< ::Ifc4x3_add2::IfcMotorConnectionTypeEnum::Value > Ifc4x3_add2::IfcMotorConnection::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcMotorConnectionTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcMotorConnection::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcMotorConnectionTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcMotorConnectionTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMotorConnection::declaration() const { return *IFC4X3_ADD2_IfcMotorConnection_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMotorConnection::Class() { return *IFC4X3_ADD2_IfcMotorConnection_type; } +Ifc4x3_add2::IfcMotorConnection::IfcMotorConnection(IfcEntityInstanceData* e) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMotorConnection_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMotorConnection::IfcMotorConnection(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcMotorConnectionTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMotorConnection_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcMotorConnectionTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcMotorConnectionType +::Ifc4x3_add2::IfcMotorConnectionTypeEnum::Value Ifc4x3_add2::IfcMotorConnectionType::PredefinedType() const { return ::Ifc4x3_add2::IfcMotorConnectionTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcMotorConnectionType::setPredefinedType(::Ifc4x3_add2::IfcMotorConnectionTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcMotorConnectionTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcMotorConnectionType::declaration() const { return *IFC4X3_ADD2_IfcMotorConnectionType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcMotorConnectionType::Class() { return *IFC4X3_ADD2_IfcMotorConnectionType_type; } +Ifc4x3_add2::IfcMotorConnectionType::IfcMotorConnectionType(IfcEntityInstanceData* e) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcMotorConnectionType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcMotorConnectionType::IfcMotorConnectionType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcMotorConnectionTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcMotorConnectionType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcMotorConnectionTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcNamedUnit +::Ifc4x3_add2::IfcDimensionalExponents* Ifc4x3_add2::IfcNamedUnit::Dimensions() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcDimensionalExponents>(true); } +void Ifc4x3_add2::IfcNamedUnit::setDimensions(::Ifc4x3_add2::IfcDimensionalExponents* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcUnitEnum::Value Ifc4x3_add2::IfcNamedUnit::UnitType() const { return ::Ifc4x3_add2::IfcUnitEnum::FromString(*data_->getArgument(1)); } +void Ifc4x3_add2::IfcNamedUnit::setUnitType(::Ifc4x3_add2::IfcUnitEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcUnitEnum::ToString(v)));data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcNamedUnit::declaration() const { return *IFC4X3_ADD2_IfcNamedUnit_type; } +const IfcParse::entity& Ifc4x3_add2::IfcNamedUnit::Class() { return *IFC4X3_ADD2_IfcNamedUnit_type; } +Ifc4x3_add2::IfcNamedUnit::IfcNamedUnit(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcNamedUnit_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcNamedUnit::IfcNamedUnit(::Ifc4x3_add2::IfcDimensionalExponents* v1_Dimensions, ::Ifc4x3_add2::IfcUnitEnum::Value v2_UnitType) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcNamedUnit_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Dimensions));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v2_UnitType,::Ifc4x3_add2::IfcUnitEnum::ToString(v2_UnitType))));data_->setArgument(1,attr);} } + +// Function implementations for IfcNavigationElement +boost::optional< ::Ifc4x3_add2::IfcNavigationElementTypeEnum::Value > Ifc4x3_add2::IfcNavigationElement::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcNavigationElementTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcNavigationElement::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcNavigationElementTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcNavigationElementTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcNavigationElement::declaration() const { return *IFC4X3_ADD2_IfcNavigationElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcNavigationElement::Class() { return *IFC4X3_ADD2_IfcNavigationElement_type; } +Ifc4x3_add2::IfcNavigationElement::IfcNavigationElement(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcNavigationElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcNavigationElement::IfcNavigationElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcNavigationElementTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcNavigationElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcNavigationElementTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcNavigationElementType +::Ifc4x3_add2::IfcNavigationElementTypeEnum::Value Ifc4x3_add2::IfcNavigationElementType::PredefinedType() const { return ::Ifc4x3_add2::IfcNavigationElementTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcNavigationElementType::setPredefinedType(::Ifc4x3_add2::IfcNavigationElementTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcNavigationElementTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcNavigationElementType::declaration() const { return *IFC4X3_ADD2_IfcNavigationElementType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcNavigationElementType::Class() { return *IFC4X3_ADD2_IfcNavigationElementType_type; } +Ifc4x3_add2::IfcNavigationElementType::IfcNavigationElementType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcNavigationElementType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcNavigationElementType::IfcNavigationElementType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcNavigationElementTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcNavigationElementType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcNavigationElementTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcObject +boost::optional< std::string > Ifc4x3_add2::IfcObject::ObjectType() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcObject::setObjectType(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } + +::Ifc4x3_add2::IfcRelDefinesByObject::list::ptr Ifc4x3_add2::IfcObject::IsDeclaredBy() const { return data_->getInverse(IFC4X3_ADD2_IfcRelDefinesByObject_type, 4)->as(); } +::Ifc4x3_add2::IfcRelDefinesByObject::list::ptr Ifc4x3_add2::IfcObject::Declares() const { return data_->getInverse(IFC4X3_ADD2_IfcRelDefinesByObject_type, 5)->as(); } +::Ifc4x3_add2::IfcRelDefinesByType::list::ptr Ifc4x3_add2::IfcObject::IsTypedBy() const { return data_->getInverse(IFC4X3_ADD2_IfcRelDefinesByType_type, 4)->as(); } +::Ifc4x3_add2::IfcRelDefinesByProperties::list::ptr Ifc4x3_add2::IfcObject::IsDefinedBy() const { return data_->getInverse(IFC4X3_ADD2_IfcRelDefinesByProperties_type, 4)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcObject::declaration() const { return *IFC4X3_ADD2_IfcObject_type; } +const IfcParse::entity& Ifc4x3_add2::IfcObject::Class() { return *IFC4X3_ADD2_IfcObject_type; } +Ifc4x3_add2::IfcObject::IfcObject(IfcEntityInstanceData* e) : IfcObjectDefinition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcObject_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcObject::IfcObject(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType) : IfcObjectDefinition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcObject_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcObjectDefinition + +::Ifc4x3_add2::IfcRelAssigns::list::ptr Ifc4x3_add2::IfcObjectDefinition::HasAssignments() const { return data_->getInverse(IFC4X3_ADD2_IfcRelAssigns_type, 4)->as(); } +::Ifc4x3_add2::IfcRelNests::list::ptr Ifc4x3_add2::IfcObjectDefinition::Nests() const { return data_->getInverse(IFC4X3_ADD2_IfcRelNests_type, 5)->as(); } +::Ifc4x3_add2::IfcRelNests::list::ptr Ifc4x3_add2::IfcObjectDefinition::IsNestedBy() const { return data_->getInverse(IFC4X3_ADD2_IfcRelNests_type, 4)->as(); } +::Ifc4x3_add2::IfcRelDeclares::list::ptr Ifc4x3_add2::IfcObjectDefinition::HasContext() const { return data_->getInverse(IFC4X3_ADD2_IfcRelDeclares_type, 5)->as(); } +::Ifc4x3_add2::IfcRelAggregates::list::ptr Ifc4x3_add2::IfcObjectDefinition::IsDecomposedBy() const { return data_->getInverse(IFC4X3_ADD2_IfcRelAggregates_type, 4)->as(); } +::Ifc4x3_add2::IfcRelAggregates::list::ptr Ifc4x3_add2::IfcObjectDefinition::Decomposes() const { return data_->getInverse(IFC4X3_ADD2_IfcRelAggregates_type, 5)->as(); } +::Ifc4x3_add2::IfcRelAssociates::list::ptr Ifc4x3_add2::IfcObjectDefinition::HasAssociations() const { return data_->getInverse(IFC4X3_ADD2_IfcRelAssociates_type, 4)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcObjectDefinition::declaration() const { return *IFC4X3_ADD2_IfcObjectDefinition_type; } +const IfcParse::entity& Ifc4x3_add2::IfcObjectDefinition::Class() { return *IFC4X3_ADD2_IfcObjectDefinition_type; } +Ifc4x3_add2::IfcObjectDefinition::IfcObjectDefinition(IfcEntityInstanceData* e) : IfcRoot((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcObjectDefinition_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcObjectDefinition::IfcObjectDefinition(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description) : IfcRoot((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcObjectDefinition_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcObjectPlacement +::Ifc4x3_add2::IfcObjectPlacement* Ifc4x3_add2::IfcObjectPlacement::PlacementRelTo() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcObjectPlacement>(true); } +void Ifc4x3_add2::IfcObjectPlacement::setPlacementRelTo(::Ifc4x3_add2::IfcObjectPlacement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } + +::Ifc4x3_add2::IfcProduct::list::ptr Ifc4x3_add2::IfcObjectPlacement::PlacesObject() const { return data_->getInverse(IFC4X3_ADD2_IfcProduct_type, 5)->as(); } +::Ifc4x3_add2::IfcObjectPlacement::list::ptr Ifc4x3_add2::IfcObjectPlacement::ReferencedByPlacements() const { return data_->getInverse(IFC4X3_ADD2_IfcObjectPlacement_type, 0)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcObjectPlacement::declaration() const { return *IFC4X3_ADD2_IfcObjectPlacement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcObjectPlacement::Class() { return *IFC4X3_ADD2_IfcObjectPlacement_type; } +Ifc4x3_add2::IfcObjectPlacement::IfcObjectPlacement(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcObjectPlacement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcObjectPlacement::IfcObjectPlacement(::Ifc4x3_add2::IfcObjectPlacement* v1_PlacementRelTo) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcObjectPlacement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_PlacementRelTo));data_->setArgument(0,attr);} } + +// Function implementations for IfcObjective +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcConstraint >::ptr > Ifc4x3_add2::IfcObjective::BenchmarkValues() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(7); return es->as< ::Ifc4x3_add2::IfcConstraint >(); } +void Ifc4x3_add2::IfcObjective::setBenchmarkValues(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcConstraint >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(7,attr);} } +boost::optional< ::Ifc4x3_add2::IfcLogicalOperatorEnum::Value > Ifc4x3_add2::IfcObjective::LogicalAggregator() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcLogicalOperatorEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcObjective::setLogicalAggregator(boost::optional< ::Ifc4x3_add2::IfcLogicalOperatorEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcLogicalOperatorEnum::ToString(*v)));}data_->setArgument(8,attr);} } +::Ifc4x3_add2::IfcObjectiveEnum::Value Ifc4x3_add2::IfcObjective::ObjectiveQualifier() const { return ::Ifc4x3_add2::IfcObjectiveEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcObjective::setObjectiveQualifier(::Ifc4x3_add2::IfcObjectiveEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcObjectiveEnum::ToString(v)));data_->setArgument(9,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcObjective::UserDefinedQualifier() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } std::string v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcObjective::setUserDefinedQualifier(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcObjective::declaration() const { return *IFC4X3_ADD2_IfcObjective_type; } +const IfcParse::entity& Ifc4x3_add2::IfcObjective::Class() { return *IFC4X3_ADD2_IfcObjective_type; } +Ifc4x3_add2::IfcObjective::IfcObjective(IfcEntityInstanceData* e) : IfcConstraint((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcObjective_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcObjective::IfcObjective(std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcConstraintEnum::Value v3_ConstraintGrade, boost::optional< std::string > v4_ConstraintSource, ::Ifc4x3_add2::IfcActorSelect* v5_CreatingActor, boost::optional< std::string > v6_CreationTime, boost::optional< std::string > v7_UserDefinedGrade, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcConstraint >::ptr > v8_BenchmarkValues, boost::optional< ::Ifc4x3_add2::IfcLogicalOperatorEnum::Value > v9_LogicalAggregator, ::Ifc4x3_add2::IfcObjectiveEnum::Value v10_ObjectiveQualifier, boost::optional< std::string > v11_UserDefinedQualifier) : IfcConstraint((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcObjective_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v3_ConstraintGrade,::Ifc4x3_add2::IfcConstraintEnum::ToString(v3_ConstraintGrade))));data_->setArgument(2,attr);} if (v4_ConstraintSource) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_ConstraintSource));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_CreatingActor));data_->setArgument(4,attr);} if (v6_CreationTime) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_CreationTime));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_UserDefinedGrade) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_UserDefinedGrade));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_BenchmarkValues) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_BenchmarkValues)->generalize());data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_LogicalAggregator) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_LogicalAggregator,::Ifc4x3_add2::IfcLogicalOperatorEnum::ToString(*v9_LogicalAggregator))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_ObjectiveQualifier,::Ifc4x3_add2::IfcObjectiveEnum::ToString(v10_ObjectiveQualifier))));data_->setArgument(9,attr);} if (v11_UserDefinedQualifier) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_UserDefinedQualifier));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } } + +// Function implementations for IfcOccupant +boost::optional< ::Ifc4x3_add2::IfcOccupantTypeEnum::Value > Ifc4x3_add2::IfcOccupant::PredefinedType() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcOccupantTypeEnum::FromString(*data_->getArgument(6)); } +void Ifc4x3_add2::IfcOccupant::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcOccupantTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcOccupantTypeEnum::ToString(*v)));}data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcOccupant::declaration() const { return *IFC4X3_ADD2_IfcOccupant_type; } +const IfcParse::entity& Ifc4x3_add2::IfcOccupant::Class() { return *IFC4X3_ADD2_IfcOccupant_type; } +Ifc4x3_add2::IfcOccupant::IfcOccupant(IfcEntityInstanceData* e) : IfcActor((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcOccupant_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcOccupant::IfcOccupant(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcActorSelect* v6_TheActor, boost::optional< ::Ifc4x3_add2::IfcOccupantTypeEnum::Value > v7_PredefinedType) : IfcActor((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcOccupant_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_TheActor));data_->setArgument(5,attr);} if (v7_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v7_PredefinedType,::Ifc4x3_add2::IfcOccupantTypeEnum::ToString(*v7_PredefinedType))));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } } + +// Function implementations for IfcOffsetCurve +::Ifc4x3_add2::IfcCurve* Ifc4x3_add2::IfcOffsetCurve::BasisCurve() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcCurve>(true); } +void Ifc4x3_add2::IfcOffsetCurve::setBasisCurve(::Ifc4x3_add2::IfcCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcOffsetCurve::declaration() const { return *IFC4X3_ADD2_IfcOffsetCurve_type; } +const IfcParse::entity& Ifc4x3_add2::IfcOffsetCurve::Class() { return *IFC4X3_ADD2_IfcOffsetCurve_type; } +Ifc4x3_add2::IfcOffsetCurve::IfcOffsetCurve(IfcEntityInstanceData* e) : IfcCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcOffsetCurve_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcOffsetCurve::IfcOffsetCurve(::Ifc4x3_add2::IfcCurve* v1_BasisCurve) : IfcCurve((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcOffsetCurve_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_BasisCurve));data_->setArgument(0,attr);} } + +// Function implementations for IfcOffsetCurve2D +double Ifc4x3_add2::IfcOffsetCurve2D::Distance() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcOffsetCurve2D::setDistance(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +boost::logic::tribool Ifc4x3_add2::IfcOffsetCurve2D::SelfIntersect() const { boost::logic::tribool v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcOffsetCurve2D::setSelfIntersect(boost::logic::tribool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcOffsetCurve2D::declaration() const { return *IFC4X3_ADD2_IfcOffsetCurve2D_type; } +const IfcParse::entity& Ifc4x3_add2::IfcOffsetCurve2D::Class() { return *IFC4X3_ADD2_IfcOffsetCurve2D_type; } +Ifc4x3_add2::IfcOffsetCurve2D::IfcOffsetCurve2D(IfcEntityInstanceData* e) : IfcOffsetCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcOffsetCurve2D_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcOffsetCurve2D::IfcOffsetCurve2D(::Ifc4x3_add2::IfcCurve* v1_BasisCurve, double v2_Distance, boost::logic::tribool v3_SelfIntersect) : IfcOffsetCurve((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcOffsetCurve2D_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_BasisCurve));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Distance));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_SelfIntersect));data_->setArgument(2,attr);} } + +// Function implementations for IfcOffsetCurve3D +double Ifc4x3_add2::IfcOffsetCurve3D::Distance() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcOffsetCurve3D::setDistance(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +boost::logic::tribool Ifc4x3_add2::IfcOffsetCurve3D::SelfIntersect() const { boost::logic::tribool v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcOffsetCurve3D::setSelfIntersect(boost::logic::tribool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcDirection* Ifc4x3_add2::IfcOffsetCurve3D::RefDirection() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcDirection>(true); } +void Ifc4x3_add2::IfcOffsetCurve3D::setRefDirection(::Ifc4x3_add2::IfcDirection* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcOffsetCurve3D::declaration() const { return *IFC4X3_ADD2_IfcOffsetCurve3D_type; } +const IfcParse::entity& Ifc4x3_add2::IfcOffsetCurve3D::Class() { return *IFC4X3_ADD2_IfcOffsetCurve3D_type; } +Ifc4x3_add2::IfcOffsetCurve3D::IfcOffsetCurve3D(IfcEntityInstanceData* e) : IfcOffsetCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcOffsetCurve3D_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcOffsetCurve3D::IfcOffsetCurve3D(::Ifc4x3_add2::IfcCurve* v1_BasisCurve, double v2_Distance, boost::logic::tribool v3_SelfIntersect, ::Ifc4x3_add2::IfcDirection* v4_RefDirection) : IfcOffsetCurve((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcOffsetCurve3D_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_BasisCurve));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Distance));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_SelfIntersect));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_RefDirection));data_->setArgument(3,attr);} } + +// Function implementations for IfcOffsetCurveByDistances +aggregate_of< ::Ifc4x3_add2::IfcPointByDistanceExpression >::ptr Ifc4x3_add2::IfcOffsetCurveByDistances::OffsetValues() const { aggregate_of_instance::ptr es = *data_->getArgument(1); return es->as< ::Ifc4x3_add2::IfcPointByDistanceExpression >(); } +void Ifc4x3_add2::IfcOffsetCurveByDistances::setOffsetValues(aggregate_of< ::Ifc4x3_add2::IfcPointByDistanceExpression >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(1,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcOffsetCurveByDistances::Tag() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcOffsetCurveByDistances::setTag(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcOffsetCurveByDistances::declaration() const { return *IFC4X3_ADD2_IfcOffsetCurveByDistances_type; } +const IfcParse::entity& Ifc4x3_add2::IfcOffsetCurveByDistances::Class() { return *IFC4X3_ADD2_IfcOffsetCurveByDistances_type; } +Ifc4x3_add2::IfcOffsetCurveByDistances::IfcOffsetCurveByDistances(IfcEntityInstanceData* e) : IfcOffsetCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcOffsetCurveByDistances_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcOffsetCurveByDistances::IfcOffsetCurveByDistances(::Ifc4x3_add2::IfcCurve* v1_BasisCurve, aggregate_of< ::Ifc4x3_add2::IfcPointByDistanceExpression >::ptr v2_OffsetValues, boost::optional< std::string > v3_Tag) : IfcOffsetCurve((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcOffsetCurveByDistances_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_BasisCurve));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OffsetValues)->generalize());data_->setArgument(1,attr);} if (v3_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Tag));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } } + +// Function implementations for IfcOpenCrossProfileDef +bool Ifc4x3_add2::IfcOpenCrossProfileDef::HorizontalWidths() const { bool v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcOpenCrossProfileDef::setHorizontalWidths(bool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +std::vector< double > /*[1:?]*/ Ifc4x3_add2::IfcOpenCrossProfileDef::Widths() const { std::vector< double > /*[1:?]*/ v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcOpenCrossProfileDef::setWidths(std::vector< double > /*[1:?]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +std::vector< double > /*[1:?]*/ Ifc4x3_add2::IfcOpenCrossProfileDef::Slopes() const { std::vector< double > /*[1:?]*/ v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcOpenCrossProfileDef::setSlopes(std::vector< double > /*[1:?]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +boost::optional< std::vector< std::string > /*[2:?]*/ > Ifc4x3_add2::IfcOpenCrossProfileDef::Tags() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::vector< std::string > /*[2:?]*/ v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcOpenCrossProfileDef::setTags(boost::optional< std::vector< std::string > /*[2:?]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +::Ifc4x3_add2::IfcCartesianPoint* Ifc4x3_add2::IfcOpenCrossProfileDef::OffsetPoint() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcCartesianPoint>(true); } +void Ifc4x3_add2::IfcOpenCrossProfileDef::setOffsetPoint(::Ifc4x3_add2::IfcCartesianPoint* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcOpenCrossProfileDef::declaration() const { return *IFC4X3_ADD2_IfcOpenCrossProfileDef_type; } +const IfcParse::entity& Ifc4x3_add2::IfcOpenCrossProfileDef::Class() { return *IFC4X3_ADD2_IfcOpenCrossProfileDef_type; } +Ifc4x3_add2::IfcOpenCrossProfileDef::IfcOpenCrossProfileDef(IfcEntityInstanceData* e) : IfcProfileDef((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcOpenCrossProfileDef_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcOpenCrossProfileDef::IfcOpenCrossProfileDef(::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, bool v3_HorizontalWidths, std::vector< double > /*[1:?]*/ v4_Widths, std::vector< double > /*[1:?]*/ v5_Slopes, boost::optional< std::vector< std::string > /*[2:?]*/ > v6_Tags, ::Ifc4x3_add2::IfcCartesianPoint* v7_OffsetPoint) : IfcProfileDef((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcOpenCrossProfileDef_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_ProfileType,::Ifc4x3_add2::IfcProfileTypeEnum::ToString(v1_ProfileType))));data_->setArgument(0,attr);} if (v2_ProfileName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ProfileName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_HorizontalWidths));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Widths));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_Slopes));data_->setArgument(4,attr);} if (v6_Tags) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Tags));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_OffsetPoint));data_->setArgument(6,attr);} } + +// Function implementations for IfcOpenShell + + +const IfcParse::entity& Ifc4x3_add2::IfcOpenShell::declaration() const { return *IFC4X3_ADD2_IfcOpenShell_type; } +const IfcParse::entity& Ifc4x3_add2::IfcOpenShell::Class() { return *IFC4X3_ADD2_IfcOpenShell_type; } +Ifc4x3_add2::IfcOpenShell::IfcOpenShell(IfcEntityInstanceData* e) : IfcConnectedFaceSet((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcOpenShell_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcOpenShell::IfcOpenShell(aggregate_of< ::Ifc4x3_add2::IfcFace >::ptr v1_CfsFaces) : IfcConnectedFaceSet((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcOpenShell_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_CfsFaces)->generalize());data_->setArgument(0,attr);} } + +// Function implementations for IfcOpeningElement +boost::optional< ::Ifc4x3_add2::IfcOpeningElementTypeEnum::Value > Ifc4x3_add2::IfcOpeningElement::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcOpeningElementTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcOpeningElement::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcOpeningElementTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcOpeningElementTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + +::Ifc4x3_add2::IfcRelFillsElement::list::ptr Ifc4x3_add2::IfcOpeningElement::HasFillings() const { return data_->getInverse(IFC4X3_ADD2_IfcRelFillsElement_type, 4)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcOpeningElement::declaration() const { return *IFC4X3_ADD2_IfcOpeningElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcOpeningElement::Class() { return *IFC4X3_ADD2_IfcOpeningElement_type; } +Ifc4x3_add2::IfcOpeningElement::IfcOpeningElement(IfcEntityInstanceData* e) : IfcFeatureElementSubtraction((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcOpeningElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcOpeningElement::IfcOpeningElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcOpeningElementTypeEnum::Value > v9_PredefinedType) : IfcFeatureElementSubtraction((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcOpeningElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcOpeningElementTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcOrganization +boost::optional< std::string > Ifc4x3_add2::IfcOrganization::Identification() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcOrganization::setIdentification(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } +std::string Ifc4x3_add2::IfcOrganization::Name() const { std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcOrganization::setName(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcOrganization::Description() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcOrganization::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcActorRole >::ptr > Ifc4x3_add2::IfcOrganization::Roles() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(3); return es->as< ::Ifc4x3_add2::IfcActorRole >(); } +void Ifc4x3_add2::IfcOrganization::setRoles(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcActorRole >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(3,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAddress >::ptr > Ifc4x3_add2::IfcOrganization::Addresses() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(4); return es->as< ::Ifc4x3_add2::IfcAddress >(); } +void Ifc4x3_add2::IfcOrganization::setAddresses(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAddress >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(4,attr);} } + +::Ifc4x3_add2::IfcOrganizationRelationship::list::ptr Ifc4x3_add2::IfcOrganization::IsRelatedBy() const { return data_->getInverse(IFC4X3_ADD2_IfcOrganizationRelationship_type, 3)->as(); } +::Ifc4x3_add2::IfcOrganizationRelationship::list::ptr Ifc4x3_add2::IfcOrganization::Relates() const { return data_->getInverse(IFC4X3_ADD2_IfcOrganizationRelationship_type, 2)->as(); } +::Ifc4x3_add2::IfcPersonAndOrganization::list::ptr Ifc4x3_add2::IfcOrganization::Engages() const { return data_->getInverse(IFC4X3_ADD2_IfcPersonAndOrganization_type, 1)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcOrganization::declaration() const { return *IFC4X3_ADD2_IfcOrganization_type; } +const IfcParse::entity& Ifc4x3_add2::IfcOrganization::Class() { return *IFC4X3_ADD2_IfcOrganization_type; } +Ifc4x3_add2::IfcOrganization::IfcOrganization(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcOrganization_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcOrganization::IfcOrganization(boost::optional< std::string > v1_Identification, std::string v2_Name, boost::optional< std::string > v3_Description, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcActorRole >::ptr > v4_Roles, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAddress >::ptr > v5_Addresses) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcOrganization_type); if (v1_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Identification));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Name));data_->setArgument(1,attr);} if (v3_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Description));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Roles) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Roles)->generalize());data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_Addresses) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Addresses)->generalize());data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcOrganizationRelationship +::Ifc4x3_add2::IfcOrganization* Ifc4x3_add2::IfcOrganizationRelationship::RelatingOrganization() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcOrganization>(true); } +void Ifc4x3_add2::IfcOrganizationRelationship::setRelatingOrganization(::Ifc4x3_add2::IfcOrganization* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcOrganization >::ptr Ifc4x3_add2::IfcOrganizationRelationship::RelatedOrganizations() const { aggregate_of_instance::ptr es = *data_->getArgument(3); return es->as< ::Ifc4x3_add2::IfcOrganization >(); } +void Ifc4x3_add2::IfcOrganizationRelationship::setRelatedOrganizations(aggregate_of< ::Ifc4x3_add2::IfcOrganization >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcOrganizationRelationship::declaration() const { return *IFC4X3_ADD2_IfcOrganizationRelationship_type; } +const IfcParse::entity& Ifc4x3_add2::IfcOrganizationRelationship::Class() { return *IFC4X3_ADD2_IfcOrganizationRelationship_type; } +Ifc4x3_add2::IfcOrganizationRelationship::IfcOrganizationRelationship(IfcEntityInstanceData* e) : IfcResourceLevelRelationship((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcOrganizationRelationship_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcOrganizationRelationship::IfcOrganizationRelationship(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcOrganization* v3_RelatingOrganization, aggregate_of< ::Ifc4x3_add2::IfcOrganization >::ptr v4_RelatedOrganizations) : IfcResourceLevelRelationship((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcOrganizationRelationship_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_RelatingOrganization));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_RelatedOrganizations)->generalize());data_->setArgument(3,attr);} } + +// Function implementations for IfcOrientedEdge +::Ifc4x3_add2::IfcEdge* Ifc4x3_add2::IfcOrientedEdge::EdgeElement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcEdge>(true); } +void Ifc4x3_add2::IfcOrientedEdge::setEdgeElement(::Ifc4x3_add2::IfcEdge* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +bool Ifc4x3_add2::IfcOrientedEdge::Orientation() const { bool v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcOrientedEdge::setOrientation(bool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcOrientedEdge::declaration() const { return *IFC4X3_ADD2_IfcOrientedEdge_type; } +const IfcParse::entity& Ifc4x3_add2::IfcOrientedEdge::Class() { return *IFC4X3_ADD2_IfcOrientedEdge_type; } +Ifc4x3_add2::IfcOrientedEdge::IfcOrientedEdge(IfcEntityInstanceData* e) : IfcEdge((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcOrientedEdge_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcOrientedEdge::IfcOrientedEdge(::Ifc4x3_add2::IfcEdge* v3_EdgeElement, bool v4_Orientation) : IfcEdge((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcOrientedEdge_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::Derived());data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::Derived());data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_EdgeElement));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Orientation));data_->setArgument(3,attr);} } + +// Function implementations for IfcOuterBoundaryCurve + + +const IfcParse::entity& Ifc4x3_add2::IfcOuterBoundaryCurve::declaration() const { return *IFC4X3_ADD2_IfcOuterBoundaryCurve_type; } +const IfcParse::entity& Ifc4x3_add2::IfcOuterBoundaryCurve::Class() { return *IFC4X3_ADD2_IfcOuterBoundaryCurve_type; } +Ifc4x3_add2::IfcOuterBoundaryCurve::IfcOuterBoundaryCurve(IfcEntityInstanceData* e) : IfcBoundaryCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcOuterBoundaryCurve_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcOuterBoundaryCurve::IfcOuterBoundaryCurve(aggregate_of< ::Ifc4x3_add2::IfcSegment >::ptr v1_Segments, boost::logic::tribool v2_SelfIntersect) : IfcBoundaryCurve((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcOuterBoundaryCurve_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Segments)->generalize());data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_SelfIntersect));data_->setArgument(1,attr);} } + +// Function implementations for IfcOutlet +boost::optional< ::Ifc4x3_add2::IfcOutletTypeEnum::Value > Ifc4x3_add2::IfcOutlet::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcOutletTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcOutlet::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcOutletTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcOutletTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcOutlet::declaration() const { return *IFC4X3_ADD2_IfcOutlet_type; } +const IfcParse::entity& Ifc4x3_add2::IfcOutlet::Class() { return *IFC4X3_ADD2_IfcOutlet_type; } +Ifc4x3_add2::IfcOutlet::IfcOutlet(IfcEntityInstanceData* e) : IfcFlowTerminal((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcOutlet_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcOutlet::IfcOutlet(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcOutletTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcOutlet_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcOutletTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcOutletType +::Ifc4x3_add2::IfcOutletTypeEnum::Value Ifc4x3_add2::IfcOutletType::PredefinedType() const { return ::Ifc4x3_add2::IfcOutletTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcOutletType::setPredefinedType(::Ifc4x3_add2::IfcOutletTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcOutletTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcOutletType::declaration() const { return *IFC4X3_ADD2_IfcOutletType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcOutletType::Class() { return *IFC4X3_ADD2_IfcOutletType_type; } +Ifc4x3_add2::IfcOutletType::IfcOutletType(IfcEntityInstanceData* e) : IfcFlowTerminalType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcOutletType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcOutletType::IfcOutletType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcOutletTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcOutletType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcOutletTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcOwnerHistory +::Ifc4x3_add2::IfcPersonAndOrganization* Ifc4x3_add2::IfcOwnerHistory::OwningUser() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcPersonAndOrganization>(true); } +void Ifc4x3_add2::IfcOwnerHistory::setOwningUser(::Ifc4x3_add2::IfcPersonAndOrganization* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcApplication* Ifc4x3_add2::IfcOwnerHistory::OwningApplication() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcApplication>(true); } +void Ifc4x3_add2::IfcOwnerHistory::setOwningApplication(::Ifc4x3_add2::IfcApplication* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +boost::optional< ::Ifc4x3_add2::IfcStateEnum::Value > Ifc4x3_add2::IfcOwnerHistory::State() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcStateEnum::FromString(*data_->getArgument(2)); } +void Ifc4x3_add2::IfcOwnerHistory::setState(boost::optional< ::Ifc4x3_add2::IfcStateEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcStateEnum::ToString(*v)));}data_->setArgument(2,attr);} } +boost::optional< ::Ifc4x3_add2::IfcChangeActionEnum::Value > Ifc4x3_add2::IfcOwnerHistory::ChangeAction() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcChangeActionEnum::FromString(*data_->getArgument(3)); } +void Ifc4x3_add2::IfcOwnerHistory::setChangeAction(boost::optional< ::Ifc4x3_add2::IfcChangeActionEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcChangeActionEnum::ToString(*v)));}data_->setArgument(3,attr);} } +boost::optional< int > Ifc4x3_add2::IfcOwnerHistory::LastModifiedDate() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } int v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcOwnerHistory::setLastModifiedDate(boost::optional< int > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcPersonAndOrganization* Ifc4x3_add2::IfcOwnerHistory::LastModifyingUser() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcPersonAndOrganization>(true); } +void Ifc4x3_add2::IfcOwnerHistory::setLastModifyingUser(::Ifc4x3_add2::IfcPersonAndOrganization* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +::Ifc4x3_add2::IfcApplication* Ifc4x3_add2::IfcOwnerHistory::LastModifyingApplication() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcApplication>(true); } +void Ifc4x3_add2::IfcOwnerHistory::setLastModifyingApplication(::Ifc4x3_add2::IfcApplication* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +int Ifc4x3_add2::IfcOwnerHistory::CreationDate() const { int v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcOwnerHistory::setCreationDate(int v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(7,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcOwnerHistory::declaration() const { return *IFC4X3_ADD2_IfcOwnerHistory_type; } +const IfcParse::entity& Ifc4x3_add2::IfcOwnerHistory::Class() { return *IFC4X3_ADD2_IfcOwnerHistory_type; } +Ifc4x3_add2::IfcOwnerHistory::IfcOwnerHistory(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcOwnerHistory_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcOwnerHistory::IfcOwnerHistory(::Ifc4x3_add2::IfcPersonAndOrganization* v1_OwningUser, ::Ifc4x3_add2::IfcApplication* v2_OwningApplication, boost::optional< ::Ifc4x3_add2::IfcStateEnum::Value > v3_State, boost::optional< ::Ifc4x3_add2::IfcChangeActionEnum::Value > v4_ChangeAction, boost::optional< int > v5_LastModifiedDate, ::Ifc4x3_add2::IfcPersonAndOrganization* v6_LastModifyingUser, ::Ifc4x3_add2::IfcApplication* v7_LastModifyingApplication, int v8_CreationDate) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcOwnerHistory_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_OwningUser));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwningApplication));data_->setArgument(1,attr);} if (v3_State) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v3_State,::Ifc4x3_add2::IfcStateEnum::ToString(*v3_State))));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_ChangeAction) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v4_ChangeAction,::Ifc4x3_add2::IfcChangeActionEnum::ToString(*v4_ChangeAction))));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_LastModifiedDate) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_LastModifiedDate));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_LastModifyingUser));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_LastModifyingApplication));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_CreationDate));data_->setArgument(7,attr);} } + +// Function implementations for IfcParameterizedProfileDef +::Ifc4x3_add2::IfcAxis2Placement2D* Ifc4x3_add2::IfcParameterizedProfileDef::Position() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcAxis2Placement2D>(true); } +void Ifc4x3_add2::IfcParameterizedProfileDef::setPosition(::Ifc4x3_add2::IfcAxis2Placement2D* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcParameterizedProfileDef::declaration() const { return *IFC4X3_ADD2_IfcParameterizedProfileDef_type; } +const IfcParse::entity& Ifc4x3_add2::IfcParameterizedProfileDef::Class() { return *IFC4X3_ADD2_IfcParameterizedProfileDef_type; } +Ifc4x3_add2::IfcParameterizedProfileDef::IfcParameterizedProfileDef(IfcEntityInstanceData* e) : IfcProfileDef((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcParameterizedProfileDef_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcParameterizedProfileDef::IfcParameterizedProfileDef(::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position) : IfcProfileDef((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcParameterizedProfileDef_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_ProfileType,::Ifc4x3_add2::IfcProfileTypeEnum::ToString(v1_ProfileType))));data_->setArgument(0,attr);} if (v2_ProfileName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ProfileName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Position));data_->setArgument(2,attr);} } + +// Function implementations for IfcPath +aggregate_of< ::Ifc4x3_add2::IfcOrientedEdge >::ptr Ifc4x3_add2::IfcPath::EdgeList() const { aggregate_of_instance::ptr es = *data_->getArgument(0); return es->as< ::Ifc4x3_add2::IfcOrientedEdge >(); } +void Ifc4x3_add2::IfcPath::setEdgeList(aggregate_of< ::Ifc4x3_add2::IfcOrientedEdge >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPath::declaration() const { return *IFC4X3_ADD2_IfcPath_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPath::Class() { return *IFC4X3_ADD2_IfcPath_type; } +Ifc4x3_add2::IfcPath::IfcPath(IfcEntityInstanceData* e) : IfcTopologicalRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPath_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPath::IfcPath(aggregate_of< ::Ifc4x3_add2::IfcOrientedEdge >::ptr v1_EdgeList) : IfcTopologicalRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPath_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_EdgeList)->generalize());data_->setArgument(0,attr);} } + +// Function implementations for IfcPavement +boost::optional< ::Ifc4x3_add2::IfcPavementTypeEnum::Value > Ifc4x3_add2::IfcPavement::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcPavementTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcPavement::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcPavementTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcPavementTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPavement::declaration() const { return *IFC4X3_ADD2_IfcPavement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPavement::Class() { return *IFC4X3_ADD2_IfcPavement_type; } +Ifc4x3_add2::IfcPavement::IfcPavement(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPavement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPavement::IfcPavement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcPavementTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPavement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcPavementTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcPavementType +::Ifc4x3_add2::IfcPavementTypeEnum::Value Ifc4x3_add2::IfcPavementType::PredefinedType() const { return ::Ifc4x3_add2::IfcPavementTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcPavementType::setPredefinedType(::Ifc4x3_add2::IfcPavementTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcPavementTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPavementType::declaration() const { return *IFC4X3_ADD2_IfcPavementType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPavementType::Class() { return *IFC4X3_ADD2_IfcPavementType_type; } +Ifc4x3_add2::IfcPavementType::IfcPavementType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPavementType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPavementType::IfcPavementType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcPavementTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPavementType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcPavementTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcPcurve +::Ifc4x3_add2::IfcSurface* Ifc4x3_add2::IfcPcurve::BasisSurface() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcSurface>(true); } +void Ifc4x3_add2::IfcPcurve::setBasisSurface(::Ifc4x3_add2::IfcSurface* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcCurve* Ifc4x3_add2::IfcPcurve::ReferenceCurve() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcCurve>(true); } +void Ifc4x3_add2::IfcPcurve::setReferenceCurve(::Ifc4x3_add2::IfcCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPcurve::declaration() const { return *IFC4X3_ADD2_IfcPcurve_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPcurve::Class() { return *IFC4X3_ADD2_IfcPcurve_type; } +Ifc4x3_add2::IfcPcurve::IfcPcurve(IfcEntityInstanceData* e) : IfcCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPcurve_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPcurve::IfcPcurve(::Ifc4x3_add2::IfcSurface* v1_BasisSurface, ::Ifc4x3_add2::IfcCurve* v2_ReferenceCurve) : IfcCurve((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPcurve_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_BasisSurface));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_ReferenceCurve));data_->setArgument(1,attr);} } + +// Function implementations for IfcPerformanceHistory +std::string Ifc4x3_add2::IfcPerformanceHistory::LifeCyclePhase() const { std::string v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcPerformanceHistory::setLifeCyclePhase(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +boost::optional< ::Ifc4x3_add2::IfcPerformanceHistoryTypeEnum::Value > Ifc4x3_add2::IfcPerformanceHistory::PredefinedType() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcPerformanceHistoryTypeEnum::FromString(*data_->getArgument(7)); } +void Ifc4x3_add2::IfcPerformanceHistory::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcPerformanceHistoryTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcPerformanceHistoryTypeEnum::ToString(*v)));}data_->setArgument(7,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPerformanceHistory::declaration() const { return *IFC4X3_ADD2_IfcPerformanceHistory_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPerformanceHistory::Class() { return *IFC4X3_ADD2_IfcPerformanceHistory_type; } +Ifc4x3_add2::IfcPerformanceHistory::IfcPerformanceHistory(IfcEntityInstanceData* e) : IfcControl((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPerformanceHistory_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPerformanceHistory::IfcPerformanceHistory(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, std::string v7_LifeCyclePhase, boost::optional< ::Ifc4x3_add2::IfcPerformanceHistoryTypeEnum::Value > v8_PredefinedType) : IfcControl((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPerformanceHistory_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Identification));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_LifeCyclePhase));data_->setArgument(6,attr);} if (v8_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v8_PredefinedType,::Ifc4x3_add2::IfcPerformanceHistoryTypeEnum::ToString(*v8_PredefinedType))));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcPermeableCoveringProperties +::Ifc4x3_add2::IfcPermeableCoveringOperationEnum::Value Ifc4x3_add2::IfcPermeableCoveringProperties::OperationType() const { return ::Ifc4x3_add2::IfcPermeableCoveringOperationEnum::FromString(*data_->getArgument(4)); } +void Ifc4x3_add2::IfcPermeableCoveringProperties::setOperationType(::Ifc4x3_add2::IfcPermeableCoveringOperationEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcPermeableCoveringOperationEnum::ToString(v)));data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcWindowPanelPositionEnum::Value Ifc4x3_add2::IfcPermeableCoveringProperties::PanelPosition() const { return ::Ifc4x3_add2::IfcWindowPanelPositionEnum::FromString(*data_->getArgument(5)); } +void Ifc4x3_add2::IfcPermeableCoveringProperties::setPanelPosition(::Ifc4x3_add2::IfcWindowPanelPositionEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcWindowPanelPositionEnum::ToString(v)));data_->setArgument(5,attr);} } +boost::optional< double > Ifc4x3_add2::IfcPermeableCoveringProperties::FrameDepth() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcPermeableCoveringProperties::setFrameDepth(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } +boost::optional< double > Ifc4x3_add2::IfcPermeableCoveringProperties::FrameThickness() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } double v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcPermeableCoveringProperties::setFrameThickness(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +::Ifc4x3_add2::IfcShapeAspect* Ifc4x3_add2::IfcPermeableCoveringProperties::ShapeAspectStyle() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(8)))->as<::Ifc4x3_add2::IfcShapeAspect>(true); } +void Ifc4x3_add2::IfcPermeableCoveringProperties::setShapeAspectStyle(::Ifc4x3_add2::IfcShapeAspect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPermeableCoveringProperties::declaration() const { return *IFC4X3_ADD2_IfcPermeableCoveringProperties_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPermeableCoveringProperties::Class() { return *IFC4X3_ADD2_IfcPermeableCoveringProperties_type; } +Ifc4x3_add2::IfcPermeableCoveringProperties::IfcPermeableCoveringProperties(IfcEntityInstanceData* e) : IfcPreDefinedPropertySet((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPermeableCoveringProperties_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPermeableCoveringProperties::IfcPermeableCoveringProperties(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcPermeableCoveringOperationEnum::Value v5_OperationType, ::Ifc4x3_add2::IfcWindowPanelPositionEnum::Value v6_PanelPosition, boost::optional< double > v7_FrameDepth, boost::optional< double > v8_FrameThickness, ::Ifc4x3_add2::IfcShapeAspect* v9_ShapeAspectStyle) : IfcPreDefinedPropertySet((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPermeableCoveringProperties_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v5_OperationType,::Ifc4x3_add2::IfcPermeableCoveringOperationEnum::ToString(v5_OperationType))));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v6_PanelPosition,::Ifc4x3_add2::IfcWindowPanelPositionEnum::ToString(v6_PanelPosition))));data_->setArgument(5,attr);} if (v7_FrameDepth) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_FrameDepth));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_FrameThickness) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_FrameThickness));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_ShapeAspectStyle));data_->setArgument(8,attr);} } + +// Function implementations for IfcPermit +boost::optional< ::Ifc4x3_add2::IfcPermitTypeEnum::Value > Ifc4x3_add2::IfcPermit::PredefinedType() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcPermitTypeEnum::FromString(*data_->getArgument(6)); } +void Ifc4x3_add2::IfcPermit::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcPermitTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcPermitTypeEnum::ToString(*v)));}data_->setArgument(6,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcPermit::Status() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } std::string v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcPermit::setStatus(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcPermit::LongDescription() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } std::string v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcPermit::setLongDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPermit::declaration() const { return *IFC4X3_ADD2_IfcPermit_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPermit::Class() { return *IFC4X3_ADD2_IfcPermit_type; } +Ifc4x3_add2::IfcPermit::IfcPermit(IfcEntityInstanceData* e) : IfcControl((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPermit_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPermit::IfcPermit(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< ::Ifc4x3_add2::IfcPermitTypeEnum::Value > v7_PredefinedType, boost::optional< std::string > v8_Status, boost::optional< std::string > v9_LongDescription) : IfcControl((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPermit_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Identification));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v7_PredefinedType,::Ifc4x3_add2::IfcPermitTypeEnum::ToString(*v7_PredefinedType))));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Status) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Status));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_LongDescription));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcPerson +boost::optional< std::string > Ifc4x3_add2::IfcPerson::Identification() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcPerson::setIdentification(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcPerson::FamilyName() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcPerson::setFamilyName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcPerson::GivenName() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcPerson::setGivenName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< std::vector< std::string > /*[1:?]*/ > Ifc4x3_add2::IfcPerson::MiddleNames() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } std::vector< std::string > /*[1:?]*/ v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcPerson::setMiddleNames(boost::optional< std::vector< std::string > /*[1:?]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +boost::optional< std::vector< std::string > /*[1:?]*/ > Ifc4x3_add2::IfcPerson::PrefixTitles() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::vector< std::string > /*[1:?]*/ v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcPerson::setPrefixTitles(boost::optional< std::vector< std::string > /*[1:?]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< std::vector< std::string > /*[1:?]*/ > Ifc4x3_add2::IfcPerson::SuffixTitles() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::vector< std::string > /*[1:?]*/ v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcPerson::setSuffixTitles(boost::optional< std::vector< std::string > /*[1:?]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcActorRole >::ptr > Ifc4x3_add2::IfcPerson::Roles() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(6); return es->as< ::Ifc4x3_add2::IfcActorRole >(); } +void Ifc4x3_add2::IfcPerson::setRoles(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcActorRole >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(6,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAddress >::ptr > Ifc4x3_add2::IfcPerson::Addresses() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(7); return es->as< ::Ifc4x3_add2::IfcAddress >(); } +void Ifc4x3_add2::IfcPerson::setAddresses(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAddress >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(7,attr);} } + +::Ifc4x3_add2::IfcPersonAndOrganization::list::ptr Ifc4x3_add2::IfcPerson::EngagedIn() const { return data_->getInverse(IFC4X3_ADD2_IfcPersonAndOrganization_type, 0)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcPerson::declaration() const { return *IFC4X3_ADD2_IfcPerson_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPerson::Class() { return *IFC4X3_ADD2_IfcPerson_type; } +Ifc4x3_add2::IfcPerson::IfcPerson(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPerson_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPerson::IfcPerson(boost::optional< std::string > v1_Identification, boost::optional< std::string > v2_FamilyName, boost::optional< std::string > v3_GivenName, boost::optional< std::vector< std::string > /*[1:?]*/ > v4_MiddleNames, boost::optional< std::vector< std::string > /*[1:?]*/ > v5_PrefixTitles, boost::optional< std::vector< std::string > /*[1:?]*/ > v6_SuffixTitles, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcActorRole >::ptr > v7_Roles, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAddress >::ptr > v8_Addresses) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPerson_type); if (v1_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Identification));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_FamilyName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_FamilyName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_GivenName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_GivenName));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_MiddleNames) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_MiddleNames));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_PrefixTitles) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_PrefixTitles));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_SuffixTitles) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_SuffixTitles));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_Roles) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_Roles)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Addresses) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Addresses)->generalize());data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcPersonAndOrganization +::Ifc4x3_add2::IfcPerson* Ifc4x3_add2::IfcPersonAndOrganization::ThePerson() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcPerson>(true); } +void Ifc4x3_add2::IfcPersonAndOrganization::setThePerson(::Ifc4x3_add2::IfcPerson* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcOrganization* Ifc4x3_add2::IfcPersonAndOrganization::TheOrganization() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcOrganization>(true); } +void Ifc4x3_add2::IfcPersonAndOrganization::setTheOrganization(::Ifc4x3_add2::IfcOrganization* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcActorRole >::ptr > Ifc4x3_add2::IfcPersonAndOrganization::Roles() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(2); return es->as< ::Ifc4x3_add2::IfcActorRole >(); } +void Ifc4x3_add2::IfcPersonAndOrganization::setRoles(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcActorRole >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPersonAndOrganization::declaration() const { return *IFC4X3_ADD2_IfcPersonAndOrganization_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPersonAndOrganization::Class() { return *IFC4X3_ADD2_IfcPersonAndOrganization_type; } +Ifc4x3_add2::IfcPersonAndOrganization::IfcPersonAndOrganization(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPersonAndOrganization_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPersonAndOrganization::IfcPersonAndOrganization(::Ifc4x3_add2::IfcPerson* v1_ThePerson, ::Ifc4x3_add2::IfcOrganization* v2_TheOrganization, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcActorRole >::ptr > v3_Roles) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPersonAndOrganization_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_ThePerson));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_TheOrganization));data_->setArgument(1,attr);} if (v3_Roles) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Roles)->generalize());data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } } + +// Function implementations for IfcPhysicalComplexQuantity +aggregate_of< ::Ifc4x3_add2::IfcPhysicalQuantity >::ptr Ifc4x3_add2::IfcPhysicalComplexQuantity::HasQuantities() const { aggregate_of_instance::ptr es = *data_->getArgument(2); return es->as< ::Ifc4x3_add2::IfcPhysicalQuantity >(); } +void Ifc4x3_add2::IfcPhysicalComplexQuantity::setHasQuantities(aggregate_of< ::Ifc4x3_add2::IfcPhysicalQuantity >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(2,attr);} } +std::string Ifc4x3_add2::IfcPhysicalComplexQuantity::Discrimination() const { std::string v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcPhysicalComplexQuantity::setDiscrimination(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcPhysicalComplexQuantity::Quality() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcPhysicalComplexQuantity::setQuality(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcPhysicalComplexQuantity::Usage() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcPhysicalComplexQuantity::setUsage(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPhysicalComplexQuantity::declaration() const { return *IFC4X3_ADD2_IfcPhysicalComplexQuantity_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPhysicalComplexQuantity::Class() { return *IFC4X3_ADD2_IfcPhysicalComplexQuantity_type; } +Ifc4x3_add2::IfcPhysicalComplexQuantity::IfcPhysicalComplexQuantity(IfcEntityInstanceData* e) : IfcPhysicalQuantity((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPhysicalComplexQuantity_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPhysicalComplexQuantity::IfcPhysicalComplexQuantity(std::string v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_add2::IfcPhysicalQuantity >::ptr v3_HasQuantities, std::string v4_Discrimination, boost::optional< std::string > v5_Quality, boost::optional< std::string > v6_Usage) : IfcPhysicalQuantity((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPhysicalComplexQuantity_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_HasQuantities)->generalize());data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Discrimination));data_->setArgument(3,attr);} if (v5_Quality) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Quality));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Usage) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Usage));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } } + +// Function implementations for IfcPhysicalQuantity +std::string Ifc4x3_add2::IfcPhysicalQuantity::Name() const { std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcPhysicalQuantity::setName(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcPhysicalQuantity::Description() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcPhysicalQuantity::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } + +::Ifc4x3_add2::IfcExternalReferenceRelationship::list::ptr Ifc4x3_add2::IfcPhysicalQuantity::HasExternalReferences() const { return data_->getInverse(IFC4X3_ADD2_IfcExternalReferenceRelationship_type, 3)->as(); } +::Ifc4x3_add2::IfcPhysicalComplexQuantity::list::ptr Ifc4x3_add2::IfcPhysicalQuantity::PartOfComplex() const { return data_->getInverse(IFC4X3_ADD2_IfcPhysicalComplexQuantity_type, 2)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcPhysicalQuantity::declaration() const { return *IFC4X3_ADD2_IfcPhysicalQuantity_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPhysicalQuantity::Class() { return *IFC4X3_ADD2_IfcPhysicalQuantity_type; } +Ifc4x3_add2::IfcPhysicalQuantity::IfcPhysicalQuantity(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPhysicalQuantity_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPhysicalQuantity::IfcPhysicalQuantity(std::string v1_Name, boost::optional< std::string > v2_Description) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPhysicalQuantity_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } } + +// Function implementations for IfcPhysicalSimpleQuantity +::Ifc4x3_add2::IfcNamedUnit* Ifc4x3_add2::IfcPhysicalSimpleQuantity::Unit() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcNamedUnit>(true); } +void Ifc4x3_add2::IfcPhysicalSimpleQuantity::setUnit(::Ifc4x3_add2::IfcNamedUnit* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPhysicalSimpleQuantity::declaration() const { return *IFC4X3_ADD2_IfcPhysicalSimpleQuantity_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPhysicalSimpleQuantity::Class() { return *IFC4X3_ADD2_IfcPhysicalSimpleQuantity_type; } +Ifc4x3_add2::IfcPhysicalSimpleQuantity::IfcPhysicalSimpleQuantity(IfcEntityInstanceData* e) : IfcPhysicalQuantity((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPhysicalSimpleQuantity_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPhysicalSimpleQuantity::IfcPhysicalSimpleQuantity(std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcNamedUnit* v3_Unit) : IfcPhysicalQuantity((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPhysicalSimpleQuantity_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Unit));data_->setArgument(2,attr);} } + +// Function implementations for IfcPile +boost::optional< ::Ifc4x3_add2::IfcPileTypeEnum::Value > Ifc4x3_add2::IfcPile::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcPileTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcPile::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcPileTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcPileTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } +boost::optional< ::Ifc4x3_add2::IfcPileConstructionEnum::Value > Ifc4x3_add2::IfcPile::ConstructionType() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcPileConstructionEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcPile::setConstructionType(boost::optional< ::Ifc4x3_add2::IfcPileConstructionEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcPileConstructionEnum::ToString(*v)));}data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPile::declaration() const { return *IFC4X3_ADD2_IfcPile_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPile::Class() { return *IFC4X3_ADD2_IfcPile_type; } +Ifc4x3_add2::IfcPile::IfcPile(IfcEntityInstanceData* e) : IfcDeepFoundation((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPile_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPile::IfcPile(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcPileTypeEnum::Value > v9_PredefinedType, boost::optional< ::Ifc4x3_add2::IfcPileConstructionEnum::Value > v10_ConstructionType) : IfcDeepFoundation((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPile_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcPileTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_ConstructionType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v10_ConstructionType,::Ifc4x3_add2::IfcPileConstructionEnum::ToString(*v10_ConstructionType))));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } } + +// Function implementations for IfcPileType +::Ifc4x3_add2::IfcPileTypeEnum::Value Ifc4x3_add2::IfcPileType::PredefinedType() const { return ::Ifc4x3_add2::IfcPileTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcPileType::setPredefinedType(::Ifc4x3_add2::IfcPileTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcPileTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPileType::declaration() const { return *IFC4X3_ADD2_IfcPileType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPileType::Class() { return *IFC4X3_ADD2_IfcPileType_type; } +Ifc4x3_add2::IfcPileType::IfcPileType(IfcEntityInstanceData* e) : IfcDeepFoundationType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPileType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPileType::IfcPileType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcPileTypeEnum::Value v10_PredefinedType) : IfcDeepFoundationType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPileType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcPileTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcPipeFitting +boost::optional< ::Ifc4x3_add2::IfcPipeFittingTypeEnum::Value > Ifc4x3_add2::IfcPipeFitting::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcPipeFittingTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcPipeFitting::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcPipeFittingTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcPipeFittingTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPipeFitting::declaration() const { return *IFC4X3_ADD2_IfcPipeFitting_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPipeFitting::Class() { return *IFC4X3_ADD2_IfcPipeFitting_type; } +Ifc4x3_add2::IfcPipeFitting::IfcPipeFitting(IfcEntityInstanceData* e) : IfcFlowFitting((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPipeFitting_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPipeFitting::IfcPipeFitting(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcPipeFittingTypeEnum::Value > v9_PredefinedType) : IfcFlowFitting((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPipeFitting_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcPipeFittingTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcPipeFittingType +::Ifc4x3_add2::IfcPipeFittingTypeEnum::Value Ifc4x3_add2::IfcPipeFittingType::PredefinedType() const { return ::Ifc4x3_add2::IfcPipeFittingTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcPipeFittingType::setPredefinedType(::Ifc4x3_add2::IfcPipeFittingTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcPipeFittingTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPipeFittingType::declaration() const { return *IFC4X3_ADD2_IfcPipeFittingType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPipeFittingType::Class() { return *IFC4X3_ADD2_IfcPipeFittingType_type; } +Ifc4x3_add2::IfcPipeFittingType::IfcPipeFittingType(IfcEntityInstanceData* e) : IfcFlowFittingType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPipeFittingType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPipeFittingType::IfcPipeFittingType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcPipeFittingTypeEnum::Value v10_PredefinedType) : IfcFlowFittingType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPipeFittingType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcPipeFittingTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcPipeSegment +boost::optional< ::Ifc4x3_add2::IfcPipeSegmentTypeEnum::Value > Ifc4x3_add2::IfcPipeSegment::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcPipeSegmentTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcPipeSegment::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcPipeSegmentTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcPipeSegmentTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPipeSegment::declaration() const { return *IFC4X3_ADD2_IfcPipeSegment_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPipeSegment::Class() { return *IFC4X3_ADD2_IfcPipeSegment_type; } +Ifc4x3_add2::IfcPipeSegment::IfcPipeSegment(IfcEntityInstanceData* e) : IfcFlowSegment((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPipeSegment_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPipeSegment::IfcPipeSegment(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcPipeSegmentTypeEnum::Value > v9_PredefinedType) : IfcFlowSegment((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPipeSegment_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcPipeSegmentTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcPipeSegmentType +::Ifc4x3_add2::IfcPipeSegmentTypeEnum::Value Ifc4x3_add2::IfcPipeSegmentType::PredefinedType() const { return ::Ifc4x3_add2::IfcPipeSegmentTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcPipeSegmentType::setPredefinedType(::Ifc4x3_add2::IfcPipeSegmentTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcPipeSegmentTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPipeSegmentType::declaration() const { return *IFC4X3_ADD2_IfcPipeSegmentType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPipeSegmentType::Class() { return *IFC4X3_ADD2_IfcPipeSegmentType_type; } +Ifc4x3_add2::IfcPipeSegmentType::IfcPipeSegmentType(IfcEntityInstanceData* e) : IfcFlowSegmentType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPipeSegmentType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPipeSegmentType::IfcPipeSegmentType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcPipeSegmentTypeEnum::Value v10_PredefinedType) : IfcFlowSegmentType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPipeSegmentType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcPipeSegmentTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcPixelTexture +int Ifc4x3_add2::IfcPixelTexture::Width() const { int v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcPixelTexture::setWidth(int v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +int Ifc4x3_add2::IfcPixelTexture::Height() const { int v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcPixelTexture::setHeight(int v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +int Ifc4x3_add2::IfcPixelTexture::ColourComponents() const { int v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcPixelTexture::setColourComponents(int v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(7,attr);} } +std::vector< boost::dynamic_bitset<> > /*[1:?]*/ Ifc4x3_add2::IfcPixelTexture::Pixel() const { std::vector< boost::dynamic_bitset<> > /*[1:?]*/ v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcPixelTexture::setPixel(std::vector< boost::dynamic_bitset<> > /*[1:?]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPixelTexture::declaration() const { return *IFC4X3_ADD2_IfcPixelTexture_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPixelTexture::Class() { return *IFC4X3_ADD2_IfcPixelTexture_type; } +Ifc4x3_add2::IfcPixelTexture::IfcPixelTexture(IfcEntityInstanceData* e) : IfcSurfaceTexture((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPixelTexture_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPixelTexture::IfcPixelTexture(bool v1_RepeatS, bool v2_RepeatT, boost::optional< std::string > v3_Mode, ::Ifc4x3_add2::IfcCartesianTransformationOperator2D* v4_TextureTransform, boost::optional< std::vector< std::string > /*[1:?]*/ > v5_Parameter, int v6_Width, int v7_Height, int v8_ColourComponents, std::vector< boost::dynamic_bitset<> > /*[1:?]*/ v9_Pixel) : IfcSurfaceTexture((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPixelTexture_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_RepeatS));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_RepeatT));data_->setArgument(1,attr);} if (v3_Mode) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Mode));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_TextureTransform));data_->setArgument(3,attr);} if (v5_Parameter) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Parameter));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_Width));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Height));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_ColourComponents));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_Pixel));data_->setArgument(8,attr);} } + +// Function implementations for IfcPlacement +::Ifc4x3_add2::IfcPoint* Ifc4x3_add2::IfcPlacement::Location() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcPoint>(true); } +void Ifc4x3_add2::IfcPlacement::setLocation(::Ifc4x3_add2::IfcPoint* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPlacement::declaration() const { return *IFC4X3_ADD2_IfcPlacement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPlacement::Class() { return *IFC4X3_ADD2_IfcPlacement_type; } +Ifc4x3_add2::IfcPlacement::IfcPlacement(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPlacement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPlacement::IfcPlacement(::Ifc4x3_add2::IfcPoint* v1_Location) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPlacement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Location));data_->setArgument(0,attr);} } + +// Function implementations for IfcPlanarBox +::Ifc4x3_add2::IfcAxis2Placement* Ifc4x3_add2::IfcPlanarBox::Placement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcAxis2Placement>(true); } +void Ifc4x3_add2::IfcPlanarBox::setPlacement(::Ifc4x3_add2::IfcAxis2Placement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPlanarBox::declaration() const { return *IFC4X3_ADD2_IfcPlanarBox_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPlanarBox::Class() { return *IFC4X3_ADD2_IfcPlanarBox_type; } +Ifc4x3_add2::IfcPlanarBox::IfcPlanarBox(IfcEntityInstanceData* e) : IfcPlanarExtent((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPlanarBox_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPlanarBox::IfcPlanarBox(double v1_SizeInX, double v2_SizeInY, ::Ifc4x3_add2::IfcAxis2Placement* v3_Placement) : IfcPlanarExtent((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPlanarBox_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_SizeInX));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_SizeInY));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Placement));data_->setArgument(2,attr);} } + +// Function implementations for IfcPlanarExtent +double Ifc4x3_add2::IfcPlanarExtent::SizeInX() const { double v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcPlanarExtent::setSizeInX(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +double Ifc4x3_add2::IfcPlanarExtent::SizeInY() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcPlanarExtent::setSizeInY(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPlanarExtent::declaration() const { return *IFC4X3_ADD2_IfcPlanarExtent_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPlanarExtent::Class() { return *IFC4X3_ADD2_IfcPlanarExtent_type; } +Ifc4x3_add2::IfcPlanarExtent::IfcPlanarExtent(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPlanarExtent_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPlanarExtent::IfcPlanarExtent(double v1_SizeInX, double v2_SizeInY) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPlanarExtent_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_SizeInX));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_SizeInY));data_->setArgument(1,attr);} } + +// Function implementations for IfcPlane + + +const IfcParse::entity& Ifc4x3_add2::IfcPlane::declaration() const { return *IFC4X3_ADD2_IfcPlane_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPlane::Class() { return *IFC4X3_ADD2_IfcPlane_type; } +Ifc4x3_add2::IfcPlane::IfcPlane(IfcEntityInstanceData* e) : IfcElementarySurface((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPlane_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPlane::IfcPlane(::Ifc4x3_add2::IfcAxis2Placement3D* v1_Position) : IfcElementarySurface((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPlane_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Position));data_->setArgument(0,attr);} } + +// Function implementations for IfcPlate +boost::optional< ::Ifc4x3_add2::IfcPlateTypeEnum::Value > Ifc4x3_add2::IfcPlate::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcPlateTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcPlate::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcPlateTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcPlateTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPlate::declaration() const { return *IFC4X3_ADD2_IfcPlate_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPlate::Class() { return *IFC4X3_ADD2_IfcPlate_type; } +Ifc4x3_add2::IfcPlate::IfcPlate(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPlate_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPlate::IfcPlate(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcPlateTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPlate_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcPlateTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcPlateType +::Ifc4x3_add2::IfcPlateTypeEnum::Value Ifc4x3_add2::IfcPlateType::PredefinedType() const { return ::Ifc4x3_add2::IfcPlateTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcPlateType::setPredefinedType(::Ifc4x3_add2::IfcPlateTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcPlateTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPlateType::declaration() const { return *IFC4X3_ADD2_IfcPlateType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPlateType::Class() { return *IFC4X3_ADD2_IfcPlateType_type; } +Ifc4x3_add2::IfcPlateType::IfcPlateType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPlateType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPlateType::IfcPlateType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcPlateTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPlateType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcPlateTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcPoint + + +const IfcParse::entity& Ifc4x3_add2::IfcPoint::declaration() const { return *IFC4X3_ADD2_IfcPoint_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPoint::Class() { return *IFC4X3_ADD2_IfcPoint_type; } +Ifc4x3_add2::IfcPoint::IfcPoint(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPoint_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPoint::IfcPoint() : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPoint_type); } + +// Function implementations for IfcPointByDistanceExpression +::Ifc4x3_add2::IfcCurveMeasureSelect* Ifc4x3_add2::IfcPointByDistanceExpression::DistanceAlong() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcCurveMeasureSelect>(true); } +void Ifc4x3_add2::IfcPointByDistanceExpression::setDistanceAlong(::Ifc4x3_add2::IfcCurveMeasureSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +boost::optional< double > Ifc4x3_add2::IfcPointByDistanceExpression::OffsetLateral() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcPointByDistanceExpression::setOffsetLateral(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< double > Ifc4x3_add2::IfcPointByDistanceExpression::OffsetVertical() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcPointByDistanceExpression::setOffsetVertical(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< double > Ifc4x3_add2::IfcPointByDistanceExpression::OffsetLongitudinal() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcPointByDistanceExpression::setOffsetLongitudinal(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +::Ifc4x3_add2::IfcCurve* Ifc4x3_add2::IfcPointByDistanceExpression::BasisCurve() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcCurve>(true); } +void Ifc4x3_add2::IfcPointByDistanceExpression::setBasisCurve(::Ifc4x3_add2::IfcCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPointByDistanceExpression::declaration() const { return *IFC4X3_ADD2_IfcPointByDistanceExpression_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPointByDistanceExpression::Class() { return *IFC4X3_ADD2_IfcPointByDistanceExpression_type; } +Ifc4x3_add2::IfcPointByDistanceExpression::IfcPointByDistanceExpression(IfcEntityInstanceData* e) : IfcPoint((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPointByDistanceExpression_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPointByDistanceExpression::IfcPointByDistanceExpression(::Ifc4x3_add2::IfcCurveMeasureSelect* v1_DistanceAlong, boost::optional< double > v2_OffsetLateral, boost::optional< double > v3_OffsetVertical, boost::optional< double > v4_OffsetLongitudinal, ::Ifc4x3_add2::IfcCurve* v5_BasisCurve) : IfcPoint((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPointByDistanceExpression_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_DistanceAlong));data_->setArgument(0,attr);} if (v2_OffsetLateral) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_OffsetLateral));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_OffsetVertical) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_OffsetVertical));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_OffsetLongitudinal) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_OffsetLongitudinal));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_BasisCurve));data_->setArgument(4,attr);} } + +// Function implementations for IfcPointOnCurve +::Ifc4x3_add2::IfcCurve* Ifc4x3_add2::IfcPointOnCurve::BasisCurve() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcCurve>(true); } +void Ifc4x3_add2::IfcPointOnCurve::setBasisCurve(::Ifc4x3_add2::IfcCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +double Ifc4x3_add2::IfcPointOnCurve::PointParameter() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcPointOnCurve::setPointParameter(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPointOnCurve::declaration() const { return *IFC4X3_ADD2_IfcPointOnCurve_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPointOnCurve::Class() { return *IFC4X3_ADD2_IfcPointOnCurve_type; } +Ifc4x3_add2::IfcPointOnCurve::IfcPointOnCurve(IfcEntityInstanceData* e) : IfcPoint((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPointOnCurve_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPointOnCurve::IfcPointOnCurve(::Ifc4x3_add2::IfcCurve* v1_BasisCurve, double v2_PointParameter) : IfcPoint((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPointOnCurve_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_BasisCurve));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_PointParameter));data_->setArgument(1,attr);} } + +// Function implementations for IfcPointOnSurface +::Ifc4x3_add2::IfcSurface* Ifc4x3_add2::IfcPointOnSurface::BasisSurface() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcSurface>(true); } +void Ifc4x3_add2::IfcPointOnSurface::setBasisSurface(::Ifc4x3_add2::IfcSurface* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +double Ifc4x3_add2::IfcPointOnSurface::PointParameterU() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcPointOnSurface::setPointParameterU(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +double Ifc4x3_add2::IfcPointOnSurface::PointParameterV() const { double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcPointOnSurface::setPointParameterV(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPointOnSurface::declaration() const { return *IFC4X3_ADD2_IfcPointOnSurface_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPointOnSurface::Class() { return *IFC4X3_ADD2_IfcPointOnSurface_type; } +Ifc4x3_add2::IfcPointOnSurface::IfcPointOnSurface(IfcEntityInstanceData* e) : IfcPoint((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPointOnSurface_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPointOnSurface::IfcPointOnSurface(::Ifc4x3_add2::IfcSurface* v1_BasisSurface, double v2_PointParameterU, double v3_PointParameterV) : IfcPoint((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPointOnSurface_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_BasisSurface));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_PointParameterU));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_PointParameterV));data_->setArgument(2,attr);} } + +// Function implementations for IfcPolyLoop +aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr Ifc4x3_add2::IfcPolyLoop::Polygon() const { aggregate_of_instance::ptr es = *data_->getArgument(0); return es->as< ::Ifc4x3_add2::IfcCartesianPoint >(); } +void Ifc4x3_add2::IfcPolyLoop::setPolygon(aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPolyLoop::declaration() const { return *IFC4X3_ADD2_IfcPolyLoop_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPolyLoop::Class() { return *IFC4X3_ADD2_IfcPolyLoop_type; } +Ifc4x3_add2::IfcPolyLoop::IfcPolyLoop(IfcEntityInstanceData* e) : IfcLoop((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPolyLoop_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPolyLoop::IfcPolyLoop(aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr v1_Polygon) : IfcLoop((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPolyLoop_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Polygon)->generalize());data_->setArgument(0,attr);} } + +// Function implementations for IfcPolygonalBoundedHalfSpace +::Ifc4x3_add2::IfcAxis2Placement3D* Ifc4x3_add2::IfcPolygonalBoundedHalfSpace::Position() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcAxis2Placement3D>(true); } +void Ifc4x3_add2::IfcPolygonalBoundedHalfSpace::setPosition(::Ifc4x3_add2::IfcAxis2Placement3D* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcBoundedCurve* Ifc4x3_add2::IfcPolygonalBoundedHalfSpace::PolygonalBoundary() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcBoundedCurve>(true); } +void Ifc4x3_add2::IfcPolygonalBoundedHalfSpace::setPolygonalBoundary(::Ifc4x3_add2::IfcBoundedCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPolygonalBoundedHalfSpace::declaration() const { return *IFC4X3_ADD2_IfcPolygonalBoundedHalfSpace_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPolygonalBoundedHalfSpace::Class() { return *IFC4X3_ADD2_IfcPolygonalBoundedHalfSpace_type; } +Ifc4x3_add2::IfcPolygonalBoundedHalfSpace::IfcPolygonalBoundedHalfSpace(IfcEntityInstanceData* e) : IfcHalfSpaceSolid((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPolygonalBoundedHalfSpace_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPolygonalBoundedHalfSpace::IfcPolygonalBoundedHalfSpace(::Ifc4x3_add2::IfcSurface* v1_BaseSurface, bool v2_AgreementFlag, ::Ifc4x3_add2::IfcAxis2Placement3D* v3_Position, ::Ifc4x3_add2::IfcBoundedCurve* v4_PolygonalBoundary) : IfcHalfSpaceSolid((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPolygonalBoundedHalfSpace_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_BaseSurface));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_AgreementFlag));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Position));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_PolygonalBoundary));data_->setArgument(3,attr);} } + +// Function implementations for IfcPolygonalFaceSet +boost::optional< bool > Ifc4x3_add2::IfcPolygonalFaceSet::Closed() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } bool v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcPolygonalFaceSet::setClosed(boost::optional< bool > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcIndexedPolygonalFace >::ptr Ifc4x3_add2::IfcPolygonalFaceSet::Faces() const { aggregate_of_instance::ptr es = *data_->getArgument(2); return es->as< ::Ifc4x3_add2::IfcIndexedPolygonalFace >(); } +void Ifc4x3_add2::IfcPolygonalFaceSet::setFaces(aggregate_of< ::Ifc4x3_add2::IfcIndexedPolygonalFace >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(2,attr);} } +boost::optional< std::vector< int > /*[1:?]*/ > Ifc4x3_add2::IfcPolygonalFaceSet::PnIndex() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } std::vector< int > /*[1:?]*/ v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcPolygonalFaceSet::setPnIndex(boost::optional< std::vector< int > /*[1:?]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPolygonalFaceSet::declaration() const { return *IFC4X3_ADD2_IfcPolygonalFaceSet_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPolygonalFaceSet::Class() { return *IFC4X3_ADD2_IfcPolygonalFaceSet_type; } +Ifc4x3_add2::IfcPolygonalFaceSet::IfcPolygonalFaceSet(IfcEntityInstanceData* e) : IfcTessellatedFaceSet((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPolygonalFaceSet_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPolygonalFaceSet::IfcPolygonalFaceSet(::Ifc4x3_add2::IfcCartesianPointList3D* v1_Coordinates, boost::optional< bool > v2_Closed, aggregate_of< ::Ifc4x3_add2::IfcIndexedPolygonalFace >::ptr v3_Faces, boost::optional< std::vector< int > /*[1:?]*/ > v4_PnIndex) : IfcTessellatedFaceSet((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPolygonalFaceSet_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Coordinates));data_->setArgument(0,attr);} if (v2_Closed) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Closed));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Faces)->generalize());data_->setArgument(2,attr);} if (v4_PnIndex) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_PnIndex));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcPolyline +aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr Ifc4x3_add2::IfcPolyline::Points() const { aggregate_of_instance::ptr es = *data_->getArgument(0); return es->as< ::Ifc4x3_add2::IfcCartesianPoint >(); } +void Ifc4x3_add2::IfcPolyline::setPoints(aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPolyline::declaration() const { return *IFC4X3_ADD2_IfcPolyline_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPolyline::Class() { return *IFC4X3_ADD2_IfcPolyline_type; } +Ifc4x3_add2::IfcPolyline::IfcPolyline(IfcEntityInstanceData* e) : IfcBoundedCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPolyline_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPolyline::IfcPolyline(aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr v1_Points) : IfcBoundedCurve((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPolyline_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Points)->generalize());data_->setArgument(0,attr);} } + +// Function implementations for IfcPolynomialCurve +::Ifc4x3_add2::IfcPlacement* Ifc4x3_add2::IfcPolynomialCurve::Position() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcPlacement>(true); } +void Ifc4x3_add2::IfcPolynomialCurve::setPosition(::Ifc4x3_add2::IfcPlacement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +boost::optional< std::vector< double > /*[2:?]*/ > Ifc4x3_add2::IfcPolynomialCurve::CoefficientsX() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::vector< double > /*[2:?]*/ v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcPolynomialCurve::setCoefficientsX(boost::optional< std::vector< double > /*[2:?]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< std::vector< double > /*[2:?]*/ > Ifc4x3_add2::IfcPolynomialCurve::CoefficientsY() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::vector< double > /*[2:?]*/ v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcPolynomialCurve::setCoefficientsY(boost::optional< std::vector< double > /*[2:?]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< std::vector< double > /*[2:?]*/ > Ifc4x3_add2::IfcPolynomialCurve::CoefficientsZ() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } std::vector< double > /*[2:?]*/ v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcPolynomialCurve::setCoefficientsZ(boost::optional< std::vector< double > /*[2:?]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPolynomialCurve::declaration() const { return *IFC4X3_ADD2_IfcPolynomialCurve_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPolynomialCurve::Class() { return *IFC4X3_ADD2_IfcPolynomialCurve_type; } +Ifc4x3_add2::IfcPolynomialCurve::IfcPolynomialCurve(IfcEntityInstanceData* e) : IfcCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPolynomialCurve_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPolynomialCurve::IfcPolynomialCurve(::Ifc4x3_add2::IfcPlacement* v1_Position, boost::optional< std::vector< double > /*[2:?]*/ > v2_CoefficientsX, boost::optional< std::vector< double > /*[2:?]*/ > v3_CoefficientsY, boost::optional< std::vector< double > /*[2:?]*/ > v4_CoefficientsZ) : IfcCurve((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPolynomialCurve_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Position));data_->setArgument(0,attr);} if (v2_CoefficientsX) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_CoefficientsX));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_CoefficientsY) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_CoefficientsY));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_CoefficientsZ) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_CoefficientsZ));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcPort + +::Ifc4x3_add2::IfcRelConnectsPortToElement::list::ptr Ifc4x3_add2::IfcPort::ContainedIn() const { return data_->getInverse(IFC4X3_ADD2_IfcRelConnectsPortToElement_type, 4)->as(); } +::Ifc4x3_add2::IfcRelConnectsPorts::list::ptr Ifc4x3_add2::IfcPort::ConnectedFrom() const { return data_->getInverse(IFC4X3_ADD2_IfcRelConnectsPorts_type, 5)->as(); } +::Ifc4x3_add2::IfcRelConnectsPorts::list::ptr Ifc4x3_add2::IfcPort::ConnectedTo() const { return data_->getInverse(IFC4X3_ADD2_IfcRelConnectsPorts_type, 4)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcPort::declaration() const { return *IFC4X3_ADD2_IfcPort_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPort::Class() { return *IFC4X3_ADD2_IfcPort_type; } +Ifc4x3_add2::IfcPort::IfcPort(IfcEntityInstanceData* e) : IfcProduct((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPort_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPort::IfcPort(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation) : IfcProduct((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPort_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} } + +// Function implementations for IfcPositioningElement + +::Ifc4x3_add2::IfcRelContainedInSpatialStructure::list::ptr Ifc4x3_add2::IfcPositioningElement::ContainedInStructure() const { return data_->getInverse(IFC4X3_ADD2_IfcRelContainedInSpatialStructure_type, 4)->as(); } +::Ifc4x3_add2::IfcRelPositions::list::ptr Ifc4x3_add2::IfcPositioningElement::Positions() const { return data_->getInverse(IFC4X3_ADD2_IfcRelPositions_type, 4)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcPositioningElement::declaration() const { return *IFC4X3_ADD2_IfcPositioningElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPositioningElement::Class() { return *IFC4X3_ADD2_IfcPositioningElement_type; } +Ifc4x3_add2::IfcPositioningElement::IfcPositioningElement(IfcEntityInstanceData* e) : IfcProduct((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPositioningElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPositioningElement::IfcPositioningElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation) : IfcProduct((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPositioningElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} } + +// Function implementations for IfcPostalAddress +boost::optional< std::string > Ifc4x3_add2::IfcPostalAddress::InternalLocation() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } std::string v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcPostalAddress::setInternalLocation(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +boost::optional< std::vector< std::string > /*[1:?]*/ > Ifc4x3_add2::IfcPostalAddress::AddressLines() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::vector< std::string > /*[1:?]*/ v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcPostalAddress::setAddressLines(boost::optional< std::vector< std::string > /*[1:?]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcPostalAddress::PostalBox() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcPostalAddress::setPostalBox(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcPostalAddress::Town() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } std::string v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcPostalAddress::setTown(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcPostalAddress::Region() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } std::string v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcPostalAddress::setRegion(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcPostalAddress::PostalCode() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } std::string v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcPostalAddress::setPostalCode(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcPostalAddress::Country() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } std::string v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcPostalAddress::setCountry(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPostalAddress::declaration() const { return *IFC4X3_ADD2_IfcPostalAddress_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPostalAddress::Class() { return *IFC4X3_ADD2_IfcPostalAddress_type; } +Ifc4x3_add2::IfcPostalAddress::IfcPostalAddress(IfcEntityInstanceData* e) : IfcAddress((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPostalAddress_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPostalAddress::IfcPostalAddress(boost::optional< ::Ifc4x3_add2::IfcAddressTypeEnum::Value > v1_Purpose, boost::optional< std::string > v2_Description, boost::optional< std::string > v3_UserDefinedPurpose, boost::optional< std::string > v4_InternalLocation, boost::optional< std::vector< std::string > /*[1:?]*/ > v5_AddressLines, boost::optional< std::string > v6_PostalBox, boost::optional< std::string > v7_Town, boost::optional< std::string > v8_Region, boost::optional< std::string > v9_PostalCode, boost::optional< std::string > v10_Country) : IfcAddress((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPostalAddress_type); if (v1_Purpose) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v1_Purpose,::Ifc4x3_add2::IfcAddressTypeEnum::ToString(*v1_Purpose))));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_UserDefinedPurpose) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_UserDefinedPurpose));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_InternalLocation) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_InternalLocation));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_AddressLines) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_AddressLines));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_PostalBox) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_PostalBox));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_Town) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_Town));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Region) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Region));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PostalCode) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_PostalCode));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_Country) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_Country));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } } + +// Function implementations for IfcPreDefinedColour + + +const IfcParse::entity& Ifc4x3_add2::IfcPreDefinedColour::declaration() const { return *IFC4X3_ADD2_IfcPreDefinedColour_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPreDefinedColour::Class() { return *IFC4X3_ADD2_IfcPreDefinedColour_type; } +Ifc4x3_add2::IfcPreDefinedColour::IfcPreDefinedColour(IfcEntityInstanceData* e) : IfcPreDefinedItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPreDefinedColour_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPreDefinedColour::IfcPreDefinedColour(std::string v1_Name) : IfcPreDefinedItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPreDefinedColour_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} } + +// Function implementations for IfcPreDefinedCurveFont + + +const IfcParse::entity& Ifc4x3_add2::IfcPreDefinedCurveFont::declaration() const { return *IFC4X3_ADD2_IfcPreDefinedCurveFont_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPreDefinedCurveFont::Class() { return *IFC4X3_ADD2_IfcPreDefinedCurveFont_type; } +Ifc4x3_add2::IfcPreDefinedCurveFont::IfcPreDefinedCurveFont(IfcEntityInstanceData* e) : IfcPreDefinedItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPreDefinedCurveFont_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPreDefinedCurveFont::IfcPreDefinedCurveFont(std::string v1_Name) : IfcPreDefinedItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPreDefinedCurveFont_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} } + +// Function implementations for IfcPreDefinedItem +std::string Ifc4x3_add2::IfcPreDefinedItem::Name() const { std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcPreDefinedItem::setName(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPreDefinedItem::declaration() const { return *IFC4X3_ADD2_IfcPreDefinedItem_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPreDefinedItem::Class() { return *IFC4X3_ADD2_IfcPreDefinedItem_type; } +Ifc4x3_add2::IfcPreDefinedItem::IfcPreDefinedItem(IfcEntityInstanceData* e) : IfcPresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPreDefinedItem_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPreDefinedItem::IfcPreDefinedItem(std::string v1_Name) : IfcPresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPreDefinedItem_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} } + +// Function implementations for IfcPreDefinedProperties + + +const IfcParse::entity& Ifc4x3_add2::IfcPreDefinedProperties::declaration() const { return *IFC4X3_ADD2_IfcPreDefinedProperties_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPreDefinedProperties::Class() { return *IFC4X3_ADD2_IfcPreDefinedProperties_type; } +Ifc4x3_add2::IfcPreDefinedProperties::IfcPreDefinedProperties(IfcEntityInstanceData* e) : IfcPropertyAbstraction((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPreDefinedProperties_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPreDefinedProperties::IfcPreDefinedProperties() : IfcPropertyAbstraction((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPreDefinedProperties_type); } + +// Function implementations for IfcPreDefinedPropertySet + + +const IfcParse::entity& Ifc4x3_add2::IfcPreDefinedPropertySet::declaration() const { return *IFC4X3_ADD2_IfcPreDefinedPropertySet_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPreDefinedPropertySet::Class() { return *IFC4X3_ADD2_IfcPreDefinedPropertySet_type; } +Ifc4x3_add2::IfcPreDefinedPropertySet::IfcPreDefinedPropertySet(IfcEntityInstanceData* e) : IfcPropertySetDefinition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPreDefinedPropertySet_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPreDefinedPropertySet::IfcPreDefinedPropertySet(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description) : IfcPropertySetDefinition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPreDefinedPropertySet_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcPreDefinedTextFont + + +const IfcParse::entity& Ifc4x3_add2::IfcPreDefinedTextFont::declaration() const { return *IFC4X3_ADD2_IfcPreDefinedTextFont_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPreDefinedTextFont::Class() { return *IFC4X3_ADD2_IfcPreDefinedTextFont_type; } +Ifc4x3_add2::IfcPreDefinedTextFont::IfcPreDefinedTextFont(IfcEntityInstanceData* e) : IfcPreDefinedItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPreDefinedTextFont_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPreDefinedTextFont::IfcPreDefinedTextFont(std::string v1_Name) : IfcPreDefinedItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPreDefinedTextFont_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} } + +// Function implementations for IfcPresentationItem + + +const IfcParse::entity& Ifc4x3_add2::IfcPresentationItem::declaration() const { return *IFC4X3_ADD2_IfcPresentationItem_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPresentationItem::Class() { return *IFC4X3_ADD2_IfcPresentationItem_type; } +Ifc4x3_add2::IfcPresentationItem::IfcPresentationItem(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPresentationItem_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPresentationItem::IfcPresentationItem() : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPresentationItem_type); } + +// Function implementations for IfcPresentationLayerAssignment +std::string Ifc4x3_add2::IfcPresentationLayerAssignment::Name() const { std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcPresentationLayerAssignment::setName(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcPresentationLayerAssignment::Description() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcPresentationLayerAssignment::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcLayeredItem >::ptr Ifc4x3_add2::IfcPresentationLayerAssignment::AssignedItems() const { aggregate_of_instance::ptr es = *data_->getArgument(2); return es->as< ::Ifc4x3_add2::IfcLayeredItem >(); } +void Ifc4x3_add2::IfcPresentationLayerAssignment::setAssignedItems(aggregate_of< ::Ifc4x3_add2::IfcLayeredItem >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(2,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcPresentationLayerAssignment::Identifier() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } std::string v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcPresentationLayerAssignment::setIdentifier(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPresentationLayerAssignment::declaration() const { return *IFC4X3_ADD2_IfcPresentationLayerAssignment_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPresentationLayerAssignment::Class() { return *IFC4X3_ADD2_IfcPresentationLayerAssignment_type; } +Ifc4x3_add2::IfcPresentationLayerAssignment::IfcPresentationLayerAssignment(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPresentationLayerAssignment_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPresentationLayerAssignment::IfcPresentationLayerAssignment(std::string v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_add2::IfcLayeredItem >::ptr v3_AssignedItems, boost::optional< std::string > v4_Identifier) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPresentationLayerAssignment_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_AssignedItems)->generalize());data_->setArgument(2,attr);} if (v4_Identifier) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Identifier));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcPresentationLayerWithStyle +boost::logic::tribool Ifc4x3_add2::IfcPresentationLayerWithStyle::LayerOn() const { boost::logic::tribool v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcPresentationLayerWithStyle::setLayerOn(boost::logic::tribool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +boost::logic::tribool Ifc4x3_add2::IfcPresentationLayerWithStyle::LayerFrozen() const { boost::logic::tribool v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcPresentationLayerWithStyle::setLayerFrozen(boost::logic::tribool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +boost::logic::tribool Ifc4x3_add2::IfcPresentationLayerWithStyle::LayerBlocked() const { boost::logic::tribool v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcPresentationLayerWithStyle::setLayerBlocked(boost::logic::tribool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcPresentationStyle >::ptr Ifc4x3_add2::IfcPresentationLayerWithStyle::LayerStyles() const { aggregate_of_instance::ptr es = *data_->getArgument(7); return es->as< ::Ifc4x3_add2::IfcPresentationStyle >(); } +void Ifc4x3_add2::IfcPresentationLayerWithStyle::setLayerStyles(aggregate_of< ::Ifc4x3_add2::IfcPresentationStyle >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(7,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPresentationLayerWithStyle::declaration() const { return *IFC4X3_ADD2_IfcPresentationLayerWithStyle_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPresentationLayerWithStyle::Class() { return *IFC4X3_ADD2_IfcPresentationLayerWithStyle_type; } +Ifc4x3_add2::IfcPresentationLayerWithStyle::IfcPresentationLayerWithStyle(IfcEntityInstanceData* e) : IfcPresentationLayerAssignment((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPresentationLayerWithStyle_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPresentationLayerWithStyle::IfcPresentationLayerWithStyle(std::string v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_add2::IfcLayeredItem >::ptr v3_AssignedItems, boost::optional< std::string > v4_Identifier, boost::logic::tribool v5_LayerOn, boost::logic::tribool v6_LayerFrozen, boost::logic::tribool v7_LayerBlocked, aggregate_of< ::Ifc4x3_add2::IfcPresentationStyle >::ptr v8_LayerStyles) : IfcPresentationLayerAssignment((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPresentationLayerWithStyle_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_AssignedItems)->generalize());data_->setArgument(2,attr);} if (v4_Identifier) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Identifier));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_LayerOn));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_LayerFrozen));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_LayerBlocked));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_LayerStyles)->generalize());data_->setArgument(7,attr);} } + +// Function implementations for IfcPresentationStyle +boost::optional< std::string > Ifc4x3_add2::IfcPresentationStyle::Name() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcPresentationStyle::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPresentationStyle::declaration() const { return *IFC4X3_ADD2_IfcPresentationStyle_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPresentationStyle::Class() { return *IFC4X3_ADD2_IfcPresentationStyle_type; } +Ifc4x3_add2::IfcPresentationStyle::IfcPresentationStyle(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPresentationStyle_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPresentationStyle::IfcPresentationStyle(boost::optional< std::string > v1_Name) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPresentationStyle_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } } + +// Function implementations for IfcProcedure +boost::optional< ::Ifc4x3_add2::IfcProcedureTypeEnum::Value > Ifc4x3_add2::IfcProcedure::PredefinedType() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcProcedureTypeEnum::FromString(*data_->getArgument(7)); } +void Ifc4x3_add2::IfcProcedure::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcProcedureTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcProcedureTypeEnum::ToString(*v)));}data_->setArgument(7,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcProcedure::declaration() const { return *IFC4X3_ADD2_IfcProcedure_type; } +const IfcParse::entity& Ifc4x3_add2::IfcProcedure::Class() { return *IFC4X3_ADD2_IfcProcedure_type; } +Ifc4x3_add2::IfcProcedure::IfcProcedure(IfcEntityInstanceData* e) : IfcProcess((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcProcedure_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcProcedure::IfcProcedure(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, boost::optional< ::Ifc4x3_add2::IfcProcedureTypeEnum::Value > v8_PredefinedType) : IfcProcess((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProcedure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Identification));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_LongDescription));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v8_PredefinedType,::Ifc4x3_add2::IfcProcedureTypeEnum::ToString(*v8_PredefinedType))));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcProcedureType +::Ifc4x3_add2::IfcProcedureTypeEnum::Value Ifc4x3_add2::IfcProcedureType::PredefinedType() const { return ::Ifc4x3_add2::IfcProcedureTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcProcedureType::setPredefinedType(::Ifc4x3_add2::IfcProcedureTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcProcedureTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcProcedureType::declaration() const { return *IFC4X3_ADD2_IfcProcedureType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcProcedureType::Class() { return *IFC4X3_ADD2_IfcProcedureType_type; } +Ifc4x3_add2::IfcProcedureType::IfcProcedureType(IfcEntityInstanceData* e) : IfcTypeProcess((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcProcedureType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcProcedureType::IfcProcedureType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ProcessType, ::Ifc4x3_add2::IfcProcedureTypeEnum::Value v10_PredefinedType) : IfcTypeProcess((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProcedureType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_Identification));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongDescription));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ProcessType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ProcessType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcProcedureTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcProcess +boost::optional< std::string > Ifc4x3_add2::IfcProcess::Identification() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcProcess::setIdentification(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcProcess::LongDescription() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } std::string v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcProcess::setLongDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } + +::Ifc4x3_add2::IfcRelSequence::list::ptr Ifc4x3_add2::IfcProcess::IsPredecessorTo() const { return data_->getInverse(IFC4X3_ADD2_IfcRelSequence_type, 4)->as(); } +::Ifc4x3_add2::IfcRelSequence::list::ptr Ifc4x3_add2::IfcProcess::IsSuccessorFrom() const { return data_->getInverse(IFC4X3_ADD2_IfcRelSequence_type, 5)->as(); } +::Ifc4x3_add2::IfcRelAssignsToProcess::list::ptr Ifc4x3_add2::IfcProcess::OperatesOn() const { return data_->getInverse(IFC4X3_ADD2_IfcRelAssignsToProcess_type, 6)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcProcess::declaration() const { return *IFC4X3_ADD2_IfcProcess_type; } +const IfcParse::entity& Ifc4x3_add2::IfcProcess::Class() { return *IFC4X3_ADD2_IfcProcess_type; } +Ifc4x3_add2::IfcProcess::IfcProcess(IfcEntityInstanceData* e) : IfcObject((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcProcess_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcProcess::IfcProcess(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription) : IfcObject((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProcess_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Identification));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_LongDescription));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } } + +// Function implementations for IfcProduct +::Ifc4x3_add2::IfcObjectPlacement* Ifc4x3_add2::IfcProduct::ObjectPlacement() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcObjectPlacement>(true); } +void Ifc4x3_add2::IfcProduct::setObjectPlacement(::Ifc4x3_add2::IfcObjectPlacement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +::Ifc4x3_add2::IfcProductRepresentation* Ifc4x3_add2::IfcProduct::Representation() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcProductRepresentation>(true); } +void Ifc4x3_add2::IfcProduct::setRepresentation(::Ifc4x3_add2::IfcProductRepresentation* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } + +::Ifc4x3_add2::IfcRelAssignsToProduct::list::ptr Ifc4x3_add2::IfcProduct::ReferencedBy() const { return data_->getInverse(IFC4X3_ADD2_IfcRelAssignsToProduct_type, 6)->as(); } +::Ifc4x3_add2::IfcRelPositions::list::ptr Ifc4x3_add2::IfcProduct::PositionedRelativeTo() const { return data_->getInverse(IFC4X3_ADD2_IfcRelPositions_type, 5)->as(); } +::Ifc4x3_add2::IfcRelReferencedInSpatialStructure::list::ptr Ifc4x3_add2::IfcProduct::ReferencedInStructures() const { return data_->getInverse(IFC4X3_ADD2_IfcRelReferencedInSpatialStructure_type, 4)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcProduct::declaration() const { return *IFC4X3_ADD2_IfcProduct_type; } +const IfcParse::entity& Ifc4x3_add2::IfcProduct::Class() { return *IFC4X3_ADD2_IfcProduct_type; } +Ifc4x3_add2::IfcProduct::IfcProduct(IfcEntityInstanceData* e) : IfcObject((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcProduct_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcProduct::IfcProduct(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation) : IfcObject((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProduct_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} } + +// Function implementations for IfcProductDefinitionShape + +::Ifc4x3_add2::IfcProduct::list::ptr Ifc4x3_add2::IfcProductDefinitionShape::ShapeOfProduct() const { return data_->getInverse(IFC4X3_ADD2_IfcProduct_type, 6)->as(); } +::Ifc4x3_add2::IfcShapeAspect::list::ptr Ifc4x3_add2::IfcProductDefinitionShape::HasShapeAspects() const { return data_->getInverse(IFC4X3_ADD2_IfcShapeAspect_type, 4)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcProductDefinitionShape::declaration() const { return *IFC4X3_ADD2_IfcProductDefinitionShape_type; } +const IfcParse::entity& Ifc4x3_add2::IfcProductDefinitionShape::Class() { return *IFC4X3_ADD2_IfcProductDefinitionShape_type; } +Ifc4x3_add2::IfcProductDefinitionShape::IfcProductDefinitionShape(IfcEntityInstanceData* e) : IfcProductRepresentation((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcProductDefinitionShape_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcProductDefinitionShape::IfcProductDefinitionShape(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_add2::IfcRepresentation >::ptr v3_Representations) : IfcProductRepresentation((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProductDefinitionShape_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Representations)->generalize());data_->setArgument(2,attr);} } + +// Function implementations for IfcProductRepresentation +boost::optional< std::string > Ifc4x3_add2::IfcProductRepresentation::Name() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcProductRepresentation::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcProductRepresentation::Description() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcProductRepresentation::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcRepresentation >::ptr Ifc4x3_add2::IfcProductRepresentation::Representations() const { aggregate_of_instance::ptr es = *data_->getArgument(2); return es->as< ::Ifc4x3_add2::IfcRepresentation >(); } +void Ifc4x3_add2::IfcProductRepresentation::setRepresentations(aggregate_of< ::Ifc4x3_add2::IfcRepresentation >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcProductRepresentation::declaration() const { return *IFC4X3_ADD2_IfcProductRepresentation_type; } +const IfcParse::entity& Ifc4x3_add2::IfcProductRepresentation::Class() { return *IFC4X3_ADD2_IfcProductRepresentation_type; } +Ifc4x3_add2::IfcProductRepresentation::IfcProductRepresentation(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcProductRepresentation_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcProductRepresentation::IfcProductRepresentation(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_add2::IfcRepresentation >::ptr v3_Representations) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProductRepresentation_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Representations)->generalize());data_->setArgument(2,attr);} } + +// Function implementations for IfcProfileDef +::Ifc4x3_add2::IfcProfileTypeEnum::Value Ifc4x3_add2::IfcProfileDef::ProfileType() const { return ::Ifc4x3_add2::IfcProfileTypeEnum::FromString(*data_->getArgument(0)); } +void Ifc4x3_add2::IfcProfileDef::setProfileType(::Ifc4x3_add2::IfcProfileTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcProfileTypeEnum::ToString(v)));data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcProfileDef::ProfileName() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcProfileDef::setProfileName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } + +::Ifc4x3_add2::IfcExternalReferenceRelationship::list::ptr Ifc4x3_add2::IfcProfileDef::HasExternalReference() const { return data_->getInverse(IFC4X3_ADD2_IfcExternalReferenceRelationship_type, 3)->as(); } +::Ifc4x3_add2::IfcProfileProperties::list::ptr Ifc4x3_add2::IfcProfileDef::HasProperties() const { return data_->getInverse(IFC4X3_ADD2_IfcProfileProperties_type, 3)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcProfileDef::declaration() const { return *IFC4X3_ADD2_IfcProfileDef_type; } +const IfcParse::entity& Ifc4x3_add2::IfcProfileDef::Class() { return *IFC4X3_ADD2_IfcProfileDef_type; } +Ifc4x3_add2::IfcProfileDef::IfcProfileDef(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcProfileDef_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcProfileDef::IfcProfileDef(::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProfileDef_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_ProfileType,::Ifc4x3_add2::IfcProfileTypeEnum::ToString(v1_ProfileType))));data_->setArgument(0,attr);} if (v2_ProfileName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ProfileName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } } + +// Function implementations for IfcProfileProperties +::Ifc4x3_add2::IfcProfileDef* Ifc4x3_add2::IfcProfileProperties::ProfileDefinition() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcProfileDef>(true); } +void Ifc4x3_add2::IfcProfileProperties::setProfileDefinition(::Ifc4x3_add2::IfcProfileDef* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcProfileProperties::declaration() const { return *IFC4X3_ADD2_IfcProfileProperties_type; } +const IfcParse::entity& Ifc4x3_add2::IfcProfileProperties::Class() { return *IFC4X3_ADD2_IfcProfileProperties_type; } +Ifc4x3_add2::IfcProfileProperties::IfcProfileProperties(IfcEntityInstanceData* e) : IfcExtendedProperties((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcProfileProperties_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcProfileProperties::IfcProfileProperties(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_add2::IfcProperty >::ptr v3_Properties, ::Ifc4x3_add2::IfcProfileDef* v4_ProfileDefinition) : IfcExtendedProperties((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProfileProperties_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Properties)->generalize());data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_ProfileDefinition));data_->setArgument(3,attr);} } + +// Function implementations for IfcProject + + +const IfcParse::entity& Ifc4x3_add2::IfcProject::declaration() const { return *IFC4X3_ADD2_IfcProject_type; } +const IfcParse::entity& Ifc4x3_add2::IfcProject::Class() { return *IFC4X3_ADD2_IfcProject_type; } +Ifc4x3_add2::IfcProject::IfcProject(IfcEntityInstanceData* e) : IfcContext((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcProject_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcProject::IfcProject(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_LongName, boost::optional< std::string > v7_Phase, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationContext >::ptr > v8_RepresentationContexts, ::Ifc4x3_add2::IfcUnitAssignment* v9_UnitsInContext) : IfcContext((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProject_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_LongName));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_Phase) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_Phase));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_RepresentationContexts) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_RepresentationContexts)->generalize());data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_UnitsInContext));data_->setArgument(8,attr);} } + +// Function implementations for IfcProjectLibrary + + +const IfcParse::entity& Ifc4x3_add2::IfcProjectLibrary::declaration() const { return *IFC4X3_ADD2_IfcProjectLibrary_type; } +const IfcParse::entity& Ifc4x3_add2::IfcProjectLibrary::Class() { return *IFC4X3_ADD2_IfcProjectLibrary_type; } +Ifc4x3_add2::IfcProjectLibrary::IfcProjectLibrary(IfcEntityInstanceData* e) : IfcContext((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcProjectLibrary_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcProjectLibrary::IfcProjectLibrary(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_LongName, boost::optional< std::string > v7_Phase, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationContext >::ptr > v8_RepresentationContexts, ::Ifc4x3_add2::IfcUnitAssignment* v9_UnitsInContext) : IfcContext((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProjectLibrary_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_LongName));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_Phase) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_Phase));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_RepresentationContexts) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_RepresentationContexts)->generalize());data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_UnitsInContext));data_->setArgument(8,attr);} } + +// Function implementations for IfcProjectOrder +boost::optional< ::Ifc4x3_add2::IfcProjectOrderTypeEnum::Value > Ifc4x3_add2::IfcProjectOrder::PredefinedType() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcProjectOrderTypeEnum::FromString(*data_->getArgument(6)); } +void Ifc4x3_add2::IfcProjectOrder::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcProjectOrderTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcProjectOrderTypeEnum::ToString(*v)));}data_->setArgument(6,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcProjectOrder::Status() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } std::string v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcProjectOrder::setStatus(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcProjectOrder::LongDescription() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } std::string v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcProjectOrder::setLongDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcProjectOrder::declaration() const { return *IFC4X3_ADD2_IfcProjectOrder_type; } +const IfcParse::entity& Ifc4x3_add2::IfcProjectOrder::Class() { return *IFC4X3_ADD2_IfcProjectOrder_type; } +Ifc4x3_add2::IfcProjectOrder::IfcProjectOrder(IfcEntityInstanceData* e) : IfcControl((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcProjectOrder_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcProjectOrder::IfcProjectOrder(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< ::Ifc4x3_add2::IfcProjectOrderTypeEnum::Value > v7_PredefinedType, boost::optional< std::string > v8_Status, boost::optional< std::string > v9_LongDescription) : IfcControl((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProjectOrder_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Identification));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v7_PredefinedType,::Ifc4x3_add2::IfcProjectOrderTypeEnum::ToString(*v7_PredefinedType))));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Status) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Status));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_LongDescription));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcProjectedCRS +boost::optional< std::string > Ifc4x3_add2::IfcProjectedCRS::VerticalDatum() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } std::string v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcProjectedCRS::setVerticalDatum(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcProjectedCRS::MapProjection() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcProjectedCRS::setMapProjection(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcProjectedCRS::MapZone() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcProjectedCRS::setMapZone(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +::Ifc4x3_add2::IfcNamedUnit* Ifc4x3_add2::IfcProjectedCRS::MapUnit() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcNamedUnit>(true); } +void Ifc4x3_add2::IfcProjectedCRS::setMapUnit(::Ifc4x3_add2::IfcNamedUnit* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcProjectedCRS::declaration() const { return *IFC4X3_ADD2_IfcProjectedCRS_type; } +const IfcParse::entity& Ifc4x3_add2::IfcProjectedCRS::Class() { return *IFC4X3_ADD2_IfcProjectedCRS_type; } +Ifc4x3_add2::IfcProjectedCRS::IfcProjectedCRS(IfcEntityInstanceData* e) : IfcCoordinateReferenceSystem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcProjectedCRS_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcProjectedCRS::IfcProjectedCRS(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, boost::optional< std::string > v3_GeodeticDatum, boost::optional< std::string > v4_VerticalDatum, boost::optional< std::string > v5_MapProjection, boost::optional< std::string > v6_MapZone, ::Ifc4x3_add2::IfcNamedUnit* v7_MapUnit) : IfcCoordinateReferenceSystem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProjectedCRS_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_GeodeticDatum) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_GeodeticDatum));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_VerticalDatum) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_VerticalDatum));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_MapProjection) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_MapProjection));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_MapZone) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_MapZone));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_MapUnit));data_->setArgument(6,attr);} } + +// Function implementations for IfcProjectionElement +boost::optional< ::Ifc4x3_add2::IfcProjectionElementTypeEnum::Value > Ifc4x3_add2::IfcProjectionElement::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcProjectionElementTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcProjectionElement::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcProjectionElementTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcProjectionElementTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcProjectionElement::declaration() const { return *IFC4X3_ADD2_IfcProjectionElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcProjectionElement::Class() { return *IFC4X3_ADD2_IfcProjectionElement_type; } +Ifc4x3_add2::IfcProjectionElement::IfcProjectionElement(IfcEntityInstanceData* e) : IfcFeatureElementAddition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcProjectionElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcProjectionElement::IfcProjectionElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcProjectionElementTypeEnum::Value > v9_PredefinedType) : IfcFeatureElementAddition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProjectionElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcProjectionElementTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcProperty +std::string Ifc4x3_add2::IfcProperty::Name() const { std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcProperty::setName(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcProperty::Specification() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcProperty::setSpecification(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } + +::Ifc4x3_add2::IfcPropertySet::list::ptr Ifc4x3_add2::IfcProperty::PartOfPset() const { return data_->getInverse(IFC4X3_ADD2_IfcPropertySet_type, 4)->as(); } +::Ifc4x3_add2::IfcPropertyDependencyRelationship::list::ptr Ifc4x3_add2::IfcProperty::PropertyForDependance() const { return data_->getInverse(IFC4X3_ADD2_IfcPropertyDependencyRelationship_type, 2)->as(); } +::Ifc4x3_add2::IfcPropertyDependencyRelationship::list::ptr Ifc4x3_add2::IfcProperty::PropertyDependsOn() const { return data_->getInverse(IFC4X3_ADD2_IfcPropertyDependencyRelationship_type, 3)->as(); } +::Ifc4x3_add2::IfcComplexProperty::list::ptr Ifc4x3_add2::IfcProperty::PartOfComplex() const { return data_->getInverse(IFC4X3_ADD2_IfcComplexProperty_type, 3)->as(); } +::Ifc4x3_add2::IfcResourceConstraintRelationship::list::ptr Ifc4x3_add2::IfcProperty::HasConstraints() const { return data_->getInverse(IFC4X3_ADD2_IfcResourceConstraintRelationship_type, 3)->as(); } +::Ifc4x3_add2::IfcResourceApprovalRelationship::list::ptr Ifc4x3_add2::IfcProperty::HasApprovals() const { return data_->getInverse(IFC4X3_ADD2_IfcResourceApprovalRelationship_type, 2)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcProperty::declaration() const { return *IFC4X3_ADD2_IfcProperty_type; } +const IfcParse::entity& Ifc4x3_add2::IfcProperty::Class() { return *IFC4X3_ADD2_IfcProperty_type; } +Ifc4x3_add2::IfcProperty::IfcProperty(IfcEntityInstanceData* e) : IfcPropertyAbstraction((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcProperty_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcProperty::IfcProperty(std::string v1_Name, boost::optional< std::string > v2_Specification) : IfcPropertyAbstraction((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProperty_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Specification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Specification));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } } + +// Function implementations for IfcPropertyAbstraction + +::Ifc4x3_add2::IfcExternalReferenceRelationship::list::ptr Ifc4x3_add2::IfcPropertyAbstraction::HasExternalReferences() const { return data_->getInverse(IFC4X3_ADD2_IfcExternalReferenceRelationship_type, 3)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcPropertyAbstraction::declaration() const { return *IFC4X3_ADD2_IfcPropertyAbstraction_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPropertyAbstraction::Class() { return *IFC4X3_ADD2_IfcPropertyAbstraction_type; } +Ifc4x3_add2::IfcPropertyAbstraction::IfcPropertyAbstraction(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPropertyAbstraction_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPropertyAbstraction::IfcPropertyAbstraction() : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPropertyAbstraction_type); } + +// Function implementations for IfcPropertyBoundedValue +::Ifc4x3_add2::IfcValue* Ifc4x3_add2::IfcPropertyBoundedValue::UpperBoundValue() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcValue>(true); } +void Ifc4x3_add2::IfcPropertyBoundedValue::setUpperBoundValue(::Ifc4x3_add2::IfcValue* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcValue* Ifc4x3_add2::IfcPropertyBoundedValue::LowerBoundValue() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcValue>(true); } +void Ifc4x3_add2::IfcPropertyBoundedValue::setLowerBoundValue(::Ifc4x3_add2::IfcValue* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +::Ifc4x3_add2::IfcUnit* Ifc4x3_add2::IfcPropertyBoundedValue::Unit() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcUnit>(true); } +void Ifc4x3_add2::IfcPropertyBoundedValue::setUnit(::Ifc4x3_add2::IfcUnit* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcValue* Ifc4x3_add2::IfcPropertyBoundedValue::SetPointValue() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcValue>(true); } +void Ifc4x3_add2::IfcPropertyBoundedValue::setSetPointValue(::Ifc4x3_add2::IfcValue* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPropertyBoundedValue::declaration() const { return *IFC4X3_ADD2_IfcPropertyBoundedValue_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPropertyBoundedValue::Class() { return *IFC4X3_ADD2_IfcPropertyBoundedValue_type; } +Ifc4x3_add2::IfcPropertyBoundedValue::IfcPropertyBoundedValue(IfcEntityInstanceData* e) : IfcSimpleProperty((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPropertyBoundedValue_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPropertyBoundedValue::IfcPropertyBoundedValue(std::string v1_Name, boost::optional< std::string > v2_Specification, ::Ifc4x3_add2::IfcValue* v3_UpperBoundValue, ::Ifc4x3_add2::IfcValue* v4_LowerBoundValue, ::Ifc4x3_add2::IfcUnit* v5_Unit, ::Ifc4x3_add2::IfcValue* v6_SetPointValue) : IfcSimpleProperty((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPropertyBoundedValue_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Specification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Specification));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_UpperBoundValue));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_LowerBoundValue));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_Unit));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_SetPointValue));data_->setArgument(5,attr);} } + +// Function implementations for IfcPropertyDefinition + +::Ifc4x3_add2::IfcRelDeclares::list::ptr Ifc4x3_add2::IfcPropertyDefinition::HasContext() const { return data_->getInverse(IFC4X3_ADD2_IfcRelDeclares_type, 5)->as(); } +::Ifc4x3_add2::IfcRelAssociates::list::ptr Ifc4x3_add2::IfcPropertyDefinition::HasAssociations() const { return data_->getInverse(IFC4X3_ADD2_IfcRelAssociates_type, 4)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcPropertyDefinition::declaration() const { return *IFC4X3_ADD2_IfcPropertyDefinition_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPropertyDefinition::Class() { return *IFC4X3_ADD2_IfcPropertyDefinition_type; } +Ifc4x3_add2::IfcPropertyDefinition::IfcPropertyDefinition(IfcEntityInstanceData* e) : IfcRoot((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPropertyDefinition_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPropertyDefinition::IfcPropertyDefinition(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description) : IfcRoot((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPropertyDefinition_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcPropertyDependencyRelationship +::Ifc4x3_add2::IfcProperty* Ifc4x3_add2::IfcPropertyDependencyRelationship::DependingProperty() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcProperty>(true); } +void Ifc4x3_add2::IfcPropertyDependencyRelationship::setDependingProperty(::Ifc4x3_add2::IfcProperty* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcProperty* Ifc4x3_add2::IfcPropertyDependencyRelationship::DependantProperty() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcProperty>(true); } +void Ifc4x3_add2::IfcPropertyDependencyRelationship::setDependantProperty(::Ifc4x3_add2::IfcProperty* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcPropertyDependencyRelationship::Expression() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcPropertyDependencyRelationship::setExpression(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPropertyDependencyRelationship::declaration() const { return *IFC4X3_ADD2_IfcPropertyDependencyRelationship_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPropertyDependencyRelationship::Class() { return *IFC4X3_ADD2_IfcPropertyDependencyRelationship_type; } +Ifc4x3_add2::IfcPropertyDependencyRelationship::IfcPropertyDependencyRelationship(IfcEntityInstanceData* e) : IfcResourceLevelRelationship((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPropertyDependencyRelationship_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPropertyDependencyRelationship::IfcPropertyDependencyRelationship(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcProperty* v3_DependingProperty, ::Ifc4x3_add2::IfcProperty* v4_DependantProperty, boost::optional< std::string > v5_Expression) : IfcResourceLevelRelationship((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPropertyDependencyRelationship_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_DependingProperty));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_DependantProperty));data_->setArgument(3,attr);} if (v5_Expression) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Expression));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcPropertyEnumeratedValue +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > Ifc4x3_add2::IfcPropertyEnumeratedValue::EnumerationValues() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(2); return es->as< ::Ifc4x3_add2::IfcValue >(); } +void Ifc4x3_add2::IfcPropertyEnumeratedValue::setEnumerationValues(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcPropertyEnumeration* Ifc4x3_add2::IfcPropertyEnumeratedValue::EnumerationReference() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcPropertyEnumeration>(true); } +void Ifc4x3_add2::IfcPropertyEnumeratedValue::setEnumerationReference(::Ifc4x3_add2::IfcPropertyEnumeration* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPropertyEnumeratedValue::declaration() const { return *IFC4X3_ADD2_IfcPropertyEnumeratedValue_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPropertyEnumeratedValue::Class() { return *IFC4X3_ADD2_IfcPropertyEnumeratedValue_type; } +Ifc4x3_add2::IfcPropertyEnumeratedValue::IfcPropertyEnumeratedValue(IfcEntityInstanceData* e) : IfcSimpleProperty((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPropertyEnumeratedValue_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPropertyEnumeratedValue::IfcPropertyEnumeratedValue(std::string v1_Name, boost::optional< std::string > v2_Specification, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > v3_EnumerationValues, ::Ifc4x3_add2::IfcPropertyEnumeration* v4_EnumerationReference) : IfcSimpleProperty((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPropertyEnumeratedValue_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Specification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Specification));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_EnumerationValues) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_EnumerationValues)->generalize());data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_EnumerationReference));data_->setArgument(3,attr);} } + +// Function implementations for IfcPropertyEnumeration +std::string Ifc4x3_add2::IfcPropertyEnumeration::Name() const { std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcPropertyEnumeration::setName(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr Ifc4x3_add2::IfcPropertyEnumeration::EnumerationValues() const { aggregate_of_instance::ptr es = *data_->getArgument(1); return es->as< ::Ifc4x3_add2::IfcValue >(); } +void Ifc4x3_add2::IfcPropertyEnumeration::setEnumerationValues(aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcUnit* Ifc4x3_add2::IfcPropertyEnumeration::Unit() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcUnit>(true); } +void Ifc4x3_add2::IfcPropertyEnumeration::setUnit(::Ifc4x3_add2::IfcUnit* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPropertyEnumeration::declaration() const { return *IFC4X3_ADD2_IfcPropertyEnumeration_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPropertyEnumeration::Class() { return *IFC4X3_ADD2_IfcPropertyEnumeration_type; } +Ifc4x3_add2::IfcPropertyEnumeration::IfcPropertyEnumeration(IfcEntityInstanceData* e) : IfcPropertyAbstraction((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPropertyEnumeration_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPropertyEnumeration::IfcPropertyEnumeration(std::string v1_Name, aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr v2_EnumerationValues, ::Ifc4x3_add2::IfcUnit* v3_Unit) : IfcPropertyAbstraction((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPropertyEnumeration_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_EnumerationValues)->generalize());data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Unit));data_->setArgument(2,attr);} } + +// Function implementations for IfcPropertyListValue +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > Ifc4x3_add2::IfcPropertyListValue::ListValues() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(2); return es->as< ::Ifc4x3_add2::IfcValue >(); } +void Ifc4x3_add2::IfcPropertyListValue::setListValues(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcUnit* Ifc4x3_add2::IfcPropertyListValue::Unit() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcUnit>(true); } +void Ifc4x3_add2::IfcPropertyListValue::setUnit(::Ifc4x3_add2::IfcUnit* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPropertyListValue::declaration() const { return *IFC4X3_ADD2_IfcPropertyListValue_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPropertyListValue::Class() { return *IFC4X3_ADD2_IfcPropertyListValue_type; } +Ifc4x3_add2::IfcPropertyListValue::IfcPropertyListValue(IfcEntityInstanceData* e) : IfcSimpleProperty((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPropertyListValue_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPropertyListValue::IfcPropertyListValue(std::string v1_Name, boost::optional< std::string > v2_Specification, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > v3_ListValues, ::Ifc4x3_add2::IfcUnit* v4_Unit) : IfcSimpleProperty((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPropertyListValue_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Specification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Specification));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_ListValues) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_ListValues)->generalize());data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Unit));data_->setArgument(3,attr);} } + +// Function implementations for IfcPropertyReferenceValue +boost::optional< std::string > Ifc4x3_add2::IfcPropertyReferenceValue::UsageName() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcPropertyReferenceValue::setUsageName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcObjectReferenceSelect* Ifc4x3_add2::IfcPropertyReferenceValue::PropertyReference() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcObjectReferenceSelect>(true); } +void Ifc4x3_add2::IfcPropertyReferenceValue::setPropertyReference(::Ifc4x3_add2::IfcObjectReferenceSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPropertyReferenceValue::declaration() const { return *IFC4X3_ADD2_IfcPropertyReferenceValue_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPropertyReferenceValue::Class() { return *IFC4X3_ADD2_IfcPropertyReferenceValue_type; } +Ifc4x3_add2::IfcPropertyReferenceValue::IfcPropertyReferenceValue(IfcEntityInstanceData* e) : IfcSimpleProperty((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPropertyReferenceValue_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPropertyReferenceValue::IfcPropertyReferenceValue(std::string v1_Name, boost::optional< std::string > v2_Specification, boost::optional< std::string > v3_UsageName, ::Ifc4x3_add2::IfcObjectReferenceSelect* v4_PropertyReference) : IfcSimpleProperty((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPropertyReferenceValue_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Specification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Specification));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_UsageName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_UsageName));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_PropertyReference));data_->setArgument(3,attr);} } + +// Function implementations for IfcPropertySet +aggregate_of< ::Ifc4x3_add2::IfcProperty >::ptr Ifc4x3_add2::IfcPropertySet::HasProperties() const { aggregate_of_instance::ptr es = *data_->getArgument(4); return es->as< ::Ifc4x3_add2::IfcProperty >(); } +void Ifc4x3_add2::IfcPropertySet::setHasProperties(aggregate_of< ::Ifc4x3_add2::IfcProperty >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPropertySet::declaration() const { return *IFC4X3_ADD2_IfcPropertySet_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPropertySet::Class() { return *IFC4X3_ADD2_IfcPropertySet_type; } +Ifc4x3_add2::IfcPropertySet::IfcPropertySet(IfcEntityInstanceData* e) : IfcPropertySetDefinition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPropertySet_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPropertySet::IfcPropertySet(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcProperty >::ptr v5_HasProperties) : IfcPropertySetDefinition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPropertySet_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_HasProperties)->generalize());data_->setArgument(4,attr);} } + +// Function implementations for IfcPropertySetDefinition + +::Ifc4x3_add2::IfcTypeObject::list::ptr Ifc4x3_add2::IfcPropertySetDefinition::DefinesType() const { return data_->getInverse(IFC4X3_ADD2_IfcTypeObject_type, 5)->as(); } +::Ifc4x3_add2::IfcRelDefinesByTemplate::list::ptr Ifc4x3_add2::IfcPropertySetDefinition::IsDefinedBy() const { return data_->getInverse(IFC4X3_ADD2_IfcRelDefinesByTemplate_type, 4)->as(); } +::Ifc4x3_add2::IfcRelDefinesByProperties::list::ptr Ifc4x3_add2::IfcPropertySetDefinition::DefinesOccurrence() const { return data_->getInverse(IFC4X3_ADD2_IfcRelDefinesByProperties_type, 5)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcPropertySetDefinition::declaration() const { return *IFC4X3_ADD2_IfcPropertySetDefinition_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPropertySetDefinition::Class() { return *IFC4X3_ADD2_IfcPropertySetDefinition_type; } +Ifc4x3_add2::IfcPropertySetDefinition::IfcPropertySetDefinition(IfcEntityInstanceData* e) : IfcPropertyDefinition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPropertySetDefinition_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPropertySetDefinition::IfcPropertySetDefinition(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description) : IfcPropertyDefinition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPropertySetDefinition_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcPropertySetTemplate +boost::optional< ::Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::Value > Ifc4x3_add2::IfcPropertySetTemplate::TemplateType() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::FromString(*data_->getArgument(4)); } +void Ifc4x3_add2::IfcPropertySetTemplate::setTemplateType(boost::optional< ::Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::ToString(*v)));}data_->setArgument(4,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcPropertySetTemplate::ApplicableEntity() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcPropertySetTemplate::setApplicableEntity(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcPropertyTemplate >::ptr Ifc4x3_add2::IfcPropertySetTemplate::HasPropertyTemplates() const { aggregate_of_instance::ptr es = *data_->getArgument(6); return es->as< ::Ifc4x3_add2::IfcPropertyTemplate >(); } +void Ifc4x3_add2::IfcPropertySetTemplate::setHasPropertyTemplates(aggregate_of< ::Ifc4x3_add2::IfcPropertyTemplate >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(6,attr);} } + +::Ifc4x3_add2::IfcRelDefinesByTemplate::list::ptr Ifc4x3_add2::IfcPropertySetTemplate::Defines() const { return data_->getInverse(IFC4X3_ADD2_IfcRelDefinesByTemplate_type, 5)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcPropertySetTemplate::declaration() const { return *IFC4X3_ADD2_IfcPropertySetTemplate_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPropertySetTemplate::Class() { return *IFC4X3_ADD2_IfcPropertySetTemplate_type; } +Ifc4x3_add2::IfcPropertySetTemplate::IfcPropertySetTemplate(IfcEntityInstanceData* e) : IfcPropertyTemplateDefinition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPropertySetTemplate_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPropertySetTemplate::IfcPropertySetTemplate(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< ::Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::Value > v5_TemplateType, boost::optional< std::string > v6_ApplicableEntity, aggregate_of< ::Ifc4x3_add2::IfcPropertyTemplate >::ptr v7_HasPropertyTemplates) : IfcPropertyTemplateDefinition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPropertySetTemplate_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_TemplateType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v5_TemplateType,::Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::ToString(*v5_TemplateType))));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_ApplicableEntity) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_ApplicableEntity));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_HasPropertyTemplates)->generalize());data_->setArgument(6,attr);} } + +// Function implementations for IfcPropertySingleValue +::Ifc4x3_add2::IfcValue* Ifc4x3_add2::IfcPropertySingleValue::NominalValue() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcValue>(true); } +void Ifc4x3_add2::IfcPropertySingleValue::setNominalValue(::Ifc4x3_add2::IfcValue* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcUnit* Ifc4x3_add2::IfcPropertySingleValue::Unit() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcUnit>(true); } +void Ifc4x3_add2::IfcPropertySingleValue::setUnit(::Ifc4x3_add2::IfcUnit* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPropertySingleValue::declaration() const { return *IFC4X3_ADD2_IfcPropertySingleValue_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPropertySingleValue::Class() { return *IFC4X3_ADD2_IfcPropertySingleValue_type; } +Ifc4x3_add2::IfcPropertySingleValue::IfcPropertySingleValue(IfcEntityInstanceData* e) : IfcSimpleProperty((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPropertySingleValue_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPropertySingleValue::IfcPropertySingleValue(std::string v1_Name, boost::optional< std::string > v2_Specification, ::Ifc4x3_add2::IfcValue* v3_NominalValue, ::Ifc4x3_add2::IfcUnit* v4_Unit) : IfcSimpleProperty((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPropertySingleValue_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Specification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Specification));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_NominalValue));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Unit));data_->setArgument(3,attr);} } + +// Function implementations for IfcPropertyTableValue +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > Ifc4x3_add2::IfcPropertyTableValue::DefiningValues() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(2); return es->as< ::Ifc4x3_add2::IfcValue >(); } +void Ifc4x3_add2::IfcPropertyTableValue::setDefiningValues(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(2,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > Ifc4x3_add2::IfcPropertyTableValue::DefinedValues() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(3); return es->as< ::Ifc4x3_add2::IfcValue >(); } +void Ifc4x3_add2::IfcPropertyTableValue::setDefinedValues(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcPropertyTableValue::Expression() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcPropertyTableValue::setExpression(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcUnit* Ifc4x3_add2::IfcPropertyTableValue::DefiningUnit() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcUnit>(true); } +void Ifc4x3_add2::IfcPropertyTableValue::setDefiningUnit(::Ifc4x3_add2::IfcUnit* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +::Ifc4x3_add2::IfcUnit* Ifc4x3_add2::IfcPropertyTableValue::DefinedUnit() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcUnit>(true); } +void Ifc4x3_add2::IfcPropertyTableValue::setDefinedUnit(::Ifc4x3_add2::IfcUnit* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +boost::optional< ::Ifc4x3_add2::IfcCurveInterpolationEnum::Value > Ifc4x3_add2::IfcPropertyTableValue::CurveInterpolation() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcCurveInterpolationEnum::FromString(*data_->getArgument(7)); } +void Ifc4x3_add2::IfcPropertyTableValue::setCurveInterpolation(boost::optional< ::Ifc4x3_add2::IfcCurveInterpolationEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcCurveInterpolationEnum::ToString(*v)));}data_->setArgument(7,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPropertyTableValue::declaration() const { return *IFC4X3_ADD2_IfcPropertyTableValue_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPropertyTableValue::Class() { return *IFC4X3_ADD2_IfcPropertyTableValue_type; } +Ifc4x3_add2::IfcPropertyTableValue::IfcPropertyTableValue(IfcEntityInstanceData* e) : IfcSimpleProperty((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPropertyTableValue_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPropertyTableValue::IfcPropertyTableValue(std::string v1_Name, boost::optional< std::string > v2_Specification, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > v3_DefiningValues, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > v4_DefinedValues, boost::optional< std::string > v5_Expression, ::Ifc4x3_add2::IfcUnit* v6_DefiningUnit, ::Ifc4x3_add2::IfcUnit* v7_DefinedUnit, boost::optional< ::Ifc4x3_add2::IfcCurveInterpolationEnum::Value > v8_CurveInterpolation) : IfcSimpleProperty((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPropertyTableValue_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Specification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Specification));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_DefiningValues) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_DefiningValues)->generalize());data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_DefinedValues) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_DefinedValues)->generalize());data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_Expression) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Expression));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_DefiningUnit));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_DefinedUnit));data_->setArgument(6,attr);} if (v8_CurveInterpolation) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v8_CurveInterpolation,::Ifc4x3_add2::IfcCurveInterpolationEnum::ToString(*v8_CurveInterpolation))));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcPropertyTemplate + +::Ifc4x3_add2::IfcComplexPropertyTemplate::list::ptr Ifc4x3_add2::IfcPropertyTemplate::PartOfComplexTemplate() const { return data_->getInverse(IFC4X3_ADD2_IfcComplexPropertyTemplate_type, 6)->as(); } +::Ifc4x3_add2::IfcPropertySetTemplate::list::ptr Ifc4x3_add2::IfcPropertyTemplate::PartOfPsetTemplate() const { return data_->getInverse(IFC4X3_ADD2_IfcPropertySetTemplate_type, 6)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcPropertyTemplate::declaration() const { return *IFC4X3_ADD2_IfcPropertyTemplate_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPropertyTemplate::Class() { return *IFC4X3_ADD2_IfcPropertyTemplate_type; } +Ifc4x3_add2::IfcPropertyTemplate::IfcPropertyTemplate(IfcEntityInstanceData* e) : IfcPropertyTemplateDefinition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPropertyTemplate_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPropertyTemplate::IfcPropertyTemplate(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description) : IfcPropertyTemplateDefinition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPropertyTemplate_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcPropertyTemplateDefinition + + +const IfcParse::entity& Ifc4x3_add2::IfcPropertyTemplateDefinition::declaration() const { return *IFC4X3_ADD2_IfcPropertyTemplateDefinition_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPropertyTemplateDefinition::Class() { return *IFC4X3_ADD2_IfcPropertyTemplateDefinition_type; } +Ifc4x3_add2::IfcPropertyTemplateDefinition::IfcPropertyTemplateDefinition(IfcEntityInstanceData* e) : IfcPropertyDefinition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPropertyTemplateDefinition_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPropertyTemplateDefinition::IfcPropertyTemplateDefinition(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description) : IfcPropertyDefinition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPropertyTemplateDefinition_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcProtectiveDevice +boost::optional< ::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::Value > Ifc4x3_add2::IfcProtectiveDevice::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcProtectiveDevice::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcProtectiveDevice::declaration() const { return *IFC4X3_ADD2_IfcProtectiveDevice_type; } +const IfcParse::entity& Ifc4x3_add2::IfcProtectiveDevice::Class() { return *IFC4X3_ADD2_IfcProtectiveDevice_type; } +Ifc4x3_add2::IfcProtectiveDevice::IfcProtectiveDevice(IfcEntityInstanceData* e) : IfcFlowController((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcProtectiveDevice_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcProtectiveDevice::IfcProtectiveDevice(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::Value > v9_PredefinedType) : IfcFlowController((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProtectiveDevice_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcProtectiveDeviceTrippingUnit +boost::optional< ::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::Value > Ifc4x3_add2::IfcProtectiveDeviceTrippingUnit::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcProtectiveDeviceTrippingUnit::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcProtectiveDeviceTrippingUnit::declaration() const { return *IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnit_type; } +const IfcParse::entity& Ifc4x3_add2::IfcProtectiveDeviceTrippingUnit::Class() { return *IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnit_type; } +Ifc4x3_add2::IfcProtectiveDeviceTrippingUnit::IfcProtectiveDeviceTrippingUnit(IfcEntityInstanceData* e) : IfcDistributionControlElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnit_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcProtectiveDeviceTrippingUnit::IfcProtectiveDeviceTrippingUnit(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::Value > v9_PredefinedType) : IfcDistributionControlElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnit_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcProtectiveDeviceTrippingUnitType +::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::Value Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitType::PredefinedType() const { return ::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitType::setPredefinedType(::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitType::declaration() const { return *IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnitType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitType::Class() { return *IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnitType_type; } +Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitType::IfcProtectiveDeviceTrippingUnitType(IfcEntityInstanceData* e) : IfcDistributionControlElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnitType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitType::IfcProtectiveDeviceTrippingUnitType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::Value v10_PredefinedType) : IfcDistributionControlElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProtectiveDeviceTrippingUnitType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcProtectiveDeviceType +::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::Value Ifc4x3_add2::IfcProtectiveDeviceType::PredefinedType() const { return ::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcProtectiveDeviceType::setPredefinedType(::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcProtectiveDeviceType::declaration() const { return *IFC4X3_ADD2_IfcProtectiveDeviceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcProtectiveDeviceType::Class() { return *IFC4X3_ADD2_IfcProtectiveDeviceType_type; } +Ifc4x3_add2::IfcProtectiveDeviceType::IfcProtectiveDeviceType(IfcEntityInstanceData* e) : IfcFlowControllerType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcProtectiveDeviceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcProtectiveDeviceType::IfcProtectiveDeviceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::Value v10_PredefinedType) : IfcFlowControllerType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcProtectiveDeviceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcPump +boost::optional< ::Ifc4x3_add2::IfcPumpTypeEnum::Value > Ifc4x3_add2::IfcPump::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcPumpTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcPump::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcPumpTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcPumpTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPump::declaration() const { return *IFC4X3_ADD2_IfcPump_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPump::Class() { return *IFC4X3_ADD2_IfcPump_type; } +Ifc4x3_add2::IfcPump::IfcPump(IfcEntityInstanceData* e) : IfcFlowMovingDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPump_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPump::IfcPump(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcPumpTypeEnum::Value > v9_PredefinedType) : IfcFlowMovingDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPump_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcPumpTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcPumpType +::Ifc4x3_add2::IfcPumpTypeEnum::Value Ifc4x3_add2::IfcPumpType::PredefinedType() const { return ::Ifc4x3_add2::IfcPumpTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcPumpType::setPredefinedType(::Ifc4x3_add2::IfcPumpTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcPumpTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcPumpType::declaration() const { return *IFC4X3_ADD2_IfcPumpType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcPumpType::Class() { return *IFC4X3_ADD2_IfcPumpType_type; } +Ifc4x3_add2::IfcPumpType::IfcPumpType(IfcEntityInstanceData* e) : IfcFlowMovingDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcPumpType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcPumpType::IfcPumpType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcPumpTypeEnum::Value v10_PredefinedType) : IfcFlowMovingDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcPumpType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcPumpTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcQuantityArea +double Ifc4x3_add2::IfcQuantityArea::AreaValue() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcQuantityArea::setAreaValue(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcQuantityArea::Formula() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcQuantityArea::setFormula(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcQuantityArea::declaration() const { return *IFC4X3_ADD2_IfcQuantityArea_type; } +const IfcParse::entity& Ifc4x3_add2::IfcQuantityArea::Class() { return *IFC4X3_ADD2_IfcQuantityArea_type; } +Ifc4x3_add2::IfcQuantityArea::IfcQuantityArea(IfcEntityInstanceData* e) : IfcPhysicalSimpleQuantity((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcQuantityArea_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcQuantityArea::IfcQuantityArea(std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcNamedUnit* v3_Unit, double v4_AreaValue, boost::optional< std::string > v5_Formula) : IfcPhysicalSimpleQuantity((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcQuantityArea_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Unit));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_AreaValue));data_->setArgument(3,attr);} if (v5_Formula) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Formula));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcQuantityCount +int Ifc4x3_add2::IfcQuantityCount::CountValue() const { int v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcQuantityCount::setCountValue(int v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcQuantityCount::Formula() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcQuantityCount::setFormula(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcQuantityCount::declaration() const { return *IFC4X3_ADD2_IfcQuantityCount_type; } +const IfcParse::entity& Ifc4x3_add2::IfcQuantityCount::Class() { return *IFC4X3_ADD2_IfcQuantityCount_type; } +Ifc4x3_add2::IfcQuantityCount::IfcQuantityCount(IfcEntityInstanceData* e) : IfcPhysicalSimpleQuantity((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcQuantityCount_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcQuantityCount::IfcQuantityCount(std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcNamedUnit* v3_Unit, int v4_CountValue, boost::optional< std::string > v5_Formula) : IfcPhysicalSimpleQuantity((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcQuantityCount_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Unit));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_CountValue));data_->setArgument(3,attr);} if (v5_Formula) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Formula));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcQuantityLength +double Ifc4x3_add2::IfcQuantityLength::LengthValue() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcQuantityLength::setLengthValue(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcQuantityLength::Formula() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcQuantityLength::setFormula(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcQuantityLength::declaration() const { return *IFC4X3_ADD2_IfcQuantityLength_type; } +const IfcParse::entity& Ifc4x3_add2::IfcQuantityLength::Class() { return *IFC4X3_ADD2_IfcQuantityLength_type; } +Ifc4x3_add2::IfcQuantityLength::IfcQuantityLength(IfcEntityInstanceData* e) : IfcPhysicalSimpleQuantity((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcQuantityLength_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcQuantityLength::IfcQuantityLength(std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcNamedUnit* v3_Unit, double v4_LengthValue, boost::optional< std::string > v5_Formula) : IfcPhysicalSimpleQuantity((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcQuantityLength_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Unit));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_LengthValue));data_->setArgument(3,attr);} if (v5_Formula) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Formula));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcQuantityNumber +double Ifc4x3_add2::IfcQuantityNumber::NumberValue() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcQuantityNumber::setNumberValue(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcQuantityNumber::Formula() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcQuantityNumber::setFormula(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcQuantityNumber::declaration() const { return *IFC4X3_ADD2_IfcQuantityNumber_type; } +const IfcParse::entity& Ifc4x3_add2::IfcQuantityNumber::Class() { return *IFC4X3_ADD2_IfcQuantityNumber_type; } +Ifc4x3_add2::IfcQuantityNumber::IfcQuantityNumber(IfcEntityInstanceData* e) : IfcPhysicalSimpleQuantity((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcQuantityNumber_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcQuantityNumber::IfcQuantityNumber(std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcNamedUnit* v3_Unit, double v4_NumberValue, boost::optional< std::string > v5_Formula) : IfcPhysicalSimpleQuantity((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcQuantityNumber_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Unit));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_NumberValue));data_->setArgument(3,attr);} if (v5_Formula) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Formula));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcQuantitySet + + +const IfcParse::entity& Ifc4x3_add2::IfcQuantitySet::declaration() const { return *IFC4X3_ADD2_IfcQuantitySet_type; } +const IfcParse::entity& Ifc4x3_add2::IfcQuantitySet::Class() { return *IFC4X3_ADD2_IfcQuantitySet_type; } +Ifc4x3_add2::IfcQuantitySet::IfcQuantitySet(IfcEntityInstanceData* e) : IfcPropertySetDefinition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcQuantitySet_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcQuantitySet::IfcQuantitySet(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description) : IfcPropertySetDefinition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcQuantitySet_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcQuantityTime +double Ifc4x3_add2::IfcQuantityTime::TimeValue() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcQuantityTime::setTimeValue(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcQuantityTime::Formula() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcQuantityTime::setFormula(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcQuantityTime::declaration() const { return *IFC4X3_ADD2_IfcQuantityTime_type; } +const IfcParse::entity& Ifc4x3_add2::IfcQuantityTime::Class() { return *IFC4X3_ADD2_IfcQuantityTime_type; } +Ifc4x3_add2::IfcQuantityTime::IfcQuantityTime(IfcEntityInstanceData* e) : IfcPhysicalSimpleQuantity((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcQuantityTime_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcQuantityTime::IfcQuantityTime(std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcNamedUnit* v3_Unit, double v4_TimeValue, boost::optional< std::string > v5_Formula) : IfcPhysicalSimpleQuantity((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcQuantityTime_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Unit));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_TimeValue));data_->setArgument(3,attr);} if (v5_Formula) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Formula));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcQuantityVolume +double Ifc4x3_add2::IfcQuantityVolume::VolumeValue() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcQuantityVolume::setVolumeValue(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcQuantityVolume::Formula() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcQuantityVolume::setFormula(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcQuantityVolume::declaration() const { return *IFC4X3_ADD2_IfcQuantityVolume_type; } +const IfcParse::entity& Ifc4x3_add2::IfcQuantityVolume::Class() { return *IFC4X3_ADD2_IfcQuantityVolume_type; } +Ifc4x3_add2::IfcQuantityVolume::IfcQuantityVolume(IfcEntityInstanceData* e) : IfcPhysicalSimpleQuantity((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcQuantityVolume_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcQuantityVolume::IfcQuantityVolume(std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcNamedUnit* v3_Unit, double v4_VolumeValue, boost::optional< std::string > v5_Formula) : IfcPhysicalSimpleQuantity((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcQuantityVolume_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Unit));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_VolumeValue));data_->setArgument(3,attr);} if (v5_Formula) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Formula));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcQuantityWeight +double Ifc4x3_add2::IfcQuantityWeight::WeightValue() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcQuantityWeight::setWeightValue(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcQuantityWeight::Formula() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcQuantityWeight::setFormula(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcQuantityWeight::declaration() const { return *IFC4X3_ADD2_IfcQuantityWeight_type; } +const IfcParse::entity& Ifc4x3_add2::IfcQuantityWeight::Class() { return *IFC4X3_ADD2_IfcQuantityWeight_type; } +Ifc4x3_add2::IfcQuantityWeight::IfcQuantityWeight(IfcEntityInstanceData* e) : IfcPhysicalSimpleQuantity((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcQuantityWeight_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcQuantityWeight::IfcQuantityWeight(std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcNamedUnit* v3_Unit, double v4_WeightValue, boost::optional< std::string > v5_Formula) : IfcPhysicalSimpleQuantity((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcQuantityWeight_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Unit));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_WeightValue));data_->setArgument(3,attr);} if (v5_Formula) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Formula));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcRail +boost::optional< ::Ifc4x3_add2::IfcRailTypeEnum::Value > Ifc4x3_add2::IfcRail::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcRailTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcRail::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcRailTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcRailTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRail::declaration() const { return *IFC4X3_ADD2_IfcRail_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRail::Class() { return *IFC4X3_ADD2_IfcRail_type; } +Ifc4x3_add2::IfcRail::IfcRail(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRail_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRail::IfcRail(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcRailTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRail_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcRailTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcRailType +::Ifc4x3_add2::IfcRailTypeEnum::Value Ifc4x3_add2::IfcRailType::PredefinedType() const { return ::Ifc4x3_add2::IfcRailTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcRailType::setPredefinedType(::Ifc4x3_add2::IfcRailTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcRailTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRailType::declaration() const { return *IFC4X3_ADD2_IfcRailType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRailType::Class() { return *IFC4X3_ADD2_IfcRailType_type; } +Ifc4x3_add2::IfcRailType::IfcRailType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRailType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRailType::IfcRailType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcRailTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRailType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcRailTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcRailing +boost::optional< ::Ifc4x3_add2::IfcRailingTypeEnum::Value > Ifc4x3_add2::IfcRailing::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcRailingTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcRailing::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcRailingTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcRailingTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRailing::declaration() const { return *IFC4X3_ADD2_IfcRailing_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRailing::Class() { return *IFC4X3_ADD2_IfcRailing_type; } +Ifc4x3_add2::IfcRailing::IfcRailing(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRailing_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRailing::IfcRailing(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcRailingTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRailing_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcRailingTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcRailingType +::Ifc4x3_add2::IfcRailingTypeEnum::Value Ifc4x3_add2::IfcRailingType::PredefinedType() const { return ::Ifc4x3_add2::IfcRailingTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcRailingType::setPredefinedType(::Ifc4x3_add2::IfcRailingTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcRailingTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRailingType::declaration() const { return *IFC4X3_ADD2_IfcRailingType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRailingType::Class() { return *IFC4X3_ADD2_IfcRailingType_type; } +Ifc4x3_add2::IfcRailingType::IfcRailingType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRailingType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRailingType::IfcRailingType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcRailingTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRailingType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcRailingTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcRailway +boost::optional< ::Ifc4x3_add2::IfcRailwayTypeEnum::Value > Ifc4x3_add2::IfcRailway::PredefinedType() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcRailwayTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcRailway::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcRailwayTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcRailwayTypeEnum::ToString(*v)));}data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRailway::declaration() const { return *IFC4X3_ADD2_IfcRailway_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRailway::Class() { return *IFC4X3_ADD2_IfcRailway_type; } +Ifc4x3_add2::IfcRailway::IfcRailway(IfcEntityInstanceData* e) : IfcFacility((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRailway_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRailway::IfcRailway(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, boost::optional< ::Ifc4x3_add2::IfcRailwayTypeEnum::Value > v10_PredefinedType) : IfcFacility((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRailway_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongName));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_CompositionType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_CompositionType,::Ifc4x3_add2::IfcElementCompositionEnum::ToString(*v9_CompositionType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v10_PredefinedType,::Ifc4x3_add2::IfcRailwayTypeEnum::ToString(*v10_PredefinedType))));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } } + +// Function implementations for IfcRailwayPart +boost::optional< ::Ifc4x3_add2::IfcRailwayPartTypeEnum::Value > Ifc4x3_add2::IfcRailwayPart::PredefinedType() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcRailwayPartTypeEnum::FromString(*data_->getArgument(10)); } +void Ifc4x3_add2::IfcRailwayPart::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcRailwayPartTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcRailwayPartTypeEnum::ToString(*v)));}data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRailwayPart::declaration() const { return *IFC4X3_ADD2_IfcRailwayPart_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRailwayPart::Class() { return *IFC4X3_ADD2_IfcRailwayPart_type; } +Ifc4x3_add2::IfcRailwayPart::IfcRailwayPart(IfcEntityInstanceData* e) : IfcFacilityPart((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRailwayPart_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRailwayPart::IfcRailwayPart(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, ::Ifc4x3_add2::IfcFacilityUsageEnum::Value v10_UsageType, boost::optional< ::Ifc4x3_add2::IfcRailwayPartTypeEnum::Value > v11_PredefinedType) : IfcFacilityPart((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRailwayPart_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongName));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_CompositionType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_CompositionType,::Ifc4x3_add2::IfcElementCompositionEnum::ToString(*v9_CompositionType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_UsageType,::Ifc4x3_add2::IfcFacilityUsageEnum::ToString(v10_UsageType))));data_->setArgument(9,attr);} if (v11_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v11_PredefinedType,::Ifc4x3_add2::IfcRailwayPartTypeEnum::ToString(*v11_PredefinedType))));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } } + +// Function implementations for IfcRamp +boost::optional< ::Ifc4x3_add2::IfcRampTypeEnum::Value > Ifc4x3_add2::IfcRamp::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcRampTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcRamp::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcRampTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcRampTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRamp::declaration() const { return *IFC4X3_ADD2_IfcRamp_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRamp::Class() { return *IFC4X3_ADD2_IfcRamp_type; } +Ifc4x3_add2::IfcRamp::IfcRamp(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRamp_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRamp::IfcRamp(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcRampTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRamp_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcRampTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcRampFlight +boost::optional< ::Ifc4x3_add2::IfcRampFlightTypeEnum::Value > Ifc4x3_add2::IfcRampFlight::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcRampFlightTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcRampFlight::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcRampFlightTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcRampFlightTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRampFlight::declaration() const { return *IFC4X3_ADD2_IfcRampFlight_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRampFlight::Class() { return *IFC4X3_ADD2_IfcRampFlight_type; } +Ifc4x3_add2::IfcRampFlight::IfcRampFlight(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRampFlight_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRampFlight::IfcRampFlight(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcRampFlightTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRampFlight_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcRampFlightTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcRampFlightType +::Ifc4x3_add2::IfcRampFlightTypeEnum::Value Ifc4x3_add2::IfcRampFlightType::PredefinedType() const { return ::Ifc4x3_add2::IfcRampFlightTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcRampFlightType::setPredefinedType(::Ifc4x3_add2::IfcRampFlightTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcRampFlightTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRampFlightType::declaration() const { return *IFC4X3_ADD2_IfcRampFlightType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRampFlightType::Class() { return *IFC4X3_ADD2_IfcRampFlightType_type; } +Ifc4x3_add2::IfcRampFlightType::IfcRampFlightType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRampFlightType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRampFlightType::IfcRampFlightType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcRampFlightTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRampFlightType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcRampFlightTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcRampType +::Ifc4x3_add2::IfcRampTypeEnum::Value Ifc4x3_add2::IfcRampType::PredefinedType() const { return ::Ifc4x3_add2::IfcRampTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcRampType::setPredefinedType(::Ifc4x3_add2::IfcRampTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcRampTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRampType::declaration() const { return *IFC4X3_ADD2_IfcRampType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRampType::Class() { return *IFC4X3_ADD2_IfcRampType_type; } +Ifc4x3_add2::IfcRampType::IfcRampType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRampType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRampType::IfcRampType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcRampTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRampType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcRampTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcRationalBSplineCurveWithKnots +std::vector< double > /*[2:?]*/ Ifc4x3_add2::IfcRationalBSplineCurveWithKnots::WeightsData() const { std::vector< double > /*[2:?]*/ v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcRationalBSplineCurveWithKnots::setWeightsData(std::vector< double > /*[2:?]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRationalBSplineCurveWithKnots::declaration() const { return *IFC4X3_ADD2_IfcRationalBSplineCurveWithKnots_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRationalBSplineCurveWithKnots::Class() { return *IFC4X3_ADD2_IfcRationalBSplineCurveWithKnots_type; } +Ifc4x3_add2::IfcRationalBSplineCurveWithKnots::IfcRationalBSplineCurveWithKnots(IfcEntityInstanceData* e) : IfcBSplineCurveWithKnots((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRationalBSplineCurveWithKnots_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRationalBSplineCurveWithKnots::IfcRationalBSplineCurveWithKnots(int v1_Degree, aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr v2_ControlPointsList, ::Ifc4x3_add2::IfcBSplineCurveForm::Value v3_CurveForm, boost::logic::tribool v4_ClosedCurve, boost::logic::tribool v5_SelfIntersect, std::vector< int > /*[2:?]*/ v6_KnotMultiplicities, std::vector< double > /*[2:?]*/ v7_Knots, ::Ifc4x3_add2::IfcKnotType::Value v8_KnotSpec, std::vector< double > /*[2:?]*/ v9_WeightsData) : IfcBSplineCurveWithKnots((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRationalBSplineCurveWithKnots_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Degree));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_ControlPointsList)->generalize());data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v3_CurveForm,::Ifc4x3_add2::IfcBSplineCurveForm::ToString(v3_CurveForm))));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_ClosedCurve));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_SelfIntersect));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_KnotMultiplicities));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Knots));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v8_KnotSpec,::Ifc4x3_add2::IfcKnotType::ToString(v8_KnotSpec))));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_WeightsData));data_->setArgument(8,attr);} } + +// Function implementations for IfcRationalBSplineSurfaceWithKnots +std::vector< std::vector< double > > Ifc4x3_add2::IfcRationalBSplineSurfaceWithKnots::WeightsData() const { std::vector< std::vector< double > > v = *data_->getArgument(12); return v; } +void Ifc4x3_add2::IfcRationalBSplineSurfaceWithKnots::setWeightsData(std::vector< std::vector< double > > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(12,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRationalBSplineSurfaceWithKnots::declaration() const { return *IFC4X3_ADD2_IfcRationalBSplineSurfaceWithKnots_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRationalBSplineSurfaceWithKnots::Class() { return *IFC4X3_ADD2_IfcRationalBSplineSurfaceWithKnots_type; } +Ifc4x3_add2::IfcRationalBSplineSurfaceWithKnots::IfcRationalBSplineSurfaceWithKnots(IfcEntityInstanceData* e) : IfcBSplineSurfaceWithKnots((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRationalBSplineSurfaceWithKnots_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRationalBSplineSurfaceWithKnots::IfcRationalBSplineSurfaceWithKnots(int v1_UDegree, int v2_VDegree, aggregate_of_aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr v3_ControlPointsList, ::Ifc4x3_add2::IfcBSplineSurfaceForm::Value v4_SurfaceForm, boost::logic::tribool v5_UClosed, boost::logic::tribool v6_VClosed, boost::logic::tribool v7_SelfIntersect, std::vector< int > /*[2:?]*/ v8_UMultiplicities, std::vector< int > /*[2:?]*/ v9_VMultiplicities, std::vector< double > /*[2:?]*/ v10_UKnots, std::vector< double > /*[2:?]*/ v11_VKnots, ::Ifc4x3_add2::IfcKnotType::Value v12_KnotSpec, std::vector< std::vector< double > > v13_WeightsData) : IfcBSplineSurfaceWithKnots((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRationalBSplineSurfaceWithKnots_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_UDegree));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_VDegree));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_ControlPointsList)->generalize());data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v4_SurfaceForm,::Ifc4x3_add2::IfcBSplineSurfaceForm::ToString(v4_SurfaceForm))));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_UClosed));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_VClosed));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_SelfIntersect));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_UMultiplicities));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_VMultiplicities));data_->setArgument(8,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v10_UKnots));data_->setArgument(9,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v11_VKnots));data_->setArgument(10,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v12_KnotSpec,::Ifc4x3_add2::IfcKnotType::ToString(v12_KnotSpec))));data_->setArgument(11,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v13_WeightsData));data_->setArgument(12,attr);} } + +// Function implementations for IfcRectangleHollowProfileDef +double Ifc4x3_add2::IfcRectangleHollowProfileDef::WallThickness() const { double v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcRectangleHollowProfileDef::setWallThickness(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +boost::optional< double > Ifc4x3_add2::IfcRectangleHollowProfileDef::InnerFilletRadius() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcRectangleHollowProfileDef::setInnerFilletRadius(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } +boost::optional< double > Ifc4x3_add2::IfcRectangleHollowProfileDef::OuterFilletRadius() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } double v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcRectangleHollowProfileDef::setOuterFilletRadius(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRectangleHollowProfileDef::declaration() const { return *IFC4X3_ADD2_IfcRectangleHollowProfileDef_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRectangleHollowProfileDef::Class() { return *IFC4X3_ADD2_IfcRectangleHollowProfileDef_type; } +Ifc4x3_add2::IfcRectangleHollowProfileDef::IfcRectangleHollowProfileDef(IfcEntityInstanceData* e) : IfcRectangleProfileDef((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRectangleHollowProfileDef_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRectangleHollowProfileDef::IfcRectangleHollowProfileDef(::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_XDim, double v5_YDim, double v6_WallThickness, boost::optional< double > v7_InnerFilletRadius, boost::optional< double > v8_OuterFilletRadius) : IfcRectangleProfileDef((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRectangleHollowProfileDef_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_ProfileType,::Ifc4x3_add2::IfcProfileTypeEnum::ToString(v1_ProfileType))));data_->setArgument(0,attr);} if (v2_ProfileName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ProfileName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Position));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_XDim));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_YDim));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_WallThickness));data_->setArgument(5,attr);} if (v7_InnerFilletRadius) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_InnerFilletRadius));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_OuterFilletRadius) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_OuterFilletRadius));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcRectangleProfileDef +double Ifc4x3_add2::IfcRectangleProfileDef::XDim() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcRectangleProfileDef::setXDim(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +double Ifc4x3_add2::IfcRectangleProfileDef::YDim() const { double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcRectangleProfileDef::setYDim(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRectangleProfileDef::declaration() const { return *IFC4X3_ADD2_IfcRectangleProfileDef_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRectangleProfileDef::Class() { return *IFC4X3_ADD2_IfcRectangleProfileDef_type; } +Ifc4x3_add2::IfcRectangleProfileDef::IfcRectangleProfileDef(IfcEntityInstanceData* e) : IfcParameterizedProfileDef((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRectangleProfileDef_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRectangleProfileDef::IfcRectangleProfileDef(::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_XDim, double v5_YDim) : IfcParameterizedProfileDef((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRectangleProfileDef_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_ProfileType,::Ifc4x3_add2::IfcProfileTypeEnum::ToString(v1_ProfileType))));data_->setArgument(0,attr);} if (v2_ProfileName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ProfileName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Position));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_XDim));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_YDim));data_->setArgument(4,attr);} } + +// Function implementations for IfcRectangularPyramid +double Ifc4x3_add2::IfcRectangularPyramid::XLength() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcRectangularPyramid::setXLength(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +double Ifc4x3_add2::IfcRectangularPyramid::YLength() const { double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcRectangularPyramid::setYLength(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +double Ifc4x3_add2::IfcRectangularPyramid::Height() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcRectangularPyramid::setHeight(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRectangularPyramid::declaration() const { return *IFC4X3_ADD2_IfcRectangularPyramid_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRectangularPyramid::Class() { return *IFC4X3_ADD2_IfcRectangularPyramid_type; } +Ifc4x3_add2::IfcRectangularPyramid::IfcRectangularPyramid(IfcEntityInstanceData* e) : IfcCsgPrimitive3D((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRectangularPyramid_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRectangularPyramid::IfcRectangularPyramid(::Ifc4x3_add2::IfcAxis2Placement3D* v1_Position, double v2_XLength, double v3_YLength, double v4_Height) : IfcCsgPrimitive3D((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRectangularPyramid_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Position));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_XLength));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_YLength));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Height));data_->setArgument(3,attr);} } + +// Function implementations for IfcRectangularTrimmedSurface +::Ifc4x3_add2::IfcSurface* Ifc4x3_add2::IfcRectangularTrimmedSurface::BasisSurface() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcSurface>(true); } +void Ifc4x3_add2::IfcRectangularTrimmedSurface::setBasisSurface(::Ifc4x3_add2::IfcSurface* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +double Ifc4x3_add2::IfcRectangularTrimmedSurface::U1() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcRectangularTrimmedSurface::setU1(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +double Ifc4x3_add2::IfcRectangularTrimmedSurface::V1() const { double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcRectangularTrimmedSurface::setV1(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +double Ifc4x3_add2::IfcRectangularTrimmedSurface::U2() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcRectangularTrimmedSurface::setU2(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +double Ifc4x3_add2::IfcRectangularTrimmedSurface::V2() const { double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcRectangularTrimmedSurface::setV2(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +bool Ifc4x3_add2::IfcRectangularTrimmedSurface::Usense() const { bool v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcRectangularTrimmedSurface::setUsense(bool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +bool Ifc4x3_add2::IfcRectangularTrimmedSurface::Vsense() const { bool v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcRectangularTrimmedSurface::setVsense(bool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRectangularTrimmedSurface::declaration() const { return *IFC4X3_ADD2_IfcRectangularTrimmedSurface_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRectangularTrimmedSurface::Class() { return *IFC4X3_ADD2_IfcRectangularTrimmedSurface_type; } +Ifc4x3_add2::IfcRectangularTrimmedSurface::IfcRectangularTrimmedSurface(IfcEntityInstanceData* e) : IfcBoundedSurface((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRectangularTrimmedSurface_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRectangularTrimmedSurface::IfcRectangularTrimmedSurface(::Ifc4x3_add2::IfcSurface* v1_BasisSurface, double v2_U1, double v3_V1, double v4_U2, double v5_V2, bool v6_Usense, bool v7_Vsense) : IfcBoundedSurface((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRectangularTrimmedSurface_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_BasisSurface));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_U1));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_V1));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_U2));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_V2));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_Usense));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Vsense));data_->setArgument(6,attr);} } + +// Function implementations for IfcRecurrencePattern +::Ifc4x3_add2::IfcRecurrenceTypeEnum::Value Ifc4x3_add2::IfcRecurrencePattern::RecurrenceType() const { return ::Ifc4x3_add2::IfcRecurrenceTypeEnum::FromString(*data_->getArgument(0)); } +void Ifc4x3_add2::IfcRecurrencePattern::setRecurrenceType(::Ifc4x3_add2::IfcRecurrenceTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcRecurrenceTypeEnum::ToString(v)));data_->setArgument(0,attr);} } +boost::optional< std::vector< int > /*[1:?]*/ > Ifc4x3_add2::IfcRecurrencePattern::DayComponent() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::vector< int > /*[1:?]*/ v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcRecurrencePattern::setDayComponent(boost::optional< std::vector< int > /*[1:?]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< std::vector< int > /*[1:?]*/ > Ifc4x3_add2::IfcRecurrencePattern::WeekdayComponent() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::vector< int > /*[1:?]*/ v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcRecurrencePattern::setWeekdayComponent(boost::optional< std::vector< int > /*[1:?]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< std::vector< int > /*[1:?]*/ > Ifc4x3_add2::IfcRecurrencePattern::MonthComponent() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } std::vector< int > /*[1:?]*/ v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcRecurrencePattern::setMonthComponent(boost::optional< std::vector< int > /*[1:?]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +boost::optional< int > Ifc4x3_add2::IfcRecurrencePattern::Position() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } int v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcRecurrencePattern::setPosition(boost::optional< int > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< int > Ifc4x3_add2::IfcRecurrencePattern::Interval() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } int v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcRecurrencePattern::setInterval(boost::optional< int > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< int > Ifc4x3_add2::IfcRecurrencePattern::Occurrences() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } int v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcRecurrencePattern::setOccurrences(boost::optional< int > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcTimePeriod >::ptr > Ifc4x3_add2::IfcRecurrencePattern::TimePeriods() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(7); return es->as< ::Ifc4x3_add2::IfcTimePeriod >(); } +void Ifc4x3_add2::IfcRecurrencePattern::setTimePeriods(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcTimePeriod >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(7,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRecurrencePattern::declaration() const { return *IFC4X3_ADD2_IfcRecurrencePattern_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRecurrencePattern::Class() { return *IFC4X3_ADD2_IfcRecurrencePattern_type; } +Ifc4x3_add2::IfcRecurrencePattern::IfcRecurrencePattern(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRecurrencePattern_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRecurrencePattern::IfcRecurrencePattern(::Ifc4x3_add2::IfcRecurrenceTypeEnum::Value v1_RecurrenceType, boost::optional< std::vector< int > /*[1:?]*/ > v2_DayComponent, boost::optional< std::vector< int > /*[1:?]*/ > v3_WeekdayComponent, boost::optional< std::vector< int > /*[1:?]*/ > v4_MonthComponent, boost::optional< int > v5_Position, boost::optional< int > v6_Interval, boost::optional< int > v7_Occurrences, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcTimePeriod >::ptr > v8_TimePeriods) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRecurrencePattern_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_RecurrenceType,::Ifc4x3_add2::IfcRecurrenceTypeEnum::ToString(v1_RecurrenceType))));data_->setArgument(0,attr);} if (v2_DayComponent) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_DayComponent));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_WeekdayComponent) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_WeekdayComponent));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_MonthComponent) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_MonthComponent));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_Position) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Position));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Interval) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Interval));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_Occurrences) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_Occurrences));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_TimePeriods) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_TimePeriods)->generalize());data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcReference +boost::optional< std::string > Ifc4x3_add2::IfcReference::TypeIdentifier() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcReference::setTypeIdentifier(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcReference::AttributeIdentifier() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcReference::setAttributeIdentifier(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcReference::InstanceName() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcReference::setInstanceName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< std::vector< int > /*[1:?]*/ > Ifc4x3_add2::IfcReference::ListPositions() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } std::vector< int > /*[1:?]*/ v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcReference::setListPositions(boost::optional< std::vector< int > /*[1:?]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +::Ifc4x3_add2::IfcReference* Ifc4x3_add2::IfcReference::InnerReference() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcReference>(true); } +void Ifc4x3_add2::IfcReference::setInnerReference(::Ifc4x3_add2::IfcReference* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcReference::declaration() const { return *IFC4X3_ADD2_IfcReference_type; } +const IfcParse::entity& Ifc4x3_add2::IfcReference::Class() { return *IFC4X3_ADD2_IfcReference_type; } +Ifc4x3_add2::IfcReference::IfcReference(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcReference_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcReference::IfcReference(boost::optional< std::string > v1_TypeIdentifier, boost::optional< std::string > v2_AttributeIdentifier, boost::optional< std::string > v3_InstanceName, boost::optional< std::vector< int > /*[1:?]*/ > v4_ListPositions, ::Ifc4x3_add2::IfcReference* v5_InnerReference) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReference_type); if (v1_TypeIdentifier) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_TypeIdentifier));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_AttributeIdentifier) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_AttributeIdentifier));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_InstanceName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_InstanceName));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_ListPositions) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_ListPositions));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_InnerReference));data_->setArgument(4,attr);} } + +// Function implementations for IfcReferent +boost::optional< ::Ifc4x3_add2::IfcReferentTypeEnum::Value > Ifc4x3_add2::IfcReferent::PredefinedType() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcReferentTypeEnum::FromString(*data_->getArgument(7)); } +void Ifc4x3_add2::IfcReferent::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcReferentTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcReferentTypeEnum::ToString(*v)));}data_->setArgument(7,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcReferent::declaration() const { return *IFC4X3_ADD2_IfcReferent_type; } +const IfcParse::entity& Ifc4x3_add2::IfcReferent::Class() { return *IFC4X3_ADD2_IfcReferent_type; } +Ifc4x3_add2::IfcReferent::IfcReferent(IfcEntityInstanceData* e) : IfcPositioningElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcReferent_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcReferent::IfcReferent(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< ::Ifc4x3_add2::IfcReferentTypeEnum::Value > v8_PredefinedType) : IfcPositioningElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReferent_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v8_PredefinedType,::Ifc4x3_add2::IfcReferentTypeEnum::ToString(*v8_PredefinedType))));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcRegularTimeSeries +double Ifc4x3_add2::IfcRegularTimeSeries::TimeStep() const { double v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcRegularTimeSeries::setTimeStep(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(8,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcTimeSeriesValue >::ptr Ifc4x3_add2::IfcRegularTimeSeries::Values() const { aggregate_of_instance::ptr es = *data_->getArgument(9); return es->as< ::Ifc4x3_add2::IfcTimeSeriesValue >(); } +void Ifc4x3_add2::IfcRegularTimeSeries::setValues(aggregate_of< ::Ifc4x3_add2::IfcTimeSeriesValue >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRegularTimeSeries::declaration() const { return *IFC4X3_ADD2_IfcRegularTimeSeries_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRegularTimeSeries::Class() { return *IFC4X3_ADD2_IfcRegularTimeSeries_type; } +Ifc4x3_add2::IfcRegularTimeSeries::IfcRegularTimeSeries(IfcEntityInstanceData* e) : IfcTimeSeries((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRegularTimeSeries_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRegularTimeSeries::IfcRegularTimeSeries(std::string v1_Name, boost::optional< std::string > v2_Description, std::string v3_StartTime, std::string v4_EndTime, ::Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::Value v5_TimeSeriesDataType, ::Ifc4x3_add2::IfcDataOriginEnum::Value v6_DataOrigin, boost::optional< std::string > v7_UserDefinedDataOrigin, ::Ifc4x3_add2::IfcUnit* v8_Unit, double v9_TimeStep, aggregate_of< ::Ifc4x3_add2::IfcTimeSeriesValue >::ptr v10_Values) : IfcTimeSeries((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRegularTimeSeries_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_StartTime));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_EndTime));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v5_TimeSeriesDataType,::Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::ToString(v5_TimeSeriesDataType))));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v6_DataOrigin,::Ifc4x3_add2::IfcDataOriginEnum::ToString(v6_DataOrigin))));data_->setArgument(5,attr);} if (v7_UserDefinedDataOrigin) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_UserDefinedDataOrigin));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_Unit));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_TimeStep));data_->setArgument(8,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v10_Values)->generalize());data_->setArgument(9,attr);} } + +// Function implementations for IfcReinforcedSoil +boost::optional< ::Ifc4x3_add2::IfcReinforcedSoilTypeEnum::Value > Ifc4x3_add2::IfcReinforcedSoil::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcReinforcedSoilTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcReinforcedSoil::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcReinforcedSoilTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcReinforcedSoilTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcReinforcedSoil::declaration() const { return *IFC4X3_ADD2_IfcReinforcedSoil_type; } +const IfcParse::entity& Ifc4x3_add2::IfcReinforcedSoil::Class() { return *IFC4X3_ADD2_IfcReinforcedSoil_type; } +Ifc4x3_add2::IfcReinforcedSoil::IfcReinforcedSoil(IfcEntityInstanceData* e) : IfcEarthworksElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcReinforcedSoil_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcReinforcedSoil::IfcReinforcedSoil(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcReinforcedSoilTypeEnum::Value > v9_PredefinedType) : IfcEarthworksElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReinforcedSoil_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcReinforcedSoilTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcReinforcementBarProperties +double Ifc4x3_add2::IfcReinforcementBarProperties::TotalCrossSectionArea() const { double v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcReinforcementBarProperties::setTotalCrossSectionArea(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +std::string Ifc4x3_add2::IfcReinforcementBarProperties::SteelGrade() const { std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcReinforcementBarProperties::setSteelGrade(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +boost::optional< ::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::Value > Ifc4x3_add2::IfcReinforcementBarProperties::BarSurface() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::FromString(*data_->getArgument(2)); } +void Ifc4x3_add2::IfcReinforcementBarProperties::setBarSurface(boost::optional< ::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::ToString(*v)));}data_->setArgument(2,attr);} } +boost::optional< double > Ifc4x3_add2::IfcReinforcementBarProperties::EffectiveDepth() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcReinforcementBarProperties::setEffectiveDepth(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +boost::optional< double > Ifc4x3_add2::IfcReinforcementBarProperties::NominalBarDiameter() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcReinforcementBarProperties::setNominalBarDiameter(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< int > Ifc4x3_add2::IfcReinforcementBarProperties::BarCount() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } int v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcReinforcementBarProperties::setBarCount(boost::optional< int > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcReinforcementBarProperties::declaration() const { return *IFC4X3_ADD2_IfcReinforcementBarProperties_type; } +const IfcParse::entity& Ifc4x3_add2::IfcReinforcementBarProperties::Class() { return *IFC4X3_ADD2_IfcReinforcementBarProperties_type; } +Ifc4x3_add2::IfcReinforcementBarProperties::IfcReinforcementBarProperties(IfcEntityInstanceData* e) : IfcPreDefinedProperties((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcReinforcementBarProperties_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcReinforcementBarProperties::IfcReinforcementBarProperties(double v1_TotalCrossSectionArea, std::string v2_SteelGrade, boost::optional< ::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::Value > v3_BarSurface, boost::optional< double > v4_EffectiveDepth, boost::optional< double > v5_NominalBarDiameter, boost::optional< int > v6_BarCount) : IfcPreDefinedProperties((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReinforcementBarProperties_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_TotalCrossSectionArea));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_SteelGrade));data_->setArgument(1,attr);} if (v3_BarSurface) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v3_BarSurface,::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::ToString(*v3_BarSurface))));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_EffectiveDepth) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_EffectiveDepth));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_NominalBarDiameter) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_NominalBarDiameter));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_BarCount) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_BarCount));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } } + +// Function implementations for IfcReinforcementDefinitionProperties +boost::optional< std::string > Ifc4x3_add2::IfcReinforcementDefinitionProperties::DefinitionType() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcReinforcementDefinitionProperties::setDefinitionType(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcSectionReinforcementProperties >::ptr Ifc4x3_add2::IfcReinforcementDefinitionProperties::ReinforcementSectionDefinitions() const { aggregate_of_instance::ptr es = *data_->getArgument(5); return es->as< ::Ifc4x3_add2::IfcSectionReinforcementProperties >(); } +void Ifc4x3_add2::IfcReinforcementDefinitionProperties::setReinforcementSectionDefinitions(aggregate_of< ::Ifc4x3_add2::IfcSectionReinforcementProperties >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcReinforcementDefinitionProperties::declaration() const { return *IFC4X3_ADD2_IfcReinforcementDefinitionProperties_type; } +const IfcParse::entity& Ifc4x3_add2::IfcReinforcementDefinitionProperties::Class() { return *IFC4X3_ADD2_IfcReinforcementDefinitionProperties_type; } +Ifc4x3_add2::IfcReinforcementDefinitionProperties::IfcReinforcementDefinitionProperties(IfcEntityInstanceData* e) : IfcPreDefinedPropertySet((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcReinforcementDefinitionProperties_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcReinforcementDefinitionProperties::IfcReinforcementDefinitionProperties(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_DefinitionType, aggregate_of< ::Ifc4x3_add2::IfcSectionReinforcementProperties >::ptr v6_ReinforcementSectionDefinitions) : IfcPreDefinedPropertySet((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReinforcementDefinitionProperties_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_DefinitionType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_DefinitionType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ReinforcementSectionDefinitions)->generalize());data_->setArgument(5,attr);} } + +// Function implementations for IfcReinforcingBar +boost::optional< double > Ifc4x3_add2::IfcReinforcingBar::NominalDiameter() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } double v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcReinforcingBar::setNominalDiameter(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(9,attr);} } +boost::optional< double > Ifc4x3_add2::IfcReinforcingBar::CrossSectionArea() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } double v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcReinforcingBar::setCrossSectionArea(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } +boost::optional< double > Ifc4x3_add2::IfcReinforcingBar::BarLength() const { if(!data_->getArgument(11) || data_->getArgument(11)->isNull()) { return boost::none; } double v = *data_->getArgument(11); return v; } +void Ifc4x3_add2::IfcReinforcingBar::setBarLength(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(11,attr);} } +boost::optional< ::Ifc4x3_add2::IfcReinforcingBarTypeEnum::Value > Ifc4x3_add2::IfcReinforcingBar::PredefinedType() const { if(!data_->getArgument(12) || data_->getArgument(12)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcReinforcingBarTypeEnum::FromString(*data_->getArgument(12)); } +void Ifc4x3_add2::IfcReinforcingBar::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcReinforcingBarTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcReinforcingBarTypeEnum::ToString(*v)));}data_->setArgument(12,attr);} } +boost::optional< ::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::Value > Ifc4x3_add2::IfcReinforcingBar::BarSurface() const { if(!data_->getArgument(13) || data_->getArgument(13)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::FromString(*data_->getArgument(13)); } +void Ifc4x3_add2::IfcReinforcingBar::setBarSurface(boost::optional< ::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::ToString(*v)));}data_->setArgument(13,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcReinforcingBar::declaration() const { return *IFC4X3_ADD2_IfcReinforcingBar_type; } +const IfcParse::entity& Ifc4x3_add2::IfcReinforcingBar::Class() { return *IFC4X3_ADD2_IfcReinforcingBar_type; } +Ifc4x3_add2::IfcReinforcingBar::IfcReinforcingBar(IfcEntityInstanceData* e) : IfcReinforcingElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcReinforcingBar_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcReinforcingBar::IfcReinforcingBar(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_SteelGrade, boost::optional< double > v10_NominalDiameter, boost::optional< double > v11_CrossSectionArea, boost::optional< double > v12_BarLength, boost::optional< ::Ifc4x3_add2::IfcReinforcingBarTypeEnum::Value > v13_PredefinedType, boost::optional< ::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::Value > v14_BarSurface) : IfcReinforcingElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReinforcingBar_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_SteelGrade) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_SteelGrade));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_NominalDiameter) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_NominalDiameter));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_CrossSectionArea) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_CrossSectionArea));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } if (v12_BarLength) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v12_BarLength));data_->setArgument(11,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(11, attr); } if (v13_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v13_PredefinedType,::Ifc4x3_add2::IfcReinforcingBarTypeEnum::ToString(*v13_PredefinedType))));data_->setArgument(12,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(12, attr); } if (v14_BarSurface) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v14_BarSurface,::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::ToString(*v14_BarSurface))));data_->setArgument(13,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(13, attr); } } + +// Function implementations for IfcReinforcingBarType +::Ifc4x3_add2::IfcReinforcingBarTypeEnum::Value Ifc4x3_add2::IfcReinforcingBarType::PredefinedType() const { return ::Ifc4x3_add2::IfcReinforcingBarTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcReinforcingBarType::setPredefinedType(::Ifc4x3_add2::IfcReinforcingBarTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcReinforcingBarTypeEnum::ToString(v)));data_->setArgument(9,attr);} } +boost::optional< double > Ifc4x3_add2::IfcReinforcingBarType::NominalDiameter() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } double v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcReinforcingBarType::setNominalDiameter(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } +boost::optional< double > Ifc4x3_add2::IfcReinforcingBarType::CrossSectionArea() const { if(!data_->getArgument(11) || data_->getArgument(11)->isNull()) { return boost::none; } double v = *data_->getArgument(11); return v; } +void Ifc4x3_add2::IfcReinforcingBarType::setCrossSectionArea(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(11,attr);} } +boost::optional< double > Ifc4x3_add2::IfcReinforcingBarType::BarLength() const { if(!data_->getArgument(12) || data_->getArgument(12)->isNull()) { return boost::none; } double v = *data_->getArgument(12); return v; } +void Ifc4x3_add2::IfcReinforcingBarType::setBarLength(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(12,attr);} } +boost::optional< ::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::Value > Ifc4x3_add2::IfcReinforcingBarType::BarSurface() const { if(!data_->getArgument(13) || data_->getArgument(13)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::FromString(*data_->getArgument(13)); } +void Ifc4x3_add2::IfcReinforcingBarType::setBarSurface(boost::optional< ::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::ToString(*v)));}data_->setArgument(13,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcReinforcingBarType::BendingShapeCode() const { if(!data_->getArgument(14) || data_->getArgument(14)->isNull()) { return boost::none; } std::string v = *data_->getArgument(14); return v; } +void Ifc4x3_add2::IfcReinforcingBarType::setBendingShapeCode(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(14,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcBendingParameterSelect >::ptr > Ifc4x3_add2::IfcReinforcingBarType::BendingParameters() const { if(!data_->getArgument(15) || data_->getArgument(15)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(15); return es->as< ::Ifc4x3_add2::IfcBendingParameterSelect >(); } +void Ifc4x3_add2::IfcReinforcingBarType::setBendingParameters(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcBendingParameterSelect >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(15,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcReinforcingBarType::declaration() const { return *IFC4X3_ADD2_IfcReinforcingBarType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcReinforcingBarType::Class() { return *IFC4X3_ADD2_IfcReinforcingBarType_type; } +Ifc4x3_add2::IfcReinforcingBarType::IfcReinforcingBarType(IfcEntityInstanceData* e) : IfcReinforcingElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcReinforcingBarType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcReinforcingBarType::IfcReinforcingBarType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcReinforcingBarTypeEnum::Value v10_PredefinedType, boost::optional< double > v11_NominalDiameter, boost::optional< double > v12_CrossSectionArea, boost::optional< double > v13_BarLength, boost::optional< ::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::Value > v14_BarSurface, boost::optional< std::string > v15_BendingShapeCode, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcBendingParameterSelect >::ptr > v16_BendingParameters) : IfcReinforcingElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReinforcingBarType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcReinforcingBarTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} if (v11_NominalDiameter) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_NominalDiameter));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } if (v12_CrossSectionArea) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v12_CrossSectionArea));data_->setArgument(11,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(11, attr); } if (v13_BarLength) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v13_BarLength));data_->setArgument(12,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(12, attr); } if (v14_BarSurface) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v14_BarSurface,::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::ToString(*v14_BarSurface))));data_->setArgument(13,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(13, attr); } if (v15_BendingShapeCode) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v15_BendingShapeCode));data_->setArgument(14,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(14, attr); } if (v16_BendingParameters) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v16_BendingParameters)->generalize());data_->setArgument(15,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(15, attr); } } + +// Function implementations for IfcReinforcingElement +boost::optional< std::string > Ifc4x3_add2::IfcReinforcingElement::SteelGrade() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } std::string v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcReinforcingElement::setSteelGrade(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcReinforcingElement::declaration() const { return *IFC4X3_ADD2_IfcReinforcingElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcReinforcingElement::Class() { return *IFC4X3_ADD2_IfcReinforcingElement_type; } +Ifc4x3_add2::IfcReinforcingElement::IfcReinforcingElement(IfcEntityInstanceData* e) : IfcElementComponent((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcReinforcingElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcReinforcingElement::IfcReinforcingElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_SteelGrade) : IfcElementComponent((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReinforcingElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_SteelGrade) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_SteelGrade));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcReinforcingElementType + + +const IfcParse::entity& Ifc4x3_add2::IfcReinforcingElementType::declaration() const { return *IFC4X3_ADD2_IfcReinforcingElementType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcReinforcingElementType::Class() { return *IFC4X3_ADD2_IfcReinforcingElementType_type; } +Ifc4x3_add2::IfcReinforcingElementType::IfcReinforcingElementType(IfcEntityInstanceData* e) : IfcElementComponentType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcReinforcingElementType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcReinforcingElementType::IfcReinforcingElementType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcElementComponentType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReinforcingElementType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcReinforcingMesh +boost::optional< double > Ifc4x3_add2::IfcReinforcingMesh::MeshLength() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } double v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcReinforcingMesh::setMeshLength(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(9,attr);} } +boost::optional< double > Ifc4x3_add2::IfcReinforcingMesh::MeshWidth() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } double v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcReinforcingMesh::setMeshWidth(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } +boost::optional< double > Ifc4x3_add2::IfcReinforcingMesh::LongitudinalBarNominalDiameter() const { if(!data_->getArgument(11) || data_->getArgument(11)->isNull()) { return boost::none; } double v = *data_->getArgument(11); return v; } +void Ifc4x3_add2::IfcReinforcingMesh::setLongitudinalBarNominalDiameter(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(11,attr);} } +boost::optional< double > Ifc4x3_add2::IfcReinforcingMesh::TransverseBarNominalDiameter() const { if(!data_->getArgument(12) || data_->getArgument(12)->isNull()) { return boost::none; } double v = *data_->getArgument(12); return v; } +void Ifc4x3_add2::IfcReinforcingMesh::setTransverseBarNominalDiameter(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(12,attr);} } +boost::optional< double > Ifc4x3_add2::IfcReinforcingMesh::LongitudinalBarCrossSectionArea() const { if(!data_->getArgument(13) || data_->getArgument(13)->isNull()) { return boost::none; } double v = *data_->getArgument(13); return v; } +void Ifc4x3_add2::IfcReinforcingMesh::setLongitudinalBarCrossSectionArea(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(13,attr);} } +boost::optional< double > Ifc4x3_add2::IfcReinforcingMesh::TransverseBarCrossSectionArea() const { if(!data_->getArgument(14) || data_->getArgument(14)->isNull()) { return boost::none; } double v = *data_->getArgument(14); return v; } +void Ifc4x3_add2::IfcReinforcingMesh::setTransverseBarCrossSectionArea(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(14,attr);} } +boost::optional< double > Ifc4x3_add2::IfcReinforcingMesh::LongitudinalBarSpacing() const { if(!data_->getArgument(15) || data_->getArgument(15)->isNull()) { return boost::none; } double v = *data_->getArgument(15); return v; } +void Ifc4x3_add2::IfcReinforcingMesh::setLongitudinalBarSpacing(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(15,attr);} } +boost::optional< double > Ifc4x3_add2::IfcReinforcingMesh::TransverseBarSpacing() const { if(!data_->getArgument(16) || data_->getArgument(16)->isNull()) { return boost::none; } double v = *data_->getArgument(16); return v; } +void Ifc4x3_add2::IfcReinforcingMesh::setTransverseBarSpacing(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(16,attr);} } +boost::optional< ::Ifc4x3_add2::IfcReinforcingMeshTypeEnum::Value > Ifc4x3_add2::IfcReinforcingMesh::PredefinedType() const { if(!data_->getArgument(17) || data_->getArgument(17)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcReinforcingMeshTypeEnum::FromString(*data_->getArgument(17)); } +void Ifc4x3_add2::IfcReinforcingMesh::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcReinforcingMeshTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcReinforcingMeshTypeEnum::ToString(*v)));}data_->setArgument(17,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcReinforcingMesh::declaration() const { return *IFC4X3_ADD2_IfcReinforcingMesh_type; } +const IfcParse::entity& Ifc4x3_add2::IfcReinforcingMesh::Class() { return *IFC4X3_ADD2_IfcReinforcingMesh_type; } +Ifc4x3_add2::IfcReinforcingMesh::IfcReinforcingMesh(IfcEntityInstanceData* e) : IfcReinforcingElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcReinforcingMesh_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcReinforcingMesh::IfcReinforcingMesh(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_SteelGrade, boost::optional< double > v10_MeshLength, boost::optional< double > v11_MeshWidth, boost::optional< double > v12_LongitudinalBarNominalDiameter, boost::optional< double > v13_TransverseBarNominalDiameter, boost::optional< double > v14_LongitudinalBarCrossSectionArea, boost::optional< double > v15_TransverseBarCrossSectionArea, boost::optional< double > v16_LongitudinalBarSpacing, boost::optional< double > v17_TransverseBarSpacing, boost::optional< ::Ifc4x3_add2::IfcReinforcingMeshTypeEnum::Value > v18_PredefinedType) : IfcReinforcingElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReinforcingMesh_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_SteelGrade) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_SteelGrade));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_MeshLength) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_MeshLength));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_MeshWidth) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_MeshWidth));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } if (v12_LongitudinalBarNominalDiameter) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v12_LongitudinalBarNominalDiameter));data_->setArgument(11,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(11, attr); } if (v13_TransverseBarNominalDiameter) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v13_TransverseBarNominalDiameter));data_->setArgument(12,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(12, attr); } if (v14_LongitudinalBarCrossSectionArea) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v14_LongitudinalBarCrossSectionArea));data_->setArgument(13,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(13, attr); } if (v15_TransverseBarCrossSectionArea) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v15_TransverseBarCrossSectionArea));data_->setArgument(14,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(14, attr); } if (v16_LongitudinalBarSpacing) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v16_LongitudinalBarSpacing));data_->setArgument(15,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(15, attr); } if (v17_TransverseBarSpacing) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v17_TransverseBarSpacing));data_->setArgument(16,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(16, attr); } if (v18_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v18_PredefinedType,::Ifc4x3_add2::IfcReinforcingMeshTypeEnum::ToString(*v18_PredefinedType))));data_->setArgument(17,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(17, attr); } } + +// Function implementations for IfcReinforcingMeshType +::Ifc4x3_add2::IfcReinforcingMeshTypeEnum::Value Ifc4x3_add2::IfcReinforcingMeshType::PredefinedType() const { return ::Ifc4x3_add2::IfcReinforcingMeshTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcReinforcingMeshType::setPredefinedType(::Ifc4x3_add2::IfcReinforcingMeshTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcReinforcingMeshTypeEnum::ToString(v)));data_->setArgument(9,attr);} } +boost::optional< double > Ifc4x3_add2::IfcReinforcingMeshType::MeshLength() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } double v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcReinforcingMeshType::setMeshLength(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } +boost::optional< double > Ifc4x3_add2::IfcReinforcingMeshType::MeshWidth() const { if(!data_->getArgument(11) || data_->getArgument(11)->isNull()) { return boost::none; } double v = *data_->getArgument(11); return v; } +void Ifc4x3_add2::IfcReinforcingMeshType::setMeshWidth(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(11,attr);} } +boost::optional< double > Ifc4x3_add2::IfcReinforcingMeshType::LongitudinalBarNominalDiameter() const { if(!data_->getArgument(12) || data_->getArgument(12)->isNull()) { return boost::none; } double v = *data_->getArgument(12); return v; } +void Ifc4x3_add2::IfcReinforcingMeshType::setLongitudinalBarNominalDiameter(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(12,attr);} } +boost::optional< double > Ifc4x3_add2::IfcReinforcingMeshType::TransverseBarNominalDiameter() const { if(!data_->getArgument(13) || data_->getArgument(13)->isNull()) { return boost::none; } double v = *data_->getArgument(13); return v; } +void Ifc4x3_add2::IfcReinforcingMeshType::setTransverseBarNominalDiameter(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(13,attr);} } +boost::optional< double > Ifc4x3_add2::IfcReinforcingMeshType::LongitudinalBarCrossSectionArea() const { if(!data_->getArgument(14) || data_->getArgument(14)->isNull()) { return boost::none; } double v = *data_->getArgument(14); return v; } +void Ifc4x3_add2::IfcReinforcingMeshType::setLongitudinalBarCrossSectionArea(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(14,attr);} } +boost::optional< double > Ifc4x3_add2::IfcReinforcingMeshType::TransverseBarCrossSectionArea() const { if(!data_->getArgument(15) || data_->getArgument(15)->isNull()) { return boost::none; } double v = *data_->getArgument(15); return v; } +void Ifc4x3_add2::IfcReinforcingMeshType::setTransverseBarCrossSectionArea(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(15,attr);} } +boost::optional< double > Ifc4x3_add2::IfcReinforcingMeshType::LongitudinalBarSpacing() const { if(!data_->getArgument(16) || data_->getArgument(16)->isNull()) { return boost::none; } double v = *data_->getArgument(16); return v; } +void Ifc4x3_add2::IfcReinforcingMeshType::setLongitudinalBarSpacing(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(16,attr);} } +boost::optional< double > Ifc4x3_add2::IfcReinforcingMeshType::TransverseBarSpacing() const { if(!data_->getArgument(17) || data_->getArgument(17)->isNull()) { return boost::none; } double v = *data_->getArgument(17); return v; } +void Ifc4x3_add2::IfcReinforcingMeshType::setTransverseBarSpacing(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(17,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcReinforcingMeshType::BendingShapeCode() const { if(!data_->getArgument(18) || data_->getArgument(18)->isNull()) { return boost::none; } std::string v = *data_->getArgument(18); return v; } +void Ifc4x3_add2::IfcReinforcingMeshType::setBendingShapeCode(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(18,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcBendingParameterSelect >::ptr > Ifc4x3_add2::IfcReinforcingMeshType::BendingParameters() const { if(!data_->getArgument(19) || data_->getArgument(19)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(19); return es->as< ::Ifc4x3_add2::IfcBendingParameterSelect >(); } +void Ifc4x3_add2::IfcReinforcingMeshType::setBendingParameters(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcBendingParameterSelect >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(19,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcReinforcingMeshType::declaration() const { return *IFC4X3_ADD2_IfcReinforcingMeshType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcReinforcingMeshType::Class() { return *IFC4X3_ADD2_IfcReinforcingMeshType_type; } +Ifc4x3_add2::IfcReinforcingMeshType::IfcReinforcingMeshType(IfcEntityInstanceData* e) : IfcReinforcingElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcReinforcingMeshType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcReinforcingMeshType::IfcReinforcingMeshType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcReinforcingMeshTypeEnum::Value v10_PredefinedType, boost::optional< double > v11_MeshLength, boost::optional< double > v12_MeshWidth, boost::optional< double > v13_LongitudinalBarNominalDiameter, boost::optional< double > v14_TransverseBarNominalDiameter, boost::optional< double > v15_LongitudinalBarCrossSectionArea, boost::optional< double > v16_TransverseBarCrossSectionArea, boost::optional< double > v17_LongitudinalBarSpacing, boost::optional< double > v18_TransverseBarSpacing, boost::optional< std::string > v19_BendingShapeCode, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcBendingParameterSelect >::ptr > v20_BendingParameters) : IfcReinforcingElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReinforcingMeshType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcReinforcingMeshTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} if (v11_MeshLength) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_MeshLength));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } if (v12_MeshWidth) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v12_MeshWidth));data_->setArgument(11,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(11, attr); } if (v13_LongitudinalBarNominalDiameter) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v13_LongitudinalBarNominalDiameter));data_->setArgument(12,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(12, attr); } if (v14_TransverseBarNominalDiameter) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v14_TransverseBarNominalDiameter));data_->setArgument(13,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(13, attr); } if (v15_LongitudinalBarCrossSectionArea) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v15_LongitudinalBarCrossSectionArea));data_->setArgument(14,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(14, attr); } if (v16_TransverseBarCrossSectionArea) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v16_TransverseBarCrossSectionArea));data_->setArgument(15,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(15, attr); } if (v17_LongitudinalBarSpacing) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v17_LongitudinalBarSpacing));data_->setArgument(16,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(16, attr); } if (v18_TransverseBarSpacing) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v18_TransverseBarSpacing));data_->setArgument(17,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(17, attr); } if (v19_BendingShapeCode) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v19_BendingShapeCode));data_->setArgument(18,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(18, attr); } if (v20_BendingParameters) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v20_BendingParameters)->generalize());data_->setArgument(19,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(19, attr); } } + +// Function implementations for IfcRelAdheresToElement +::Ifc4x3_add2::IfcElement* Ifc4x3_add2::IfcRelAdheresToElement::RelatingElement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcElement>(true); } +void Ifc4x3_add2::IfcRelAdheresToElement::setRelatingElement(::Ifc4x3_add2::IfcElement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcSurfaceFeature >::ptr Ifc4x3_add2::IfcRelAdheresToElement::RelatedSurfaceFeatures() const { aggregate_of_instance::ptr es = *data_->getArgument(5); return es->as< ::Ifc4x3_add2::IfcSurfaceFeature >(); } +void Ifc4x3_add2::IfcRelAdheresToElement::setRelatedSurfaceFeatures(aggregate_of< ::Ifc4x3_add2::IfcSurfaceFeature >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelAdheresToElement::declaration() const { return *IFC4X3_ADD2_IfcRelAdheresToElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelAdheresToElement::Class() { return *IFC4X3_ADD2_IfcRelAdheresToElement_type; } +Ifc4x3_add2::IfcRelAdheresToElement::IfcRelAdheresToElement(IfcEntityInstanceData* e) : IfcRelDecomposes((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelAdheresToElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelAdheresToElement::IfcRelAdheresToElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcElement* v5_RelatingElement, aggregate_of< ::Ifc4x3_add2::IfcSurfaceFeature >::ptr v6_RelatedSurfaceFeatures) : IfcRelDecomposes((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelAdheresToElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatingElement));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatedSurfaceFeatures)->generalize());data_->setArgument(5,attr);} } + +// Function implementations for IfcRelAggregates +::Ifc4x3_add2::IfcObjectDefinition* Ifc4x3_add2::IfcRelAggregates::RelatingObject() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcObjectDefinition>(true); } +void Ifc4x3_add2::IfcRelAggregates::setRelatingObject(::Ifc4x3_add2::IfcObjectDefinition* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr Ifc4x3_add2::IfcRelAggregates::RelatedObjects() const { aggregate_of_instance::ptr es = *data_->getArgument(5); return es->as< ::Ifc4x3_add2::IfcObjectDefinition >(); } +void Ifc4x3_add2::IfcRelAggregates::setRelatedObjects(aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelAggregates::declaration() const { return *IFC4X3_ADD2_IfcRelAggregates_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelAggregates::Class() { return *IFC4X3_ADD2_IfcRelAggregates_type; } +Ifc4x3_add2::IfcRelAggregates::IfcRelAggregates(IfcEntityInstanceData* e) : IfcRelDecomposes((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelAggregates_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelAggregates::IfcRelAggregates(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcObjectDefinition* v5_RelatingObject, aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v6_RelatedObjects) : IfcRelDecomposes((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelAggregates_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatingObject));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatedObjects)->generalize());data_->setArgument(5,attr);} } + +// Function implementations for IfcRelAssigns +aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr Ifc4x3_add2::IfcRelAssigns::RelatedObjects() const { aggregate_of_instance::ptr es = *data_->getArgument(4); return es->as< ::Ifc4x3_add2::IfcObjectDefinition >(); } +void Ifc4x3_add2::IfcRelAssigns::setRelatedObjects(aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(4,attr);} } +boost::optional< bool > Ifc4x3_add2::IfcRelAssigns::RelatedObjectsType() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } bool v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcRelAssigns::setRelatedObjectsType(boost::optional< bool > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelAssigns::declaration() const { return *IFC4X3_ADD2_IfcRelAssigns_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelAssigns::Class() { return *IFC4X3_ADD2_IfcRelAssigns_type; } +Ifc4x3_add2::IfcRelAssigns::IfcRelAssigns(IfcEntityInstanceData* e) : IfcRelationship((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelAssigns_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelAssigns::IfcRelAssigns(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v5_RelatedObjects, boost::optional< bool > v6_RelatedObjectsType) : IfcRelationship((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelAssigns_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatedObjects)->generalize());data_->setArgument(4,attr);} if (v6_RelatedObjectsType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_RelatedObjectsType));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } } + +// Function implementations for IfcRelAssignsToActor +::Ifc4x3_add2::IfcActor* Ifc4x3_add2::IfcRelAssignsToActor::RelatingActor() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcActor>(true); } +void Ifc4x3_add2::IfcRelAssignsToActor::setRelatingActor(::Ifc4x3_add2::IfcActor* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +::Ifc4x3_add2::IfcActorRole* Ifc4x3_add2::IfcRelAssignsToActor::ActingRole() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(7)))->as<::Ifc4x3_add2::IfcActorRole>(true); } +void Ifc4x3_add2::IfcRelAssignsToActor::setActingRole(::Ifc4x3_add2::IfcActorRole* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(7,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelAssignsToActor::declaration() const { return *IFC4X3_ADD2_IfcRelAssignsToActor_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelAssignsToActor::Class() { return *IFC4X3_ADD2_IfcRelAssignsToActor_type; } +Ifc4x3_add2::IfcRelAssignsToActor::IfcRelAssignsToActor(IfcEntityInstanceData* e) : IfcRelAssigns((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelAssignsToActor_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelAssignsToActor::IfcRelAssignsToActor(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v5_RelatedObjects, boost::optional< bool > v6_RelatedObjectsType, ::Ifc4x3_add2::IfcActor* v7_RelatingActor, ::Ifc4x3_add2::IfcActorRole* v8_ActingRole) : IfcRelAssigns((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelAssignsToActor_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatedObjects)->generalize());data_->setArgument(4,attr);} if (v6_RelatedObjectsType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_RelatedObjectsType));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_RelatingActor));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_ActingRole));data_->setArgument(7,attr);} } + +// Function implementations for IfcRelAssignsToControl +::Ifc4x3_add2::IfcControl* Ifc4x3_add2::IfcRelAssignsToControl::RelatingControl() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcControl>(true); } +void Ifc4x3_add2::IfcRelAssignsToControl::setRelatingControl(::Ifc4x3_add2::IfcControl* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelAssignsToControl::declaration() const { return *IFC4X3_ADD2_IfcRelAssignsToControl_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelAssignsToControl::Class() { return *IFC4X3_ADD2_IfcRelAssignsToControl_type; } +Ifc4x3_add2::IfcRelAssignsToControl::IfcRelAssignsToControl(IfcEntityInstanceData* e) : IfcRelAssigns((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelAssignsToControl_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelAssignsToControl::IfcRelAssignsToControl(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v5_RelatedObjects, boost::optional< bool > v6_RelatedObjectsType, ::Ifc4x3_add2::IfcControl* v7_RelatingControl) : IfcRelAssigns((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelAssignsToControl_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatedObjects)->generalize());data_->setArgument(4,attr);} if (v6_RelatedObjectsType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_RelatedObjectsType));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_RelatingControl));data_->setArgument(6,attr);} } + +// Function implementations for IfcRelAssignsToGroup +::Ifc4x3_add2::IfcGroup* Ifc4x3_add2::IfcRelAssignsToGroup::RelatingGroup() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcGroup>(true); } +void Ifc4x3_add2::IfcRelAssignsToGroup::setRelatingGroup(::Ifc4x3_add2::IfcGroup* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelAssignsToGroup::declaration() const { return *IFC4X3_ADD2_IfcRelAssignsToGroup_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelAssignsToGroup::Class() { return *IFC4X3_ADD2_IfcRelAssignsToGroup_type; } +Ifc4x3_add2::IfcRelAssignsToGroup::IfcRelAssignsToGroup(IfcEntityInstanceData* e) : IfcRelAssigns((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelAssignsToGroup_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelAssignsToGroup::IfcRelAssignsToGroup(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v5_RelatedObjects, boost::optional< bool > v6_RelatedObjectsType, ::Ifc4x3_add2::IfcGroup* v7_RelatingGroup) : IfcRelAssigns((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelAssignsToGroup_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatedObjects)->generalize());data_->setArgument(4,attr);} if (v6_RelatedObjectsType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_RelatedObjectsType));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_RelatingGroup));data_->setArgument(6,attr);} } + +// Function implementations for IfcRelAssignsToGroupByFactor +double Ifc4x3_add2::IfcRelAssignsToGroupByFactor::Factor() const { double v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcRelAssignsToGroupByFactor::setFactor(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(7,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelAssignsToGroupByFactor::declaration() const { return *IFC4X3_ADD2_IfcRelAssignsToGroupByFactor_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelAssignsToGroupByFactor::Class() { return *IFC4X3_ADD2_IfcRelAssignsToGroupByFactor_type; } +Ifc4x3_add2::IfcRelAssignsToGroupByFactor::IfcRelAssignsToGroupByFactor(IfcEntityInstanceData* e) : IfcRelAssignsToGroup((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelAssignsToGroupByFactor_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelAssignsToGroupByFactor::IfcRelAssignsToGroupByFactor(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v5_RelatedObjects, boost::optional< bool > v6_RelatedObjectsType, ::Ifc4x3_add2::IfcGroup* v7_RelatingGroup, double v8_Factor) : IfcRelAssignsToGroup((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelAssignsToGroupByFactor_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatedObjects)->generalize());data_->setArgument(4,attr);} if (v6_RelatedObjectsType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_RelatedObjectsType));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_RelatingGroup));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_Factor));data_->setArgument(7,attr);} } + +// Function implementations for IfcRelAssignsToProcess +::Ifc4x3_add2::IfcProcessSelect* Ifc4x3_add2::IfcRelAssignsToProcess::RelatingProcess() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcProcessSelect>(true); } +void Ifc4x3_add2::IfcRelAssignsToProcess::setRelatingProcess(::Ifc4x3_add2::IfcProcessSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +::Ifc4x3_add2::IfcMeasureWithUnit* Ifc4x3_add2::IfcRelAssignsToProcess::QuantityInProcess() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(7)))->as<::Ifc4x3_add2::IfcMeasureWithUnit>(true); } +void Ifc4x3_add2::IfcRelAssignsToProcess::setQuantityInProcess(::Ifc4x3_add2::IfcMeasureWithUnit* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(7,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelAssignsToProcess::declaration() const { return *IFC4X3_ADD2_IfcRelAssignsToProcess_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelAssignsToProcess::Class() { return *IFC4X3_ADD2_IfcRelAssignsToProcess_type; } +Ifc4x3_add2::IfcRelAssignsToProcess::IfcRelAssignsToProcess(IfcEntityInstanceData* e) : IfcRelAssigns((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelAssignsToProcess_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelAssignsToProcess::IfcRelAssignsToProcess(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v5_RelatedObjects, boost::optional< bool > v6_RelatedObjectsType, ::Ifc4x3_add2::IfcProcessSelect* v7_RelatingProcess, ::Ifc4x3_add2::IfcMeasureWithUnit* v8_QuantityInProcess) : IfcRelAssigns((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelAssignsToProcess_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatedObjects)->generalize());data_->setArgument(4,attr);} if (v6_RelatedObjectsType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_RelatedObjectsType));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_RelatingProcess));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_QuantityInProcess));data_->setArgument(7,attr);} } + +// Function implementations for IfcRelAssignsToProduct +::Ifc4x3_add2::IfcProductSelect* Ifc4x3_add2::IfcRelAssignsToProduct::RelatingProduct() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcProductSelect>(true); } +void Ifc4x3_add2::IfcRelAssignsToProduct::setRelatingProduct(::Ifc4x3_add2::IfcProductSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelAssignsToProduct::declaration() const { return *IFC4X3_ADD2_IfcRelAssignsToProduct_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelAssignsToProduct::Class() { return *IFC4X3_ADD2_IfcRelAssignsToProduct_type; } +Ifc4x3_add2::IfcRelAssignsToProduct::IfcRelAssignsToProduct(IfcEntityInstanceData* e) : IfcRelAssigns((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelAssignsToProduct_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelAssignsToProduct::IfcRelAssignsToProduct(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v5_RelatedObjects, boost::optional< bool > v6_RelatedObjectsType, ::Ifc4x3_add2::IfcProductSelect* v7_RelatingProduct) : IfcRelAssigns((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelAssignsToProduct_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatedObjects)->generalize());data_->setArgument(4,attr);} if (v6_RelatedObjectsType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_RelatedObjectsType));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_RelatingProduct));data_->setArgument(6,attr);} } + +// Function implementations for IfcRelAssignsToResource +::Ifc4x3_add2::IfcResourceSelect* Ifc4x3_add2::IfcRelAssignsToResource::RelatingResource() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcResourceSelect>(true); } +void Ifc4x3_add2::IfcRelAssignsToResource::setRelatingResource(::Ifc4x3_add2::IfcResourceSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelAssignsToResource::declaration() const { return *IFC4X3_ADD2_IfcRelAssignsToResource_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelAssignsToResource::Class() { return *IFC4X3_ADD2_IfcRelAssignsToResource_type; } +Ifc4x3_add2::IfcRelAssignsToResource::IfcRelAssignsToResource(IfcEntityInstanceData* e) : IfcRelAssigns((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelAssignsToResource_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelAssignsToResource::IfcRelAssignsToResource(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v5_RelatedObjects, boost::optional< bool > v6_RelatedObjectsType, ::Ifc4x3_add2::IfcResourceSelect* v7_RelatingResource) : IfcRelAssigns((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelAssignsToResource_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatedObjects)->generalize());data_->setArgument(4,attr);} if (v6_RelatedObjectsType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_RelatedObjectsType));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_RelatingResource));data_->setArgument(6,attr);} } + +// Function implementations for IfcRelAssociates +aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr Ifc4x3_add2::IfcRelAssociates::RelatedObjects() const { aggregate_of_instance::ptr es = *data_->getArgument(4); return es->as< ::Ifc4x3_add2::IfcDefinitionSelect >(); } +void Ifc4x3_add2::IfcRelAssociates::setRelatedObjects(aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelAssociates::declaration() const { return *IFC4X3_ADD2_IfcRelAssociates_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelAssociates::Class() { return *IFC4X3_ADD2_IfcRelAssociates_type; } +Ifc4x3_add2::IfcRelAssociates::IfcRelAssociates(IfcEntityInstanceData* e) : IfcRelationship((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelAssociates_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelAssociates::IfcRelAssociates(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr v5_RelatedObjects) : IfcRelationship((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelAssociates_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatedObjects)->generalize());data_->setArgument(4,attr);} } + +// Function implementations for IfcRelAssociatesApproval +::Ifc4x3_add2::IfcApproval* Ifc4x3_add2::IfcRelAssociatesApproval::RelatingApproval() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcApproval>(true); } +void Ifc4x3_add2::IfcRelAssociatesApproval::setRelatingApproval(::Ifc4x3_add2::IfcApproval* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelAssociatesApproval::declaration() const { return *IFC4X3_ADD2_IfcRelAssociatesApproval_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelAssociatesApproval::Class() { return *IFC4X3_ADD2_IfcRelAssociatesApproval_type; } +Ifc4x3_add2::IfcRelAssociatesApproval::IfcRelAssociatesApproval(IfcEntityInstanceData* e) : IfcRelAssociates((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelAssociatesApproval_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelAssociatesApproval::IfcRelAssociatesApproval(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr v5_RelatedObjects, ::Ifc4x3_add2::IfcApproval* v6_RelatingApproval) : IfcRelAssociates((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelAssociatesApproval_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatedObjects)->generalize());data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatingApproval));data_->setArgument(5,attr);} } + +// Function implementations for IfcRelAssociatesClassification +::Ifc4x3_add2::IfcClassificationSelect* Ifc4x3_add2::IfcRelAssociatesClassification::RelatingClassification() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcClassificationSelect>(true); } +void Ifc4x3_add2::IfcRelAssociatesClassification::setRelatingClassification(::Ifc4x3_add2::IfcClassificationSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelAssociatesClassification::declaration() const { return *IFC4X3_ADD2_IfcRelAssociatesClassification_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelAssociatesClassification::Class() { return *IFC4X3_ADD2_IfcRelAssociatesClassification_type; } +Ifc4x3_add2::IfcRelAssociatesClassification::IfcRelAssociatesClassification(IfcEntityInstanceData* e) : IfcRelAssociates((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelAssociatesClassification_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelAssociatesClassification::IfcRelAssociatesClassification(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr v5_RelatedObjects, ::Ifc4x3_add2::IfcClassificationSelect* v6_RelatingClassification) : IfcRelAssociates((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelAssociatesClassification_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatedObjects)->generalize());data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatingClassification));data_->setArgument(5,attr);} } + +// Function implementations for IfcRelAssociatesConstraint +boost::optional< std::string > Ifc4x3_add2::IfcRelAssociatesConstraint::Intent() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcRelAssociatesConstraint::setIntent(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +::Ifc4x3_add2::IfcConstraint* Ifc4x3_add2::IfcRelAssociatesConstraint::RelatingConstraint() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcConstraint>(true); } +void Ifc4x3_add2::IfcRelAssociatesConstraint::setRelatingConstraint(::Ifc4x3_add2::IfcConstraint* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelAssociatesConstraint::declaration() const { return *IFC4X3_ADD2_IfcRelAssociatesConstraint_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelAssociatesConstraint::Class() { return *IFC4X3_ADD2_IfcRelAssociatesConstraint_type; } +Ifc4x3_add2::IfcRelAssociatesConstraint::IfcRelAssociatesConstraint(IfcEntityInstanceData* e) : IfcRelAssociates((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelAssociatesConstraint_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelAssociatesConstraint::IfcRelAssociatesConstraint(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr v5_RelatedObjects, boost::optional< std::string > v6_Intent, ::Ifc4x3_add2::IfcConstraint* v7_RelatingConstraint) : IfcRelAssociates((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelAssociatesConstraint_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatedObjects)->generalize());data_->setArgument(4,attr);} if (v6_Intent) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Intent));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_RelatingConstraint));data_->setArgument(6,attr);} } + +// Function implementations for IfcRelAssociatesDocument +::Ifc4x3_add2::IfcDocumentSelect* Ifc4x3_add2::IfcRelAssociatesDocument::RelatingDocument() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcDocumentSelect>(true); } +void Ifc4x3_add2::IfcRelAssociatesDocument::setRelatingDocument(::Ifc4x3_add2::IfcDocumentSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelAssociatesDocument::declaration() const { return *IFC4X3_ADD2_IfcRelAssociatesDocument_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelAssociatesDocument::Class() { return *IFC4X3_ADD2_IfcRelAssociatesDocument_type; } +Ifc4x3_add2::IfcRelAssociatesDocument::IfcRelAssociatesDocument(IfcEntityInstanceData* e) : IfcRelAssociates((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelAssociatesDocument_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelAssociatesDocument::IfcRelAssociatesDocument(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr v5_RelatedObjects, ::Ifc4x3_add2::IfcDocumentSelect* v6_RelatingDocument) : IfcRelAssociates((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelAssociatesDocument_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatedObjects)->generalize());data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatingDocument));data_->setArgument(5,attr);} } + +// Function implementations for IfcRelAssociatesLibrary +::Ifc4x3_add2::IfcLibrarySelect* Ifc4x3_add2::IfcRelAssociatesLibrary::RelatingLibrary() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcLibrarySelect>(true); } +void Ifc4x3_add2::IfcRelAssociatesLibrary::setRelatingLibrary(::Ifc4x3_add2::IfcLibrarySelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelAssociatesLibrary::declaration() const { return *IFC4X3_ADD2_IfcRelAssociatesLibrary_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelAssociatesLibrary::Class() { return *IFC4X3_ADD2_IfcRelAssociatesLibrary_type; } +Ifc4x3_add2::IfcRelAssociatesLibrary::IfcRelAssociatesLibrary(IfcEntityInstanceData* e) : IfcRelAssociates((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelAssociatesLibrary_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelAssociatesLibrary::IfcRelAssociatesLibrary(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr v5_RelatedObjects, ::Ifc4x3_add2::IfcLibrarySelect* v6_RelatingLibrary) : IfcRelAssociates((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelAssociatesLibrary_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatedObjects)->generalize());data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatingLibrary));data_->setArgument(5,attr);} } + +// Function implementations for IfcRelAssociatesMaterial +::Ifc4x3_add2::IfcMaterialSelect* Ifc4x3_add2::IfcRelAssociatesMaterial::RelatingMaterial() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcMaterialSelect>(true); } +void Ifc4x3_add2::IfcRelAssociatesMaterial::setRelatingMaterial(::Ifc4x3_add2::IfcMaterialSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelAssociatesMaterial::declaration() const { return *IFC4X3_ADD2_IfcRelAssociatesMaterial_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelAssociatesMaterial::Class() { return *IFC4X3_ADD2_IfcRelAssociatesMaterial_type; } +Ifc4x3_add2::IfcRelAssociatesMaterial::IfcRelAssociatesMaterial(IfcEntityInstanceData* e) : IfcRelAssociates((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelAssociatesMaterial_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelAssociatesMaterial::IfcRelAssociatesMaterial(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr v5_RelatedObjects, ::Ifc4x3_add2::IfcMaterialSelect* v6_RelatingMaterial) : IfcRelAssociates((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelAssociatesMaterial_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatedObjects)->generalize());data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatingMaterial));data_->setArgument(5,attr);} } + +// Function implementations for IfcRelAssociatesProfileDef +::Ifc4x3_add2::IfcProfileDef* Ifc4x3_add2::IfcRelAssociatesProfileDef::RelatingProfileDef() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcProfileDef>(true); } +void Ifc4x3_add2::IfcRelAssociatesProfileDef::setRelatingProfileDef(::Ifc4x3_add2::IfcProfileDef* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelAssociatesProfileDef::declaration() const { return *IFC4X3_ADD2_IfcRelAssociatesProfileDef_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelAssociatesProfileDef::Class() { return *IFC4X3_ADD2_IfcRelAssociatesProfileDef_type; } +Ifc4x3_add2::IfcRelAssociatesProfileDef::IfcRelAssociatesProfileDef(IfcEntityInstanceData* e) : IfcRelAssociates((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelAssociatesProfileDef_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelAssociatesProfileDef::IfcRelAssociatesProfileDef(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr v5_RelatedObjects, ::Ifc4x3_add2::IfcProfileDef* v6_RelatingProfileDef) : IfcRelAssociates((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelAssociatesProfileDef_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatedObjects)->generalize());data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatingProfileDef));data_->setArgument(5,attr);} } + +// Function implementations for IfcRelConnects + + +const IfcParse::entity& Ifc4x3_add2::IfcRelConnects::declaration() const { return *IFC4X3_ADD2_IfcRelConnects_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelConnects::Class() { return *IFC4X3_ADD2_IfcRelConnects_type; } +Ifc4x3_add2::IfcRelConnects::IfcRelConnects(IfcEntityInstanceData* e) : IfcRelationship((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelConnects_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelConnects::IfcRelConnects(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description) : IfcRelationship((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelConnects_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcRelConnectsElements +::Ifc4x3_add2::IfcConnectionGeometry* Ifc4x3_add2::IfcRelConnectsElements::ConnectionGeometry() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcConnectionGeometry>(true); } +void Ifc4x3_add2::IfcRelConnectsElements::setConnectionGeometry(::Ifc4x3_add2::IfcConnectionGeometry* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcElement* Ifc4x3_add2::IfcRelConnectsElements::RelatingElement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcElement>(true); } +void Ifc4x3_add2::IfcRelConnectsElements::setRelatingElement(::Ifc4x3_add2::IfcElement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +::Ifc4x3_add2::IfcElement* Ifc4x3_add2::IfcRelConnectsElements::RelatedElement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcElement>(true); } +void Ifc4x3_add2::IfcRelConnectsElements::setRelatedElement(::Ifc4x3_add2::IfcElement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelConnectsElements::declaration() const { return *IFC4X3_ADD2_IfcRelConnectsElements_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelConnectsElements::Class() { return *IFC4X3_ADD2_IfcRelConnectsElements_type; } +Ifc4x3_add2::IfcRelConnectsElements::IfcRelConnectsElements(IfcEntityInstanceData* e) : IfcRelConnects((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelConnectsElements_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelConnectsElements::IfcRelConnectsElements(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcConnectionGeometry* v5_ConnectionGeometry, ::Ifc4x3_add2::IfcElement* v6_RelatingElement, ::Ifc4x3_add2::IfcElement* v7_RelatedElement) : IfcRelConnects((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelConnectsElements_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_ConnectionGeometry));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatingElement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_RelatedElement));data_->setArgument(6,attr);} } + +// Function implementations for IfcRelConnectsPathElements +std::vector< int > /*[0:?]*/ Ifc4x3_add2::IfcRelConnectsPathElements::RelatingPriorities() const { std::vector< int > /*[0:?]*/ v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcRelConnectsPathElements::setRelatingPriorities(std::vector< int > /*[0:?]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(7,attr);} } +std::vector< int > /*[0:?]*/ Ifc4x3_add2::IfcRelConnectsPathElements::RelatedPriorities() const { std::vector< int > /*[0:?]*/ v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcRelConnectsPathElements::setRelatedPriorities(std::vector< int > /*[0:?]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(8,attr);} } +::Ifc4x3_add2::IfcConnectionTypeEnum::Value Ifc4x3_add2::IfcRelConnectsPathElements::RelatedConnectionType() const { return ::Ifc4x3_add2::IfcConnectionTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcRelConnectsPathElements::setRelatedConnectionType(::Ifc4x3_add2::IfcConnectionTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcConnectionTypeEnum::ToString(v)));data_->setArgument(9,attr);} } +::Ifc4x3_add2::IfcConnectionTypeEnum::Value Ifc4x3_add2::IfcRelConnectsPathElements::RelatingConnectionType() const { return ::Ifc4x3_add2::IfcConnectionTypeEnum::FromString(*data_->getArgument(10)); } +void Ifc4x3_add2::IfcRelConnectsPathElements::setRelatingConnectionType(::Ifc4x3_add2::IfcConnectionTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcConnectionTypeEnum::ToString(v)));data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelConnectsPathElements::declaration() const { return *IFC4X3_ADD2_IfcRelConnectsPathElements_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelConnectsPathElements::Class() { return *IFC4X3_ADD2_IfcRelConnectsPathElements_type; } +Ifc4x3_add2::IfcRelConnectsPathElements::IfcRelConnectsPathElements(IfcEntityInstanceData* e) : IfcRelConnectsElements((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelConnectsPathElements_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelConnectsPathElements::IfcRelConnectsPathElements(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcConnectionGeometry* v5_ConnectionGeometry, ::Ifc4x3_add2::IfcElement* v6_RelatingElement, ::Ifc4x3_add2::IfcElement* v7_RelatedElement, std::vector< int > /*[0:?]*/ v8_RelatingPriorities, std::vector< int > /*[0:?]*/ v9_RelatedPriorities, ::Ifc4x3_add2::IfcConnectionTypeEnum::Value v10_RelatedConnectionType, ::Ifc4x3_add2::IfcConnectionTypeEnum::Value v11_RelatingConnectionType) : IfcRelConnectsElements((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelConnectsPathElements_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_ConnectionGeometry));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatingElement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_RelatedElement));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_RelatingPriorities));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_RelatedPriorities));data_->setArgument(8,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_RelatedConnectionType,::Ifc4x3_add2::IfcConnectionTypeEnum::ToString(v10_RelatedConnectionType))));data_->setArgument(9,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v11_RelatingConnectionType,::Ifc4x3_add2::IfcConnectionTypeEnum::ToString(v11_RelatingConnectionType))));data_->setArgument(10,attr);} } + +// Function implementations for IfcRelConnectsPortToElement +::Ifc4x3_add2::IfcPort* Ifc4x3_add2::IfcRelConnectsPortToElement::RelatingPort() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcPort>(true); } +void Ifc4x3_add2::IfcRelConnectsPortToElement::setRelatingPort(::Ifc4x3_add2::IfcPort* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcDistributionElement* Ifc4x3_add2::IfcRelConnectsPortToElement::RelatedElement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcDistributionElement>(true); } +void Ifc4x3_add2::IfcRelConnectsPortToElement::setRelatedElement(::Ifc4x3_add2::IfcDistributionElement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelConnectsPortToElement::declaration() const { return *IFC4X3_ADD2_IfcRelConnectsPortToElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelConnectsPortToElement::Class() { return *IFC4X3_ADD2_IfcRelConnectsPortToElement_type; } +Ifc4x3_add2::IfcRelConnectsPortToElement::IfcRelConnectsPortToElement(IfcEntityInstanceData* e) : IfcRelConnects((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelConnectsPortToElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelConnectsPortToElement::IfcRelConnectsPortToElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcPort* v5_RelatingPort, ::Ifc4x3_add2::IfcDistributionElement* v6_RelatedElement) : IfcRelConnects((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelConnectsPortToElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatingPort));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatedElement));data_->setArgument(5,attr);} } + +// Function implementations for IfcRelConnectsPorts +::Ifc4x3_add2::IfcPort* Ifc4x3_add2::IfcRelConnectsPorts::RelatingPort() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcPort>(true); } +void Ifc4x3_add2::IfcRelConnectsPorts::setRelatingPort(::Ifc4x3_add2::IfcPort* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcPort* Ifc4x3_add2::IfcRelConnectsPorts::RelatedPort() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcPort>(true); } +void Ifc4x3_add2::IfcRelConnectsPorts::setRelatedPort(::Ifc4x3_add2::IfcPort* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +::Ifc4x3_add2::IfcElement* Ifc4x3_add2::IfcRelConnectsPorts::RealizingElement() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcElement>(true); } +void Ifc4x3_add2::IfcRelConnectsPorts::setRealizingElement(::Ifc4x3_add2::IfcElement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelConnectsPorts::declaration() const { return *IFC4X3_ADD2_IfcRelConnectsPorts_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelConnectsPorts::Class() { return *IFC4X3_ADD2_IfcRelConnectsPorts_type; } +Ifc4x3_add2::IfcRelConnectsPorts::IfcRelConnectsPorts(IfcEntityInstanceData* e) : IfcRelConnects((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelConnectsPorts_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelConnectsPorts::IfcRelConnectsPorts(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcPort* v5_RelatingPort, ::Ifc4x3_add2::IfcPort* v6_RelatedPort, ::Ifc4x3_add2::IfcElement* v7_RealizingElement) : IfcRelConnects((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelConnectsPorts_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatingPort));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatedPort));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_RealizingElement));data_->setArgument(6,attr);} } + +// Function implementations for IfcRelConnectsStructuralActivity +::Ifc4x3_add2::IfcStructuralActivityAssignmentSelect* Ifc4x3_add2::IfcRelConnectsStructuralActivity::RelatingElement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcStructuralActivityAssignmentSelect>(true); } +void Ifc4x3_add2::IfcRelConnectsStructuralActivity::setRelatingElement(::Ifc4x3_add2::IfcStructuralActivityAssignmentSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcStructuralActivity* Ifc4x3_add2::IfcRelConnectsStructuralActivity::RelatedStructuralActivity() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcStructuralActivity>(true); } +void Ifc4x3_add2::IfcRelConnectsStructuralActivity::setRelatedStructuralActivity(::Ifc4x3_add2::IfcStructuralActivity* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelConnectsStructuralActivity::declaration() const { return *IFC4X3_ADD2_IfcRelConnectsStructuralActivity_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelConnectsStructuralActivity::Class() { return *IFC4X3_ADD2_IfcRelConnectsStructuralActivity_type; } +Ifc4x3_add2::IfcRelConnectsStructuralActivity::IfcRelConnectsStructuralActivity(IfcEntityInstanceData* e) : IfcRelConnects((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelConnectsStructuralActivity_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelConnectsStructuralActivity::IfcRelConnectsStructuralActivity(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcStructuralActivityAssignmentSelect* v5_RelatingElement, ::Ifc4x3_add2::IfcStructuralActivity* v6_RelatedStructuralActivity) : IfcRelConnects((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelConnectsStructuralActivity_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatingElement));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatedStructuralActivity));data_->setArgument(5,attr);} } + +// Function implementations for IfcRelConnectsStructuralMember +::Ifc4x3_add2::IfcStructuralMember* Ifc4x3_add2::IfcRelConnectsStructuralMember::RelatingStructuralMember() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcStructuralMember>(true); } +void Ifc4x3_add2::IfcRelConnectsStructuralMember::setRelatingStructuralMember(::Ifc4x3_add2::IfcStructuralMember* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcStructuralConnection* Ifc4x3_add2::IfcRelConnectsStructuralMember::RelatedStructuralConnection() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcStructuralConnection>(true); } +void Ifc4x3_add2::IfcRelConnectsStructuralMember::setRelatedStructuralConnection(::Ifc4x3_add2::IfcStructuralConnection* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +::Ifc4x3_add2::IfcBoundaryCondition* Ifc4x3_add2::IfcRelConnectsStructuralMember::AppliedCondition() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcBoundaryCondition>(true); } +void Ifc4x3_add2::IfcRelConnectsStructuralMember::setAppliedCondition(::Ifc4x3_add2::IfcBoundaryCondition* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +::Ifc4x3_add2::IfcStructuralConnectionCondition* Ifc4x3_add2::IfcRelConnectsStructuralMember::AdditionalConditions() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(7)))->as<::Ifc4x3_add2::IfcStructuralConnectionCondition>(true); } +void Ifc4x3_add2::IfcRelConnectsStructuralMember::setAdditionalConditions(::Ifc4x3_add2::IfcStructuralConnectionCondition* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(7,attr);} } +boost::optional< double > Ifc4x3_add2::IfcRelConnectsStructuralMember::SupportedLength() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } double v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcRelConnectsStructuralMember::setSupportedLength(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } +::Ifc4x3_add2::IfcAxis2Placement3D* Ifc4x3_add2::IfcRelConnectsStructuralMember::ConditionCoordinateSystem() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(9)))->as<::Ifc4x3_add2::IfcAxis2Placement3D>(true); } +void Ifc4x3_add2::IfcRelConnectsStructuralMember::setConditionCoordinateSystem(::Ifc4x3_add2::IfcAxis2Placement3D* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelConnectsStructuralMember::declaration() const { return *IFC4X3_ADD2_IfcRelConnectsStructuralMember_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelConnectsStructuralMember::Class() { return *IFC4X3_ADD2_IfcRelConnectsStructuralMember_type; } +Ifc4x3_add2::IfcRelConnectsStructuralMember::IfcRelConnectsStructuralMember(IfcEntityInstanceData* e) : IfcRelConnects((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelConnectsStructuralMember_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelConnectsStructuralMember::IfcRelConnectsStructuralMember(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcStructuralMember* v5_RelatingStructuralMember, ::Ifc4x3_add2::IfcStructuralConnection* v6_RelatedStructuralConnection, ::Ifc4x3_add2::IfcBoundaryCondition* v7_AppliedCondition, ::Ifc4x3_add2::IfcStructuralConnectionCondition* v8_AdditionalConditions, boost::optional< double > v9_SupportedLength, ::Ifc4x3_add2::IfcAxis2Placement3D* v10_ConditionCoordinateSystem) : IfcRelConnects((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelConnectsStructuralMember_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatingStructuralMember));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatedStructuralConnection));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_AppliedCondition));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_AdditionalConditions));data_->setArgument(7,attr);} if (v9_SupportedLength) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_SupportedLength));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v10_ConditionCoordinateSystem));data_->setArgument(9,attr);} } + +// Function implementations for IfcRelConnectsWithEccentricity +::Ifc4x3_add2::IfcConnectionGeometry* Ifc4x3_add2::IfcRelConnectsWithEccentricity::ConnectionConstraint() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(10)))->as<::Ifc4x3_add2::IfcConnectionGeometry>(true); } +void Ifc4x3_add2::IfcRelConnectsWithEccentricity::setConnectionConstraint(::Ifc4x3_add2::IfcConnectionGeometry* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelConnectsWithEccentricity::declaration() const { return *IFC4X3_ADD2_IfcRelConnectsWithEccentricity_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelConnectsWithEccentricity::Class() { return *IFC4X3_ADD2_IfcRelConnectsWithEccentricity_type; } +Ifc4x3_add2::IfcRelConnectsWithEccentricity::IfcRelConnectsWithEccentricity(IfcEntityInstanceData* e) : IfcRelConnectsStructuralMember((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelConnectsWithEccentricity_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelConnectsWithEccentricity::IfcRelConnectsWithEccentricity(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcStructuralMember* v5_RelatingStructuralMember, ::Ifc4x3_add2::IfcStructuralConnection* v6_RelatedStructuralConnection, ::Ifc4x3_add2::IfcBoundaryCondition* v7_AppliedCondition, ::Ifc4x3_add2::IfcStructuralConnectionCondition* v8_AdditionalConditions, boost::optional< double > v9_SupportedLength, ::Ifc4x3_add2::IfcAxis2Placement3D* v10_ConditionCoordinateSystem, ::Ifc4x3_add2::IfcConnectionGeometry* v11_ConnectionConstraint) : IfcRelConnectsStructuralMember((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelConnectsWithEccentricity_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatingStructuralMember));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatedStructuralConnection));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_AppliedCondition));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_AdditionalConditions));data_->setArgument(7,attr);} if (v9_SupportedLength) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_SupportedLength));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v10_ConditionCoordinateSystem));data_->setArgument(9,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v11_ConnectionConstraint));data_->setArgument(10,attr);} } + +// Function implementations for IfcRelConnectsWithRealizingElements +aggregate_of< ::Ifc4x3_add2::IfcElement >::ptr Ifc4x3_add2::IfcRelConnectsWithRealizingElements::RealizingElements() const { aggregate_of_instance::ptr es = *data_->getArgument(7); return es->as< ::Ifc4x3_add2::IfcElement >(); } +void Ifc4x3_add2::IfcRelConnectsWithRealizingElements::setRealizingElements(aggregate_of< ::Ifc4x3_add2::IfcElement >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(7,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcRelConnectsWithRealizingElements::ConnectionType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } std::string v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcRelConnectsWithRealizingElements::setConnectionType(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelConnectsWithRealizingElements::declaration() const { return *IFC4X3_ADD2_IfcRelConnectsWithRealizingElements_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelConnectsWithRealizingElements::Class() { return *IFC4X3_ADD2_IfcRelConnectsWithRealizingElements_type; } +Ifc4x3_add2::IfcRelConnectsWithRealizingElements::IfcRelConnectsWithRealizingElements(IfcEntityInstanceData* e) : IfcRelConnectsElements((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelConnectsWithRealizingElements_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelConnectsWithRealizingElements::IfcRelConnectsWithRealizingElements(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcConnectionGeometry* v5_ConnectionGeometry, ::Ifc4x3_add2::IfcElement* v6_RelatingElement, ::Ifc4x3_add2::IfcElement* v7_RelatedElement, aggregate_of< ::Ifc4x3_add2::IfcElement >::ptr v8_RealizingElements, boost::optional< std::string > v9_ConnectionType) : IfcRelConnectsElements((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelConnectsWithRealizingElements_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_ConnectionGeometry));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatingElement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_RelatedElement));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_RealizingElements)->generalize());data_->setArgument(7,attr);} if (v9_ConnectionType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ConnectionType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcRelContainedInSpatialStructure +aggregate_of< ::Ifc4x3_add2::IfcProduct >::ptr Ifc4x3_add2::IfcRelContainedInSpatialStructure::RelatedElements() const { aggregate_of_instance::ptr es = *data_->getArgument(4); return es->as< ::Ifc4x3_add2::IfcProduct >(); } +void Ifc4x3_add2::IfcRelContainedInSpatialStructure::setRelatedElements(aggregate_of< ::Ifc4x3_add2::IfcProduct >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcSpatialElement* Ifc4x3_add2::IfcRelContainedInSpatialStructure::RelatingStructure() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcSpatialElement>(true); } +void Ifc4x3_add2::IfcRelContainedInSpatialStructure::setRelatingStructure(::Ifc4x3_add2::IfcSpatialElement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelContainedInSpatialStructure::declaration() const { return *IFC4X3_ADD2_IfcRelContainedInSpatialStructure_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelContainedInSpatialStructure::Class() { return *IFC4X3_ADD2_IfcRelContainedInSpatialStructure_type; } +Ifc4x3_add2::IfcRelContainedInSpatialStructure::IfcRelContainedInSpatialStructure(IfcEntityInstanceData* e) : IfcRelConnects((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelContainedInSpatialStructure_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelContainedInSpatialStructure::IfcRelContainedInSpatialStructure(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcProduct >::ptr v5_RelatedElements, ::Ifc4x3_add2::IfcSpatialElement* v6_RelatingStructure) : IfcRelConnects((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelContainedInSpatialStructure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatedElements)->generalize());data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatingStructure));data_->setArgument(5,attr);} } + +// Function implementations for IfcRelCoversBldgElements +::Ifc4x3_add2::IfcElement* Ifc4x3_add2::IfcRelCoversBldgElements::RelatingBuildingElement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcElement>(true); } +void Ifc4x3_add2::IfcRelCoversBldgElements::setRelatingBuildingElement(::Ifc4x3_add2::IfcElement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcCovering >::ptr Ifc4x3_add2::IfcRelCoversBldgElements::RelatedCoverings() const { aggregate_of_instance::ptr es = *data_->getArgument(5); return es->as< ::Ifc4x3_add2::IfcCovering >(); } +void Ifc4x3_add2::IfcRelCoversBldgElements::setRelatedCoverings(aggregate_of< ::Ifc4x3_add2::IfcCovering >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelCoversBldgElements::declaration() const { return *IFC4X3_ADD2_IfcRelCoversBldgElements_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelCoversBldgElements::Class() { return *IFC4X3_ADD2_IfcRelCoversBldgElements_type; } +Ifc4x3_add2::IfcRelCoversBldgElements::IfcRelCoversBldgElements(IfcEntityInstanceData* e) : IfcRelConnects((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelCoversBldgElements_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelCoversBldgElements::IfcRelCoversBldgElements(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcElement* v5_RelatingBuildingElement, aggregate_of< ::Ifc4x3_add2::IfcCovering >::ptr v6_RelatedCoverings) : IfcRelConnects((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelCoversBldgElements_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatingBuildingElement));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatedCoverings)->generalize());data_->setArgument(5,attr);} } + +// Function implementations for IfcRelCoversSpaces +::Ifc4x3_add2::IfcSpace* Ifc4x3_add2::IfcRelCoversSpaces::RelatingSpace() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcSpace>(true); } +void Ifc4x3_add2::IfcRelCoversSpaces::setRelatingSpace(::Ifc4x3_add2::IfcSpace* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcCovering >::ptr Ifc4x3_add2::IfcRelCoversSpaces::RelatedCoverings() const { aggregate_of_instance::ptr es = *data_->getArgument(5); return es->as< ::Ifc4x3_add2::IfcCovering >(); } +void Ifc4x3_add2::IfcRelCoversSpaces::setRelatedCoverings(aggregate_of< ::Ifc4x3_add2::IfcCovering >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelCoversSpaces::declaration() const { return *IFC4X3_ADD2_IfcRelCoversSpaces_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelCoversSpaces::Class() { return *IFC4X3_ADD2_IfcRelCoversSpaces_type; } +Ifc4x3_add2::IfcRelCoversSpaces::IfcRelCoversSpaces(IfcEntityInstanceData* e) : IfcRelConnects((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelCoversSpaces_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelCoversSpaces::IfcRelCoversSpaces(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcSpace* v5_RelatingSpace, aggregate_of< ::Ifc4x3_add2::IfcCovering >::ptr v6_RelatedCoverings) : IfcRelConnects((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelCoversSpaces_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatingSpace));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatedCoverings)->generalize());data_->setArgument(5,attr);} } + +// Function implementations for IfcRelDeclares +::Ifc4x3_add2::IfcContext* Ifc4x3_add2::IfcRelDeclares::RelatingContext() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcContext>(true); } +void Ifc4x3_add2::IfcRelDeclares::setRelatingContext(::Ifc4x3_add2::IfcContext* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr Ifc4x3_add2::IfcRelDeclares::RelatedDefinitions() const { aggregate_of_instance::ptr es = *data_->getArgument(5); return es->as< ::Ifc4x3_add2::IfcDefinitionSelect >(); } +void Ifc4x3_add2::IfcRelDeclares::setRelatedDefinitions(aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelDeclares::declaration() const { return *IFC4X3_ADD2_IfcRelDeclares_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelDeclares::Class() { return *IFC4X3_ADD2_IfcRelDeclares_type; } +Ifc4x3_add2::IfcRelDeclares::IfcRelDeclares(IfcEntityInstanceData* e) : IfcRelationship((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelDeclares_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelDeclares::IfcRelDeclares(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcContext* v5_RelatingContext, aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr v6_RelatedDefinitions) : IfcRelationship((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelDeclares_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatingContext));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatedDefinitions)->generalize());data_->setArgument(5,attr);} } + +// Function implementations for IfcRelDecomposes + + +const IfcParse::entity& Ifc4x3_add2::IfcRelDecomposes::declaration() const { return *IFC4X3_ADD2_IfcRelDecomposes_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelDecomposes::Class() { return *IFC4X3_ADD2_IfcRelDecomposes_type; } +Ifc4x3_add2::IfcRelDecomposes::IfcRelDecomposes(IfcEntityInstanceData* e) : IfcRelationship((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelDecomposes_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelDecomposes::IfcRelDecomposes(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description) : IfcRelationship((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelDecomposes_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcRelDefines + + +const IfcParse::entity& Ifc4x3_add2::IfcRelDefines::declaration() const { return *IFC4X3_ADD2_IfcRelDefines_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelDefines::Class() { return *IFC4X3_ADD2_IfcRelDefines_type; } +Ifc4x3_add2::IfcRelDefines::IfcRelDefines(IfcEntityInstanceData* e) : IfcRelationship((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelDefines_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelDefines::IfcRelDefines(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description) : IfcRelationship((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelDefines_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcRelDefinesByObject +aggregate_of< ::Ifc4x3_add2::IfcObject >::ptr Ifc4x3_add2::IfcRelDefinesByObject::RelatedObjects() const { aggregate_of_instance::ptr es = *data_->getArgument(4); return es->as< ::Ifc4x3_add2::IfcObject >(); } +void Ifc4x3_add2::IfcRelDefinesByObject::setRelatedObjects(aggregate_of< ::Ifc4x3_add2::IfcObject >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcObject* Ifc4x3_add2::IfcRelDefinesByObject::RelatingObject() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcObject>(true); } +void Ifc4x3_add2::IfcRelDefinesByObject::setRelatingObject(::Ifc4x3_add2::IfcObject* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelDefinesByObject::declaration() const { return *IFC4X3_ADD2_IfcRelDefinesByObject_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelDefinesByObject::Class() { return *IFC4X3_ADD2_IfcRelDefinesByObject_type; } +Ifc4x3_add2::IfcRelDefinesByObject::IfcRelDefinesByObject(IfcEntityInstanceData* e) : IfcRelDefines((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelDefinesByObject_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelDefinesByObject::IfcRelDefinesByObject(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcObject >::ptr v5_RelatedObjects, ::Ifc4x3_add2::IfcObject* v6_RelatingObject) : IfcRelDefines((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelDefinesByObject_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatedObjects)->generalize());data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatingObject));data_->setArgument(5,attr);} } + +// Function implementations for IfcRelDefinesByProperties +aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr Ifc4x3_add2::IfcRelDefinesByProperties::RelatedObjects() const { aggregate_of_instance::ptr es = *data_->getArgument(4); return es->as< ::Ifc4x3_add2::IfcObjectDefinition >(); } +void Ifc4x3_add2::IfcRelDefinesByProperties::setRelatedObjects(aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcPropertySetDefinitionSelect* Ifc4x3_add2::IfcRelDefinesByProperties::RelatingPropertyDefinition() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcPropertySetDefinitionSelect>(true); } +void Ifc4x3_add2::IfcRelDefinesByProperties::setRelatingPropertyDefinition(::Ifc4x3_add2::IfcPropertySetDefinitionSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelDefinesByProperties::declaration() const { return *IFC4X3_ADD2_IfcRelDefinesByProperties_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelDefinesByProperties::Class() { return *IFC4X3_ADD2_IfcRelDefinesByProperties_type; } +Ifc4x3_add2::IfcRelDefinesByProperties::IfcRelDefinesByProperties(IfcEntityInstanceData* e) : IfcRelDefines((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelDefinesByProperties_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelDefinesByProperties::IfcRelDefinesByProperties(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v5_RelatedObjects, ::Ifc4x3_add2::IfcPropertySetDefinitionSelect* v6_RelatingPropertyDefinition) : IfcRelDefines((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelDefinesByProperties_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatedObjects)->generalize());data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatingPropertyDefinition));data_->setArgument(5,attr);} } + +// Function implementations for IfcRelDefinesByTemplate +aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr Ifc4x3_add2::IfcRelDefinesByTemplate::RelatedPropertySets() const { aggregate_of_instance::ptr es = *data_->getArgument(4); return es->as< ::Ifc4x3_add2::IfcPropertySetDefinition >(); } +void Ifc4x3_add2::IfcRelDefinesByTemplate::setRelatedPropertySets(aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcPropertySetTemplate* Ifc4x3_add2::IfcRelDefinesByTemplate::RelatingTemplate() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcPropertySetTemplate>(true); } +void Ifc4x3_add2::IfcRelDefinesByTemplate::setRelatingTemplate(::Ifc4x3_add2::IfcPropertySetTemplate* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelDefinesByTemplate::declaration() const { return *IFC4X3_ADD2_IfcRelDefinesByTemplate_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelDefinesByTemplate::Class() { return *IFC4X3_ADD2_IfcRelDefinesByTemplate_type; } +Ifc4x3_add2::IfcRelDefinesByTemplate::IfcRelDefinesByTemplate(IfcEntityInstanceData* e) : IfcRelDefines((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelDefinesByTemplate_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelDefinesByTemplate::IfcRelDefinesByTemplate(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr v5_RelatedPropertySets, ::Ifc4x3_add2::IfcPropertySetTemplate* v6_RelatingTemplate) : IfcRelDefines((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelDefinesByTemplate_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatedPropertySets)->generalize());data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatingTemplate));data_->setArgument(5,attr);} } + +// Function implementations for IfcRelDefinesByType +aggregate_of< ::Ifc4x3_add2::IfcObject >::ptr Ifc4x3_add2::IfcRelDefinesByType::RelatedObjects() const { aggregate_of_instance::ptr es = *data_->getArgument(4); return es->as< ::Ifc4x3_add2::IfcObject >(); } +void Ifc4x3_add2::IfcRelDefinesByType::setRelatedObjects(aggregate_of< ::Ifc4x3_add2::IfcObject >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcTypeObject* Ifc4x3_add2::IfcRelDefinesByType::RelatingType() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcTypeObject>(true); } +void Ifc4x3_add2::IfcRelDefinesByType::setRelatingType(::Ifc4x3_add2::IfcTypeObject* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelDefinesByType::declaration() const { return *IFC4X3_ADD2_IfcRelDefinesByType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelDefinesByType::Class() { return *IFC4X3_ADD2_IfcRelDefinesByType_type; } +Ifc4x3_add2::IfcRelDefinesByType::IfcRelDefinesByType(IfcEntityInstanceData* e) : IfcRelDefines((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelDefinesByType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelDefinesByType::IfcRelDefinesByType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcObject >::ptr v5_RelatedObjects, ::Ifc4x3_add2::IfcTypeObject* v6_RelatingType) : IfcRelDefines((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelDefinesByType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatedObjects)->generalize());data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatingType));data_->setArgument(5,attr);} } + +// Function implementations for IfcRelFillsElement +::Ifc4x3_add2::IfcOpeningElement* Ifc4x3_add2::IfcRelFillsElement::RelatingOpeningElement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcOpeningElement>(true); } +void Ifc4x3_add2::IfcRelFillsElement::setRelatingOpeningElement(::Ifc4x3_add2::IfcOpeningElement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcElement* Ifc4x3_add2::IfcRelFillsElement::RelatedBuildingElement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcElement>(true); } +void Ifc4x3_add2::IfcRelFillsElement::setRelatedBuildingElement(::Ifc4x3_add2::IfcElement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelFillsElement::declaration() const { return *IFC4X3_ADD2_IfcRelFillsElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelFillsElement::Class() { return *IFC4X3_ADD2_IfcRelFillsElement_type; } +Ifc4x3_add2::IfcRelFillsElement::IfcRelFillsElement(IfcEntityInstanceData* e) : IfcRelConnects((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelFillsElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelFillsElement::IfcRelFillsElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcOpeningElement* v5_RelatingOpeningElement, ::Ifc4x3_add2::IfcElement* v6_RelatedBuildingElement) : IfcRelConnects((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelFillsElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatingOpeningElement));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatedBuildingElement));data_->setArgument(5,attr);} } + +// Function implementations for IfcRelFlowControlElements +aggregate_of< ::Ifc4x3_add2::IfcDistributionControlElement >::ptr Ifc4x3_add2::IfcRelFlowControlElements::RelatedControlElements() const { aggregate_of_instance::ptr es = *data_->getArgument(4); return es->as< ::Ifc4x3_add2::IfcDistributionControlElement >(); } +void Ifc4x3_add2::IfcRelFlowControlElements::setRelatedControlElements(aggregate_of< ::Ifc4x3_add2::IfcDistributionControlElement >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcDistributionFlowElement* Ifc4x3_add2::IfcRelFlowControlElements::RelatingFlowElement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcDistributionFlowElement>(true); } +void Ifc4x3_add2::IfcRelFlowControlElements::setRelatingFlowElement(::Ifc4x3_add2::IfcDistributionFlowElement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelFlowControlElements::declaration() const { return *IFC4X3_ADD2_IfcRelFlowControlElements_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelFlowControlElements::Class() { return *IFC4X3_ADD2_IfcRelFlowControlElements_type; } +Ifc4x3_add2::IfcRelFlowControlElements::IfcRelFlowControlElements(IfcEntityInstanceData* e) : IfcRelConnects((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelFlowControlElements_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelFlowControlElements::IfcRelFlowControlElements(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcDistributionControlElement >::ptr v5_RelatedControlElements, ::Ifc4x3_add2::IfcDistributionFlowElement* v6_RelatingFlowElement) : IfcRelConnects((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelFlowControlElements_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatedControlElements)->generalize());data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatingFlowElement));data_->setArgument(5,attr);} } + +// Function implementations for IfcRelInterferesElements +::Ifc4x3_add2::IfcInterferenceSelect* Ifc4x3_add2::IfcRelInterferesElements::RelatingElement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcInterferenceSelect>(true); } +void Ifc4x3_add2::IfcRelInterferesElements::setRelatingElement(::Ifc4x3_add2::IfcInterferenceSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcInterferenceSelect* Ifc4x3_add2::IfcRelInterferesElements::RelatedElement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcInterferenceSelect>(true); } +void Ifc4x3_add2::IfcRelInterferesElements::setRelatedElement(::Ifc4x3_add2::IfcInterferenceSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +::Ifc4x3_add2::IfcConnectionGeometry* Ifc4x3_add2::IfcRelInterferesElements::InterferenceGeometry() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcConnectionGeometry>(true); } +void Ifc4x3_add2::IfcRelInterferesElements::setInterferenceGeometry(::Ifc4x3_add2::IfcConnectionGeometry* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcRelInterferesElements::InterferenceType() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } std::string v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcRelInterferesElements::setInterferenceType(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +boost::logic::tribool Ifc4x3_add2::IfcRelInterferesElements::ImpliedOrder() const { boost::logic::tribool v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcRelInterferesElements::setImpliedOrder(boost::logic::tribool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(8,attr);} } +::Ifc4x3_add2::IfcSpatialZone* Ifc4x3_add2::IfcRelInterferesElements::InterferenceSpace() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(9)))->as<::Ifc4x3_add2::IfcSpatialZone>(true); } +void Ifc4x3_add2::IfcRelInterferesElements::setInterferenceSpace(::Ifc4x3_add2::IfcSpatialZone* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelInterferesElements::declaration() const { return *IFC4X3_ADD2_IfcRelInterferesElements_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelInterferesElements::Class() { return *IFC4X3_ADD2_IfcRelInterferesElements_type; } +Ifc4x3_add2::IfcRelInterferesElements::IfcRelInterferesElements(IfcEntityInstanceData* e) : IfcRelConnects((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelInterferesElements_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelInterferesElements::IfcRelInterferesElements(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcInterferenceSelect* v5_RelatingElement, ::Ifc4x3_add2::IfcInterferenceSelect* v6_RelatedElement, ::Ifc4x3_add2::IfcConnectionGeometry* v7_InterferenceGeometry, boost::optional< std::string > v8_InterferenceType, boost::logic::tribool v9_ImpliedOrder, ::Ifc4x3_add2::IfcSpatialZone* v10_InterferenceSpace) : IfcRelConnects((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelInterferesElements_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatingElement));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatedElement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_InterferenceGeometry));data_->setArgument(6,attr);} if (v8_InterferenceType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_InterferenceType));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_ImpliedOrder));data_->setArgument(8,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v10_InterferenceSpace));data_->setArgument(9,attr);} } + +// Function implementations for IfcRelNests +::Ifc4x3_add2::IfcObjectDefinition* Ifc4x3_add2::IfcRelNests::RelatingObject() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcObjectDefinition>(true); } +void Ifc4x3_add2::IfcRelNests::setRelatingObject(::Ifc4x3_add2::IfcObjectDefinition* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr Ifc4x3_add2::IfcRelNests::RelatedObjects() const { aggregate_of_instance::ptr es = *data_->getArgument(5); return es->as< ::Ifc4x3_add2::IfcObjectDefinition >(); } +void Ifc4x3_add2::IfcRelNests::setRelatedObjects(aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelNests::declaration() const { return *IFC4X3_ADD2_IfcRelNests_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelNests::Class() { return *IFC4X3_ADD2_IfcRelNests_type; } +Ifc4x3_add2::IfcRelNests::IfcRelNests(IfcEntityInstanceData* e) : IfcRelDecomposes((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelNests_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelNests::IfcRelNests(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcObjectDefinition* v5_RelatingObject, aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v6_RelatedObjects) : IfcRelDecomposes((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelNests_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatingObject));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatedObjects)->generalize());data_->setArgument(5,attr);} } + +// Function implementations for IfcRelPositions +::Ifc4x3_add2::IfcPositioningElement* Ifc4x3_add2::IfcRelPositions::RelatingPositioningElement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcPositioningElement>(true); } +void Ifc4x3_add2::IfcRelPositions::setRelatingPositioningElement(::Ifc4x3_add2::IfcPositioningElement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcProduct >::ptr Ifc4x3_add2::IfcRelPositions::RelatedProducts() const { aggregate_of_instance::ptr es = *data_->getArgument(5); return es->as< ::Ifc4x3_add2::IfcProduct >(); } +void Ifc4x3_add2::IfcRelPositions::setRelatedProducts(aggregate_of< ::Ifc4x3_add2::IfcProduct >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelPositions::declaration() const { return *IFC4X3_ADD2_IfcRelPositions_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelPositions::Class() { return *IFC4X3_ADD2_IfcRelPositions_type; } +Ifc4x3_add2::IfcRelPositions::IfcRelPositions(IfcEntityInstanceData* e) : IfcRelConnects((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelPositions_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelPositions::IfcRelPositions(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcPositioningElement* v5_RelatingPositioningElement, aggregate_of< ::Ifc4x3_add2::IfcProduct >::ptr v6_RelatedProducts) : IfcRelConnects((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelPositions_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatingPositioningElement));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatedProducts)->generalize());data_->setArgument(5,attr);} } + +// Function implementations for IfcRelProjectsElement +::Ifc4x3_add2::IfcElement* Ifc4x3_add2::IfcRelProjectsElement::RelatingElement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcElement>(true); } +void Ifc4x3_add2::IfcRelProjectsElement::setRelatingElement(::Ifc4x3_add2::IfcElement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcFeatureElementAddition* Ifc4x3_add2::IfcRelProjectsElement::RelatedFeatureElement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcFeatureElementAddition>(true); } +void Ifc4x3_add2::IfcRelProjectsElement::setRelatedFeatureElement(::Ifc4x3_add2::IfcFeatureElementAddition* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelProjectsElement::declaration() const { return *IFC4X3_ADD2_IfcRelProjectsElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelProjectsElement::Class() { return *IFC4X3_ADD2_IfcRelProjectsElement_type; } +Ifc4x3_add2::IfcRelProjectsElement::IfcRelProjectsElement(IfcEntityInstanceData* e) : IfcRelDecomposes((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelProjectsElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelProjectsElement::IfcRelProjectsElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcElement* v5_RelatingElement, ::Ifc4x3_add2::IfcFeatureElementAddition* v6_RelatedFeatureElement) : IfcRelDecomposes((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelProjectsElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatingElement));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatedFeatureElement));data_->setArgument(5,attr);} } + +// Function implementations for IfcRelReferencedInSpatialStructure +aggregate_of< ::Ifc4x3_add2::IfcSpatialReferenceSelect >::ptr Ifc4x3_add2::IfcRelReferencedInSpatialStructure::RelatedElements() const { aggregate_of_instance::ptr es = *data_->getArgument(4); return es->as< ::Ifc4x3_add2::IfcSpatialReferenceSelect >(); } +void Ifc4x3_add2::IfcRelReferencedInSpatialStructure::setRelatedElements(aggregate_of< ::Ifc4x3_add2::IfcSpatialReferenceSelect >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcSpatialElement* Ifc4x3_add2::IfcRelReferencedInSpatialStructure::RelatingStructure() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcSpatialElement>(true); } +void Ifc4x3_add2::IfcRelReferencedInSpatialStructure::setRelatingStructure(::Ifc4x3_add2::IfcSpatialElement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelReferencedInSpatialStructure::declaration() const { return *IFC4X3_ADD2_IfcRelReferencedInSpatialStructure_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelReferencedInSpatialStructure::Class() { return *IFC4X3_ADD2_IfcRelReferencedInSpatialStructure_type; } +Ifc4x3_add2::IfcRelReferencedInSpatialStructure::IfcRelReferencedInSpatialStructure(IfcEntityInstanceData* e) : IfcRelConnects((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelReferencedInSpatialStructure_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelReferencedInSpatialStructure::IfcRelReferencedInSpatialStructure(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcSpatialReferenceSelect >::ptr v5_RelatedElements, ::Ifc4x3_add2::IfcSpatialElement* v6_RelatingStructure) : IfcRelConnects((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelReferencedInSpatialStructure_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatedElements)->generalize());data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatingStructure));data_->setArgument(5,attr);} } + +// Function implementations for IfcRelSequence +::Ifc4x3_add2::IfcProcess* Ifc4x3_add2::IfcRelSequence::RelatingProcess() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcProcess>(true); } +void Ifc4x3_add2::IfcRelSequence::setRelatingProcess(::Ifc4x3_add2::IfcProcess* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcProcess* Ifc4x3_add2::IfcRelSequence::RelatedProcess() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcProcess>(true); } +void Ifc4x3_add2::IfcRelSequence::setRelatedProcess(::Ifc4x3_add2::IfcProcess* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +::Ifc4x3_add2::IfcLagTime* Ifc4x3_add2::IfcRelSequence::TimeLag() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcLagTime>(true); } +void Ifc4x3_add2::IfcRelSequence::setTimeLag(::Ifc4x3_add2::IfcLagTime* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +boost::optional< ::Ifc4x3_add2::IfcSequenceEnum::Value > Ifc4x3_add2::IfcRelSequence::SequenceType() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcSequenceEnum::FromString(*data_->getArgument(7)); } +void Ifc4x3_add2::IfcRelSequence::setSequenceType(boost::optional< ::Ifc4x3_add2::IfcSequenceEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcSequenceEnum::ToString(*v)));}data_->setArgument(7,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcRelSequence::UserDefinedSequenceType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } std::string v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcRelSequence::setUserDefinedSequenceType(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelSequence::declaration() const { return *IFC4X3_ADD2_IfcRelSequence_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelSequence::Class() { return *IFC4X3_ADD2_IfcRelSequence_type; } +Ifc4x3_add2::IfcRelSequence::IfcRelSequence(IfcEntityInstanceData* e) : IfcRelConnects((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelSequence_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelSequence::IfcRelSequence(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcProcess* v5_RelatingProcess, ::Ifc4x3_add2::IfcProcess* v6_RelatedProcess, ::Ifc4x3_add2::IfcLagTime* v7_TimeLag, boost::optional< ::Ifc4x3_add2::IfcSequenceEnum::Value > v8_SequenceType, boost::optional< std::string > v9_UserDefinedSequenceType) : IfcRelConnects((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelSequence_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatingProcess));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatedProcess));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_TimeLag));data_->setArgument(6,attr);} if (v8_SequenceType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v8_SequenceType,::Ifc4x3_add2::IfcSequenceEnum::ToString(*v8_SequenceType))));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_UserDefinedSequenceType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_UserDefinedSequenceType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcRelServicesBuildings +::Ifc4x3_add2::IfcSystem* Ifc4x3_add2::IfcRelServicesBuildings::RelatingSystem() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcSystem>(true); } +void Ifc4x3_add2::IfcRelServicesBuildings::setRelatingSystem(::Ifc4x3_add2::IfcSystem* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcSpatialElement >::ptr Ifc4x3_add2::IfcRelServicesBuildings::RelatedBuildings() const { aggregate_of_instance::ptr es = *data_->getArgument(5); return es->as< ::Ifc4x3_add2::IfcSpatialElement >(); } +void Ifc4x3_add2::IfcRelServicesBuildings::setRelatedBuildings(aggregate_of< ::Ifc4x3_add2::IfcSpatialElement >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelServicesBuildings::declaration() const { return *IFC4X3_ADD2_IfcRelServicesBuildings_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelServicesBuildings::Class() { return *IFC4X3_ADD2_IfcRelServicesBuildings_type; } +Ifc4x3_add2::IfcRelServicesBuildings::IfcRelServicesBuildings(IfcEntityInstanceData* e) : IfcRelConnects((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelServicesBuildings_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelServicesBuildings::IfcRelServicesBuildings(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcSystem* v5_RelatingSystem, aggregate_of< ::Ifc4x3_add2::IfcSpatialElement >::ptr v6_RelatedBuildings) : IfcRelConnects((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelServicesBuildings_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatingSystem));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatedBuildings)->generalize());data_->setArgument(5,attr);} } + +// Function implementations for IfcRelSpaceBoundary +::Ifc4x3_add2::IfcSpaceBoundarySelect* Ifc4x3_add2::IfcRelSpaceBoundary::RelatingSpace() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcSpaceBoundarySelect>(true); } +void Ifc4x3_add2::IfcRelSpaceBoundary::setRelatingSpace(::Ifc4x3_add2::IfcSpaceBoundarySelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcElement* Ifc4x3_add2::IfcRelSpaceBoundary::RelatedBuildingElement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcElement>(true); } +void Ifc4x3_add2::IfcRelSpaceBoundary::setRelatedBuildingElement(::Ifc4x3_add2::IfcElement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +::Ifc4x3_add2::IfcConnectionGeometry* Ifc4x3_add2::IfcRelSpaceBoundary::ConnectionGeometry() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcConnectionGeometry>(true); } +void Ifc4x3_add2::IfcRelSpaceBoundary::setConnectionGeometry(::Ifc4x3_add2::IfcConnectionGeometry* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +::Ifc4x3_add2::IfcPhysicalOrVirtualEnum::Value Ifc4x3_add2::IfcRelSpaceBoundary::PhysicalOrVirtualBoundary() const { return ::Ifc4x3_add2::IfcPhysicalOrVirtualEnum::FromString(*data_->getArgument(7)); } +void Ifc4x3_add2::IfcRelSpaceBoundary::setPhysicalOrVirtualBoundary(::Ifc4x3_add2::IfcPhysicalOrVirtualEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcPhysicalOrVirtualEnum::ToString(v)));data_->setArgument(7,attr);} } +::Ifc4x3_add2::IfcInternalOrExternalEnum::Value Ifc4x3_add2::IfcRelSpaceBoundary::InternalOrExternalBoundary() const { return ::Ifc4x3_add2::IfcInternalOrExternalEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcRelSpaceBoundary::setInternalOrExternalBoundary(::Ifc4x3_add2::IfcInternalOrExternalEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcInternalOrExternalEnum::ToString(v)));data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelSpaceBoundary::declaration() const { return *IFC4X3_ADD2_IfcRelSpaceBoundary_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelSpaceBoundary::Class() { return *IFC4X3_ADD2_IfcRelSpaceBoundary_type; } +Ifc4x3_add2::IfcRelSpaceBoundary::IfcRelSpaceBoundary(IfcEntityInstanceData* e) : IfcRelConnects((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelSpaceBoundary_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelSpaceBoundary::IfcRelSpaceBoundary(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcSpaceBoundarySelect* v5_RelatingSpace, ::Ifc4x3_add2::IfcElement* v6_RelatedBuildingElement, ::Ifc4x3_add2::IfcConnectionGeometry* v7_ConnectionGeometry, ::Ifc4x3_add2::IfcPhysicalOrVirtualEnum::Value v8_PhysicalOrVirtualBoundary, ::Ifc4x3_add2::IfcInternalOrExternalEnum::Value v9_InternalOrExternalBoundary) : IfcRelConnects((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelSpaceBoundary_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatingSpace));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatedBuildingElement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_ConnectionGeometry));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v8_PhysicalOrVirtualBoundary,::Ifc4x3_add2::IfcPhysicalOrVirtualEnum::ToString(v8_PhysicalOrVirtualBoundary))));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v9_InternalOrExternalBoundary,::Ifc4x3_add2::IfcInternalOrExternalEnum::ToString(v9_InternalOrExternalBoundary))));data_->setArgument(8,attr);} } + +// Function implementations for IfcRelSpaceBoundary1stLevel +::Ifc4x3_add2::IfcRelSpaceBoundary1stLevel* Ifc4x3_add2::IfcRelSpaceBoundary1stLevel::ParentBoundary() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(9)))->as<::Ifc4x3_add2::IfcRelSpaceBoundary1stLevel>(true); } +void Ifc4x3_add2::IfcRelSpaceBoundary1stLevel::setParentBoundary(::Ifc4x3_add2::IfcRelSpaceBoundary1stLevel* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(9,attr);} } + +::Ifc4x3_add2::IfcRelSpaceBoundary1stLevel::list::ptr Ifc4x3_add2::IfcRelSpaceBoundary1stLevel::InnerBoundaries() const { return data_->getInverse(IFC4X3_ADD2_IfcRelSpaceBoundary1stLevel_type, 9)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcRelSpaceBoundary1stLevel::declaration() const { return *IFC4X3_ADD2_IfcRelSpaceBoundary1stLevel_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelSpaceBoundary1stLevel::Class() { return *IFC4X3_ADD2_IfcRelSpaceBoundary1stLevel_type; } +Ifc4x3_add2::IfcRelSpaceBoundary1stLevel::IfcRelSpaceBoundary1stLevel(IfcEntityInstanceData* e) : IfcRelSpaceBoundary((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelSpaceBoundary1stLevel_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelSpaceBoundary1stLevel::IfcRelSpaceBoundary1stLevel(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcSpaceBoundarySelect* v5_RelatingSpace, ::Ifc4x3_add2::IfcElement* v6_RelatedBuildingElement, ::Ifc4x3_add2::IfcConnectionGeometry* v7_ConnectionGeometry, ::Ifc4x3_add2::IfcPhysicalOrVirtualEnum::Value v8_PhysicalOrVirtualBoundary, ::Ifc4x3_add2::IfcInternalOrExternalEnum::Value v9_InternalOrExternalBoundary, ::Ifc4x3_add2::IfcRelSpaceBoundary1stLevel* v10_ParentBoundary) : IfcRelSpaceBoundary((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelSpaceBoundary1stLevel_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatingSpace));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatedBuildingElement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_ConnectionGeometry));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v8_PhysicalOrVirtualBoundary,::Ifc4x3_add2::IfcPhysicalOrVirtualEnum::ToString(v8_PhysicalOrVirtualBoundary))));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v9_InternalOrExternalBoundary,::Ifc4x3_add2::IfcInternalOrExternalEnum::ToString(v9_InternalOrExternalBoundary))));data_->setArgument(8,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v10_ParentBoundary));data_->setArgument(9,attr);} } + +// Function implementations for IfcRelSpaceBoundary2ndLevel +::Ifc4x3_add2::IfcRelSpaceBoundary2ndLevel* Ifc4x3_add2::IfcRelSpaceBoundary2ndLevel::CorrespondingBoundary() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(10)))->as<::Ifc4x3_add2::IfcRelSpaceBoundary2ndLevel>(true); } +void Ifc4x3_add2::IfcRelSpaceBoundary2ndLevel::setCorrespondingBoundary(::Ifc4x3_add2::IfcRelSpaceBoundary2ndLevel* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(10,attr);} } + +::Ifc4x3_add2::IfcRelSpaceBoundary2ndLevel::list::ptr Ifc4x3_add2::IfcRelSpaceBoundary2ndLevel::Corresponds() const { return data_->getInverse(IFC4X3_ADD2_IfcRelSpaceBoundary2ndLevel_type, 10)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcRelSpaceBoundary2ndLevel::declaration() const { return *IFC4X3_ADD2_IfcRelSpaceBoundary2ndLevel_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelSpaceBoundary2ndLevel::Class() { return *IFC4X3_ADD2_IfcRelSpaceBoundary2ndLevel_type; } +Ifc4x3_add2::IfcRelSpaceBoundary2ndLevel::IfcRelSpaceBoundary2ndLevel(IfcEntityInstanceData* e) : IfcRelSpaceBoundary1stLevel((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelSpaceBoundary2ndLevel_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelSpaceBoundary2ndLevel::IfcRelSpaceBoundary2ndLevel(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcSpaceBoundarySelect* v5_RelatingSpace, ::Ifc4x3_add2::IfcElement* v6_RelatedBuildingElement, ::Ifc4x3_add2::IfcConnectionGeometry* v7_ConnectionGeometry, ::Ifc4x3_add2::IfcPhysicalOrVirtualEnum::Value v8_PhysicalOrVirtualBoundary, ::Ifc4x3_add2::IfcInternalOrExternalEnum::Value v9_InternalOrExternalBoundary, ::Ifc4x3_add2::IfcRelSpaceBoundary1stLevel* v10_ParentBoundary, ::Ifc4x3_add2::IfcRelSpaceBoundary2ndLevel* v11_CorrespondingBoundary) : IfcRelSpaceBoundary1stLevel((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelSpaceBoundary2ndLevel_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatingSpace));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatedBuildingElement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_ConnectionGeometry));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v8_PhysicalOrVirtualBoundary,::Ifc4x3_add2::IfcPhysicalOrVirtualEnum::ToString(v8_PhysicalOrVirtualBoundary))));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v9_InternalOrExternalBoundary,::Ifc4x3_add2::IfcInternalOrExternalEnum::ToString(v9_InternalOrExternalBoundary))));data_->setArgument(8,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v10_ParentBoundary));data_->setArgument(9,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v11_CorrespondingBoundary));data_->setArgument(10,attr);} } + +// Function implementations for IfcRelVoidsElement +::Ifc4x3_add2::IfcElement* Ifc4x3_add2::IfcRelVoidsElement::RelatingBuildingElement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcElement>(true); } +void Ifc4x3_add2::IfcRelVoidsElement::setRelatingBuildingElement(::Ifc4x3_add2::IfcElement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcFeatureElementSubtraction* Ifc4x3_add2::IfcRelVoidsElement::RelatedOpeningElement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcFeatureElementSubtraction>(true); } +void Ifc4x3_add2::IfcRelVoidsElement::setRelatedOpeningElement(::Ifc4x3_add2::IfcFeatureElementSubtraction* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRelVoidsElement::declaration() const { return *IFC4X3_ADD2_IfcRelVoidsElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelVoidsElement::Class() { return *IFC4X3_ADD2_IfcRelVoidsElement_type; } +Ifc4x3_add2::IfcRelVoidsElement::IfcRelVoidsElement(IfcEntityInstanceData* e) : IfcRelDecomposes((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelVoidsElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelVoidsElement::IfcRelVoidsElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcElement* v5_RelatingBuildingElement, ::Ifc4x3_add2::IfcFeatureElementSubtraction* v6_RelatedOpeningElement) : IfcRelDecomposes((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelVoidsElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_RelatingBuildingElement));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RelatedOpeningElement));data_->setArgument(5,attr);} } + +// Function implementations for IfcRelationship + + +const IfcParse::entity& Ifc4x3_add2::IfcRelationship::declaration() const { return *IFC4X3_ADD2_IfcRelationship_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRelationship::Class() { return *IFC4X3_ADD2_IfcRelationship_type; } +Ifc4x3_add2::IfcRelationship::IfcRelationship(IfcEntityInstanceData* e) : IfcRoot((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRelationship_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRelationship::IfcRelationship(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description) : IfcRoot((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRelationship_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcReparametrisedCompositeCurveSegment +double Ifc4x3_add2::IfcReparametrisedCompositeCurveSegment::ParamLength() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcReparametrisedCompositeCurveSegment::setParamLength(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcReparametrisedCompositeCurveSegment::declaration() const { return *IFC4X3_ADD2_IfcReparametrisedCompositeCurveSegment_type; } +const IfcParse::entity& Ifc4x3_add2::IfcReparametrisedCompositeCurveSegment::Class() { return *IFC4X3_ADD2_IfcReparametrisedCompositeCurveSegment_type; } +Ifc4x3_add2::IfcReparametrisedCompositeCurveSegment::IfcReparametrisedCompositeCurveSegment(IfcEntityInstanceData* e) : IfcCompositeCurveSegment((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcReparametrisedCompositeCurveSegment_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcReparametrisedCompositeCurveSegment::IfcReparametrisedCompositeCurveSegment(::Ifc4x3_add2::IfcTransitionCode::Value v1_Transition, bool v2_SameSense, ::Ifc4x3_add2::IfcCurve* v3_ParentCurve, double v4_ParamLength) : IfcCompositeCurveSegment((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcReparametrisedCompositeCurveSegment_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_Transition,::Ifc4x3_add2::IfcTransitionCode::ToString(v1_Transition))));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_SameSense));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_ParentCurve));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_ParamLength));data_->setArgument(3,attr);} } + +// Function implementations for IfcRepresentation +::Ifc4x3_add2::IfcRepresentationContext* Ifc4x3_add2::IfcRepresentation::ContextOfItems() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcRepresentationContext>(true); } +void Ifc4x3_add2::IfcRepresentation::setContextOfItems(::Ifc4x3_add2::IfcRepresentationContext* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcRepresentation::RepresentationIdentifier() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcRepresentation::setRepresentationIdentifier(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcRepresentation::RepresentationType() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcRepresentation::setRepresentationType(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcRepresentationItem >::ptr Ifc4x3_add2::IfcRepresentation::Items() const { aggregate_of_instance::ptr es = *data_->getArgument(3); return es->as< ::Ifc4x3_add2::IfcRepresentationItem >(); } +void Ifc4x3_add2::IfcRepresentation::setItems(aggregate_of< ::Ifc4x3_add2::IfcRepresentationItem >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(3,attr);} } + +::Ifc4x3_add2::IfcRepresentationMap::list::ptr Ifc4x3_add2::IfcRepresentation::RepresentationMap() const { return data_->getInverse(IFC4X3_ADD2_IfcRepresentationMap_type, 1)->as(); } +::Ifc4x3_add2::IfcPresentationLayerAssignment::list::ptr Ifc4x3_add2::IfcRepresentation::LayerAssignments() const { return data_->getInverse(IFC4X3_ADD2_IfcPresentationLayerAssignment_type, 2)->as(); } +::Ifc4x3_add2::IfcProductRepresentation::list::ptr Ifc4x3_add2::IfcRepresentation::OfProductRepresentation() const { return data_->getInverse(IFC4X3_ADD2_IfcProductRepresentation_type, 2)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcRepresentation::declaration() const { return *IFC4X3_ADD2_IfcRepresentation_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRepresentation::Class() { return *IFC4X3_ADD2_IfcRepresentation_type; } +Ifc4x3_add2::IfcRepresentation::IfcRepresentation(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRepresentation_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRepresentation::IfcRepresentation(::Ifc4x3_add2::IfcRepresentationContext* v1_ContextOfItems, boost::optional< std::string > v2_RepresentationIdentifier, boost::optional< std::string > v3_RepresentationType, aggregate_of< ::Ifc4x3_add2::IfcRepresentationItem >::ptr v4_Items) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRepresentation_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_ContextOfItems));data_->setArgument(0,attr);} if (v2_RepresentationIdentifier) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_RepresentationIdentifier));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_RepresentationType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_RepresentationType));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Items)->generalize());data_->setArgument(3,attr);} } + +// Function implementations for IfcRepresentationContext +boost::optional< std::string > Ifc4x3_add2::IfcRepresentationContext::ContextIdentifier() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcRepresentationContext::setContextIdentifier(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcRepresentationContext::ContextType() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcRepresentationContext::setContextType(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } + +::Ifc4x3_add2::IfcRepresentation::list::ptr Ifc4x3_add2::IfcRepresentationContext::RepresentationsInContext() const { return data_->getInverse(IFC4X3_ADD2_IfcRepresentation_type, 0)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcRepresentationContext::declaration() const { return *IFC4X3_ADD2_IfcRepresentationContext_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRepresentationContext::Class() { return *IFC4X3_ADD2_IfcRepresentationContext_type; } +Ifc4x3_add2::IfcRepresentationContext::IfcRepresentationContext(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRepresentationContext_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRepresentationContext::IfcRepresentationContext(boost::optional< std::string > v1_ContextIdentifier, boost::optional< std::string > v2_ContextType) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRepresentationContext_type); if (v1_ContextIdentifier) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_ContextIdentifier));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_ContextType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ContextType));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } } + +// Function implementations for IfcRepresentationItem + +::Ifc4x3_add2::IfcPresentationLayerAssignment::list::ptr Ifc4x3_add2::IfcRepresentationItem::LayerAssignment() const { return data_->getInverse(IFC4X3_ADD2_IfcPresentationLayerAssignment_type, 2)->as(); } +::Ifc4x3_add2::IfcStyledItem::list::ptr Ifc4x3_add2::IfcRepresentationItem::StyledByItem() const { return data_->getInverse(IFC4X3_ADD2_IfcStyledItem_type, 0)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcRepresentationItem::declaration() const { return *IFC4X3_ADD2_IfcRepresentationItem_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRepresentationItem::Class() { return *IFC4X3_ADD2_IfcRepresentationItem_type; } +Ifc4x3_add2::IfcRepresentationItem::IfcRepresentationItem(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRepresentationItem_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRepresentationItem::IfcRepresentationItem() : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRepresentationItem_type); } + +// Function implementations for IfcRepresentationMap +::Ifc4x3_add2::IfcAxis2Placement* Ifc4x3_add2::IfcRepresentationMap::MappingOrigin() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcAxis2Placement>(true); } +void Ifc4x3_add2::IfcRepresentationMap::setMappingOrigin(::Ifc4x3_add2::IfcAxis2Placement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcRepresentation* Ifc4x3_add2::IfcRepresentationMap::MappedRepresentation() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcRepresentation>(true); } +void Ifc4x3_add2::IfcRepresentationMap::setMappedRepresentation(::Ifc4x3_add2::IfcRepresentation* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + +::Ifc4x3_add2::IfcShapeAspect::list::ptr Ifc4x3_add2::IfcRepresentationMap::HasShapeAspects() const { return data_->getInverse(IFC4X3_ADD2_IfcShapeAspect_type, 4)->as(); } +::Ifc4x3_add2::IfcMappedItem::list::ptr Ifc4x3_add2::IfcRepresentationMap::MapUsage() const { return data_->getInverse(IFC4X3_ADD2_IfcMappedItem_type, 0)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcRepresentationMap::declaration() const { return *IFC4X3_ADD2_IfcRepresentationMap_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRepresentationMap::Class() { return *IFC4X3_ADD2_IfcRepresentationMap_type; } +Ifc4x3_add2::IfcRepresentationMap::IfcRepresentationMap(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRepresentationMap_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRepresentationMap::IfcRepresentationMap(::Ifc4x3_add2::IfcAxis2Placement* v1_MappingOrigin, ::Ifc4x3_add2::IfcRepresentation* v2_MappedRepresentation) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRepresentationMap_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_MappingOrigin));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_MappedRepresentation));data_->setArgument(1,attr);} } + +// Function implementations for IfcResource +boost::optional< std::string > Ifc4x3_add2::IfcResource::Identification() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcResource::setIdentification(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcResource::LongDescription() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } std::string v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcResource::setLongDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } + +::Ifc4x3_add2::IfcRelAssignsToResource::list::ptr Ifc4x3_add2::IfcResource::ResourceOf() const { return data_->getInverse(IFC4X3_ADD2_IfcRelAssignsToResource_type, 6)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcResource::declaration() const { return *IFC4X3_ADD2_IfcResource_type; } +const IfcParse::entity& Ifc4x3_add2::IfcResource::Class() { return *IFC4X3_ADD2_IfcResource_type; } +Ifc4x3_add2::IfcResource::IfcResource(IfcEntityInstanceData* e) : IfcObject((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcResource_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcResource::IfcResource(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription) : IfcObject((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcResource_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Identification));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_LongDescription));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } } + +// Function implementations for IfcResourceApprovalRelationship +aggregate_of< ::Ifc4x3_add2::IfcResourceObjectSelect >::ptr Ifc4x3_add2::IfcResourceApprovalRelationship::RelatedResourceObjects() const { aggregate_of_instance::ptr es = *data_->getArgument(2); return es->as< ::Ifc4x3_add2::IfcResourceObjectSelect >(); } +void Ifc4x3_add2::IfcResourceApprovalRelationship::setRelatedResourceObjects(aggregate_of< ::Ifc4x3_add2::IfcResourceObjectSelect >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcApproval* Ifc4x3_add2::IfcResourceApprovalRelationship::RelatingApproval() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcApproval>(true); } +void Ifc4x3_add2::IfcResourceApprovalRelationship::setRelatingApproval(::Ifc4x3_add2::IfcApproval* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcResourceApprovalRelationship::declaration() const { return *IFC4X3_ADD2_IfcResourceApprovalRelationship_type; } +const IfcParse::entity& Ifc4x3_add2::IfcResourceApprovalRelationship::Class() { return *IFC4X3_ADD2_IfcResourceApprovalRelationship_type; } +Ifc4x3_add2::IfcResourceApprovalRelationship::IfcResourceApprovalRelationship(IfcEntityInstanceData* e) : IfcResourceLevelRelationship((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcResourceApprovalRelationship_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcResourceApprovalRelationship::IfcResourceApprovalRelationship(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_add2::IfcResourceObjectSelect >::ptr v3_RelatedResourceObjects, ::Ifc4x3_add2::IfcApproval* v4_RelatingApproval) : IfcResourceLevelRelationship((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcResourceApprovalRelationship_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_RelatedResourceObjects)->generalize());data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_RelatingApproval));data_->setArgument(3,attr);} } + +// Function implementations for IfcResourceConstraintRelationship +::Ifc4x3_add2::IfcConstraint* Ifc4x3_add2::IfcResourceConstraintRelationship::RelatingConstraint() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcConstraint>(true); } +void Ifc4x3_add2::IfcResourceConstraintRelationship::setRelatingConstraint(::Ifc4x3_add2::IfcConstraint* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcResourceObjectSelect >::ptr Ifc4x3_add2::IfcResourceConstraintRelationship::RelatedResourceObjects() const { aggregate_of_instance::ptr es = *data_->getArgument(3); return es->as< ::Ifc4x3_add2::IfcResourceObjectSelect >(); } +void Ifc4x3_add2::IfcResourceConstraintRelationship::setRelatedResourceObjects(aggregate_of< ::Ifc4x3_add2::IfcResourceObjectSelect >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcResourceConstraintRelationship::declaration() const { return *IFC4X3_ADD2_IfcResourceConstraintRelationship_type; } +const IfcParse::entity& Ifc4x3_add2::IfcResourceConstraintRelationship::Class() { return *IFC4X3_ADD2_IfcResourceConstraintRelationship_type; } +Ifc4x3_add2::IfcResourceConstraintRelationship::IfcResourceConstraintRelationship(IfcEntityInstanceData* e) : IfcResourceLevelRelationship((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcResourceConstraintRelationship_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcResourceConstraintRelationship::IfcResourceConstraintRelationship(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcConstraint* v3_RelatingConstraint, aggregate_of< ::Ifc4x3_add2::IfcResourceObjectSelect >::ptr v4_RelatedResourceObjects) : IfcResourceLevelRelationship((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcResourceConstraintRelationship_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_RelatingConstraint));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_RelatedResourceObjects)->generalize());data_->setArgument(3,attr);} } + +// Function implementations for IfcResourceLevelRelationship +boost::optional< std::string > Ifc4x3_add2::IfcResourceLevelRelationship::Name() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcResourceLevelRelationship::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcResourceLevelRelationship::Description() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcResourceLevelRelationship::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcResourceLevelRelationship::declaration() const { return *IFC4X3_ADD2_IfcResourceLevelRelationship_type; } +const IfcParse::entity& Ifc4x3_add2::IfcResourceLevelRelationship::Class() { return *IFC4X3_ADD2_IfcResourceLevelRelationship_type; } +Ifc4x3_add2::IfcResourceLevelRelationship::IfcResourceLevelRelationship(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcResourceLevelRelationship_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcResourceLevelRelationship::IfcResourceLevelRelationship(boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcResourceLevelRelationship_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } } + +// Function implementations for IfcResourceTime +boost::optional< std::string > Ifc4x3_add2::IfcResourceTime::ScheduleWork() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } std::string v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcResourceTime::setScheduleWork(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +boost::optional< double > Ifc4x3_add2::IfcResourceTime::ScheduleUsage() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcResourceTime::setScheduleUsage(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcResourceTime::ScheduleStart() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcResourceTime::setScheduleStart(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcResourceTime::ScheduleFinish() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } std::string v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcResourceTime::setScheduleFinish(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcResourceTime::ScheduleContour() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } std::string v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcResourceTime::setScheduleContour(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcResourceTime::LevelingDelay() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } std::string v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcResourceTime::setLevelingDelay(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } +boost::optional< bool > Ifc4x3_add2::IfcResourceTime::IsOverAllocated() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } bool v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcResourceTime::setIsOverAllocated(boost::optional< bool > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(9,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcResourceTime::StatusTime() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } std::string v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcResourceTime::setStatusTime(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcResourceTime::ActualWork() const { if(!data_->getArgument(11) || data_->getArgument(11)->isNull()) { return boost::none; } std::string v = *data_->getArgument(11); return v; } +void Ifc4x3_add2::IfcResourceTime::setActualWork(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(11,attr);} } +boost::optional< double > Ifc4x3_add2::IfcResourceTime::ActualUsage() const { if(!data_->getArgument(12) || data_->getArgument(12)->isNull()) { return boost::none; } double v = *data_->getArgument(12); return v; } +void Ifc4x3_add2::IfcResourceTime::setActualUsage(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(12,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcResourceTime::ActualStart() const { if(!data_->getArgument(13) || data_->getArgument(13)->isNull()) { return boost::none; } std::string v = *data_->getArgument(13); return v; } +void Ifc4x3_add2::IfcResourceTime::setActualStart(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(13,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcResourceTime::ActualFinish() const { if(!data_->getArgument(14) || data_->getArgument(14)->isNull()) { return boost::none; } std::string v = *data_->getArgument(14); return v; } +void Ifc4x3_add2::IfcResourceTime::setActualFinish(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(14,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcResourceTime::RemainingWork() const { if(!data_->getArgument(15) || data_->getArgument(15)->isNull()) { return boost::none; } std::string v = *data_->getArgument(15); return v; } +void Ifc4x3_add2::IfcResourceTime::setRemainingWork(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(15,attr);} } +boost::optional< double > Ifc4x3_add2::IfcResourceTime::RemainingUsage() const { if(!data_->getArgument(16) || data_->getArgument(16)->isNull()) { return boost::none; } double v = *data_->getArgument(16); return v; } +void Ifc4x3_add2::IfcResourceTime::setRemainingUsage(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(16,attr);} } +boost::optional< double > Ifc4x3_add2::IfcResourceTime::Completion() const { if(!data_->getArgument(17) || data_->getArgument(17)->isNull()) { return boost::none; } double v = *data_->getArgument(17); return v; } +void Ifc4x3_add2::IfcResourceTime::setCompletion(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(17,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcResourceTime::declaration() const { return *IFC4X3_ADD2_IfcResourceTime_type; } +const IfcParse::entity& Ifc4x3_add2::IfcResourceTime::Class() { return *IFC4X3_ADD2_IfcResourceTime_type; } +Ifc4x3_add2::IfcResourceTime::IfcResourceTime(IfcEntityInstanceData* e) : IfcSchedulingTime((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcResourceTime_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcResourceTime::IfcResourceTime(boost::optional< std::string > v1_Name, boost::optional< ::Ifc4x3_add2::IfcDataOriginEnum::Value > v2_DataOrigin, boost::optional< std::string > v3_UserDefinedDataOrigin, boost::optional< std::string > v4_ScheduleWork, boost::optional< double > v5_ScheduleUsage, boost::optional< std::string > v6_ScheduleStart, boost::optional< std::string > v7_ScheduleFinish, boost::optional< std::string > v8_ScheduleContour, boost::optional< std::string > v9_LevelingDelay, boost::optional< bool > v10_IsOverAllocated, boost::optional< std::string > v11_StatusTime, boost::optional< std::string > v12_ActualWork, boost::optional< double > v13_ActualUsage, boost::optional< std::string > v14_ActualStart, boost::optional< std::string > v15_ActualFinish, boost::optional< std::string > v16_RemainingWork, boost::optional< double > v17_RemainingUsage, boost::optional< double > v18_Completion) : IfcSchedulingTime((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcResourceTime_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_DataOrigin) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v2_DataOrigin,::Ifc4x3_add2::IfcDataOriginEnum::ToString(*v2_DataOrigin))));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_UserDefinedDataOrigin) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_UserDefinedDataOrigin));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_ScheduleWork) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_ScheduleWork));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ScheduleUsage) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ScheduleUsage));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_ScheduleStart) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_ScheduleStart));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_ScheduleFinish) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_ScheduleFinish));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_ScheduleContour) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_ScheduleContour));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_LevelingDelay) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_LevelingDelay));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_IsOverAllocated) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_IsOverAllocated));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_StatusTime) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_StatusTime));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } if (v12_ActualWork) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v12_ActualWork));data_->setArgument(11,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(11, attr); } if (v13_ActualUsage) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v13_ActualUsage));data_->setArgument(12,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(12, attr); } if (v14_ActualStart) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v14_ActualStart));data_->setArgument(13,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(13, attr); } if (v15_ActualFinish) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v15_ActualFinish));data_->setArgument(14,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(14, attr); } if (v16_RemainingWork) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v16_RemainingWork));data_->setArgument(15,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(15, attr); } if (v17_RemainingUsage) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v17_RemainingUsage));data_->setArgument(16,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(16, attr); } if (v18_Completion) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v18_Completion));data_->setArgument(17,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(17, attr); } } + +// Function implementations for IfcRevolvedAreaSolid +::Ifc4x3_add2::IfcAxis1Placement* Ifc4x3_add2::IfcRevolvedAreaSolid::Axis() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcAxis1Placement>(true); } +void Ifc4x3_add2::IfcRevolvedAreaSolid::setAxis(::Ifc4x3_add2::IfcAxis1Placement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +double Ifc4x3_add2::IfcRevolvedAreaSolid::Angle() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcRevolvedAreaSolid::setAngle(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRevolvedAreaSolid::declaration() const { return *IFC4X3_ADD2_IfcRevolvedAreaSolid_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRevolvedAreaSolid::Class() { return *IFC4X3_ADD2_IfcRevolvedAreaSolid_type; } +Ifc4x3_add2::IfcRevolvedAreaSolid::IfcRevolvedAreaSolid(IfcEntityInstanceData* e) : IfcSweptAreaSolid((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRevolvedAreaSolid_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRevolvedAreaSolid::IfcRevolvedAreaSolid(::Ifc4x3_add2::IfcProfileDef* v1_SweptArea, ::Ifc4x3_add2::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_add2::IfcAxis1Placement* v3_Axis, double v4_Angle) : IfcSweptAreaSolid((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRevolvedAreaSolid_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_SweptArea));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Position));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Axis));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Angle));data_->setArgument(3,attr);} } + +// Function implementations for IfcRevolvedAreaSolidTapered +::Ifc4x3_add2::IfcProfileDef* Ifc4x3_add2::IfcRevolvedAreaSolidTapered::EndSweptArea() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcProfileDef>(true); } +void Ifc4x3_add2::IfcRevolvedAreaSolidTapered::setEndSweptArea(::Ifc4x3_add2::IfcProfileDef* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRevolvedAreaSolidTapered::declaration() const { return *IFC4X3_ADD2_IfcRevolvedAreaSolidTapered_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRevolvedAreaSolidTapered::Class() { return *IFC4X3_ADD2_IfcRevolvedAreaSolidTapered_type; } +Ifc4x3_add2::IfcRevolvedAreaSolidTapered::IfcRevolvedAreaSolidTapered(IfcEntityInstanceData* e) : IfcRevolvedAreaSolid((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRevolvedAreaSolidTapered_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRevolvedAreaSolidTapered::IfcRevolvedAreaSolidTapered(::Ifc4x3_add2::IfcProfileDef* v1_SweptArea, ::Ifc4x3_add2::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_add2::IfcAxis1Placement* v3_Axis, double v4_Angle, ::Ifc4x3_add2::IfcProfileDef* v5_EndSweptArea) : IfcRevolvedAreaSolid((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRevolvedAreaSolidTapered_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_SweptArea));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Position));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Axis));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Angle));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_EndSweptArea));data_->setArgument(4,attr);} } + +// Function implementations for IfcRightCircularCone +double Ifc4x3_add2::IfcRightCircularCone::Height() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcRightCircularCone::setHeight(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +double Ifc4x3_add2::IfcRightCircularCone::BottomRadius() const { double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcRightCircularCone::setBottomRadius(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRightCircularCone::declaration() const { return *IFC4X3_ADD2_IfcRightCircularCone_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRightCircularCone::Class() { return *IFC4X3_ADD2_IfcRightCircularCone_type; } +Ifc4x3_add2::IfcRightCircularCone::IfcRightCircularCone(IfcEntityInstanceData* e) : IfcCsgPrimitive3D((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRightCircularCone_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRightCircularCone::IfcRightCircularCone(::Ifc4x3_add2::IfcAxis2Placement3D* v1_Position, double v2_Height, double v3_BottomRadius) : IfcCsgPrimitive3D((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRightCircularCone_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Position));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Height));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_BottomRadius));data_->setArgument(2,attr);} } + +// Function implementations for IfcRightCircularCylinder +double Ifc4x3_add2::IfcRightCircularCylinder::Height() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcRightCircularCylinder::setHeight(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +double Ifc4x3_add2::IfcRightCircularCylinder::Radius() const { double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcRightCircularCylinder::setRadius(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRightCircularCylinder::declaration() const { return *IFC4X3_ADD2_IfcRightCircularCylinder_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRightCircularCylinder::Class() { return *IFC4X3_ADD2_IfcRightCircularCylinder_type; } +Ifc4x3_add2::IfcRightCircularCylinder::IfcRightCircularCylinder(IfcEntityInstanceData* e) : IfcCsgPrimitive3D((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRightCircularCylinder_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRightCircularCylinder::IfcRightCircularCylinder(::Ifc4x3_add2::IfcAxis2Placement3D* v1_Position, double v2_Height, double v3_Radius) : IfcCsgPrimitive3D((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRightCircularCylinder_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Position));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Height));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Radius));data_->setArgument(2,attr);} } + +// Function implementations for IfcRigidOperation +::Ifc4x3_add2::IfcMeasureValue* Ifc4x3_add2::IfcRigidOperation::FirstCoordinate() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcMeasureValue>(true); } +void Ifc4x3_add2::IfcRigidOperation::setFirstCoordinate(::Ifc4x3_add2::IfcMeasureValue* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcMeasureValue* Ifc4x3_add2::IfcRigidOperation::SecondCoordinate() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcMeasureValue>(true); } +void Ifc4x3_add2::IfcRigidOperation::setSecondCoordinate(::Ifc4x3_add2::IfcMeasureValue* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +boost::optional< double > Ifc4x3_add2::IfcRigidOperation::Height() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcRigidOperation::setHeight(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRigidOperation::declaration() const { return *IFC4X3_ADD2_IfcRigidOperation_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRigidOperation::Class() { return *IFC4X3_ADD2_IfcRigidOperation_type; } +Ifc4x3_add2::IfcRigidOperation::IfcRigidOperation(IfcEntityInstanceData* e) : IfcCoordinateOperation((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRigidOperation_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRigidOperation::IfcRigidOperation(::Ifc4x3_add2::IfcCoordinateReferenceSystemSelect* v1_SourceCRS, ::Ifc4x3_add2::IfcCoordinateReferenceSystem* v2_TargetCRS, ::Ifc4x3_add2::IfcMeasureValue* v3_FirstCoordinate, ::Ifc4x3_add2::IfcMeasureValue* v4_SecondCoordinate, boost::optional< double > v5_Height) : IfcCoordinateOperation((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRigidOperation_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_SourceCRS));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_TargetCRS));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_FirstCoordinate));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_SecondCoordinate));data_->setArgument(3,attr);} if (v5_Height) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Height));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcRoad +boost::optional< ::Ifc4x3_add2::IfcRoadTypeEnum::Value > Ifc4x3_add2::IfcRoad::PredefinedType() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcRoadTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcRoad::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcRoadTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcRoadTypeEnum::ToString(*v)));}data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRoad::declaration() const { return *IFC4X3_ADD2_IfcRoad_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRoad::Class() { return *IFC4X3_ADD2_IfcRoad_type; } +Ifc4x3_add2::IfcRoad::IfcRoad(IfcEntityInstanceData* e) : IfcFacility((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRoad_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRoad::IfcRoad(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, boost::optional< ::Ifc4x3_add2::IfcRoadTypeEnum::Value > v10_PredefinedType) : IfcFacility((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRoad_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongName));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_CompositionType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_CompositionType,::Ifc4x3_add2::IfcElementCompositionEnum::ToString(*v9_CompositionType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v10_PredefinedType,::Ifc4x3_add2::IfcRoadTypeEnum::ToString(*v10_PredefinedType))));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } } + +// Function implementations for IfcRoadPart +boost::optional< ::Ifc4x3_add2::IfcRoadPartTypeEnum::Value > Ifc4x3_add2::IfcRoadPart::PredefinedType() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcRoadPartTypeEnum::FromString(*data_->getArgument(10)); } +void Ifc4x3_add2::IfcRoadPart::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcRoadPartTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcRoadPartTypeEnum::ToString(*v)));}data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRoadPart::declaration() const { return *IFC4X3_ADD2_IfcRoadPart_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRoadPart::Class() { return *IFC4X3_ADD2_IfcRoadPart_type; } +Ifc4x3_add2::IfcRoadPart::IfcRoadPart(IfcEntityInstanceData* e) : IfcFacilityPart((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRoadPart_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRoadPart::IfcRoadPart(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, ::Ifc4x3_add2::IfcFacilityUsageEnum::Value v10_UsageType, boost::optional< ::Ifc4x3_add2::IfcRoadPartTypeEnum::Value > v11_PredefinedType) : IfcFacilityPart((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRoadPart_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongName));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_CompositionType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_CompositionType,::Ifc4x3_add2::IfcElementCompositionEnum::ToString(*v9_CompositionType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_UsageType,::Ifc4x3_add2::IfcFacilityUsageEnum::ToString(v10_UsageType))));data_->setArgument(9,attr);} if (v11_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v11_PredefinedType,::Ifc4x3_add2::IfcRoadPartTypeEnum::ToString(*v11_PredefinedType))));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } } + +// Function implementations for IfcRoof +boost::optional< ::Ifc4x3_add2::IfcRoofTypeEnum::Value > Ifc4x3_add2::IfcRoof::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcRoofTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcRoof::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcRoofTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcRoofTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRoof::declaration() const { return *IFC4X3_ADD2_IfcRoof_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRoof::Class() { return *IFC4X3_ADD2_IfcRoof_type; } +Ifc4x3_add2::IfcRoof::IfcRoof(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRoof_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRoof::IfcRoof(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcRoofTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRoof_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcRoofTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcRoofType +::Ifc4x3_add2::IfcRoofTypeEnum::Value Ifc4x3_add2::IfcRoofType::PredefinedType() const { return ::Ifc4x3_add2::IfcRoofTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcRoofType::setPredefinedType(::Ifc4x3_add2::IfcRoofTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcRoofTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRoofType::declaration() const { return *IFC4X3_ADD2_IfcRoofType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRoofType::Class() { return *IFC4X3_ADD2_IfcRoofType_type; } +Ifc4x3_add2::IfcRoofType::IfcRoofType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRoofType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRoofType::IfcRoofType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcRoofTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRoofType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcRoofTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcRoot +std::string Ifc4x3_add2::IfcRoot::GlobalId() const { std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcRoot::setGlobalId(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcOwnerHistory* Ifc4x3_add2::IfcRoot::OwnerHistory() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcOwnerHistory>(true); } +void Ifc4x3_add2::IfcRoot::setOwnerHistory(::Ifc4x3_add2::IfcOwnerHistory* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcRoot::Name() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcRoot::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcRoot::Description() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } std::string v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcRoot::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRoot::declaration() const { return *IFC4X3_ADD2_IfcRoot_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRoot::Class() { return *IFC4X3_ADD2_IfcRoot_type; } +Ifc4x3_add2::IfcRoot::IfcRoot(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRoot_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRoot::IfcRoot(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRoot_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcRoundedRectangleProfileDef +double Ifc4x3_add2::IfcRoundedRectangleProfileDef::RoundingRadius() const { double v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcRoundedRectangleProfileDef::setRoundingRadius(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcRoundedRectangleProfileDef::declaration() const { return *IFC4X3_ADD2_IfcRoundedRectangleProfileDef_type; } +const IfcParse::entity& Ifc4x3_add2::IfcRoundedRectangleProfileDef::Class() { return *IFC4X3_ADD2_IfcRoundedRectangleProfileDef_type; } +Ifc4x3_add2::IfcRoundedRectangleProfileDef::IfcRoundedRectangleProfileDef(IfcEntityInstanceData* e) : IfcRectangleProfileDef((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcRoundedRectangleProfileDef_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcRoundedRectangleProfileDef::IfcRoundedRectangleProfileDef(::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_XDim, double v5_YDim, double v6_RoundingRadius) : IfcRectangleProfileDef((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcRoundedRectangleProfileDef_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_ProfileType,::Ifc4x3_add2::IfcProfileTypeEnum::ToString(v1_ProfileType))));data_->setArgument(0,attr);} if (v2_ProfileName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ProfileName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Position));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_XDim));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_YDim));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_RoundingRadius));data_->setArgument(5,attr);} } + +// Function implementations for IfcSIUnit +boost::optional< ::Ifc4x3_add2::IfcSIPrefix::Value > Ifc4x3_add2::IfcSIUnit::Prefix() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcSIPrefix::FromString(*data_->getArgument(2)); } +void Ifc4x3_add2::IfcSIUnit::setPrefix(boost::optional< ::Ifc4x3_add2::IfcSIPrefix::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcSIPrefix::ToString(*v)));}data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcSIUnitName::Value Ifc4x3_add2::IfcSIUnit::Name() const { return ::Ifc4x3_add2::IfcSIUnitName::FromString(*data_->getArgument(3)); } +void Ifc4x3_add2::IfcSIUnit::setName(::Ifc4x3_add2::IfcSIUnitName::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcSIUnitName::ToString(v)));data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSIUnit::declaration() const { return *IFC4X3_ADD2_IfcSIUnit_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSIUnit::Class() { return *IFC4X3_ADD2_IfcSIUnit_type; } +Ifc4x3_add2::IfcSIUnit::IfcSIUnit(IfcEntityInstanceData* e) : IfcNamedUnit((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSIUnit_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSIUnit::IfcSIUnit(::Ifc4x3_add2::IfcUnitEnum::Value v2_UnitType, boost::optional< ::Ifc4x3_add2::IfcSIPrefix::Value > v3_Prefix, ::Ifc4x3_add2::IfcSIUnitName::Value v4_Name) : IfcNamedUnit((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSIUnit_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::Derived());data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v2_UnitType,::Ifc4x3_add2::IfcUnitEnum::ToString(v2_UnitType))));data_->setArgument(1,attr);} if (v3_Prefix) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v3_Prefix,::Ifc4x3_add2::IfcSIPrefix::ToString(*v3_Prefix))));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v4_Name,::Ifc4x3_add2::IfcSIUnitName::ToString(v4_Name))));data_->setArgument(3,attr);} } + +// Function implementations for IfcSanitaryTerminal +boost::optional< ::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::Value > Ifc4x3_add2::IfcSanitaryTerminal::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcSanitaryTerminal::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSanitaryTerminal::declaration() const { return *IFC4X3_ADD2_IfcSanitaryTerminal_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSanitaryTerminal::Class() { return *IFC4X3_ADD2_IfcSanitaryTerminal_type; } +Ifc4x3_add2::IfcSanitaryTerminal::IfcSanitaryTerminal(IfcEntityInstanceData* e) : IfcFlowTerminal((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSanitaryTerminal_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSanitaryTerminal::IfcSanitaryTerminal(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSanitaryTerminal_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcSanitaryTerminalType +::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::Value Ifc4x3_add2::IfcSanitaryTerminalType::PredefinedType() const { return ::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcSanitaryTerminalType::setPredefinedType(::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSanitaryTerminalType::declaration() const { return *IFC4X3_ADD2_IfcSanitaryTerminalType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSanitaryTerminalType::Class() { return *IFC4X3_ADD2_IfcSanitaryTerminalType_type; } +Ifc4x3_add2::IfcSanitaryTerminalType::IfcSanitaryTerminalType(IfcEntityInstanceData* e) : IfcFlowTerminalType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSanitaryTerminalType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSanitaryTerminalType::IfcSanitaryTerminalType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSanitaryTerminalType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcSchedulingTime +boost::optional< std::string > Ifc4x3_add2::IfcSchedulingTime::Name() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcSchedulingTime::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } +boost::optional< ::Ifc4x3_add2::IfcDataOriginEnum::Value > Ifc4x3_add2::IfcSchedulingTime::DataOrigin() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcDataOriginEnum::FromString(*data_->getArgument(1)); } +void Ifc4x3_add2::IfcSchedulingTime::setDataOrigin(boost::optional< ::Ifc4x3_add2::IfcDataOriginEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcDataOriginEnum::ToString(*v)));}data_->setArgument(1,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcSchedulingTime::UserDefinedDataOrigin() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcSchedulingTime::setUserDefinedDataOrigin(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSchedulingTime::declaration() const { return *IFC4X3_ADD2_IfcSchedulingTime_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSchedulingTime::Class() { return *IFC4X3_ADD2_IfcSchedulingTime_type; } +Ifc4x3_add2::IfcSchedulingTime::IfcSchedulingTime(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSchedulingTime_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSchedulingTime::IfcSchedulingTime(boost::optional< std::string > v1_Name, boost::optional< ::Ifc4x3_add2::IfcDataOriginEnum::Value > v2_DataOrigin, boost::optional< std::string > v3_UserDefinedDataOrigin) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSchedulingTime_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_DataOrigin) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v2_DataOrigin,::Ifc4x3_add2::IfcDataOriginEnum::ToString(*v2_DataOrigin))));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_UserDefinedDataOrigin) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_UserDefinedDataOrigin));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } } + +// Function implementations for IfcSeamCurve + + +const IfcParse::entity& Ifc4x3_add2::IfcSeamCurve::declaration() const { return *IFC4X3_ADD2_IfcSeamCurve_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSeamCurve::Class() { return *IFC4X3_ADD2_IfcSeamCurve_type; } +Ifc4x3_add2::IfcSeamCurve::IfcSeamCurve(IfcEntityInstanceData* e) : IfcSurfaceCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSeamCurve_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSeamCurve::IfcSeamCurve(::Ifc4x3_add2::IfcCurve* v1_Curve3D, aggregate_of< ::Ifc4x3_add2::IfcPcurve >::ptr v2_AssociatedGeometry, ::Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::Value v3_MasterRepresentation) : IfcSurfaceCurve((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSeamCurve_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Curve3D));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_AssociatedGeometry)->generalize());data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v3_MasterRepresentation,::Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::ToString(v3_MasterRepresentation))));data_->setArgument(2,attr);} } + +// Function implementations for IfcSecondOrderPolynomialSpiral +double Ifc4x3_add2::IfcSecondOrderPolynomialSpiral::QuadraticTerm() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcSecondOrderPolynomialSpiral::setQuadraticTerm(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +boost::optional< double > Ifc4x3_add2::IfcSecondOrderPolynomialSpiral::LinearTerm() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcSecondOrderPolynomialSpiral::setLinearTerm(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< double > Ifc4x3_add2::IfcSecondOrderPolynomialSpiral::ConstantTerm() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcSecondOrderPolynomialSpiral::setConstantTerm(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSecondOrderPolynomialSpiral::declaration() const { return *IFC4X3_ADD2_IfcSecondOrderPolynomialSpiral_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSecondOrderPolynomialSpiral::Class() { return *IFC4X3_ADD2_IfcSecondOrderPolynomialSpiral_type; } +Ifc4x3_add2::IfcSecondOrderPolynomialSpiral::IfcSecondOrderPolynomialSpiral(IfcEntityInstanceData* e) : IfcSpiral((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSecondOrderPolynomialSpiral_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSecondOrderPolynomialSpiral::IfcSecondOrderPolynomialSpiral(::Ifc4x3_add2::IfcAxis2Placement* v1_Position, double v2_QuadraticTerm, boost::optional< double > v3_LinearTerm, boost::optional< double > v4_ConstantTerm) : IfcSpiral((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSecondOrderPolynomialSpiral_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Position));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_QuadraticTerm));data_->setArgument(1,attr);} if (v3_LinearTerm) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_LinearTerm));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_ConstantTerm) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_ConstantTerm));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcSectionProperties +::Ifc4x3_add2::IfcSectionTypeEnum::Value Ifc4x3_add2::IfcSectionProperties::SectionType() const { return ::Ifc4x3_add2::IfcSectionTypeEnum::FromString(*data_->getArgument(0)); } +void Ifc4x3_add2::IfcSectionProperties::setSectionType(::Ifc4x3_add2::IfcSectionTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcSectionTypeEnum::ToString(v)));data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcProfileDef* Ifc4x3_add2::IfcSectionProperties::StartProfile() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcProfileDef>(true); } +void Ifc4x3_add2::IfcSectionProperties::setStartProfile(::Ifc4x3_add2::IfcProfileDef* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcProfileDef* Ifc4x3_add2::IfcSectionProperties::EndProfile() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcProfileDef>(true); } +void Ifc4x3_add2::IfcSectionProperties::setEndProfile(::Ifc4x3_add2::IfcProfileDef* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSectionProperties::declaration() const { return *IFC4X3_ADD2_IfcSectionProperties_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSectionProperties::Class() { return *IFC4X3_ADD2_IfcSectionProperties_type; } +Ifc4x3_add2::IfcSectionProperties::IfcSectionProperties(IfcEntityInstanceData* e) : IfcPreDefinedProperties((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSectionProperties_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSectionProperties::IfcSectionProperties(::Ifc4x3_add2::IfcSectionTypeEnum::Value v1_SectionType, ::Ifc4x3_add2::IfcProfileDef* v2_StartProfile, ::Ifc4x3_add2::IfcProfileDef* v3_EndProfile) : IfcPreDefinedProperties((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSectionProperties_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_SectionType,::Ifc4x3_add2::IfcSectionTypeEnum::ToString(v1_SectionType))));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_StartProfile));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_EndProfile));data_->setArgument(2,attr);} } + +// Function implementations for IfcSectionReinforcementProperties +double Ifc4x3_add2::IfcSectionReinforcementProperties::LongitudinalStartPosition() const { double v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcSectionReinforcementProperties::setLongitudinalStartPosition(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +double Ifc4x3_add2::IfcSectionReinforcementProperties::LongitudinalEndPosition() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcSectionReinforcementProperties::setLongitudinalEndPosition(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +boost::optional< double > Ifc4x3_add2::IfcSectionReinforcementProperties::TransversePosition() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcSectionReinforcementProperties::setTransversePosition(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcReinforcingBarRoleEnum::Value Ifc4x3_add2::IfcSectionReinforcementProperties::ReinforcementRole() const { return ::Ifc4x3_add2::IfcReinforcingBarRoleEnum::FromString(*data_->getArgument(3)); } +void Ifc4x3_add2::IfcSectionReinforcementProperties::setReinforcementRole(::Ifc4x3_add2::IfcReinforcingBarRoleEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcReinforcingBarRoleEnum::ToString(v)));data_->setArgument(3,attr);} } +::Ifc4x3_add2::IfcSectionProperties* Ifc4x3_add2::IfcSectionReinforcementProperties::SectionDefinition() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcSectionProperties>(true); } +void Ifc4x3_add2::IfcSectionReinforcementProperties::setSectionDefinition(::Ifc4x3_add2::IfcSectionProperties* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcReinforcementBarProperties >::ptr Ifc4x3_add2::IfcSectionReinforcementProperties::CrossSectionReinforcementDefinitions() const { aggregate_of_instance::ptr es = *data_->getArgument(5); return es->as< ::Ifc4x3_add2::IfcReinforcementBarProperties >(); } +void Ifc4x3_add2::IfcSectionReinforcementProperties::setCrossSectionReinforcementDefinitions(aggregate_of< ::Ifc4x3_add2::IfcReinforcementBarProperties >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSectionReinforcementProperties::declaration() const { return *IFC4X3_ADD2_IfcSectionReinforcementProperties_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSectionReinforcementProperties::Class() { return *IFC4X3_ADD2_IfcSectionReinforcementProperties_type; } +Ifc4x3_add2::IfcSectionReinforcementProperties::IfcSectionReinforcementProperties(IfcEntityInstanceData* e) : IfcPreDefinedProperties((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSectionReinforcementProperties_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSectionReinforcementProperties::IfcSectionReinforcementProperties(double v1_LongitudinalStartPosition, double v2_LongitudinalEndPosition, boost::optional< double > v3_TransversePosition, ::Ifc4x3_add2::IfcReinforcingBarRoleEnum::Value v4_ReinforcementRole, ::Ifc4x3_add2::IfcSectionProperties* v5_SectionDefinition, aggregate_of< ::Ifc4x3_add2::IfcReinforcementBarProperties >::ptr v6_CrossSectionReinforcementDefinitions) : IfcPreDefinedProperties((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSectionReinforcementProperties_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_LongitudinalStartPosition));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_LongitudinalEndPosition));data_->setArgument(1,attr);} if (v3_TransversePosition) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_TransversePosition));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v4_ReinforcementRole,::Ifc4x3_add2::IfcReinforcingBarRoleEnum::ToString(v4_ReinforcementRole))));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_SectionDefinition));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_CrossSectionReinforcementDefinitions)->generalize());data_->setArgument(5,attr);} } + +// Function implementations for IfcSectionedSolid +::Ifc4x3_add2::IfcCurve* Ifc4x3_add2::IfcSectionedSolid::Directrix() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcCurve>(true); } +void Ifc4x3_add2::IfcSectionedSolid::setDirectrix(::Ifc4x3_add2::IfcCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr Ifc4x3_add2::IfcSectionedSolid::CrossSections() const { aggregate_of_instance::ptr es = *data_->getArgument(1); return es->as< ::Ifc4x3_add2::IfcProfileDef >(); } +void Ifc4x3_add2::IfcSectionedSolid::setCrossSections(aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSectionedSolid::declaration() const { return *IFC4X3_ADD2_IfcSectionedSolid_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSectionedSolid::Class() { return *IFC4X3_ADD2_IfcSectionedSolid_type; } +Ifc4x3_add2::IfcSectionedSolid::IfcSectionedSolid(IfcEntityInstanceData* e) : IfcSolidModel((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSectionedSolid_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSectionedSolid::IfcSectionedSolid(::Ifc4x3_add2::IfcCurve* v1_Directrix, aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr v2_CrossSections) : IfcSolidModel((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSectionedSolid_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Directrix));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_CrossSections)->generalize());data_->setArgument(1,attr);} } + +// Function implementations for IfcSectionedSolidHorizontal +aggregate_of< ::Ifc4x3_add2::IfcAxis2PlacementLinear >::ptr Ifc4x3_add2::IfcSectionedSolidHorizontal::CrossSectionPositions() const { aggregate_of_instance::ptr es = *data_->getArgument(2); return es->as< ::Ifc4x3_add2::IfcAxis2PlacementLinear >(); } +void Ifc4x3_add2::IfcSectionedSolidHorizontal::setCrossSectionPositions(aggregate_of< ::Ifc4x3_add2::IfcAxis2PlacementLinear >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSectionedSolidHorizontal::declaration() const { return *IFC4X3_ADD2_IfcSectionedSolidHorizontal_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSectionedSolidHorizontal::Class() { return *IFC4X3_ADD2_IfcSectionedSolidHorizontal_type; } +Ifc4x3_add2::IfcSectionedSolidHorizontal::IfcSectionedSolidHorizontal(IfcEntityInstanceData* e) : IfcSectionedSolid((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSectionedSolidHorizontal_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSectionedSolidHorizontal::IfcSectionedSolidHorizontal(::Ifc4x3_add2::IfcCurve* v1_Directrix, aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr v2_CrossSections, aggregate_of< ::Ifc4x3_add2::IfcAxis2PlacementLinear >::ptr v3_CrossSectionPositions) : IfcSectionedSolid((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSectionedSolidHorizontal_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Directrix));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_CrossSections)->generalize());data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_CrossSectionPositions)->generalize());data_->setArgument(2,attr);} } + +// Function implementations for IfcSectionedSpine +::Ifc4x3_add2::IfcCompositeCurve* Ifc4x3_add2::IfcSectionedSpine::SpineCurve() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcCompositeCurve>(true); } +void Ifc4x3_add2::IfcSectionedSpine::setSpineCurve(::Ifc4x3_add2::IfcCompositeCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr Ifc4x3_add2::IfcSectionedSpine::CrossSections() const { aggregate_of_instance::ptr es = *data_->getArgument(1); return es->as< ::Ifc4x3_add2::IfcProfileDef >(); } +void Ifc4x3_add2::IfcSectionedSpine::setCrossSections(aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(1,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcAxis2Placement3D >::ptr Ifc4x3_add2::IfcSectionedSpine::CrossSectionPositions() const { aggregate_of_instance::ptr es = *data_->getArgument(2); return es->as< ::Ifc4x3_add2::IfcAxis2Placement3D >(); } +void Ifc4x3_add2::IfcSectionedSpine::setCrossSectionPositions(aggregate_of< ::Ifc4x3_add2::IfcAxis2Placement3D >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSectionedSpine::declaration() const { return *IFC4X3_ADD2_IfcSectionedSpine_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSectionedSpine::Class() { return *IFC4X3_ADD2_IfcSectionedSpine_type; } +Ifc4x3_add2::IfcSectionedSpine::IfcSectionedSpine(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSectionedSpine_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSectionedSpine::IfcSectionedSpine(::Ifc4x3_add2::IfcCompositeCurve* v1_SpineCurve, aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr v2_CrossSections, aggregate_of< ::Ifc4x3_add2::IfcAxis2Placement3D >::ptr v3_CrossSectionPositions) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSectionedSpine_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_SpineCurve));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_CrossSections)->generalize());data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_CrossSectionPositions)->generalize());data_->setArgument(2,attr);} } + +// Function implementations for IfcSectionedSurface +::Ifc4x3_add2::IfcCurve* Ifc4x3_add2::IfcSectionedSurface::Directrix() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcCurve>(true); } +void Ifc4x3_add2::IfcSectionedSurface::setDirectrix(::Ifc4x3_add2::IfcCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcAxis2PlacementLinear >::ptr Ifc4x3_add2::IfcSectionedSurface::CrossSectionPositions() const { aggregate_of_instance::ptr es = *data_->getArgument(1); return es->as< ::Ifc4x3_add2::IfcAxis2PlacementLinear >(); } +void Ifc4x3_add2::IfcSectionedSurface::setCrossSectionPositions(aggregate_of< ::Ifc4x3_add2::IfcAxis2PlacementLinear >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(1,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr Ifc4x3_add2::IfcSectionedSurface::CrossSections() const { aggregate_of_instance::ptr es = *data_->getArgument(2); return es->as< ::Ifc4x3_add2::IfcProfileDef >(); } +void Ifc4x3_add2::IfcSectionedSurface::setCrossSections(aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSectionedSurface::declaration() const { return *IFC4X3_ADD2_IfcSectionedSurface_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSectionedSurface::Class() { return *IFC4X3_ADD2_IfcSectionedSurface_type; } +Ifc4x3_add2::IfcSectionedSurface::IfcSectionedSurface(IfcEntityInstanceData* e) : IfcSurface((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSectionedSurface_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSectionedSurface::IfcSectionedSurface(::Ifc4x3_add2::IfcCurve* v1_Directrix, aggregate_of< ::Ifc4x3_add2::IfcAxis2PlacementLinear >::ptr v2_CrossSectionPositions, aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr v3_CrossSections) : IfcSurface((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSectionedSurface_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Directrix));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_CrossSectionPositions)->generalize());data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_CrossSections)->generalize());data_->setArgument(2,attr);} } + +// Function implementations for IfcSegment +::Ifc4x3_add2::IfcTransitionCode::Value Ifc4x3_add2::IfcSegment::Transition() const { return ::Ifc4x3_add2::IfcTransitionCode::FromString(*data_->getArgument(0)); } +void Ifc4x3_add2::IfcSegment::setTransition(::Ifc4x3_add2::IfcTransitionCode::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcTransitionCode::ToString(v)));data_->setArgument(0,attr);} } + +::Ifc4x3_add2::IfcCompositeCurve::list::ptr Ifc4x3_add2::IfcSegment::UsingCurves() const { return data_->getInverse(IFC4X3_ADD2_IfcCompositeCurve_type, 0)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcSegment::declaration() const { return *IFC4X3_ADD2_IfcSegment_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSegment::Class() { return *IFC4X3_ADD2_IfcSegment_type; } +Ifc4x3_add2::IfcSegment::IfcSegment(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSegment_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSegment::IfcSegment(::Ifc4x3_add2::IfcTransitionCode::Value v1_Transition) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSegment_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_Transition,::Ifc4x3_add2::IfcTransitionCode::ToString(v1_Transition))));data_->setArgument(0,attr);} } + +// Function implementations for IfcSegmentedReferenceCurve +::Ifc4x3_add2::IfcBoundedCurve* Ifc4x3_add2::IfcSegmentedReferenceCurve::BaseCurve() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcBoundedCurve>(true); } +void Ifc4x3_add2::IfcSegmentedReferenceCurve::setBaseCurve(::Ifc4x3_add2::IfcBoundedCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcPlacement* Ifc4x3_add2::IfcSegmentedReferenceCurve::EndPoint() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcPlacement>(true); } +void Ifc4x3_add2::IfcSegmentedReferenceCurve::setEndPoint(::Ifc4x3_add2::IfcPlacement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSegmentedReferenceCurve::declaration() const { return *IFC4X3_ADD2_IfcSegmentedReferenceCurve_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSegmentedReferenceCurve::Class() { return *IFC4X3_ADD2_IfcSegmentedReferenceCurve_type; } +Ifc4x3_add2::IfcSegmentedReferenceCurve::IfcSegmentedReferenceCurve(IfcEntityInstanceData* e) : IfcCompositeCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSegmentedReferenceCurve_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSegmentedReferenceCurve::IfcSegmentedReferenceCurve(aggregate_of< ::Ifc4x3_add2::IfcSegment >::ptr v1_Segments, boost::logic::tribool v2_SelfIntersect, ::Ifc4x3_add2::IfcBoundedCurve* v3_BaseCurve, ::Ifc4x3_add2::IfcPlacement* v4_EndPoint) : IfcCompositeCurve((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSegmentedReferenceCurve_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Segments)->generalize());data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_SelfIntersect));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_BaseCurve));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_EndPoint));data_->setArgument(3,attr);} } + +// Function implementations for IfcSensor +boost::optional< ::Ifc4x3_add2::IfcSensorTypeEnum::Value > Ifc4x3_add2::IfcSensor::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcSensorTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcSensor::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSensorTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcSensorTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSensor::declaration() const { return *IFC4X3_ADD2_IfcSensor_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSensor::Class() { return *IFC4X3_ADD2_IfcSensor_type; } +Ifc4x3_add2::IfcSensor::IfcSensor(IfcEntityInstanceData* e) : IfcDistributionControlElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSensor_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSensor::IfcSensor(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcSensorTypeEnum::Value > v9_PredefinedType) : IfcDistributionControlElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSensor_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcSensorTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcSensorType +::Ifc4x3_add2::IfcSensorTypeEnum::Value Ifc4x3_add2::IfcSensorType::PredefinedType() const { return ::Ifc4x3_add2::IfcSensorTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcSensorType::setPredefinedType(::Ifc4x3_add2::IfcSensorTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcSensorTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSensorType::declaration() const { return *IFC4X3_ADD2_IfcSensorType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSensorType::Class() { return *IFC4X3_ADD2_IfcSensorType_type; } +Ifc4x3_add2::IfcSensorType::IfcSensorType(IfcEntityInstanceData* e) : IfcDistributionControlElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSensorType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSensorType::IfcSensorType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcSensorTypeEnum::Value v10_PredefinedType) : IfcDistributionControlElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSensorType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcSensorTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcSeventhOrderPolynomialSpiral +double Ifc4x3_add2::IfcSeventhOrderPolynomialSpiral::SepticTerm() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcSeventhOrderPolynomialSpiral::setSepticTerm(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +boost::optional< double > Ifc4x3_add2::IfcSeventhOrderPolynomialSpiral::SexticTerm() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcSeventhOrderPolynomialSpiral::setSexticTerm(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< double > Ifc4x3_add2::IfcSeventhOrderPolynomialSpiral::QuinticTerm() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcSeventhOrderPolynomialSpiral::setQuinticTerm(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +boost::optional< double > Ifc4x3_add2::IfcSeventhOrderPolynomialSpiral::QuarticTerm() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcSeventhOrderPolynomialSpiral::setQuarticTerm(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< double > Ifc4x3_add2::IfcSeventhOrderPolynomialSpiral::CubicTerm() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } double v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcSeventhOrderPolynomialSpiral::setCubicTerm(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< double > Ifc4x3_add2::IfcSeventhOrderPolynomialSpiral::QuadraticTerm() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcSeventhOrderPolynomialSpiral::setQuadraticTerm(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } +boost::optional< double > Ifc4x3_add2::IfcSeventhOrderPolynomialSpiral::LinearTerm() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } double v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcSeventhOrderPolynomialSpiral::setLinearTerm(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +boost::optional< double > Ifc4x3_add2::IfcSeventhOrderPolynomialSpiral::ConstantTerm() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } double v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcSeventhOrderPolynomialSpiral::setConstantTerm(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSeventhOrderPolynomialSpiral::declaration() const { return *IFC4X3_ADD2_IfcSeventhOrderPolynomialSpiral_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSeventhOrderPolynomialSpiral::Class() { return *IFC4X3_ADD2_IfcSeventhOrderPolynomialSpiral_type; } +Ifc4x3_add2::IfcSeventhOrderPolynomialSpiral::IfcSeventhOrderPolynomialSpiral(IfcEntityInstanceData* e) : IfcSpiral((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSeventhOrderPolynomialSpiral_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSeventhOrderPolynomialSpiral::IfcSeventhOrderPolynomialSpiral(::Ifc4x3_add2::IfcAxis2Placement* v1_Position, double v2_SepticTerm, boost::optional< double > v3_SexticTerm, boost::optional< double > v4_QuinticTerm, boost::optional< double > v5_QuarticTerm, boost::optional< double > v6_CubicTerm, boost::optional< double > v7_QuadraticTerm, boost::optional< double > v8_LinearTerm, boost::optional< double > v9_ConstantTerm) : IfcSpiral((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSeventhOrderPolynomialSpiral_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Position));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_SepticTerm));data_->setArgument(1,attr);} if (v3_SexticTerm) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_SexticTerm));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_QuinticTerm) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_QuinticTerm));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_QuarticTerm) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_QuarticTerm));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_CubicTerm) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_CubicTerm));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_QuadraticTerm) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_QuadraticTerm));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_LinearTerm) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LinearTerm));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ConstantTerm) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ConstantTerm));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcShadingDevice +boost::optional< ::Ifc4x3_add2::IfcShadingDeviceTypeEnum::Value > Ifc4x3_add2::IfcShadingDevice::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcShadingDeviceTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcShadingDevice::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcShadingDeviceTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcShadingDeviceTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcShadingDevice::declaration() const { return *IFC4X3_ADD2_IfcShadingDevice_type; } +const IfcParse::entity& Ifc4x3_add2::IfcShadingDevice::Class() { return *IFC4X3_ADD2_IfcShadingDevice_type; } +Ifc4x3_add2::IfcShadingDevice::IfcShadingDevice(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcShadingDevice_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcShadingDevice::IfcShadingDevice(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcShadingDeviceTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcShadingDevice_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcShadingDeviceTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcShadingDeviceType +::Ifc4x3_add2::IfcShadingDeviceTypeEnum::Value Ifc4x3_add2::IfcShadingDeviceType::PredefinedType() const { return ::Ifc4x3_add2::IfcShadingDeviceTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcShadingDeviceType::setPredefinedType(::Ifc4x3_add2::IfcShadingDeviceTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcShadingDeviceTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcShadingDeviceType::declaration() const { return *IFC4X3_ADD2_IfcShadingDeviceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcShadingDeviceType::Class() { return *IFC4X3_ADD2_IfcShadingDeviceType_type; } +Ifc4x3_add2::IfcShadingDeviceType::IfcShadingDeviceType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcShadingDeviceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcShadingDeviceType::IfcShadingDeviceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcShadingDeviceTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcShadingDeviceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcShadingDeviceTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcShapeAspect +aggregate_of< ::Ifc4x3_add2::IfcShapeModel >::ptr Ifc4x3_add2::IfcShapeAspect::ShapeRepresentations() const { aggregate_of_instance::ptr es = *data_->getArgument(0); return es->as< ::Ifc4x3_add2::IfcShapeModel >(); } +void Ifc4x3_add2::IfcShapeAspect::setShapeRepresentations(aggregate_of< ::Ifc4x3_add2::IfcShapeModel >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcShapeAspect::Name() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcShapeAspect::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcShapeAspect::Description() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcShapeAspect::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::logic::tribool Ifc4x3_add2::IfcShapeAspect::ProductDefinitional() const { boost::logic::tribool v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcShapeAspect::setProductDefinitional(boost::logic::tribool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +::Ifc4x3_add2::IfcProductRepresentationSelect* Ifc4x3_add2::IfcShapeAspect::PartOfProductDefinitionShape() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcProductRepresentationSelect>(true); } +void Ifc4x3_add2::IfcShapeAspect::setPartOfProductDefinitionShape(::Ifc4x3_add2::IfcProductRepresentationSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } + +::Ifc4x3_add2::IfcExternalReferenceRelationship::list::ptr Ifc4x3_add2::IfcShapeAspect::HasExternalReferences() const { return data_->getInverse(IFC4X3_ADD2_IfcExternalReferenceRelationship_type, 3)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcShapeAspect::declaration() const { return *IFC4X3_ADD2_IfcShapeAspect_type; } +const IfcParse::entity& Ifc4x3_add2::IfcShapeAspect::Class() { return *IFC4X3_ADD2_IfcShapeAspect_type; } +Ifc4x3_add2::IfcShapeAspect::IfcShapeAspect(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcShapeAspect_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcShapeAspect::IfcShapeAspect(aggregate_of< ::Ifc4x3_add2::IfcShapeModel >::ptr v1_ShapeRepresentations, boost::optional< std::string > v2_Name, boost::optional< std::string > v3_Description, boost::logic::tribool v4_ProductDefinitional, ::Ifc4x3_add2::IfcProductRepresentationSelect* v5_PartOfProductDefinitionShape) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcShapeAspect_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_ShapeRepresentations)->generalize());data_->setArgument(0,attr);} if (v2_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Name));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Description));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_ProductDefinitional));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_PartOfProductDefinitionShape));data_->setArgument(4,attr);} } + +// Function implementations for IfcShapeModel + +::Ifc4x3_add2::IfcShapeAspect::list::ptr Ifc4x3_add2::IfcShapeModel::OfShapeAspect() const { return data_->getInverse(IFC4X3_ADD2_IfcShapeAspect_type, 0)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcShapeModel::declaration() const { return *IFC4X3_ADD2_IfcShapeModel_type; } +const IfcParse::entity& Ifc4x3_add2::IfcShapeModel::Class() { return *IFC4X3_ADD2_IfcShapeModel_type; } +Ifc4x3_add2::IfcShapeModel::IfcShapeModel(IfcEntityInstanceData* e) : IfcRepresentation((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcShapeModel_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcShapeModel::IfcShapeModel(::Ifc4x3_add2::IfcRepresentationContext* v1_ContextOfItems, boost::optional< std::string > v2_RepresentationIdentifier, boost::optional< std::string > v3_RepresentationType, aggregate_of< ::Ifc4x3_add2::IfcRepresentationItem >::ptr v4_Items) : IfcRepresentation((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcShapeModel_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_ContextOfItems));data_->setArgument(0,attr);} if (v2_RepresentationIdentifier) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_RepresentationIdentifier));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_RepresentationType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_RepresentationType));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Items)->generalize());data_->setArgument(3,attr);} } + +// Function implementations for IfcShapeRepresentation + + +const IfcParse::entity& Ifc4x3_add2::IfcShapeRepresentation::declaration() const { return *IFC4X3_ADD2_IfcShapeRepresentation_type; } +const IfcParse::entity& Ifc4x3_add2::IfcShapeRepresentation::Class() { return *IFC4X3_ADD2_IfcShapeRepresentation_type; } +Ifc4x3_add2::IfcShapeRepresentation::IfcShapeRepresentation(IfcEntityInstanceData* e) : IfcShapeModel((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcShapeRepresentation_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcShapeRepresentation::IfcShapeRepresentation(::Ifc4x3_add2::IfcRepresentationContext* v1_ContextOfItems, boost::optional< std::string > v2_RepresentationIdentifier, boost::optional< std::string > v3_RepresentationType, aggregate_of< ::Ifc4x3_add2::IfcRepresentationItem >::ptr v4_Items) : IfcShapeModel((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcShapeRepresentation_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_ContextOfItems));data_->setArgument(0,attr);} if (v2_RepresentationIdentifier) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_RepresentationIdentifier));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_RepresentationType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_RepresentationType));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Items)->generalize());data_->setArgument(3,attr);} } + +// Function implementations for IfcShellBasedSurfaceModel +aggregate_of< ::Ifc4x3_add2::IfcShell >::ptr Ifc4x3_add2::IfcShellBasedSurfaceModel::SbsmBoundary() const { aggregate_of_instance::ptr es = *data_->getArgument(0); return es->as< ::Ifc4x3_add2::IfcShell >(); } +void Ifc4x3_add2::IfcShellBasedSurfaceModel::setSbsmBoundary(aggregate_of< ::Ifc4x3_add2::IfcShell >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcShellBasedSurfaceModel::declaration() const { return *IFC4X3_ADD2_IfcShellBasedSurfaceModel_type; } +const IfcParse::entity& Ifc4x3_add2::IfcShellBasedSurfaceModel::Class() { return *IFC4X3_ADD2_IfcShellBasedSurfaceModel_type; } +Ifc4x3_add2::IfcShellBasedSurfaceModel::IfcShellBasedSurfaceModel(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcShellBasedSurfaceModel_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcShellBasedSurfaceModel::IfcShellBasedSurfaceModel(aggregate_of< ::Ifc4x3_add2::IfcShell >::ptr v1_SbsmBoundary) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcShellBasedSurfaceModel_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_SbsmBoundary)->generalize());data_->setArgument(0,attr);} } + +// Function implementations for IfcSign +boost::optional< ::Ifc4x3_add2::IfcSignTypeEnum::Value > Ifc4x3_add2::IfcSign::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcSignTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcSign::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSignTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcSignTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSign::declaration() const { return *IFC4X3_ADD2_IfcSign_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSign::Class() { return *IFC4X3_ADD2_IfcSign_type; } +Ifc4x3_add2::IfcSign::IfcSign(IfcEntityInstanceData* e) : IfcElementComponent((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSign_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSign::IfcSign(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcSignTypeEnum::Value > v9_PredefinedType) : IfcElementComponent((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSign_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcSignTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcSignType +::Ifc4x3_add2::IfcSignTypeEnum::Value Ifc4x3_add2::IfcSignType::PredefinedType() const { return ::Ifc4x3_add2::IfcSignTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcSignType::setPredefinedType(::Ifc4x3_add2::IfcSignTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcSignTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSignType::declaration() const { return *IFC4X3_ADD2_IfcSignType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSignType::Class() { return *IFC4X3_ADD2_IfcSignType_type; } +Ifc4x3_add2::IfcSignType::IfcSignType(IfcEntityInstanceData* e) : IfcElementComponentType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSignType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSignType::IfcSignType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcSignTypeEnum::Value v10_PredefinedType) : IfcElementComponentType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSignType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcSignTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcSignal +boost::optional< ::Ifc4x3_add2::IfcSignalTypeEnum::Value > Ifc4x3_add2::IfcSignal::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcSignalTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcSignal::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSignalTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcSignalTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSignal::declaration() const { return *IFC4X3_ADD2_IfcSignal_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSignal::Class() { return *IFC4X3_ADD2_IfcSignal_type; } +Ifc4x3_add2::IfcSignal::IfcSignal(IfcEntityInstanceData* e) : IfcFlowTerminal((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSignal_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSignal::IfcSignal(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcSignalTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSignal_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcSignalTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcSignalType +::Ifc4x3_add2::IfcSignalTypeEnum::Value Ifc4x3_add2::IfcSignalType::PredefinedType() const { return ::Ifc4x3_add2::IfcSignalTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcSignalType::setPredefinedType(::Ifc4x3_add2::IfcSignalTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcSignalTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSignalType::declaration() const { return *IFC4X3_ADD2_IfcSignalType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSignalType::Class() { return *IFC4X3_ADD2_IfcSignalType_type; } +Ifc4x3_add2::IfcSignalType::IfcSignalType(IfcEntityInstanceData* e) : IfcFlowTerminalType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSignalType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSignalType::IfcSignalType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcSignalTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSignalType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcSignalTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcSimpleProperty + + +const IfcParse::entity& Ifc4x3_add2::IfcSimpleProperty::declaration() const { return *IFC4X3_ADD2_IfcSimpleProperty_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSimpleProperty::Class() { return *IFC4X3_ADD2_IfcSimpleProperty_type; } +Ifc4x3_add2::IfcSimpleProperty::IfcSimpleProperty(IfcEntityInstanceData* e) : IfcProperty((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSimpleProperty_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSimpleProperty::IfcSimpleProperty(std::string v1_Name, boost::optional< std::string > v2_Specification) : IfcProperty((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSimpleProperty_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Specification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Specification));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } } + +// Function implementations for IfcSimplePropertyTemplate +boost::optional< ::Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::Value > Ifc4x3_add2::IfcSimplePropertyTemplate::TemplateType() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::FromString(*data_->getArgument(4)); } +void Ifc4x3_add2::IfcSimplePropertyTemplate::setTemplateType(boost::optional< ::Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::ToString(*v)));}data_->setArgument(4,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcSimplePropertyTemplate::PrimaryMeasureType() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcSimplePropertyTemplate::setPrimaryMeasureType(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcSimplePropertyTemplate::SecondaryMeasureType() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } std::string v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcSimplePropertyTemplate::setSecondaryMeasureType(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } +::Ifc4x3_add2::IfcPropertyEnumeration* Ifc4x3_add2::IfcSimplePropertyTemplate::Enumerators() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(7)))->as<::Ifc4x3_add2::IfcPropertyEnumeration>(true); } +void Ifc4x3_add2::IfcSimplePropertyTemplate::setEnumerators(::Ifc4x3_add2::IfcPropertyEnumeration* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(7,attr);} } +::Ifc4x3_add2::IfcUnit* Ifc4x3_add2::IfcSimplePropertyTemplate::PrimaryUnit() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(8)))->as<::Ifc4x3_add2::IfcUnit>(true); } +void Ifc4x3_add2::IfcSimplePropertyTemplate::setPrimaryUnit(::Ifc4x3_add2::IfcUnit* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(8,attr);} } +::Ifc4x3_add2::IfcUnit* Ifc4x3_add2::IfcSimplePropertyTemplate::SecondaryUnit() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(9)))->as<::Ifc4x3_add2::IfcUnit>(true); } +void Ifc4x3_add2::IfcSimplePropertyTemplate::setSecondaryUnit(::Ifc4x3_add2::IfcUnit* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(9,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcSimplePropertyTemplate::Expression() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } std::string v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcSimplePropertyTemplate::setExpression(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } +boost::optional< ::Ifc4x3_add2::IfcStateEnum::Value > Ifc4x3_add2::IfcSimplePropertyTemplate::AccessState() const { if(!data_->getArgument(11) || data_->getArgument(11)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcStateEnum::FromString(*data_->getArgument(11)); } +void Ifc4x3_add2::IfcSimplePropertyTemplate::setAccessState(boost::optional< ::Ifc4x3_add2::IfcStateEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcStateEnum::ToString(*v)));}data_->setArgument(11,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSimplePropertyTemplate::declaration() const { return *IFC4X3_ADD2_IfcSimplePropertyTemplate_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSimplePropertyTemplate::Class() { return *IFC4X3_ADD2_IfcSimplePropertyTemplate_type; } +Ifc4x3_add2::IfcSimplePropertyTemplate::IfcSimplePropertyTemplate(IfcEntityInstanceData* e) : IfcPropertyTemplate((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSimplePropertyTemplate_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSimplePropertyTemplate::IfcSimplePropertyTemplate(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< ::Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::Value > v5_TemplateType, boost::optional< std::string > v6_PrimaryMeasureType, boost::optional< std::string > v7_SecondaryMeasureType, ::Ifc4x3_add2::IfcPropertyEnumeration* v8_Enumerators, ::Ifc4x3_add2::IfcUnit* v9_PrimaryUnit, ::Ifc4x3_add2::IfcUnit* v10_SecondaryUnit, boost::optional< std::string > v11_Expression, boost::optional< ::Ifc4x3_add2::IfcStateEnum::Value > v12_AccessState) : IfcPropertyTemplate((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSimplePropertyTemplate_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_TemplateType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v5_TemplateType,::Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::ToString(*v5_TemplateType))));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_PrimaryMeasureType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_PrimaryMeasureType));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_SecondaryMeasureType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_SecondaryMeasureType));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_Enumerators));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_PrimaryUnit));data_->setArgument(8,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v10_SecondaryUnit));data_->setArgument(9,attr);} if (v11_Expression) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_Expression));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } if (v12_AccessState) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v12_AccessState,::Ifc4x3_add2::IfcStateEnum::ToString(*v12_AccessState))));data_->setArgument(11,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(11, attr); } } + +// Function implementations for IfcSineSpiral +double Ifc4x3_add2::IfcSineSpiral::SineTerm() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcSineSpiral::setSineTerm(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +boost::optional< double > Ifc4x3_add2::IfcSineSpiral::LinearTerm() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcSineSpiral::setLinearTerm(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< double > Ifc4x3_add2::IfcSineSpiral::ConstantTerm() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcSineSpiral::setConstantTerm(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSineSpiral::declaration() const { return *IFC4X3_ADD2_IfcSineSpiral_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSineSpiral::Class() { return *IFC4X3_ADD2_IfcSineSpiral_type; } +Ifc4x3_add2::IfcSineSpiral::IfcSineSpiral(IfcEntityInstanceData* e) : IfcSpiral((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSineSpiral_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSineSpiral::IfcSineSpiral(::Ifc4x3_add2::IfcAxis2Placement* v1_Position, double v2_SineTerm, boost::optional< double > v3_LinearTerm, boost::optional< double > v4_ConstantTerm) : IfcSpiral((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSineSpiral_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Position));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_SineTerm));data_->setArgument(1,attr);} if (v3_LinearTerm) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_LinearTerm));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_ConstantTerm) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_ConstantTerm));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcSite +boost::optional< std::vector< int > /*[3:4]*/ > Ifc4x3_add2::IfcSite::RefLatitude() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } std::vector< int > /*[3:4]*/ v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcSite::setRefLatitude(boost::optional< std::vector< int > /*[3:4]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(9,attr);} } +boost::optional< std::vector< int > /*[3:4]*/ > Ifc4x3_add2::IfcSite::RefLongitude() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } std::vector< int > /*[3:4]*/ v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcSite::setRefLongitude(boost::optional< std::vector< int > /*[3:4]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } +boost::optional< double > Ifc4x3_add2::IfcSite::RefElevation() const { if(!data_->getArgument(11) || data_->getArgument(11)->isNull()) { return boost::none; } double v = *data_->getArgument(11); return v; } +void Ifc4x3_add2::IfcSite::setRefElevation(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(11,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcSite::LandTitleNumber() const { if(!data_->getArgument(12) || data_->getArgument(12)->isNull()) { return boost::none; } std::string v = *data_->getArgument(12); return v; } +void Ifc4x3_add2::IfcSite::setLandTitleNumber(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(12,attr);} } +::Ifc4x3_add2::IfcPostalAddress* Ifc4x3_add2::IfcSite::SiteAddress() const { if(!data_->getArgument(13) || data_->getArgument(13)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(13)))->as<::Ifc4x3_add2::IfcPostalAddress>(true); } +void Ifc4x3_add2::IfcSite::setSiteAddress(::Ifc4x3_add2::IfcPostalAddress* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(13,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSite::declaration() const { return *IFC4X3_ADD2_IfcSite_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSite::Class() { return *IFC4X3_ADD2_IfcSite_type; } +Ifc4x3_add2::IfcSite::IfcSite(IfcEntityInstanceData* e) : IfcSpatialStructureElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSite_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSite::IfcSite(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, boost::optional< std::vector< int > /*[3:4]*/ > v10_RefLatitude, boost::optional< std::vector< int > /*[3:4]*/ > v11_RefLongitude, boost::optional< double > v12_RefElevation, boost::optional< std::string > v13_LandTitleNumber, ::Ifc4x3_add2::IfcPostalAddress* v14_SiteAddress) : IfcSpatialStructureElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSite_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongName));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_CompositionType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_CompositionType,::Ifc4x3_add2::IfcElementCompositionEnum::ToString(*v9_CompositionType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_RefLatitude) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_RefLatitude));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_RefLongitude) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_RefLongitude));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } if (v12_RefElevation) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v12_RefElevation));data_->setArgument(11,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(11, attr); } if (v13_LandTitleNumber) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v13_LandTitleNumber));data_->setArgument(12,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(12, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v14_SiteAddress));data_->setArgument(13,attr);} } + +// Function implementations for IfcSlab +boost::optional< ::Ifc4x3_add2::IfcSlabTypeEnum::Value > Ifc4x3_add2::IfcSlab::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcSlabTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcSlab::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSlabTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcSlabTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSlab::declaration() const { return *IFC4X3_ADD2_IfcSlab_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSlab::Class() { return *IFC4X3_ADD2_IfcSlab_type; } +Ifc4x3_add2::IfcSlab::IfcSlab(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSlab_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSlab::IfcSlab(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcSlabTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSlab_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcSlabTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcSlabType +::Ifc4x3_add2::IfcSlabTypeEnum::Value Ifc4x3_add2::IfcSlabType::PredefinedType() const { return ::Ifc4x3_add2::IfcSlabTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcSlabType::setPredefinedType(::Ifc4x3_add2::IfcSlabTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcSlabTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSlabType::declaration() const { return *IFC4X3_ADD2_IfcSlabType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSlabType::Class() { return *IFC4X3_ADD2_IfcSlabType_type; } +Ifc4x3_add2::IfcSlabType::IfcSlabType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSlabType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSlabType::IfcSlabType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcSlabTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSlabType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcSlabTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcSlippageConnectionCondition +boost::optional< double > Ifc4x3_add2::IfcSlippageConnectionCondition::SlippageX() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcSlippageConnectionCondition::setSlippageX(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< double > Ifc4x3_add2::IfcSlippageConnectionCondition::SlippageY() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcSlippageConnectionCondition::setSlippageY(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< double > Ifc4x3_add2::IfcSlippageConnectionCondition::SlippageZ() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcSlippageConnectionCondition::setSlippageZ(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSlippageConnectionCondition::declaration() const { return *IFC4X3_ADD2_IfcSlippageConnectionCondition_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSlippageConnectionCondition::Class() { return *IFC4X3_ADD2_IfcSlippageConnectionCondition_type; } +Ifc4x3_add2::IfcSlippageConnectionCondition::IfcSlippageConnectionCondition(IfcEntityInstanceData* e) : IfcStructuralConnectionCondition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSlippageConnectionCondition_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSlippageConnectionCondition::IfcSlippageConnectionCondition(boost::optional< std::string > v1_Name, boost::optional< double > v2_SlippageX, boost::optional< double > v3_SlippageY, boost::optional< double > v4_SlippageZ) : IfcStructuralConnectionCondition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSlippageConnectionCondition_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_SlippageX) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_SlippageX));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_SlippageY) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_SlippageY));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_SlippageZ) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_SlippageZ));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcSolarDevice +boost::optional< ::Ifc4x3_add2::IfcSolarDeviceTypeEnum::Value > Ifc4x3_add2::IfcSolarDevice::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcSolarDeviceTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcSolarDevice::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSolarDeviceTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcSolarDeviceTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSolarDevice::declaration() const { return *IFC4X3_ADD2_IfcSolarDevice_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSolarDevice::Class() { return *IFC4X3_ADD2_IfcSolarDevice_type; } +Ifc4x3_add2::IfcSolarDevice::IfcSolarDevice(IfcEntityInstanceData* e) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSolarDevice_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSolarDevice::IfcSolarDevice(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcSolarDeviceTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSolarDevice_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcSolarDeviceTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcSolarDeviceType +::Ifc4x3_add2::IfcSolarDeviceTypeEnum::Value Ifc4x3_add2::IfcSolarDeviceType::PredefinedType() const { return ::Ifc4x3_add2::IfcSolarDeviceTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcSolarDeviceType::setPredefinedType(::Ifc4x3_add2::IfcSolarDeviceTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcSolarDeviceTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSolarDeviceType::declaration() const { return *IFC4X3_ADD2_IfcSolarDeviceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSolarDeviceType::Class() { return *IFC4X3_ADD2_IfcSolarDeviceType_type; } +Ifc4x3_add2::IfcSolarDeviceType::IfcSolarDeviceType(IfcEntityInstanceData* e) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSolarDeviceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSolarDeviceType::IfcSolarDeviceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcSolarDeviceTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSolarDeviceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcSolarDeviceTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcSolidModel + + +const IfcParse::entity& Ifc4x3_add2::IfcSolidModel::declaration() const { return *IFC4X3_ADD2_IfcSolidModel_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSolidModel::Class() { return *IFC4X3_ADD2_IfcSolidModel_type; } +Ifc4x3_add2::IfcSolidModel::IfcSolidModel(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSolidModel_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSolidModel::IfcSolidModel() : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSolidModel_type); } + +// Function implementations for IfcSpace +boost::optional< ::Ifc4x3_add2::IfcSpaceTypeEnum::Value > Ifc4x3_add2::IfcSpace::PredefinedType() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcSpaceTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcSpace::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSpaceTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcSpaceTypeEnum::ToString(*v)));}data_->setArgument(9,attr);} } +boost::optional< double > Ifc4x3_add2::IfcSpace::ElevationWithFlooring() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } double v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcSpace::setElevationWithFlooring(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } + +::Ifc4x3_add2::IfcRelCoversSpaces::list::ptr Ifc4x3_add2::IfcSpace::HasCoverings() const { return data_->getInverse(IFC4X3_ADD2_IfcRelCoversSpaces_type, 4)->as(); } +::Ifc4x3_add2::IfcRelSpaceBoundary::list::ptr Ifc4x3_add2::IfcSpace::BoundedBy() const { return data_->getInverse(IFC4X3_ADD2_IfcRelSpaceBoundary_type, 4)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcSpace::declaration() const { return *IFC4X3_ADD2_IfcSpace_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSpace::Class() { return *IFC4X3_ADD2_IfcSpace_type; } +Ifc4x3_add2::IfcSpace::IfcSpace(IfcEntityInstanceData* e) : IfcSpatialStructureElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSpace_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSpace::IfcSpace(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, boost::optional< ::Ifc4x3_add2::IfcSpaceTypeEnum::Value > v10_PredefinedType, boost::optional< double > v11_ElevationWithFlooring) : IfcSpatialStructureElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSpace_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongName));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_CompositionType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_CompositionType,::Ifc4x3_add2::IfcElementCompositionEnum::ToString(*v9_CompositionType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v10_PredefinedType,::Ifc4x3_add2::IfcSpaceTypeEnum::ToString(*v10_PredefinedType))));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_ElevationWithFlooring) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_ElevationWithFlooring));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } } + +// Function implementations for IfcSpaceHeater +boost::optional< ::Ifc4x3_add2::IfcSpaceHeaterTypeEnum::Value > Ifc4x3_add2::IfcSpaceHeater::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcSpaceHeaterTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcSpaceHeater::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSpaceHeaterTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcSpaceHeaterTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSpaceHeater::declaration() const { return *IFC4X3_ADD2_IfcSpaceHeater_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSpaceHeater::Class() { return *IFC4X3_ADD2_IfcSpaceHeater_type; } +Ifc4x3_add2::IfcSpaceHeater::IfcSpaceHeater(IfcEntityInstanceData* e) : IfcFlowTerminal((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSpaceHeater_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSpaceHeater::IfcSpaceHeater(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcSpaceHeaterTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSpaceHeater_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcSpaceHeaterTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcSpaceHeaterType +::Ifc4x3_add2::IfcSpaceHeaterTypeEnum::Value Ifc4x3_add2::IfcSpaceHeaterType::PredefinedType() const { return ::Ifc4x3_add2::IfcSpaceHeaterTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcSpaceHeaterType::setPredefinedType(::Ifc4x3_add2::IfcSpaceHeaterTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcSpaceHeaterTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSpaceHeaterType::declaration() const { return *IFC4X3_ADD2_IfcSpaceHeaterType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSpaceHeaterType::Class() { return *IFC4X3_ADD2_IfcSpaceHeaterType_type; } +Ifc4x3_add2::IfcSpaceHeaterType::IfcSpaceHeaterType(IfcEntityInstanceData* e) : IfcFlowTerminalType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSpaceHeaterType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSpaceHeaterType::IfcSpaceHeaterType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcSpaceHeaterTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSpaceHeaterType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcSpaceHeaterTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcSpaceType +::Ifc4x3_add2::IfcSpaceTypeEnum::Value Ifc4x3_add2::IfcSpaceType::PredefinedType() const { return ::Ifc4x3_add2::IfcSpaceTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcSpaceType::setPredefinedType(::Ifc4x3_add2::IfcSpaceTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcSpaceTypeEnum::ToString(v)));data_->setArgument(9,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcSpaceType::LongName() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } std::string v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcSpaceType::setLongName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSpaceType::declaration() const { return *IFC4X3_ADD2_IfcSpaceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSpaceType::Class() { return *IFC4X3_ADD2_IfcSpaceType_type; } +Ifc4x3_add2::IfcSpaceType::IfcSpaceType(IfcEntityInstanceData* e) : IfcSpatialStructureElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSpaceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSpaceType::IfcSpaceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcSpaceTypeEnum::Value v10_PredefinedType, boost::optional< std::string > v11_LongName) : IfcSpatialStructureElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSpaceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcSpaceTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} if (v11_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_LongName));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } } + +// Function implementations for IfcSpatialElement +boost::optional< std::string > Ifc4x3_add2::IfcSpatialElement::LongName() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } std::string v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcSpatialElement::setLongName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } + +::Ifc4x3_add2::IfcRelContainedInSpatialStructure::list::ptr Ifc4x3_add2::IfcSpatialElement::ContainsElements() const { return data_->getInverse(IFC4X3_ADD2_IfcRelContainedInSpatialStructure_type, 5)->as(); } +::Ifc4x3_add2::IfcRelServicesBuildings::list::ptr Ifc4x3_add2::IfcSpatialElement::ServicedBySystems() const { return data_->getInverse(IFC4X3_ADD2_IfcRelServicesBuildings_type, 5)->as(); } +::Ifc4x3_add2::IfcRelReferencedInSpatialStructure::list::ptr Ifc4x3_add2::IfcSpatialElement::ReferencesElements() const { return data_->getInverse(IFC4X3_ADD2_IfcRelReferencedInSpatialStructure_type, 5)->as(); } +::Ifc4x3_add2::IfcRelInterferesElements::list::ptr Ifc4x3_add2::IfcSpatialElement::IsInterferedByElements() const { return data_->getInverse(IFC4X3_ADD2_IfcRelInterferesElements_type, 5)->as(); } +::Ifc4x3_add2::IfcRelInterferesElements::list::ptr Ifc4x3_add2::IfcSpatialElement::InterferesElements() const { return data_->getInverse(IFC4X3_ADD2_IfcRelInterferesElements_type, 4)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcSpatialElement::declaration() const { return *IFC4X3_ADD2_IfcSpatialElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSpatialElement::Class() { return *IFC4X3_ADD2_IfcSpatialElement_type; } +Ifc4x3_add2::IfcSpatialElement::IfcSpatialElement(IfcEntityInstanceData* e) : IfcProduct((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSpatialElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSpatialElement::IfcSpatialElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName) : IfcProduct((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSpatialElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongName));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcSpatialElementType +boost::optional< std::string > Ifc4x3_add2::IfcSpatialElementType::ElementType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } std::string v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcSpatialElementType::setElementType(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSpatialElementType::declaration() const { return *IFC4X3_ADD2_IfcSpatialElementType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSpatialElementType::Class() { return *IFC4X3_ADD2_IfcSpatialElementType_type; } +Ifc4x3_add2::IfcSpatialElementType::IfcSpatialElementType(IfcEntityInstanceData* e) : IfcTypeProduct((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSpatialElementType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSpatialElementType::IfcSpatialElementType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcTypeProduct((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSpatialElementType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcSpatialStructureElement +boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > Ifc4x3_add2::IfcSpatialStructureElement::CompositionType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcElementCompositionEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcSpatialStructureElement::setCompositionType(boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcElementCompositionEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSpatialStructureElement::declaration() const { return *IFC4X3_ADD2_IfcSpatialStructureElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSpatialStructureElement::Class() { return *IFC4X3_ADD2_IfcSpatialStructureElement_type; } +Ifc4x3_add2::IfcSpatialStructureElement::IfcSpatialStructureElement(IfcEntityInstanceData* e) : IfcSpatialElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSpatialStructureElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSpatialStructureElement::IfcSpatialStructureElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType) : IfcSpatialElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSpatialStructureElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongName));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_CompositionType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_CompositionType,::Ifc4x3_add2::IfcElementCompositionEnum::ToString(*v9_CompositionType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcSpatialStructureElementType + + +const IfcParse::entity& Ifc4x3_add2::IfcSpatialStructureElementType::declaration() const { return *IFC4X3_ADD2_IfcSpatialStructureElementType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSpatialStructureElementType::Class() { return *IFC4X3_ADD2_IfcSpatialStructureElementType_type; } +Ifc4x3_add2::IfcSpatialStructureElementType::IfcSpatialStructureElementType(IfcEntityInstanceData* e) : IfcSpatialElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSpatialStructureElementType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSpatialStructureElementType::IfcSpatialStructureElementType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcSpatialElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSpatialStructureElementType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcSpatialZone +boost::optional< ::Ifc4x3_add2::IfcSpatialZoneTypeEnum::Value > Ifc4x3_add2::IfcSpatialZone::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcSpatialZoneTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcSpatialZone::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSpatialZoneTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcSpatialZoneTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSpatialZone::declaration() const { return *IFC4X3_ADD2_IfcSpatialZone_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSpatialZone::Class() { return *IFC4X3_ADD2_IfcSpatialZone_type; } +Ifc4x3_add2::IfcSpatialZone::IfcSpatialZone(IfcEntityInstanceData* e) : IfcSpatialElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSpatialZone_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSpatialZone::IfcSpatialZone(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcSpatialZoneTypeEnum::Value > v9_PredefinedType) : IfcSpatialElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSpatialZone_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongName));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcSpatialZoneTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcSpatialZoneType +::Ifc4x3_add2::IfcSpatialZoneTypeEnum::Value Ifc4x3_add2::IfcSpatialZoneType::PredefinedType() const { return ::Ifc4x3_add2::IfcSpatialZoneTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcSpatialZoneType::setPredefinedType(::Ifc4x3_add2::IfcSpatialZoneTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcSpatialZoneTypeEnum::ToString(v)));data_->setArgument(9,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcSpatialZoneType::LongName() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } std::string v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcSpatialZoneType::setLongName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSpatialZoneType::declaration() const { return *IFC4X3_ADD2_IfcSpatialZoneType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSpatialZoneType::Class() { return *IFC4X3_ADD2_IfcSpatialZoneType_type; } +Ifc4x3_add2::IfcSpatialZoneType::IfcSpatialZoneType(IfcEntityInstanceData* e) : IfcSpatialElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSpatialZoneType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSpatialZoneType::IfcSpatialZoneType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcSpatialZoneTypeEnum::Value v10_PredefinedType, boost::optional< std::string > v11_LongName) : IfcSpatialElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSpatialZoneType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcSpatialZoneTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} if (v11_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_LongName));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } } + +// Function implementations for IfcSphere +double Ifc4x3_add2::IfcSphere::Radius() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcSphere::setRadius(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSphere::declaration() const { return *IFC4X3_ADD2_IfcSphere_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSphere::Class() { return *IFC4X3_ADD2_IfcSphere_type; } +Ifc4x3_add2::IfcSphere::IfcSphere(IfcEntityInstanceData* e) : IfcCsgPrimitive3D((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSphere_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSphere::IfcSphere(::Ifc4x3_add2::IfcAxis2Placement3D* v1_Position, double v2_Radius) : IfcCsgPrimitive3D((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSphere_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Position));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Radius));data_->setArgument(1,attr);} } + +// Function implementations for IfcSphericalSurface +double Ifc4x3_add2::IfcSphericalSurface::Radius() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcSphericalSurface::setRadius(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSphericalSurface::declaration() const { return *IFC4X3_ADD2_IfcSphericalSurface_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSphericalSurface::Class() { return *IFC4X3_ADD2_IfcSphericalSurface_type; } +Ifc4x3_add2::IfcSphericalSurface::IfcSphericalSurface(IfcEntityInstanceData* e) : IfcElementarySurface((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSphericalSurface_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSphericalSurface::IfcSphericalSurface(::Ifc4x3_add2::IfcAxis2Placement3D* v1_Position, double v2_Radius) : IfcElementarySurface((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSphericalSurface_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Position));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Radius));data_->setArgument(1,attr);} } + +// Function implementations for IfcSpiral +::Ifc4x3_add2::IfcAxis2Placement* Ifc4x3_add2::IfcSpiral::Position() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcAxis2Placement>(true); } +void Ifc4x3_add2::IfcSpiral::setPosition(::Ifc4x3_add2::IfcAxis2Placement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSpiral::declaration() const { return *IFC4X3_ADD2_IfcSpiral_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSpiral::Class() { return *IFC4X3_ADD2_IfcSpiral_type; } +Ifc4x3_add2::IfcSpiral::IfcSpiral(IfcEntityInstanceData* e) : IfcCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSpiral_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSpiral::IfcSpiral(::Ifc4x3_add2::IfcAxis2Placement* v1_Position) : IfcCurve((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSpiral_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Position));data_->setArgument(0,attr);} } + +// Function implementations for IfcStackTerminal +boost::optional< ::Ifc4x3_add2::IfcStackTerminalTypeEnum::Value > Ifc4x3_add2::IfcStackTerminal::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcStackTerminalTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcStackTerminal::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcStackTerminalTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcStackTerminalTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStackTerminal::declaration() const { return *IFC4X3_ADD2_IfcStackTerminal_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStackTerminal::Class() { return *IFC4X3_ADD2_IfcStackTerminal_type; } +Ifc4x3_add2::IfcStackTerminal::IfcStackTerminal(IfcEntityInstanceData* e) : IfcFlowTerminal((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStackTerminal_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStackTerminal::IfcStackTerminal(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcStackTerminalTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStackTerminal_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcStackTerminalTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcStackTerminalType +::Ifc4x3_add2::IfcStackTerminalTypeEnum::Value Ifc4x3_add2::IfcStackTerminalType::PredefinedType() const { return ::Ifc4x3_add2::IfcStackTerminalTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcStackTerminalType::setPredefinedType(::Ifc4x3_add2::IfcStackTerminalTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcStackTerminalTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStackTerminalType::declaration() const { return *IFC4X3_ADD2_IfcStackTerminalType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStackTerminalType::Class() { return *IFC4X3_ADD2_IfcStackTerminalType_type; } +Ifc4x3_add2::IfcStackTerminalType::IfcStackTerminalType(IfcEntityInstanceData* e) : IfcFlowTerminalType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStackTerminalType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStackTerminalType::IfcStackTerminalType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcStackTerminalTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStackTerminalType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcStackTerminalTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcStair +boost::optional< ::Ifc4x3_add2::IfcStairTypeEnum::Value > Ifc4x3_add2::IfcStair::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcStairTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcStair::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcStairTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcStairTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStair::declaration() const { return *IFC4X3_ADD2_IfcStair_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStair::Class() { return *IFC4X3_ADD2_IfcStair_type; } +Ifc4x3_add2::IfcStair::IfcStair(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStair_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStair::IfcStair(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcStairTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStair_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcStairTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcStairFlight +boost::optional< int > Ifc4x3_add2::IfcStairFlight::NumberOfRisers() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } int v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcStairFlight::setNumberOfRisers(boost::optional< int > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } +boost::optional< int > Ifc4x3_add2::IfcStairFlight::NumberOfTreads() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } int v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcStairFlight::setNumberOfTreads(boost::optional< int > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(9,attr);} } +boost::optional< double > Ifc4x3_add2::IfcStairFlight::RiserHeight() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } double v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcStairFlight::setRiserHeight(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } +boost::optional< double > Ifc4x3_add2::IfcStairFlight::TreadLength() const { if(!data_->getArgument(11) || data_->getArgument(11)->isNull()) { return boost::none; } double v = *data_->getArgument(11); return v; } +void Ifc4x3_add2::IfcStairFlight::setTreadLength(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(11,attr);} } +boost::optional< ::Ifc4x3_add2::IfcStairFlightTypeEnum::Value > Ifc4x3_add2::IfcStairFlight::PredefinedType() const { if(!data_->getArgument(12) || data_->getArgument(12)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcStairFlightTypeEnum::FromString(*data_->getArgument(12)); } +void Ifc4x3_add2::IfcStairFlight::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcStairFlightTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcStairFlightTypeEnum::ToString(*v)));}data_->setArgument(12,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStairFlight::declaration() const { return *IFC4X3_ADD2_IfcStairFlight_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStairFlight::Class() { return *IFC4X3_ADD2_IfcStairFlight_type; } +Ifc4x3_add2::IfcStairFlight::IfcStairFlight(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStairFlight_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStairFlight::IfcStairFlight(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< int > v9_NumberOfRisers, boost::optional< int > v10_NumberOfTreads, boost::optional< double > v11_RiserHeight, boost::optional< double > v12_TreadLength, boost::optional< ::Ifc4x3_add2::IfcStairFlightTypeEnum::Value > v13_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStairFlight_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_NumberOfRisers) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_NumberOfRisers));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_NumberOfTreads) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_NumberOfTreads));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_RiserHeight) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_RiserHeight));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } if (v12_TreadLength) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v12_TreadLength));data_->setArgument(11,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(11, attr); } if (v13_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v13_PredefinedType,::Ifc4x3_add2::IfcStairFlightTypeEnum::ToString(*v13_PredefinedType))));data_->setArgument(12,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(12, attr); } } + +// Function implementations for IfcStairFlightType +::Ifc4x3_add2::IfcStairFlightTypeEnum::Value Ifc4x3_add2::IfcStairFlightType::PredefinedType() const { return ::Ifc4x3_add2::IfcStairFlightTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcStairFlightType::setPredefinedType(::Ifc4x3_add2::IfcStairFlightTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcStairFlightTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStairFlightType::declaration() const { return *IFC4X3_ADD2_IfcStairFlightType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStairFlightType::Class() { return *IFC4X3_ADD2_IfcStairFlightType_type; } +Ifc4x3_add2::IfcStairFlightType::IfcStairFlightType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStairFlightType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStairFlightType::IfcStairFlightType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcStairFlightTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStairFlightType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcStairFlightTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcStairType +::Ifc4x3_add2::IfcStairTypeEnum::Value Ifc4x3_add2::IfcStairType::PredefinedType() const { return ::Ifc4x3_add2::IfcStairTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcStairType::setPredefinedType(::Ifc4x3_add2::IfcStairTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcStairTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStairType::declaration() const { return *IFC4X3_ADD2_IfcStairType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStairType::Class() { return *IFC4X3_ADD2_IfcStairType_type; } +Ifc4x3_add2::IfcStairType::IfcStairType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStairType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStairType::IfcStairType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcStairTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStairType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcStairTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcStructuralAction +boost::optional< bool > Ifc4x3_add2::IfcStructuralAction::DestabilizingLoad() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } bool v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcStructuralAction::setDestabilizingLoad(boost::optional< bool > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralAction::declaration() const { return *IFC4X3_ADD2_IfcStructuralAction_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralAction::Class() { return *IFC4X3_ADD2_IfcStructuralAction_type; } +Ifc4x3_add2::IfcStructuralAction::IfcStructuralAction(IfcEntityInstanceData* e) : IfcStructuralActivity((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralAction_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralAction::IfcStructuralAction(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal, boost::optional< bool > v10_DestabilizingLoad) : IfcStructuralActivity((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralAction_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_AppliedLoad));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v9_GlobalOrLocal,::Ifc4x3_add2::IfcGlobalOrLocalEnum::ToString(v9_GlobalOrLocal))));data_->setArgument(8,attr);} if (v10_DestabilizingLoad) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_DestabilizingLoad));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } } + +// Function implementations for IfcStructuralActivity +::Ifc4x3_add2::IfcStructuralLoad* Ifc4x3_add2::IfcStructuralActivity::AppliedLoad() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(7)))->as<::Ifc4x3_add2::IfcStructuralLoad>(true); } +void Ifc4x3_add2::IfcStructuralActivity::setAppliedLoad(::Ifc4x3_add2::IfcStructuralLoad* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(7,attr);} } +::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value Ifc4x3_add2::IfcStructuralActivity::GlobalOrLocal() const { return ::Ifc4x3_add2::IfcGlobalOrLocalEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcStructuralActivity::setGlobalOrLocal(::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcGlobalOrLocalEnum::ToString(v)));data_->setArgument(8,attr);} } + +::Ifc4x3_add2::IfcRelConnectsStructuralActivity::list::ptr Ifc4x3_add2::IfcStructuralActivity::AssignedToStructuralItem() const { return data_->getInverse(IFC4X3_ADD2_IfcRelConnectsStructuralActivity_type, 5)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralActivity::declaration() const { return *IFC4X3_ADD2_IfcStructuralActivity_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralActivity::Class() { return *IFC4X3_ADD2_IfcStructuralActivity_type; } +Ifc4x3_add2::IfcStructuralActivity::IfcStructuralActivity(IfcEntityInstanceData* e) : IfcProduct((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralActivity_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralActivity::IfcStructuralActivity(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal) : IfcProduct((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralActivity_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_AppliedLoad));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v9_GlobalOrLocal,::Ifc4x3_add2::IfcGlobalOrLocalEnum::ToString(v9_GlobalOrLocal))));data_->setArgument(8,attr);} } + +// Function implementations for IfcStructuralAnalysisModel +::Ifc4x3_add2::IfcAnalysisModelTypeEnum::Value Ifc4x3_add2::IfcStructuralAnalysisModel::PredefinedType() const { return ::Ifc4x3_add2::IfcAnalysisModelTypeEnum::FromString(*data_->getArgument(5)); } +void Ifc4x3_add2::IfcStructuralAnalysisModel::setPredefinedType(::Ifc4x3_add2::IfcAnalysisModelTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcAnalysisModelTypeEnum::ToString(v)));data_->setArgument(5,attr);} } +::Ifc4x3_add2::IfcAxis2Placement3D* Ifc4x3_add2::IfcStructuralAnalysisModel::OrientationOf2DPlane() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcAxis2Placement3D>(true); } +void Ifc4x3_add2::IfcStructuralAnalysisModel::setOrientationOf2DPlane(::Ifc4x3_add2::IfcAxis2Placement3D* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcStructuralLoadGroup >::ptr > Ifc4x3_add2::IfcStructuralAnalysisModel::LoadedBy() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(7); return es->as< ::Ifc4x3_add2::IfcStructuralLoadGroup >(); } +void Ifc4x3_add2::IfcStructuralAnalysisModel::setLoadedBy(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcStructuralLoadGroup >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(7,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcStructuralResultGroup >::ptr > Ifc4x3_add2::IfcStructuralAnalysisModel::HasResults() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(8); return es->as< ::Ifc4x3_add2::IfcStructuralResultGroup >(); } +void Ifc4x3_add2::IfcStructuralAnalysisModel::setHasResults(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcStructuralResultGroup >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(8,attr);} } +::Ifc4x3_add2::IfcObjectPlacement* Ifc4x3_add2::IfcStructuralAnalysisModel::SharedPlacement() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(9)))->as<::Ifc4x3_add2::IfcObjectPlacement>(true); } +void Ifc4x3_add2::IfcStructuralAnalysisModel::setSharedPlacement(::Ifc4x3_add2::IfcObjectPlacement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralAnalysisModel::declaration() const { return *IFC4X3_ADD2_IfcStructuralAnalysisModel_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralAnalysisModel::Class() { return *IFC4X3_ADD2_IfcStructuralAnalysisModel_type; } +Ifc4x3_add2::IfcStructuralAnalysisModel::IfcStructuralAnalysisModel(IfcEntityInstanceData* e) : IfcSystem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralAnalysisModel_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralAnalysisModel::IfcStructuralAnalysisModel(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcAnalysisModelTypeEnum::Value v6_PredefinedType, ::Ifc4x3_add2::IfcAxis2Placement3D* v7_OrientationOf2DPlane, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcStructuralLoadGroup >::ptr > v8_LoadedBy, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcStructuralResultGroup >::ptr > v9_HasResults, ::Ifc4x3_add2::IfcObjectPlacement* v10_SharedPlacement) : IfcSystem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralAnalysisModel_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v6_PredefinedType,::Ifc4x3_add2::IfcAnalysisModelTypeEnum::ToString(v6_PredefinedType))));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_OrientationOf2DPlane));data_->setArgument(6,attr);} if (v8_LoadedBy) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LoadedBy)->generalize());data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_HasResults) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_HasResults)->generalize());data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v10_SharedPlacement));data_->setArgument(9,attr);} } + +// Function implementations for IfcStructuralConnection +::Ifc4x3_add2::IfcBoundaryCondition* Ifc4x3_add2::IfcStructuralConnection::AppliedCondition() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(7)))->as<::Ifc4x3_add2::IfcBoundaryCondition>(true); } +void Ifc4x3_add2::IfcStructuralConnection::setAppliedCondition(::Ifc4x3_add2::IfcBoundaryCondition* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(7,attr);} } + +::Ifc4x3_add2::IfcRelConnectsStructuralMember::list::ptr Ifc4x3_add2::IfcStructuralConnection::ConnectsStructuralMembers() const { return data_->getInverse(IFC4X3_ADD2_IfcRelConnectsStructuralMember_type, 5)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralConnection::declaration() const { return *IFC4X3_ADD2_IfcStructuralConnection_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralConnection::Class() { return *IFC4X3_ADD2_IfcStructuralConnection_type; } +Ifc4x3_add2::IfcStructuralConnection::IfcStructuralConnection(IfcEntityInstanceData* e) : IfcStructuralItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralConnection_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralConnection::IfcStructuralConnection(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcBoundaryCondition* v8_AppliedCondition) : IfcStructuralItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralConnection_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_AppliedCondition));data_->setArgument(7,attr);} } + +// Function implementations for IfcStructuralConnectionCondition +boost::optional< std::string > Ifc4x3_add2::IfcStructuralConnectionCondition::Name() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcStructuralConnectionCondition::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralConnectionCondition::declaration() const { return *IFC4X3_ADD2_IfcStructuralConnectionCondition_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralConnectionCondition::Class() { return *IFC4X3_ADD2_IfcStructuralConnectionCondition_type; } +Ifc4x3_add2::IfcStructuralConnectionCondition::IfcStructuralConnectionCondition(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralConnectionCondition_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralConnectionCondition::IfcStructuralConnectionCondition(boost::optional< std::string > v1_Name) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralConnectionCondition_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } } + +// Function implementations for IfcStructuralCurveAction +boost::optional< ::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::Value > Ifc4x3_add2::IfcStructuralCurveAction::ProjectedOrTrue() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::FromString(*data_->getArgument(10)); } +void Ifc4x3_add2::IfcStructuralCurveAction::setProjectedOrTrue(boost::optional< ::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::ToString(*v)));}data_->setArgument(10,attr);} } +::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::Value Ifc4x3_add2::IfcStructuralCurveAction::PredefinedType() const { return ::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::FromString(*data_->getArgument(11)); } +void Ifc4x3_add2::IfcStructuralCurveAction::setPredefinedType(::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::ToString(v)));data_->setArgument(11,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralCurveAction::declaration() const { return *IFC4X3_ADD2_IfcStructuralCurveAction_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralCurveAction::Class() { return *IFC4X3_ADD2_IfcStructuralCurveAction_type; } +Ifc4x3_add2::IfcStructuralCurveAction::IfcStructuralCurveAction(IfcEntityInstanceData* e) : IfcStructuralAction((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralCurveAction_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralCurveAction::IfcStructuralCurveAction(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal, boost::optional< bool > v10_DestabilizingLoad, boost::optional< ::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::Value > v11_ProjectedOrTrue, ::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::Value v12_PredefinedType) : IfcStructuralAction((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralCurveAction_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_AppliedLoad));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v9_GlobalOrLocal,::Ifc4x3_add2::IfcGlobalOrLocalEnum::ToString(v9_GlobalOrLocal))));data_->setArgument(8,attr);} if (v10_DestabilizingLoad) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_DestabilizingLoad));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_ProjectedOrTrue) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v11_ProjectedOrTrue,::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::ToString(*v11_ProjectedOrTrue))));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v12_PredefinedType,::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::ToString(v12_PredefinedType))));data_->setArgument(11,attr);} } + +// Function implementations for IfcStructuralCurveConnection +::Ifc4x3_add2::IfcDirection* Ifc4x3_add2::IfcStructuralCurveConnection::AxisDirection() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(8)))->as<::Ifc4x3_add2::IfcDirection>(true); } +void Ifc4x3_add2::IfcStructuralCurveConnection::setAxisDirection(::Ifc4x3_add2::IfcDirection* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralCurveConnection::declaration() const { return *IFC4X3_ADD2_IfcStructuralCurveConnection_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralCurveConnection::Class() { return *IFC4X3_ADD2_IfcStructuralCurveConnection_type; } +Ifc4x3_add2::IfcStructuralCurveConnection::IfcStructuralCurveConnection(IfcEntityInstanceData* e) : IfcStructuralConnection((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralCurveConnection_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralCurveConnection::IfcStructuralCurveConnection(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcBoundaryCondition* v8_AppliedCondition, ::Ifc4x3_add2::IfcDirection* v9_AxisDirection) : IfcStructuralConnection((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralCurveConnection_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_AppliedCondition));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_AxisDirection));data_->setArgument(8,attr);} } + +// Function implementations for IfcStructuralCurveMember +::Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::Value Ifc4x3_add2::IfcStructuralCurveMember::PredefinedType() const { return ::Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::FromString(*data_->getArgument(7)); } +void Ifc4x3_add2::IfcStructuralCurveMember::setPredefinedType(::Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::ToString(v)));data_->setArgument(7,attr);} } +::Ifc4x3_add2::IfcDirection* Ifc4x3_add2::IfcStructuralCurveMember::Axis() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(8)))->as<::Ifc4x3_add2::IfcDirection>(true); } +void Ifc4x3_add2::IfcStructuralCurveMember::setAxis(::Ifc4x3_add2::IfcDirection* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralCurveMember::declaration() const { return *IFC4X3_ADD2_IfcStructuralCurveMember_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralCurveMember::Class() { return *IFC4X3_ADD2_IfcStructuralCurveMember_type; } +Ifc4x3_add2::IfcStructuralCurveMember::IfcStructuralCurveMember(IfcEntityInstanceData* e) : IfcStructuralMember((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralCurveMember_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralCurveMember::IfcStructuralCurveMember(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::Value v8_PredefinedType, ::Ifc4x3_add2::IfcDirection* v9_Axis) : IfcStructuralMember((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralCurveMember_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v8_PredefinedType,::Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::ToString(v8_PredefinedType))));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_Axis));data_->setArgument(8,attr);} } + +// Function implementations for IfcStructuralCurveMemberVarying + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralCurveMemberVarying::declaration() const { return *IFC4X3_ADD2_IfcStructuralCurveMemberVarying_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralCurveMemberVarying::Class() { return *IFC4X3_ADD2_IfcStructuralCurveMemberVarying_type; } +Ifc4x3_add2::IfcStructuralCurveMemberVarying::IfcStructuralCurveMemberVarying(IfcEntityInstanceData* e) : IfcStructuralCurveMember((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralCurveMemberVarying_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralCurveMemberVarying::IfcStructuralCurveMemberVarying(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::Value v8_PredefinedType, ::Ifc4x3_add2::IfcDirection* v9_Axis) : IfcStructuralCurveMember((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralCurveMemberVarying_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v8_PredefinedType,::Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::ToString(v8_PredefinedType))));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_Axis));data_->setArgument(8,attr);} } + +// Function implementations for IfcStructuralCurveReaction +::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::Value Ifc4x3_add2::IfcStructuralCurveReaction::PredefinedType() const { return ::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcStructuralCurveReaction::setPredefinedType(::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralCurveReaction::declaration() const { return *IFC4X3_ADD2_IfcStructuralCurveReaction_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralCurveReaction::Class() { return *IFC4X3_ADD2_IfcStructuralCurveReaction_type; } +Ifc4x3_add2::IfcStructuralCurveReaction::IfcStructuralCurveReaction(IfcEntityInstanceData* e) : IfcStructuralReaction((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralCurveReaction_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralCurveReaction::IfcStructuralCurveReaction(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal, ::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::Value v10_PredefinedType) : IfcStructuralReaction((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralCurveReaction_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_AppliedLoad));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v9_GlobalOrLocal,::Ifc4x3_add2::IfcGlobalOrLocalEnum::ToString(v9_GlobalOrLocal))));data_->setArgument(8,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcStructuralItem + +::Ifc4x3_add2::IfcRelConnectsStructuralActivity::list::ptr Ifc4x3_add2::IfcStructuralItem::AssignedStructuralActivity() const { return data_->getInverse(IFC4X3_ADD2_IfcRelConnectsStructuralActivity_type, 4)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralItem::declaration() const { return *IFC4X3_ADD2_IfcStructuralItem_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralItem::Class() { return *IFC4X3_ADD2_IfcStructuralItem_type; } +Ifc4x3_add2::IfcStructuralItem::IfcStructuralItem(IfcEntityInstanceData* e) : IfcProduct((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralItem_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralItem::IfcStructuralItem(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation) : IfcProduct((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralItem_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} } + +// Function implementations for IfcStructuralLinearAction + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLinearAction::declaration() const { return *IFC4X3_ADD2_IfcStructuralLinearAction_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLinearAction::Class() { return *IFC4X3_ADD2_IfcStructuralLinearAction_type; } +Ifc4x3_add2::IfcStructuralLinearAction::IfcStructuralLinearAction(IfcEntityInstanceData* e) : IfcStructuralCurveAction((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralLinearAction_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralLinearAction::IfcStructuralLinearAction(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal, boost::optional< bool > v10_DestabilizingLoad, boost::optional< ::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::Value > v11_ProjectedOrTrue, ::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::Value v12_PredefinedType) : IfcStructuralCurveAction((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralLinearAction_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_AppliedLoad));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v9_GlobalOrLocal,::Ifc4x3_add2::IfcGlobalOrLocalEnum::ToString(v9_GlobalOrLocal))));data_->setArgument(8,attr);} if (v10_DestabilizingLoad) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_DestabilizingLoad));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_ProjectedOrTrue) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v11_ProjectedOrTrue,::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::ToString(*v11_ProjectedOrTrue))));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v12_PredefinedType,::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::ToString(v12_PredefinedType))));data_->setArgument(11,attr);} } + +// Function implementations for IfcStructuralLoad +boost::optional< std::string > Ifc4x3_add2::IfcStructuralLoad::Name() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcStructuralLoad::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoad::declaration() const { return *IFC4X3_ADD2_IfcStructuralLoad_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoad::Class() { return *IFC4X3_ADD2_IfcStructuralLoad_type; } +Ifc4x3_add2::IfcStructuralLoad::IfcStructuralLoad(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralLoad_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralLoad::IfcStructuralLoad(boost::optional< std::string > v1_Name) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralLoad_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } } + +// Function implementations for IfcStructuralLoadCase +boost::optional< std::vector< double > /*[3:3]*/ > Ifc4x3_add2::IfcStructuralLoadCase::SelfWeightCoefficients() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } std::vector< double > /*[3:3]*/ v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcStructuralLoadCase::setSelfWeightCoefficients(boost::optional< std::vector< double > /*[3:3]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoadCase::declaration() const { return *IFC4X3_ADD2_IfcStructuralLoadCase_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoadCase::Class() { return *IFC4X3_ADD2_IfcStructuralLoadCase_type; } +Ifc4x3_add2::IfcStructuralLoadCase::IfcStructuralLoadCase(IfcEntityInstanceData* e) : IfcStructuralLoadGroup((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralLoadCase_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralLoadCase::IfcStructuralLoadCase(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcLoadGroupTypeEnum::Value v6_PredefinedType, ::Ifc4x3_add2::IfcActionTypeEnum::Value v7_ActionType, ::Ifc4x3_add2::IfcActionSourceTypeEnum::Value v8_ActionSource, boost::optional< double > v9_Coefficient, boost::optional< std::string > v10_Purpose, boost::optional< std::vector< double > /*[3:3]*/ > v11_SelfWeightCoefficients) : IfcStructuralLoadGroup((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralLoadCase_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v6_PredefinedType,::Ifc4x3_add2::IfcLoadGroupTypeEnum::ToString(v6_PredefinedType))));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v7_ActionType,::Ifc4x3_add2::IfcActionTypeEnum::ToString(v7_ActionType))));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v8_ActionSource,::Ifc4x3_add2::IfcActionSourceTypeEnum::ToString(v8_ActionSource))));data_->setArgument(7,attr);} if (v9_Coefficient) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_Coefficient));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_Purpose) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_Purpose));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_SelfWeightCoefficients) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_SelfWeightCoefficients));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } } + +// Function implementations for IfcStructuralLoadConfiguration +aggregate_of< ::Ifc4x3_add2::IfcStructuralLoadOrResult >::ptr Ifc4x3_add2::IfcStructuralLoadConfiguration::Values() const { aggregate_of_instance::ptr es = *data_->getArgument(1); return es->as< ::Ifc4x3_add2::IfcStructuralLoadOrResult >(); } +void Ifc4x3_add2::IfcStructuralLoadConfiguration::setValues(aggregate_of< ::Ifc4x3_add2::IfcStructuralLoadOrResult >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(1,attr);} } +boost::optional< std::vector< std::vector< double > > > Ifc4x3_add2::IfcStructuralLoadConfiguration::Locations() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::vector< std::vector< double > > v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcStructuralLoadConfiguration::setLocations(boost::optional< std::vector< std::vector< double > > > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoadConfiguration::declaration() const { return *IFC4X3_ADD2_IfcStructuralLoadConfiguration_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoadConfiguration::Class() { return *IFC4X3_ADD2_IfcStructuralLoadConfiguration_type; } +Ifc4x3_add2::IfcStructuralLoadConfiguration::IfcStructuralLoadConfiguration(IfcEntityInstanceData* e) : IfcStructuralLoad((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralLoadConfiguration_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralLoadConfiguration::IfcStructuralLoadConfiguration(boost::optional< std::string > v1_Name, aggregate_of< ::Ifc4x3_add2::IfcStructuralLoadOrResult >::ptr v2_Values, boost::optional< std::vector< std::vector< double > > > v3_Locations) : IfcStructuralLoad((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralLoadConfiguration_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Values)->generalize());data_->setArgument(1,attr);} if (v3_Locations) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Locations));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } } + +// Function implementations for IfcStructuralLoadGroup +::Ifc4x3_add2::IfcLoadGroupTypeEnum::Value Ifc4x3_add2::IfcStructuralLoadGroup::PredefinedType() const { return ::Ifc4x3_add2::IfcLoadGroupTypeEnum::FromString(*data_->getArgument(5)); } +void Ifc4x3_add2::IfcStructuralLoadGroup::setPredefinedType(::Ifc4x3_add2::IfcLoadGroupTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcLoadGroupTypeEnum::ToString(v)));data_->setArgument(5,attr);} } +::Ifc4x3_add2::IfcActionTypeEnum::Value Ifc4x3_add2::IfcStructuralLoadGroup::ActionType() const { return ::Ifc4x3_add2::IfcActionTypeEnum::FromString(*data_->getArgument(6)); } +void Ifc4x3_add2::IfcStructuralLoadGroup::setActionType(::Ifc4x3_add2::IfcActionTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcActionTypeEnum::ToString(v)));data_->setArgument(6,attr);} } +::Ifc4x3_add2::IfcActionSourceTypeEnum::Value Ifc4x3_add2::IfcStructuralLoadGroup::ActionSource() const { return ::Ifc4x3_add2::IfcActionSourceTypeEnum::FromString(*data_->getArgument(7)); } +void Ifc4x3_add2::IfcStructuralLoadGroup::setActionSource(::Ifc4x3_add2::IfcActionSourceTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcActionSourceTypeEnum::ToString(v)));data_->setArgument(7,attr);} } +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadGroup::Coefficient() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } double v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcStructuralLoadGroup::setCoefficient(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcStructuralLoadGroup::Purpose() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } std::string v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcStructuralLoadGroup::setPurpose(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(9,attr);} } + +::Ifc4x3_add2::IfcStructuralResultGroup::list::ptr Ifc4x3_add2::IfcStructuralLoadGroup::SourceOfResultGroup() const { return data_->getInverse(IFC4X3_ADD2_IfcStructuralResultGroup_type, 6)->as(); } +::Ifc4x3_add2::IfcStructuralAnalysisModel::list::ptr Ifc4x3_add2::IfcStructuralLoadGroup::LoadGroupFor() const { return data_->getInverse(IFC4X3_ADD2_IfcStructuralAnalysisModel_type, 7)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoadGroup::declaration() const { return *IFC4X3_ADD2_IfcStructuralLoadGroup_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoadGroup::Class() { return *IFC4X3_ADD2_IfcStructuralLoadGroup_type; } +Ifc4x3_add2::IfcStructuralLoadGroup::IfcStructuralLoadGroup(IfcEntityInstanceData* e) : IfcGroup((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralLoadGroup_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralLoadGroup::IfcStructuralLoadGroup(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcLoadGroupTypeEnum::Value v6_PredefinedType, ::Ifc4x3_add2::IfcActionTypeEnum::Value v7_ActionType, ::Ifc4x3_add2::IfcActionSourceTypeEnum::Value v8_ActionSource, boost::optional< double > v9_Coefficient, boost::optional< std::string > v10_Purpose) : IfcGroup((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralLoadGroup_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v6_PredefinedType,::Ifc4x3_add2::IfcLoadGroupTypeEnum::ToString(v6_PredefinedType))));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v7_ActionType,::Ifc4x3_add2::IfcActionTypeEnum::ToString(v7_ActionType))));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v8_ActionSource,::Ifc4x3_add2::IfcActionSourceTypeEnum::ToString(v8_ActionSource))));data_->setArgument(7,attr);} if (v9_Coefficient) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_Coefficient));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_Purpose) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_Purpose));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } } + +// Function implementations for IfcStructuralLoadLinearForce +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadLinearForce::LinearForceX() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcStructuralLoadLinearForce::setLinearForceX(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadLinearForce::LinearForceY() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcStructuralLoadLinearForce::setLinearForceY(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadLinearForce::LinearForceZ() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcStructuralLoadLinearForce::setLinearForceZ(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadLinearForce::LinearMomentX() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcStructuralLoadLinearForce::setLinearMomentX(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadLinearForce::LinearMomentY() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } double v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcStructuralLoadLinearForce::setLinearMomentY(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadLinearForce::LinearMomentZ() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcStructuralLoadLinearForce::setLinearMomentZ(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoadLinearForce::declaration() const { return *IFC4X3_ADD2_IfcStructuralLoadLinearForce_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoadLinearForce::Class() { return *IFC4X3_ADD2_IfcStructuralLoadLinearForce_type; } +Ifc4x3_add2::IfcStructuralLoadLinearForce::IfcStructuralLoadLinearForce(IfcEntityInstanceData* e) : IfcStructuralLoadStatic((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralLoadLinearForce_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralLoadLinearForce::IfcStructuralLoadLinearForce(boost::optional< std::string > v1_Name, boost::optional< double > v2_LinearForceX, boost::optional< double > v3_LinearForceY, boost::optional< double > v4_LinearForceZ, boost::optional< double > v5_LinearMomentX, boost::optional< double > v6_LinearMomentY, boost::optional< double > v7_LinearMomentZ) : IfcStructuralLoadStatic((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralLoadLinearForce_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_LinearForceX) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_LinearForceX));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_LinearForceY) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_LinearForceY));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_LinearForceZ) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_LinearForceZ));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_LinearMomentX) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_LinearMomentX));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_LinearMomentY) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_LinearMomentY));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_LinearMomentZ) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_LinearMomentZ));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } } + +// Function implementations for IfcStructuralLoadOrResult + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoadOrResult::declaration() const { return *IFC4X3_ADD2_IfcStructuralLoadOrResult_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoadOrResult::Class() { return *IFC4X3_ADD2_IfcStructuralLoadOrResult_type; } +Ifc4x3_add2::IfcStructuralLoadOrResult::IfcStructuralLoadOrResult(IfcEntityInstanceData* e) : IfcStructuralLoad((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralLoadOrResult_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralLoadOrResult::IfcStructuralLoadOrResult(boost::optional< std::string > v1_Name) : IfcStructuralLoad((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralLoadOrResult_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } } + +// Function implementations for IfcStructuralLoadPlanarForce +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadPlanarForce::PlanarForceX() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcStructuralLoadPlanarForce::setPlanarForceX(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadPlanarForce::PlanarForceY() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcStructuralLoadPlanarForce::setPlanarForceY(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadPlanarForce::PlanarForceZ() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcStructuralLoadPlanarForce::setPlanarForceZ(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoadPlanarForce::declaration() const { return *IFC4X3_ADD2_IfcStructuralLoadPlanarForce_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoadPlanarForce::Class() { return *IFC4X3_ADD2_IfcStructuralLoadPlanarForce_type; } +Ifc4x3_add2::IfcStructuralLoadPlanarForce::IfcStructuralLoadPlanarForce(IfcEntityInstanceData* e) : IfcStructuralLoadStatic((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralLoadPlanarForce_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralLoadPlanarForce::IfcStructuralLoadPlanarForce(boost::optional< std::string > v1_Name, boost::optional< double > v2_PlanarForceX, boost::optional< double > v3_PlanarForceY, boost::optional< double > v4_PlanarForceZ) : IfcStructuralLoadStatic((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralLoadPlanarForce_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_PlanarForceX) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_PlanarForceX));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_PlanarForceY) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_PlanarForceY));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_PlanarForceZ) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_PlanarForceZ));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcStructuralLoadSingleDisplacement +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadSingleDisplacement::DisplacementX() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcStructuralLoadSingleDisplacement::setDisplacementX(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadSingleDisplacement::DisplacementY() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcStructuralLoadSingleDisplacement::setDisplacementY(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadSingleDisplacement::DisplacementZ() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcStructuralLoadSingleDisplacement::setDisplacementZ(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadSingleDisplacement::RotationalDisplacementRX() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcStructuralLoadSingleDisplacement::setRotationalDisplacementRX(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadSingleDisplacement::RotationalDisplacementRY() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } double v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcStructuralLoadSingleDisplacement::setRotationalDisplacementRY(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadSingleDisplacement::RotationalDisplacementRZ() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcStructuralLoadSingleDisplacement::setRotationalDisplacementRZ(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoadSingleDisplacement::declaration() const { return *IFC4X3_ADD2_IfcStructuralLoadSingleDisplacement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoadSingleDisplacement::Class() { return *IFC4X3_ADD2_IfcStructuralLoadSingleDisplacement_type; } +Ifc4x3_add2::IfcStructuralLoadSingleDisplacement::IfcStructuralLoadSingleDisplacement(IfcEntityInstanceData* e) : IfcStructuralLoadStatic((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralLoadSingleDisplacement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralLoadSingleDisplacement::IfcStructuralLoadSingleDisplacement(boost::optional< std::string > v1_Name, boost::optional< double > v2_DisplacementX, boost::optional< double > v3_DisplacementY, boost::optional< double > v4_DisplacementZ, boost::optional< double > v5_RotationalDisplacementRX, boost::optional< double > v6_RotationalDisplacementRY, boost::optional< double > v7_RotationalDisplacementRZ) : IfcStructuralLoadStatic((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralLoadSingleDisplacement_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_DisplacementX) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_DisplacementX));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_DisplacementY) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_DisplacementY));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_DisplacementZ) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_DisplacementZ));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_RotationalDisplacementRX) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_RotationalDisplacementRX));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_RotationalDisplacementRY) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_RotationalDisplacementRY));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RotationalDisplacementRZ) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RotationalDisplacementRZ));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } } + +// Function implementations for IfcStructuralLoadSingleDisplacementDistortion +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadSingleDisplacementDistortion::Distortion() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } double v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcStructuralLoadSingleDisplacementDistortion::setDistortion(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoadSingleDisplacementDistortion::declaration() const { return *IFC4X3_ADD2_IfcStructuralLoadSingleDisplacementDistortion_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoadSingleDisplacementDistortion::Class() { return *IFC4X3_ADD2_IfcStructuralLoadSingleDisplacementDistortion_type; } +Ifc4x3_add2::IfcStructuralLoadSingleDisplacementDistortion::IfcStructuralLoadSingleDisplacementDistortion(IfcEntityInstanceData* e) : IfcStructuralLoadSingleDisplacement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralLoadSingleDisplacementDistortion_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralLoadSingleDisplacementDistortion::IfcStructuralLoadSingleDisplacementDistortion(boost::optional< std::string > v1_Name, boost::optional< double > v2_DisplacementX, boost::optional< double > v3_DisplacementY, boost::optional< double > v4_DisplacementZ, boost::optional< double > v5_RotationalDisplacementRX, boost::optional< double > v6_RotationalDisplacementRY, boost::optional< double > v7_RotationalDisplacementRZ, boost::optional< double > v8_Distortion) : IfcStructuralLoadSingleDisplacement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralLoadSingleDisplacementDistortion_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_DisplacementX) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_DisplacementX));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_DisplacementY) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_DisplacementY));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_DisplacementZ) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_DisplacementZ));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_RotationalDisplacementRX) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_RotationalDisplacementRX));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_RotationalDisplacementRY) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_RotationalDisplacementRY));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RotationalDisplacementRZ) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RotationalDisplacementRZ));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Distortion) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Distortion));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcStructuralLoadSingleForce +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadSingleForce::ForceX() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcStructuralLoadSingleForce::setForceX(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadSingleForce::ForceY() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcStructuralLoadSingleForce::setForceY(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadSingleForce::ForceZ() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcStructuralLoadSingleForce::setForceZ(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadSingleForce::MomentX() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcStructuralLoadSingleForce::setMomentX(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadSingleForce::MomentY() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } double v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcStructuralLoadSingleForce::setMomentY(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadSingleForce::MomentZ() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcStructuralLoadSingleForce::setMomentZ(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoadSingleForce::declaration() const { return *IFC4X3_ADD2_IfcStructuralLoadSingleForce_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoadSingleForce::Class() { return *IFC4X3_ADD2_IfcStructuralLoadSingleForce_type; } +Ifc4x3_add2::IfcStructuralLoadSingleForce::IfcStructuralLoadSingleForce(IfcEntityInstanceData* e) : IfcStructuralLoadStatic((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralLoadSingleForce_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralLoadSingleForce::IfcStructuralLoadSingleForce(boost::optional< std::string > v1_Name, boost::optional< double > v2_ForceX, boost::optional< double > v3_ForceY, boost::optional< double > v4_ForceZ, boost::optional< double > v5_MomentX, boost::optional< double > v6_MomentY, boost::optional< double > v7_MomentZ) : IfcStructuralLoadStatic((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralLoadSingleForce_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_ForceX) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ForceX));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_ForceY) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_ForceY));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_ForceZ) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_ForceZ));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_MomentX) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_MomentX));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_MomentY) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_MomentY));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_MomentZ) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_MomentZ));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } } + +// Function implementations for IfcStructuralLoadSingleForceWarping +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadSingleForceWarping::WarpingMoment() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } double v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcStructuralLoadSingleForceWarping::setWarpingMoment(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoadSingleForceWarping::declaration() const { return *IFC4X3_ADD2_IfcStructuralLoadSingleForceWarping_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoadSingleForceWarping::Class() { return *IFC4X3_ADD2_IfcStructuralLoadSingleForceWarping_type; } +Ifc4x3_add2::IfcStructuralLoadSingleForceWarping::IfcStructuralLoadSingleForceWarping(IfcEntityInstanceData* e) : IfcStructuralLoadSingleForce((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralLoadSingleForceWarping_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralLoadSingleForceWarping::IfcStructuralLoadSingleForceWarping(boost::optional< std::string > v1_Name, boost::optional< double > v2_ForceX, boost::optional< double > v3_ForceY, boost::optional< double > v4_ForceZ, boost::optional< double > v5_MomentX, boost::optional< double > v6_MomentY, boost::optional< double > v7_MomentZ, boost::optional< double > v8_WarpingMoment) : IfcStructuralLoadSingleForce((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralLoadSingleForceWarping_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_ForceX) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ForceX));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_ForceY) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_ForceY));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_ForceZ) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_ForceZ));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_MomentX) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_MomentX));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_MomentY) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_MomentY));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_MomentZ) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_MomentZ));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_WarpingMoment) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_WarpingMoment));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcStructuralLoadStatic + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoadStatic::declaration() const { return *IFC4X3_ADD2_IfcStructuralLoadStatic_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoadStatic::Class() { return *IFC4X3_ADD2_IfcStructuralLoadStatic_type; } +Ifc4x3_add2::IfcStructuralLoadStatic::IfcStructuralLoadStatic(IfcEntityInstanceData* e) : IfcStructuralLoadOrResult((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralLoadStatic_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralLoadStatic::IfcStructuralLoadStatic(boost::optional< std::string > v1_Name) : IfcStructuralLoadOrResult((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralLoadStatic_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } } + +// Function implementations for IfcStructuralLoadTemperature +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadTemperature::DeltaTConstant() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcStructuralLoadTemperature::setDeltaTConstant(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadTemperature::DeltaTY() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcStructuralLoadTemperature::setDeltaTY(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< double > Ifc4x3_add2::IfcStructuralLoadTemperature::DeltaTZ() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcStructuralLoadTemperature::setDeltaTZ(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoadTemperature::declaration() const { return *IFC4X3_ADD2_IfcStructuralLoadTemperature_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralLoadTemperature::Class() { return *IFC4X3_ADD2_IfcStructuralLoadTemperature_type; } +Ifc4x3_add2::IfcStructuralLoadTemperature::IfcStructuralLoadTemperature(IfcEntityInstanceData* e) : IfcStructuralLoadStatic((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralLoadTemperature_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralLoadTemperature::IfcStructuralLoadTemperature(boost::optional< std::string > v1_Name, boost::optional< double > v2_DeltaTConstant, boost::optional< double > v3_DeltaTY, boost::optional< double > v4_DeltaTZ) : IfcStructuralLoadStatic((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralLoadTemperature_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_DeltaTConstant) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_DeltaTConstant));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_DeltaTY) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_DeltaTY));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_DeltaTZ) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_DeltaTZ));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcStructuralMember + +::Ifc4x3_add2::IfcRelConnectsStructuralMember::list::ptr Ifc4x3_add2::IfcStructuralMember::ConnectedBy() const { return data_->getInverse(IFC4X3_ADD2_IfcRelConnectsStructuralMember_type, 4)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralMember::declaration() const { return *IFC4X3_ADD2_IfcStructuralMember_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralMember::Class() { return *IFC4X3_ADD2_IfcStructuralMember_type; } +Ifc4x3_add2::IfcStructuralMember::IfcStructuralMember(IfcEntityInstanceData* e) : IfcStructuralItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralMember_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralMember::IfcStructuralMember(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation) : IfcStructuralItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralMember_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} } + +// Function implementations for IfcStructuralPlanarAction + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralPlanarAction::declaration() const { return *IFC4X3_ADD2_IfcStructuralPlanarAction_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralPlanarAction::Class() { return *IFC4X3_ADD2_IfcStructuralPlanarAction_type; } +Ifc4x3_add2::IfcStructuralPlanarAction::IfcStructuralPlanarAction(IfcEntityInstanceData* e) : IfcStructuralSurfaceAction((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralPlanarAction_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralPlanarAction::IfcStructuralPlanarAction(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal, boost::optional< bool > v10_DestabilizingLoad, boost::optional< ::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::Value > v11_ProjectedOrTrue, ::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::Value v12_PredefinedType) : IfcStructuralSurfaceAction((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralPlanarAction_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_AppliedLoad));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v9_GlobalOrLocal,::Ifc4x3_add2::IfcGlobalOrLocalEnum::ToString(v9_GlobalOrLocal))));data_->setArgument(8,attr);} if (v10_DestabilizingLoad) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_DestabilizingLoad));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_ProjectedOrTrue) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v11_ProjectedOrTrue,::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::ToString(*v11_ProjectedOrTrue))));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v12_PredefinedType,::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::ToString(v12_PredefinedType))));data_->setArgument(11,attr);} } + +// Function implementations for IfcStructuralPointAction + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralPointAction::declaration() const { return *IFC4X3_ADD2_IfcStructuralPointAction_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralPointAction::Class() { return *IFC4X3_ADD2_IfcStructuralPointAction_type; } +Ifc4x3_add2::IfcStructuralPointAction::IfcStructuralPointAction(IfcEntityInstanceData* e) : IfcStructuralAction((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralPointAction_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralPointAction::IfcStructuralPointAction(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal, boost::optional< bool > v10_DestabilizingLoad) : IfcStructuralAction((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralPointAction_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_AppliedLoad));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v9_GlobalOrLocal,::Ifc4x3_add2::IfcGlobalOrLocalEnum::ToString(v9_GlobalOrLocal))));data_->setArgument(8,attr);} if (v10_DestabilizingLoad) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_DestabilizingLoad));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } } + +// Function implementations for IfcStructuralPointConnection +::Ifc4x3_add2::IfcAxis2Placement3D* Ifc4x3_add2::IfcStructuralPointConnection::ConditionCoordinateSystem() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(8)))->as<::Ifc4x3_add2::IfcAxis2Placement3D>(true); } +void Ifc4x3_add2::IfcStructuralPointConnection::setConditionCoordinateSystem(::Ifc4x3_add2::IfcAxis2Placement3D* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralPointConnection::declaration() const { return *IFC4X3_ADD2_IfcStructuralPointConnection_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralPointConnection::Class() { return *IFC4X3_ADD2_IfcStructuralPointConnection_type; } +Ifc4x3_add2::IfcStructuralPointConnection::IfcStructuralPointConnection(IfcEntityInstanceData* e) : IfcStructuralConnection((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralPointConnection_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralPointConnection::IfcStructuralPointConnection(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcBoundaryCondition* v8_AppliedCondition, ::Ifc4x3_add2::IfcAxis2Placement3D* v9_ConditionCoordinateSystem) : IfcStructuralConnection((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralPointConnection_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_AppliedCondition));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_ConditionCoordinateSystem));data_->setArgument(8,attr);} } + +// Function implementations for IfcStructuralPointReaction + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralPointReaction::declaration() const { return *IFC4X3_ADD2_IfcStructuralPointReaction_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralPointReaction::Class() { return *IFC4X3_ADD2_IfcStructuralPointReaction_type; } +Ifc4x3_add2::IfcStructuralPointReaction::IfcStructuralPointReaction(IfcEntityInstanceData* e) : IfcStructuralReaction((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralPointReaction_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralPointReaction::IfcStructuralPointReaction(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal) : IfcStructuralReaction((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralPointReaction_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_AppliedLoad));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v9_GlobalOrLocal,::Ifc4x3_add2::IfcGlobalOrLocalEnum::ToString(v9_GlobalOrLocal))));data_->setArgument(8,attr);} } + +// Function implementations for IfcStructuralReaction + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralReaction::declaration() const { return *IFC4X3_ADD2_IfcStructuralReaction_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralReaction::Class() { return *IFC4X3_ADD2_IfcStructuralReaction_type; } +Ifc4x3_add2::IfcStructuralReaction::IfcStructuralReaction(IfcEntityInstanceData* e) : IfcStructuralActivity((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralReaction_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralReaction::IfcStructuralReaction(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal) : IfcStructuralActivity((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralReaction_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_AppliedLoad));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v9_GlobalOrLocal,::Ifc4x3_add2::IfcGlobalOrLocalEnum::ToString(v9_GlobalOrLocal))));data_->setArgument(8,attr);} } + +// Function implementations for IfcStructuralResultGroup +::Ifc4x3_add2::IfcAnalysisTheoryTypeEnum::Value Ifc4x3_add2::IfcStructuralResultGroup::TheoryType() const { return ::Ifc4x3_add2::IfcAnalysisTheoryTypeEnum::FromString(*data_->getArgument(5)); } +void Ifc4x3_add2::IfcStructuralResultGroup::setTheoryType(::Ifc4x3_add2::IfcAnalysisTheoryTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcAnalysisTheoryTypeEnum::ToString(v)));data_->setArgument(5,attr);} } +::Ifc4x3_add2::IfcStructuralLoadGroup* Ifc4x3_add2::IfcStructuralResultGroup::ResultForLoadGroup() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcStructuralLoadGroup>(true); } +void Ifc4x3_add2::IfcStructuralResultGroup::setResultForLoadGroup(::Ifc4x3_add2::IfcStructuralLoadGroup* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +bool Ifc4x3_add2::IfcStructuralResultGroup::IsLinear() const { bool v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcStructuralResultGroup::setIsLinear(bool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(7,attr);} } + +::Ifc4x3_add2::IfcStructuralAnalysisModel::list::ptr Ifc4x3_add2::IfcStructuralResultGroup::ResultGroupFor() const { return data_->getInverse(IFC4X3_ADD2_IfcStructuralAnalysisModel_type, 8)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralResultGroup::declaration() const { return *IFC4X3_ADD2_IfcStructuralResultGroup_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralResultGroup::Class() { return *IFC4X3_ADD2_IfcStructuralResultGroup_type; } +Ifc4x3_add2::IfcStructuralResultGroup::IfcStructuralResultGroup(IfcEntityInstanceData* e) : IfcGroup((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralResultGroup_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralResultGroup::IfcStructuralResultGroup(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcAnalysisTheoryTypeEnum::Value v6_TheoryType, ::Ifc4x3_add2::IfcStructuralLoadGroup* v7_ResultForLoadGroup, bool v8_IsLinear) : IfcGroup((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralResultGroup_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v6_TheoryType,::Ifc4x3_add2::IfcAnalysisTheoryTypeEnum::ToString(v6_TheoryType))));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_ResultForLoadGroup));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_IsLinear));data_->setArgument(7,attr);} } + +// Function implementations for IfcStructuralSurfaceAction +boost::optional< ::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::Value > Ifc4x3_add2::IfcStructuralSurfaceAction::ProjectedOrTrue() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::FromString(*data_->getArgument(10)); } +void Ifc4x3_add2::IfcStructuralSurfaceAction::setProjectedOrTrue(boost::optional< ::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::ToString(*v)));}data_->setArgument(10,attr);} } +::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::Value Ifc4x3_add2::IfcStructuralSurfaceAction::PredefinedType() const { return ::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::FromString(*data_->getArgument(11)); } +void Ifc4x3_add2::IfcStructuralSurfaceAction::setPredefinedType(::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::ToString(v)));data_->setArgument(11,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralSurfaceAction::declaration() const { return *IFC4X3_ADD2_IfcStructuralSurfaceAction_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralSurfaceAction::Class() { return *IFC4X3_ADD2_IfcStructuralSurfaceAction_type; } +Ifc4x3_add2::IfcStructuralSurfaceAction::IfcStructuralSurfaceAction(IfcEntityInstanceData* e) : IfcStructuralAction((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralSurfaceAction_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralSurfaceAction::IfcStructuralSurfaceAction(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal, boost::optional< bool > v10_DestabilizingLoad, boost::optional< ::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::Value > v11_ProjectedOrTrue, ::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::Value v12_PredefinedType) : IfcStructuralAction((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralSurfaceAction_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_AppliedLoad));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v9_GlobalOrLocal,::Ifc4x3_add2::IfcGlobalOrLocalEnum::ToString(v9_GlobalOrLocal))));data_->setArgument(8,attr);} if (v10_DestabilizingLoad) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_DestabilizingLoad));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_ProjectedOrTrue) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v11_ProjectedOrTrue,::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::ToString(*v11_ProjectedOrTrue))));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v12_PredefinedType,::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::ToString(v12_PredefinedType))));data_->setArgument(11,attr);} } + +// Function implementations for IfcStructuralSurfaceConnection + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralSurfaceConnection::declaration() const { return *IFC4X3_ADD2_IfcStructuralSurfaceConnection_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralSurfaceConnection::Class() { return *IFC4X3_ADD2_IfcStructuralSurfaceConnection_type; } +Ifc4x3_add2::IfcStructuralSurfaceConnection::IfcStructuralSurfaceConnection(IfcEntityInstanceData* e) : IfcStructuralConnection((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralSurfaceConnection_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralSurfaceConnection::IfcStructuralSurfaceConnection(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcBoundaryCondition* v8_AppliedCondition) : IfcStructuralConnection((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralSurfaceConnection_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_AppliedCondition));data_->setArgument(7,attr);} } + +// Function implementations for IfcStructuralSurfaceMember +::Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::Value Ifc4x3_add2::IfcStructuralSurfaceMember::PredefinedType() const { return ::Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::FromString(*data_->getArgument(7)); } +void Ifc4x3_add2::IfcStructuralSurfaceMember::setPredefinedType(::Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::ToString(v)));data_->setArgument(7,attr);} } +boost::optional< double > Ifc4x3_add2::IfcStructuralSurfaceMember::Thickness() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } double v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcStructuralSurfaceMember::setThickness(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralSurfaceMember::declaration() const { return *IFC4X3_ADD2_IfcStructuralSurfaceMember_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralSurfaceMember::Class() { return *IFC4X3_ADD2_IfcStructuralSurfaceMember_type; } +Ifc4x3_add2::IfcStructuralSurfaceMember::IfcStructuralSurfaceMember(IfcEntityInstanceData* e) : IfcStructuralMember((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralSurfaceMember_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralSurfaceMember::IfcStructuralSurfaceMember(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::Value v8_PredefinedType, boost::optional< double > v9_Thickness) : IfcStructuralMember((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralSurfaceMember_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v8_PredefinedType,::Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::ToString(v8_PredefinedType))));data_->setArgument(7,attr);} if (v9_Thickness) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_Thickness));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcStructuralSurfaceMemberVarying + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralSurfaceMemberVarying::declaration() const { return *IFC4X3_ADD2_IfcStructuralSurfaceMemberVarying_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralSurfaceMemberVarying::Class() { return *IFC4X3_ADD2_IfcStructuralSurfaceMemberVarying_type; } +Ifc4x3_add2::IfcStructuralSurfaceMemberVarying::IfcStructuralSurfaceMemberVarying(IfcEntityInstanceData* e) : IfcStructuralSurfaceMember((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralSurfaceMemberVarying_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralSurfaceMemberVarying::IfcStructuralSurfaceMemberVarying(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::Value v8_PredefinedType, boost::optional< double > v9_Thickness) : IfcStructuralSurfaceMember((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralSurfaceMemberVarying_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v8_PredefinedType,::Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::ToString(v8_PredefinedType))));data_->setArgument(7,attr);} if (v9_Thickness) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_Thickness));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcStructuralSurfaceReaction +::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::Value Ifc4x3_add2::IfcStructuralSurfaceReaction::PredefinedType() const { return ::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcStructuralSurfaceReaction::setPredefinedType(::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStructuralSurfaceReaction::declaration() const { return *IFC4X3_ADD2_IfcStructuralSurfaceReaction_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStructuralSurfaceReaction::Class() { return *IFC4X3_ADD2_IfcStructuralSurfaceReaction_type; } +Ifc4x3_add2::IfcStructuralSurfaceReaction::IfcStructuralSurfaceReaction(IfcEntityInstanceData* e) : IfcStructuralReaction((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStructuralSurfaceReaction_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStructuralSurfaceReaction::IfcStructuralSurfaceReaction(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal, ::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::Value v10_PredefinedType) : IfcStructuralReaction((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStructuralSurfaceReaction_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_AppliedLoad));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v9_GlobalOrLocal,::Ifc4x3_add2::IfcGlobalOrLocalEnum::ToString(v9_GlobalOrLocal))));data_->setArgument(8,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcStyleModel + + +const IfcParse::entity& Ifc4x3_add2::IfcStyleModel::declaration() const { return *IFC4X3_ADD2_IfcStyleModel_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStyleModel::Class() { return *IFC4X3_ADD2_IfcStyleModel_type; } +Ifc4x3_add2::IfcStyleModel::IfcStyleModel(IfcEntityInstanceData* e) : IfcRepresentation((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStyleModel_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStyleModel::IfcStyleModel(::Ifc4x3_add2::IfcRepresentationContext* v1_ContextOfItems, boost::optional< std::string > v2_RepresentationIdentifier, boost::optional< std::string > v3_RepresentationType, aggregate_of< ::Ifc4x3_add2::IfcRepresentationItem >::ptr v4_Items) : IfcRepresentation((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStyleModel_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_ContextOfItems));data_->setArgument(0,attr);} if (v2_RepresentationIdentifier) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_RepresentationIdentifier));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_RepresentationType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_RepresentationType));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Items)->generalize());data_->setArgument(3,attr);} } + +// Function implementations for IfcStyledItem +::Ifc4x3_add2::IfcRepresentationItem* Ifc4x3_add2::IfcStyledItem::Item() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcRepresentationItem>(true); } +void Ifc4x3_add2::IfcStyledItem::setItem(::Ifc4x3_add2::IfcRepresentationItem* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcPresentationStyle >::ptr Ifc4x3_add2::IfcStyledItem::Styles() const { aggregate_of_instance::ptr es = *data_->getArgument(1); return es->as< ::Ifc4x3_add2::IfcPresentationStyle >(); } +void Ifc4x3_add2::IfcStyledItem::setStyles(aggregate_of< ::Ifc4x3_add2::IfcPresentationStyle >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(1,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcStyledItem::Name() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcStyledItem::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcStyledItem::declaration() const { return *IFC4X3_ADD2_IfcStyledItem_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStyledItem::Class() { return *IFC4X3_ADD2_IfcStyledItem_type; } +Ifc4x3_add2::IfcStyledItem::IfcStyledItem(IfcEntityInstanceData* e) : IfcRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStyledItem_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStyledItem::IfcStyledItem(::Ifc4x3_add2::IfcRepresentationItem* v1_Item, aggregate_of< ::Ifc4x3_add2::IfcPresentationStyle >::ptr v2_Styles, boost::optional< std::string > v3_Name) : IfcRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStyledItem_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Item));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Styles)->generalize());data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } } + +// Function implementations for IfcStyledRepresentation + + +const IfcParse::entity& Ifc4x3_add2::IfcStyledRepresentation::declaration() const { return *IFC4X3_ADD2_IfcStyledRepresentation_type; } +const IfcParse::entity& Ifc4x3_add2::IfcStyledRepresentation::Class() { return *IFC4X3_ADD2_IfcStyledRepresentation_type; } +Ifc4x3_add2::IfcStyledRepresentation::IfcStyledRepresentation(IfcEntityInstanceData* e) : IfcStyleModel((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcStyledRepresentation_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcStyledRepresentation::IfcStyledRepresentation(::Ifc4x3_add2::IfcRepresentationContext* v1_ContextOfItems, boost::optional< std::string > v2_RepresentationIdentifier, boost::optional< std::string > v3_RepresentationType, aggregate_of< ::Ifc4x3_add2::IfcRepresentationItem >::ptr v4_Items) : IfcStyleModel((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcStyledRepresentation_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_ContextOfItems));data_->setArgument(0,attr);} if (v2_RepresentationIdentifier) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_RepresentationIdentifier));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_RepresentationType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_RepresentationType));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Items)->generalize());data_->setArgument(3,attr);} } + +// Function implementations for IfcSubContractResource +boost::optional< ::Ifc4x3_add2::IfcSubContractResourceTypeEnum::Value > Ifc4x3_add2::IfcSubContractResource::PredefinedType() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcSubContractResourceTypeEnum::FromString(*data_->getArgument(10)); } +void Ifc4x3_add2::IfcSubContractResource::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSubContractResourceTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcSubContractResourceTypeEnum::ToString(*v)));}data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSubContractResource::declaration() const { return *IFC4X3_ADD2_IfcSubContractResource_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSubContractResource::Class() { return *IFC4X3_ADD2_IfcSubContractResource_type; } +Ifc4x3_add2::IfcSubContractResource::IfcSubContractResource(IfcEntityInstanceData* e) : IfcConstructionResource((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSubContractResource_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSubContractResource::IfcSubContractResource(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, ::Ifc4x3_add2::IfcResourceTime* v8_Usage, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v9_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v10_BaseQuantity, boost::optional< ::Ifc4x3_add2::IfcSubContractResourceTypeEnum::Value > v11_PredefinedType) : IfcConstructionResource((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSubContractResource_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Identification));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_LongDescription));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_Usage));data_->setArgument(7,attr);} if (v9_BaseCosts) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_BaseCosts)->generalize());data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v10_BaseQuantity));data_->setArgument(9,attr);} if (v11_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v11_PredefinedType,::Ifc4x3_add2::IfcSubContractResourceTypeEnum::ToString(*v11_PredefinedType))));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } } + +// Function implementations for IfcSubContractResourceType +::Ifc4x3_add2::IfcSubContractResourceTypeEnum::Value Ifc4x3_add2::IfcSubContractResourceType::PredefinedType() const { return ::Ifc4x3_add2::IfcSubContractResourceTypeEnum::FromString(*data_->getArgument(11)); } +void Ifc4x3_add2::IfcSubContractResourceType::setPredefinedType(::Ifc4x3_add2::IfcSubContractResourceTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcSubContractResourceTypeEnum::ToString(v)));data_->setArgument(11,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSubContractResourceType::declaration() const { return *IFC4X3_ADD2_IfcSubContractResourceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSubContractResourceType::Class() { return *IFC4X3_ADD2_IfcSubContractResourceType_type; } +Ifc4x3_add2::IfcSubContractResourceType::IfcSubContractResourceType(IfcEntityInstanceData* e) : IfcConstructionResourceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSubContractResourceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSubContractResourceType::IfcSubContractResourceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ResourceType, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v10_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v11_BaseQuantity, ::Ifc4x3_add2::IfcSubContractResourceTypeEnum::Value v12_PredefinedType) : IfcConstructionResourceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSubContractResourceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_Identification));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongDescription));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ResourceType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ResourceType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_BaseCosts) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_BaseCosts)->generalize());data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v11_BaseQuantity));data_->setArgument(10,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v12_PredefinedType,::Ifc4x3_add2::IfcSubContractResourceTypeEnum::ToString(v12_PredefinedType))));data_->setArgument(11,attr);} } + +// Function implementations for IfcSubedge +::Ifc4x3_add2::IfcEdge* Ifc4x3_add2::IfcSubedge::ParentEdge() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcEdge>(true); } +void Ifc4x3_add2::IfcSubedge::setParentEdge(::Ifc4x3_add2::IfcEdge* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSubedge::declaration() const { return *IFC4X3_ADD2_IfcSubedge_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSubedge::Class() { return *IFC4X3_ADD2_IfcSubedge_type; } +Ifc4x3_add2::IfcSubedge::IfcSubedge(IfcEntityInstanceData* e) : IfcEdge((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSubedge_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSubedge::IfcSubedge(::Ifc4x3_add2::IfcVertex* v1_EdgeStart, ::Ifc4x3_add2::IfcVertex* v2_EdgeEnd, ::Ifc4x3_add2::IfcEdge* v3_ParentEdge) : IfcEdge((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSubedge_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_EdgeStart));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_EdgeEnd));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_ParentEdge));data_->setArgument(2,attr);} } + +// Function implementations for IfcSurface + + +const IfcParse::entity& Ifc4x3_add2::IfcSurface::declaration() const { return *IFC4X3_ADD2_IfcSurface_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSurface::Class() { return *IFC4X3_ADD2_IfcSurface_type; } +Ifc4x3_add2::IfcSurface::IfcSurface(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSurface_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSurface::IfcSurface() : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSurface_type); } + +// Function implementations for IfcSurfaceCurve +::Ifc4x3_add2::IfcCurve* Ifc4x3_add2::IfcSurfaceCurve::Curve3D() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcCurve>(true); } +void Ifc4x3_add2::IfcSurfaceCurve::setCurve3D(::Ifc4x3_add2::IfcCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcPcurve >::ptr Ifc4x3_add2::IfcSurfaceCurve::AssociatedGeometry() const { aggregate_of_instance::ptr es = *data_->getArgument(1); return es->as< ::Ifc4x3_add2::IfcPcurve >(); } +void Ifc4x3_add2::IfcSurfaceCurve::setAssociatedGeometry(aggregate_of< ::Ifc4x3_add2::IfcPcurve >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::Value Ifc4x3_add2::IfcSurfaceCurve::MasterRepresentation() const { return ::Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::FromString(*data_->getArgument(2)); } +void Ifc4x3_add2::IfcSurfaceCurve::setMasterRepresentation(::Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::ToString(v)));data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceCurve::declaration() const { return *IFC4X3_ADD2_IfcSurfaceCurve_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceCurve::Class() { return *IFC4X3_ADD2_IfcSurfaceCurve_type; } +Ifc4x3_add2::IfcSurfaceCurve::IfcSurfaceCurve(IfcEntityInstanceData* e) : IfcCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSurfaceCurve_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSurfaceCurve::IfcSurfaceCurve(::Ifc4x3_add2::IfcCurve* v1_Curve3D, aggregate_of< ::Ifc4x3_add2::IfcPcurve >::ptr v2_AssociatedGeometry, ::Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::Value v3_MasterRepresentation) : IfcCurve((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSurfaceCurve_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Curve3D));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_AssociatedGeometry)->generalize());data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v3_MasterRepresentation,::Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::ToString(v3_MasterRepresentation))));data_->setArgument(2,attr);} } + +// Function implementations for IfcSurfaceCurveSweptAreaSolid +::Ifc4x3_add2::IfcSurface* Ifc4x3_add2::IfcSurfaceCurveSweptAreaSolid::ReferenceSurface() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcSurface>(true); } +void Ifc4x3_add2::IfcSurfaceCurveSweptAreaSolid::setReferenceSurface(::Ifc4x3_add2::IfcSurface* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceCurveSweptAreaSolid::declaration() const { return *IFC4X3_ADD2_IfcSurfaceCurveSweptAreaSolid_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceCurveSweptAreaSolid::Class() { return *IFC4X3_ADD2_IfcSurfaceCurveSweptAreaSolid_type; } +Ifc4x3_add2::IfcSurfaceCurveSweptAreaSolid::IfcSurfaceCurveSweptAreaSolid(IfcEntityInstanceData* e) : IfcDirectrixCurveSweptAreaSolid((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSurfaceCurveSweptAreaSolid_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSurfaceCurveSweptAreaSolid::IfcSurfaceCurveSweptAreaSolid(::Ifc4x3_add2::IfcProfileDef* v1_SweptArea, ::Ifc4x3_add2::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_add2::IfcCurve* v3_Directrix, ::Ifc4x3_add2::IfcCurveMeasureSelect* v4_StartParam, ::Ifc4x3_add2::IfcCurveMeasureSelect* v5_EndParam, ::Ifc4x3_add2::IfcSurface* v6_ReferenceSurface) : IfcDirectrixCurveSweptAreaSolid((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSurfaceCurveSweptAreaSolid_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_SweptArea));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Position));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Directrix));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_StartParam));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_EndParam));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ReferenceSurface));data_->setArgument(5,attr);} } + +// Function implementations for IfcSurfaceFeature +boost::optional< ::Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::Value > Ifc4x3_add2::IfcSurfaceFeature::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcSurfaceFeature::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + +::Ifc4x3_add2::IfcRelAdheresToElement::list::ptr Ifc4x3_add2::IfcSurfaceFeature::AdheresToElement() const { return data_->getInverse(IFC4X3_ADD2_IfcRelAdheresToElement_type, 5)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceFeature::declaration() const { return *IFC4X3_ADD2_IfcSurfaceFeature_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceFeature::Class() { return *IFC4X3_ADD2_IfcSurfaceFeature_type; } +Ifc4x3_add2::IfcSurfaceFeature::IfcSurfaceFeature(IfcEntityInstanceData* e) : IfcFeatureElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSurfaceFeature_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSurfaceFeature::IfcSurfaceFeature(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::Value > v9_PredefinedType) : IfcFeatureElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSurfaceFeature_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcSurfaceOfLinearExtrusion +::Ifc4x3_add2::IfcDirection* Ifc4x3_add2::IfcSurfaceOfLinearExtrusion::ExtrudedDirection() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcDirection>(true); } +void Ifc4x3_add2::IfcSurfaceOfLinearExtrusion::setExtrudedDirection(::Ifc4x3_add2::IfcDirection* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +double Ifc4x3_add2::IfcSurfaceOfLinearExtrusion::Depth() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcSurfaceOfLinearExtrusion::setDepth(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceOfLinearExtrusion::declaration() const { return *IFC4X3_ADD2_IfcSurfaceOfLinearExtrusion_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceOfLinearExtrusion::Class() { return *IFC4X3_ADD2_IfcSurfaceOfLinearExtrusion_type; } +Ifc4x3_add2::IfcSurfaceOfLinearExtrusion::IfcSurfaceOfLinearExtrusion(IfcEntityInstanceData* e) : IfcSweptSurface((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSurfaceOfLinearExtrusion_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSurfaceOfLinearExtrusion::IfcSurfaceOfLinearExtrusion(::Ifc4x3_add2::IfcProfileDef* v1_SweptCurve, ::Ifc4x3_add2::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_add2::IfcDirection* v3_ExtrudedDirection, double v4_Depth) : IfcSweptSurface((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSurfaceOfLinearExtrusion_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_SweptCurve));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Position));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_ExtrudedDirection));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Depth));data_->setArgument(3,attr);} } + +// Function implementations for IfcSurfaceOfRevolution +::Ifc4x3_add2::IfcAxis1Placement* Ifc4x3_add2::IfcSurfaceOfRevolution::AxisPosition() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcAxis1Placement>(true); } +void Ifc4x3_add2::IfcSurfaceOfRevolution::setAxisPosition(::Ifc4x3_add2::IfcAxis1Placement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceOfRevolution::declaration() const { return *IFC4X3_ADD2_IfcSurfaceOfRevolution_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceOfRevolution::Class() { return *IFC4X3_ADD2_IfcSurfaceOfRevolution_type; } +Ifc4x3_add2::IfcSurfaceOfRevolution::IfcSurfaceOfRevolution(IfcEntityInstanceData* e) : IfcSweptSurface((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSurfaceOfRevolution_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSurfaceOfRevolution::IfcSurfaceOfRevolution(::Ifc4x3_add2::IfcProfileDef* v1_SweptCurve, ::Ifc4x3_add2::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_add2::IfcAxis1Placement* v3_AxisPosition) : IfcSweptSurface((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSurfaceOfRevolution_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_SweptCurve));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Position));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_AxisPosition));data_->setArgument(2,attr);} } + +// Function implementations for IfcSurfaceReinforcementArea +boost::optional< std::vector< double > /*[2:3]*/ > Ifc4x3_add2::IfcSurfaceReinforcementArea::SurfaceReinforcement1() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::vector< double > /*[2:3]*/ v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcSurfaceReinforcementArea::setSurfaceReinforcement1(boost::optional< std::vector< double > /*[2:3]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< std::vector< double > /*[2:3]*/ > Ifc4x3_add2::IfcSurfaceReinforcementArea::SurfaceReinforcement2() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::vector< double > /*[2:3]*/ v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcSurfaceReinforcementArea::setSurfaceReinforcement2(boost::optional< std::vector< double > /*[2:3]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< double > Ifc4x3_add2::IfcSurfaceReinforcementArea::ShearReinforcement() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcSurfaceReinforcementArea::setShearReinforcement(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceReinforcementArea::declaration() const { return *IFC4X3_ADD2_IfcSurfaceReinforcementArea_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceReinforcementArea::Class() { return *IFC4X3_ADD2_IfcSurfaceReinforcementArea_type; } +Ifc4x3_add2::IfcSurfaceReinforcementArea::IfcSurfaceReinforcementArea(IfcEntityInstanceData* e) : IfcStructuralLoadOrResult((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSurfaceReinforcementArea_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSurfaceReinforcementArea::IfcSurfaceReinforcementArea(boost::optional< std::string > v1_Name, boost::optional< std::vector< double > /*[2:3]*/ > v2_SurfaceReinforcement1, boost::optional< std::vector< double > /*[2:3]*/ > v3_SurfaceReinforcement2, boost::optional< double > v4_ShearReinforcement) : IfcStructuralLoadOrResult((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSurfaceReinforcementArea_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_SurfaceReinforcement1) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_SurfaceReinforcement1));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_SurfaceReinforcement2) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_SurfaceReinforcement2));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_ShearReinforcement) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_ShearReinforcement));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } } + +// Function implementations for IfcSurfaceStyle +::Ifc4x3_add2::IfcSurfaceSide::Value Ifc4x3_add2::IfcSurfaceStyle::Side() const { return ::Ifc4x3_add2::IfcSurfaceSide::FromString(*data_->getArgument(1)); } +void Ifc4x3_add2::IfcSurfaceStyle::setSide(::Ifc4x3_add2::IfcSurfaceSide::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcSurfaceSide::ToString(v)));data_->setArgument(1,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcSurfaceStyleElementSelect >::ptr Ifc4x3_add2::IfcSurfaceStyle::Styles() const { aggregate_of_instance::ptr es = *data_->getArgument(2); return es->as< ::Ifc4x3_add2::IfcSurfaceStyleElementSelect >(); } +void Ifc4x3_add2::IfcSurfaceStyle::setStyles(aggregate_of< ::Ifc4x3_add2::IfcSurfaceStyleElementSelect >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceStyle::declaration() const { return *IFC4X3_ADD2_IfcSurfaceStyle_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceStyle::Class() { return *IFC4X3_ADD2_IfcSurfaceStyle_type; } +Ifc4x3_add2::IfcSurfaceStyle::IfcSurfaceStyle(IfcEntityInstanceData* e) : IfcPresentationStyle((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSurfaceStyle_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSurfaceStyle::IfcSurfaceStyle(boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcSurfaceSide::Value v2_Side, aggregate_of< ::Ifc4x3_add2::IfcSurfaceStyleElementSelect >::ptr v3_Styles) : IfcPresentationStyle((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSurfaceStyle_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v2_Side,::Ifc4x3_add2::IfcSurfaceSide::ToString(v2_Side))));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Styles)->generalize());data_->setArgument(2,attr);} } + +// Function implementations for IfcSurfaceStyleLighting +::Ifc4x3_add2::IfcColourRgb* Ifc4x3_add2::IfcSurfaceStyleLighting::DiffuseTransmissionColour() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcColourRgb>(true); } +void Ifc4x3_add2::IfcSurfaceStyleLighting::setDiffuseTransmissionColour(::Ifc4x3_add2::IfcColourRgb* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcColourRgb* Ifc4x3_add2::IfcSurfaceStyleLighting::DiffuseReflectionColour() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcColourRgb>(true); } +void Ifc4x3_add2::IfcSurfaceStyleLighting::setDiffuseReflectionColour(::Ifc4x3_add2::IfcColourRgb* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcColourRgb* Ifc4x3_add2::IfcSurfaceStyleLighting::TransmissionColour() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcColourRgb>(true); } +void Ifc4x3_add2::IfcSurfaceStyleLighting::setTransmissionColour(::Ifc4x3_add2::IfcColourRgb* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcColourRgb* Ifc4x3_add2::IfcSurfaceStyleLighting::ReflectanceColour() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcColourRgb>(true); } +void Ifc4x3_add2::IfcSurfaceStyleLighting::setReflectanceColour(::Ifc4x3_add2::IfcColourRgb* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceStyleLighting::declaration() const { return *IFC4X3_ADD2_IfcSurfaceStyleLighting_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceStyleLighting::Class() { return *IFC4X3_ADD2_IfcSurfaceStyleLighting_type; } +Ifc4x3_add2::IfcSurfaceStyleLighting::IfcSurfaceStyleLighting(IfcEntityInstanceData* e) : IfcPresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSurfaceStyleLighting_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSurfaceStyleLighting::IfcSurfaceStyleLighting(::Ifc4x3_add2::IfcColourRgb* v1_DiffuseTransmissionColour, ::Ifc4x3_add2::IfcColourRgb* v2_DiffuseReflectionColour, ::Ifc4x3_add2::IfcColourRgb* v3_TransmissionColour, ::Ifc4x3_add2::IfcColourRgb* v4_ReflectanceColour) : IfcPresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSurfaceStyleLighting_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_DiffuseTransmissionColour));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_DiffuseReflectionColour));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_TransmissionColour));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_ReflectanceColour));data_->setArgument(3,attr);} } + +// Function implementations for IfcSurfaceStyleRefraction +boost::optional< double > Ifc4x3_add2::IfcSurfaceStyleRefraction::RefractionIndex() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } double v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcSurfaceStyleRefraction::setRefractionIndex(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } +boost::optional< double > Ifc4x3_add2::IfcSurfaceStyleRefraction::DispersionFactor() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcSurfaceStyleRefraction::setDispersionFactor(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceStyleRefraction::declaration() const { return *IFC4X3_ADD2_IfcSurfaceStyleRefraction_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceStyleRefraction::Class() { return *IFC4X3_ADD2_IfcSurfaceStyleRefraction_type; } +Ifc4x3_add2::IfcSurfaceStyleRefraction::IfcSurfaceStyleRefraction(IfcEntityInstanceData* e) : IfcPresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSurfaceStyleRefraction_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSurfaceStyleRefraction::IfcSurfaceStyleRefraction(boost::optional< double > v1_RefractionIndex, boost::optional< double > v2_DispersionFactor) : IfcPresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSurfaceStyleRefraction_type); if (v1_RefractionIndex) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_RefractionIndex));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_DispersionFactor) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_DispersionFactor));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } } + +// Function implementations for IfcSurfaceStyleRendering +::Ifc4x3_add2::IfcColourOrFactor* Ifc4x3_add2::IfcSurfaceStyleRendering::DiffuseColour() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcColourOrFactor>(true); } +void Ifc4x3_add2::IfcSurfaceStyleRendering::setDiffuseColour(::Ifc4x3_add2::IfcColourOrFactor* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcColourOrFactor* Ifc4x3_add2::IfcSurfaceStyleRendering::TransmissionColour() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcColourOrFactor>(true); } +void Ifc4x3_add2::IfcSurfaceStyleRendering::setTransmissionColour(::Ifc4x3_add2::IfcColourOrFactor* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +::Ifc4x3_add2::IfcColourOrFactor* Ifc4x3_add2::IfcSurfaceStyleRendering::DiffuseTransmissionColour() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcColourOrFactor>(true); } +void Ifc4x3_add2::IfcSurfaceStyleRendering::setDiffuseTransmissionColour(::Ifc4x3_add2::IfcColourOrFactor* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcColourOrFactor* Ifc4x3_add2::IfcSurfaceStyleRendering::ReflectionColour() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcColourOrFactor>(true); } +void Ifc4x3_add2::IfcSurfaceStyleRendering::setReflectionColour(::Ifc4x3_add2::IfcColourOrFactor* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +::Ifc4x3_add2::IfcColourOrFactor* Ifc4x3_add2::IfcSurfaceStyleRendering::SpecularColour() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcColourOrFactor>(true); } +void Ifc4x3_add2::IfcSurfaceStyleRendering::setSpecularColour(::Ifc4x3_add2::IfcColourOrFactor* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +::Ifc4x3_add2::IfcSpecularHighlightSelect* Ifc4x3_add2::IfcSurfaceStyleRendering::SpecularHighlight() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(7)))->as<::Ifc4x3_add2::IfcSpecularHighlightSelect>(true); } +void Ifc4x3_add2::IfcSurfaceStyleRendering::setSpecularHighlight(::Ifc4x3_add2::IfcSpecularHighlightSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(7,attr);} } +::Ifc4x3_add2::IfcReflectanceMethodEnum::Value Ifc4x3_add2::IfcSurfaceStyleRendering::ReflectanceMethod() const { return ::Ifc4x3_add2::IfcReflectanceMethodEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcSurfaceStyleRendering::setReflectanceMethod(::Ifc4x3_add2::IfcReflectanceMethodEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcReflectanceMethodEnum::ToString(v)));data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceStyleRendering::declaration() const { return *IFC4X3_ADD2_IfcSurfaceStyleRendering_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceStyleRendering::Class() { return *IFC4X3_ADD2_IfcSurfaceStyleRendering_type; } +Ifc4x3_add2::IfcSurfaceStyleRendering::IfcSurfaceStyleRendering(IfcEntityInstanceData* e) : IfcSurfaceStyleShading((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSurfaceStyleRendering_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSurfaceStyleRendering::IfcSurfaceStyleRendering(::Ifc4x3_add2::IfcColourRgb* v1_SurfaceColour, boost::optional< double > v2_Transparency, ::Ifc4x3_add2::IfcColourOrFactor* v3_DiffuseColour, ::Ifc4x3_add2::IfcColourOrFactor* v4_TransmissionColour, ::Ifc4x3_add2::IfcColourOrFactor* v5_DiffuseTransmissionColour, ::Ifc4x3_add2::IfcColourOrFactor* v6_ReflectionColour, ::Ifc4x3_add2::IfcColourOrFactor* v7_SpecularColour, ::Ifc4x3_add2::IfcSpecularHighlightSelect* v8_SpecularHighlight, ::Ifc4x3_add2::IfcReflectanceMethodEnum::Value v9_ReflectanceMethod) : IfcSurfaceStyleShading((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSurfaceStyleRendering_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_SurfaceColour));data_->setArgument(0,attr);} if (v2_Transparency) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Transparency));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_DiffuseColour));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_TransmissionColour));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_DiffuseTransmissionColour));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ReflectionColour));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_SpecularColour));data_->setArgument(6,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_SpecularHighlight));data_->setArgument(7,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v9_ReflectanceMethod,::Ifc4x3_add2::IfcReflectanceMethodEnum::ToString(v9_ReflectanceMethod))));data_->setArgument(8,attr);} } + +// Function implementations for IfcSurfaceStyleShading +::Ifc4x3_add2::IfcColourRgb* Ifc4x3_add2::IfcSurfaceStyleShading::SurfaceColour() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcColourRgb>(true); } +void Ifc4x3_add2::IfcSurfaceStyleShading::setSurfaceColour(::Ifc4x3_add2::IfcColourRgb* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +boost::optional< double > Ifc4x3_add2::IfcSurfaceStyleShading::Transparency() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcSurfaceStyleShading::setTransparency(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceStyleShading::declaration() const { return *IFC4X3_ADD2_IfcSurfaceStyleShading_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceStyleShading::Class() { return *IFC4X3_ADD2_IfcSurfaceStyleShading_type; } +Ifc4x3_add2::IfcSurfaceStyleShading::IfcSurfaceStyleShading(IfcEntityInstanceData* e) : IfcPresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSurfaceStyleShading_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSurfaceStyleShading::IfcSurfaceStyleShading(::Ifc4x3_add2::IfcColourRgb* v1_SurfaceColour, boost::optional< double > v2_Transparency) : IfcPresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSurfaceStyleShading_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_SurfaceColour));data_->setArgument(0,attr);} if (v2_Transparency) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Transparency));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } } + +// Function implementations for IfcSurfaceStyleWithTextures +aggregate_of< ::Ifc4x3_add2::IfcSurfaceTexture >::ptr Ifc4x3_add2::IfcSurfaceStyleWithTextures::Textures() const { aggregate_of_instance::ptr es = *data_->getArgument(0); return es->as< ::Ifc4x3_add2::IfcSurfaceTexture >(); } +void Ifc4x3_add2::IfcSurfaceStyleWithTextures::setTextures(aggregate_of< ::Ifc4x3_add2::IfcSurfaceTexture >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceStyleWithTextures::declaration() const { return *IFC4X3_ADD2_IfcSurfaceStyleWithTextures_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceStyleWithTextures::Class() { return *IFC4X3_ADD2_IfcSurfaceStyleWithTextures_type; } +Ifc4x3_add2::IfcSurfaceStyleWithTextures::IfcSurfaceStyleWithTextures(IfcEntityInstanceData* e) : IfcPresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSurfaceStyleWithTextures_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSurfaceStyleWithTextures::IfcSurfaceStyleWithTextures(aggregate_of< ::Ifc4x3_add2::IfcSurfaceTexture >::ptr v1_Textures) : IfcPresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSurfaceStyleWithTextures_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Textures)->generalize());data_->setArgument(0,attr);} } + +// Function implementations for IfcSurfaceTexture +bool Ifc4x3_add2::IfcSurfaceTexture::RepeatS() const { bool v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcSurfaceTexture::setRepeatS(bool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +bool Ifc4x3_add2::IfcSurfaceTexture::RepeatT() const { bool v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcSurfaceTexture::setRepeatT(bool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcSurfaceTexture::Mode() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcSurfaceTexture::setMode(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcCartesianTransformationOperator2D* Ifc4x3_add2::IfcSurfaceTexture::TextureTransform() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcCartesianTransformationOperator2D>(true); } +void Ifc4x3_add2::IfcSurfaceTexture::setTextureTransform(::Ifc4x3_add2::IfcCartesianTransformationOperator2D* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +boost::optional< std::vector< std::string > /*[1:?]*/ > Ifc4x3_add2::IfcSurfaceTexture::Parameter() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::vector< std::string > /*[1:?]*/ v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcSurfaceTexture::setParameter(boost::optional< std::vector< std::string > /*[1:?]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } + +::Ifc4x3_add2::IfcTextureCoordinate::list::ptr Ifc4x3_add2::IfcSurfaceTexture::IsMappedBy() const { return data_->getInverse(IFC4X3_ADD2_IfcTextureCoordinate_type, 0)->as(); } +::Ifc4x3_add2::IfcSurfaceStyleWithTextures::list::ptr Ifc4x3_add2::IfcSurfaceTexture::UsedInStyles() const { return data_->getInverse(IFC4X3_ADD2_IfcSurfaceStyleWithTextures_type, 0)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceTexture::declaration() const { return *IFC4X3_ADD2_IfcSurfaceTexture_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSurfaceTexture::Class() { return *IFC4X3_ADD2_IfcSurfaceTexture_type; } +Ifc4x3_add2::IfcSurfaceTexture::IfcSurfaceTexture(IfcEntityInstanceData* e) : IfcPresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSurfaceTexture_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSurfaceTexture::IfcSurfaceTexture(bool v1_RepeatS, bool v2_RepeatT, boost::optional< std::string > v3_Mode, ::Ifc4x3_add2::IfcCartesianTransformationOperator2D* v4_TextureTransform, boost::optional< std::vector< std::string > /*[1:?]*/ > v5_Parameter) : IfcPresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSurfaceTexture_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_RepeatS));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_RepeatT));data_->setArgument(1,attr);} if (v3_Mode) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Mode));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_TextureTransform));data_->setArgument(3,attr);} if (v5_Parameter) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_Parameter));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcSweptAreaSolid +::Ifc4x3_add2::IfcProfileDef* Ifc4x3_add2::IfcSweptAreaSolid::SweptArea() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcProfileDef>(true); } +void Ifc4x3_add2::IfcSweptAreaSolid::setSweptArea(::Ifc4x3_add2::IfcProfileDef* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcAxis2Placement3D* Ifc4x3_add2::IfcSweptAreaSolid::Position() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcAxis2Placement3D>(true); } +void Ifc4x3_add2::IfcSweptAreaSolid::setPosition(::Ifc4x3_add2::IfcAxis2Placement3D* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSweptAreaSolid::declaration() const { return *IFC4X3_ADD2_IfcSweptAreaSolid_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSweptAreaSolid::Class() { return *IFC4X3_ADD2_IfcSweptAreaSolid_type; } +Ifc4x3_add2::IfcSweptAreaSolid::IfcSweptAreaSolid(IfcEntityInstanceData* e) : IfcSolidModel((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSweptAreaSolid_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSweptAreaSolid::IfcSweptAreaSolid(::Ifc4x3_add2::IfcProfileDef* v1_SweptArea, ::Ifc4x3_add2::IfcAxis2Placement3D* v2_Position) : IfcSolidModel((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSweptAreaSolid_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_SweptArea));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Position));data_->setArgument(1,attr);} } + +// Function implementations for IfcSweptDiskSolid +::Ifc4x3_add2::IfcCurve* Ifc4x3_add2::IfcSweptDiskSolid::Directrix() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcCurve>(true); } +void Ifc4x3_add2::IfcSweptDiskSolid::setDirectrix(::Ifc4x3_add2::IfcCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +double Ifc4x3_add2::IfcSweptDiskSolid::Radius() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcSweptDiskSolid::setRadius(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +boost::optional< double > Ifc4x3_add2::IfcSweptDiskSolid::InnerRadius() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcSweptDiskSolid::setInnerRadius(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< double > Ifc4x3_add2::IfcSweptDiskSolid::StartParam() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcSweptDiskSolid::setStartParam(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +boost::optional< double > Ifc4x3_add2::IfcSweptDiskSolid::EndParam() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcSweptDiskSolid::setEndParam(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSweptDiskSolid::declaration() const { return *IFC4X3_ADD2_IfcSweptDiskSolid_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSweptDiskSolid::Class() { return *IFC4X3_ADD2_IfcSweptDiskSolid_type; } +Ifc4x3_add2::IfcSweptDiskSolid::IfcSweptDiskSolid(IfcEntityInstanceData* e) : IfcSolidModel((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSweptDiskSolid_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSweptDiskSolid::IfcSweptDiskSolid(::Ifc4x3_add2::IfcCurve* v1_Directrix, double v2_Radius, boost::optional< double > v3_InnerRadius, boost::optional< double > v4_StartParam, boost::optional< double > v5_EndParam) : IfcSolidModel((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSweptDiskSolid_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Directrix));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Radius));data_->setArgument(1,attr);} if (v3_InnerRadius) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_InnerRadius));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_StartParam) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_StartParam));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_EndParam) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_EndParam));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcSweptDiskSolidPolygonal +boost::optional< double > Ifc4x3_add2::IfcSweptDiskSolidPolygonal::FilletRadius() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } double v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcSweptDiskSolidPolygonal::setFilletRadius(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSweptDiskSolidPolygonal::declaration() const { return *IFC4X3_ADD2_IfcSweptDiskSolidPolygonal_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSweptDiskSolidPolygonal::Class() { return *IFC4X3_ADD2_IfcSweptDiskSolidPolygonal_type; } +Ifc4x3_add2::IfcSweptDiskSolidPolygonal::IfcSweptDiskSolidPolygonal(IfcEntityInstanceData* e) : IfcSweptDiskSolid((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSweptDiskSolidPolygonal_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSweptDiskSolidPolygonal::IfcSweptDiskSolidPolygonal(::Ifc4x3_add2::IfcCurve* v1_Directrix, double v2_Radius, boost::optional< double > v3_InnerRadius, boost::optional< double > v4_StartParam, boost::optional< double > v5_EndParam, boost::optional< double > v6_FilletRadius) : IfcSweptDiskSolid((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSweptDiskSolidPolygonal_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Directrix));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Radius));data_->setArgument(1,attr);} if (v3_InnerRadius) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_InnerRadius));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_StartParam) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_StartParam));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_EndParam) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_EndParam));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_FilletRadius) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_FilletRadius));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } } + +// Function implementations for IfcSweptSurface +::Ifc4x3_add2::IfcProfileDef* Ifc4x3_add2::IfcSweptSurface::SweptCurve() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcProfileDef>(true); } +void Ifc4x3_add2::IfcSweptSurface::setSweptCurve(::Ifc4x3_add2::IfcProfileDef* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcAxis2Placement3D* Ifc4x3_add2::IfcSweptSurface::Position() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcAxis2Placement3D>(true); } +void Ifc4x3_add2::IfcSweptSurface::setPosition(::Ifc4x3_add2::IfcAxis2Placement3D* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSweptSurface::declaration() const { return *IFC4X3_ADD2_IfcSweptSurface_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSweptSurface::Class() { return *IFC4X3_ADD2_IfcSweptSurface_type; } +Ifc4x3_add2::IfcSweptSurface::IfcSweptSurface(IfcEntityInstanceData* e) : IfcSurface((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSweptSurface_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSweptSurface::IfcSweptSurface(::Ifc4x3_add2::IfcProfileDef* v1_SweptCurve, ::Ifc4x3_add2::IfcAxis2Placement3D* v2_Position) : IfcSurface((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSweptSurface_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_SweptCurve));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Position));data_->setArgument(1,attr);} } + +// Function implementations for IfcSwitchingDevice +boost::optional< ::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::Value > Ifc4x3_add2::IfcSwitchingDevice::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcSwitchingDevice::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSwitchingDevice::declaration() const { return *IFC4X3_ADD2_IfcSwitchingDevice_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSwitchingDevice::Class() { return *IFC4X3_ADD2_IfcSwitchingDevice_type; } +Ifc4x3_add2::IfcSwitchingDevice::IfcSwitchingDevice(IfcEntityInstanceData* e) : IfcFlowController((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSwitchingDevice_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSwitchingDevice::IfcSwitchingDevice(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::Value > v9_PredefinedType) : IfcFlowController((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSwitchingDevice_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcSwitchingDeviceType +::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::Value Ifc4x3_add2::IfcSwitchingDeviceType::PredefinedType() const { return ::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcSwitchingDeviceType::setPredefinedType(::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSwitchingDeviceType::declaration() const { return *IFC4X3_ADD2_IfcSwitchingDeviceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSwitchingDeviceType::Class() { return *IFC4X3_ADD2_IfcSwitchingDeviceType_type; } +Ifc4x3_add2::IfcSwitchingDeviceType::IfcSwitchingDeviceType(IfcEntityInstanceData* e) : IfcFlowControllerType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSwitchingDeviceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSwitchingDeviceType::IfcSwitchingDeviceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::Value v10_PredefinedType) : IfcFlowControllerType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSwitchingDeviceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcSystem + +::Ifc4x3_add2::IfcRelServicesBuildings::list::ptr Ifc4x3_add2::IfcSystem::ServicesBuildings() const { return data_->getInverse(IFC4X3_ADD2_IfcRelServicesBuildings_type, 4)->as(); } +::Ifc4x3_add2::IfcRelReferencedInSpatialStructure::list::ptr Ifc4x3_add2::IfcSystem::ServicesFacilities() const { return data_->getInverse(IFC4X3_ADD2_IfcRelReferencedInSpatialStructure_type, 4)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcSystem::declaration() const { return *IFC4X3_ADD2_IfcSystem_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSystem::Class() { return *IFC4X3_ADD2_IfcSystem_type; } +Ifc4x3_add2::IfcSystem::IfcSystem(IfcEntityInstanceData* e) : IfcGroup((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSystem_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSystem::IfcSystem(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType) : IfcGroup((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSystem_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcSystemFurnitureElement +boost::optional< ::Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::Value > Ifc4x3_add2::IfcSystemFurnitureElement::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcSystemFurnitureElement::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSystemFurnitureElement::declaration() const { return *IFC4X3_ADD2_IfcSystemFurnitureElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSystemFurnitureElement::Class() { return *IFC4X3_ADD2_IfcSystemFurnitureElement_type; } +Ifc4x3_add2::IfcSystemFurnitureElement::IfcSystemFurnitureElement(IfcEntityInstanceData* e) : IfcFurnishingElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSystemFurnitureElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSystemFurnitureElement::IfcSystemFurnitureElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::Value > v9_PredefinedType) : IfcFurnishingElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSystemFurnitureElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcSystemFurnitureElementType +boost::optional< ::Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::Value > Ifc4x3_add2::IfcSystemFurnitureElementType::PredefinedType() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcSystemFurnitureElementType::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::ToString(*v)));}data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcSystemFurnitureElementType::declaration() const { return *IFC4X3_ADD2_IfcSystemFurnitureElementType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcSystemFurnitureElementType::Class() { return *IFC4X3_ADD2_IfcSystemFurnitureElementType_type; } +Ifc4x3_add2::IfcSystemFurnitureElementType::IfcSystemFurnitureElementType(IfcEntityInstanceData* e) : IfcFurnishingElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcSystemFurnitureElementType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcSystemFurnitureElementType::IfcSystemFurnitureElementType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, boost::optional< ::Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::Value > v10_PredefinedType) : IfcFurnishingElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcSystemFurnitureElementType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v10_PredefinedType,::Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::ToString(*v10_PredefinedType))));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } } + +// Function implementations for IfcTShapeProfileDef +double Ifc4x3_add2::IfcTShapeProfileDef::Depth() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcTShapeProfileDef::setDepth(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +double Ifc4x3_add2::IfcTShapeProfileDef::FlangeWidth() const { double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcTShapeProfileDef::setFlangeWidth(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +double Ifc4x3_add2::IfcTShapeProfileDef::WebThickness() const { double v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcTShapeProfileDef::setWebThickness(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +double Ifc4x3_add2::IfcTShapeProfileDef::FlangeThickness() const { double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcTShapeProfileDef::setFlangeThickness(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +boost::optional< double > Ifc4x3_add2::IfcTShapeProfileDef::FilletRadius() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } double v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcTShapeProfileDef::setFilletRadius(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +boost::optional< double > Ifc4x3_add2::IfcTShapeProfileDef::FlangeEdgeRadius() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } double v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcTShapeProfileDef::setFlangeEdgeRadius(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } +boost::optional< double > Ifc4x3_add2::IfcTShapeProfileDef::WebEdgeRadius() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } double v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcTShapeProfileDef::setWebEdgeRadius(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(9,attr);} } +boost::optional< double > Ifc4x3_add2::IfcTShapeProfileDef::WebSlope() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } double v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcTShapeProfileDef::setWebSlope(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } +boost::optional< double > Ifc4x3_add2::IfcTShapeProfileDef::FlangeSlope() const { if(!data_->getArgument(11) || data_->getArgument(11)->isNull()) { return boost::none; } double v = *data_->getArgument(11); return v; } +void Ifc4x3_add2::IfcTShapeProfileDef::setFlangeSlope(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(11,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTShapeProfileDef::declaration() const { return *IFC4X3_ADD2_IfcTShapeProfileDef_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTShapeProfileDef::Class() { return *IFC4X3_ADD2_IfcTShapeProfileDef_type; } +Ifc4x3_add2::IfcTShapeProfileDef::IfcTShapeProfileDef(IfcEntityInstanceData* e) : IfcParameterizedProfileDef((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTShapeProfileDef_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTShapeProfileDef::IfcTShapeProfileDef(::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_Depth, double v5_FlangeWidth, double v6_WebThickness, double v7_FlangeThickness, boost::optional< double > v8_FilletRadius, boost::optional< double > v9_FlangeEdgeRadius, boost::optional< double > v10_WebEdgeRadius, boost::optional< double > v11_WebSlope, boost::optional< double > v12_FlangeSlope) : IfcParameterizedProfileDef((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTShapeProfileDef_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_ProfileType,::Ifc4x3_add2::IfcProfileTypeEnum::ToString(v1_ProfileType))));data_->setArgument(0,attr);} if (v2_ProfileName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ProfileName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Position));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Depth));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_FlangeWidth));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_WebThickness));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_FlangeThickness));data_->setArgument(6,attr);} if (v8_FilletRadius) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_FilletRadius));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_FlangeEdgeRadius) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_FlangeEdgeRadius));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_WebEdgeRadius) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_WebEdgeRadius));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_WebSlope) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_WebSlope));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } if (v12_FlangeSlope) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v12_FlangeSlope));data_->setArgument(11,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(11, attr); } } + +// Function implementations for IfcTable +boost::optional< std::string > Ifc4x3_add2::IfcTable::Name() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcTable::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcTableRow >::ptr > Ifc4x3_add2::IfcTable::Rows() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(1); return es->as< ::Ifc4x3_add2::IfcTableRow >(); } +void Ifc4x3_add2::IfcTable::setRows(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcTableRow >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(1,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcTableColumn >::ptr > Ifc4x3_add2::IfcTable::Columns() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(2); return es->as< ::Ifc4x3_add2::IfcTableColumn >(); } +void Ifc4x3_add2::IfcTable::setColumns(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcTableColumn >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTable::declaration() const { return *IFC4X3_ADD2_IfcTable_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTable::Class() { return *IFC4X3_ADD2_IfcTable_type; } +Ifc4x3_add2::IfcTable::IfcTable(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTable_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTable::IfcTable(boost::optional< std::string > v1_Name, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcTableRow >::ptr > v2_Rows, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcTableColumn >::ptr > v3_Columns) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTable_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Rows) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Rows)->generalize());data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_Columns) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Columns)->generalize());data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } } + +// Function implementations for IfcTableColumn +boost::optional< std::string > Ifc4x3_add2::IfcTableColumn::Identifier() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcTableColumn::setIdentifier(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTableColumn::Name() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcTableColumn::setName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTableColumn::Description() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcTableColumn::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcUnit* Ifc4x3_add2::IfcTableColumn::Unit() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcUnit>(true); } +void Ifc4x3_add2::IfcTableColumn::setUnit(::Ifc4x3_add2::IfcUnit* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +::Ifc4x3_add2::IfcReference* Ifc4x3_add2::IfcTableColumn::ReferencePath() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcReference>(true); } +void Ifc4x3_add2::IfcTableColumn::setReferencePath(::Ifc4x3_add2::IfcReference* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTableColumn::declaration() const { return *IFC4X3_ADD2_IfcTableColumn_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTableColumn::Class() { return *IFC4X3_ADD2_IfcTableColumn_type; } +Ifc4x3_add2::IfcTableColumn::IfcTableColumn(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTableColumn_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTableColumn::IfcTableColumn(boost::optional< std::string > v1_Identifier, boost::optional< std::string > v2_Name, boost::optional< std::string > v3_Description, ::Ifc4x3_add2::IfcUnit* v4_Unit, ::Ifc4x3_add2::IfcReference* v5_ReferencePath) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTableColumn_type); if (v1_Identifier) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Identifier));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Name));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Description));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Unit));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_ReferencePath));data_->setArgument(4,attr);} } + +// Function implementations for IfcTableRow +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > Ifc4x3_add2::IfcTableRow::RowCells() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(0); return es->as< ::Ifc4x3_add2::IfcValue >(); } +void Ifc4x3_add2::IfcTableRow::setRowCells(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(0,attr);} } +boost::optional< bool > Ifc4x3_add2::IfcTableRow::IsHeading() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } bool v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcTableRow::setIsHeading(boost::optional< bool > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTableRow::declaration() const { return *IFC4X3_ADD2_IfcTableRow_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTableRow::Class() { return *IFC4X3_ADD2_IfcTableRow_type; } +Ifc4x3_add2::IfcTableRow::IfcTableRow(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTableRow_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTableRow::IfcTableRow(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > v1_RowCells, boost::optional< bool > v2_IsHeading) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTableRow_type); if (v1_RowCells) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_RowCells)->generalize());data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_IsHeading) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_IsHeading));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } } + +// Function implementations for IfcTank +boost::optional< ::Ifc4x3_add2::IfcTankTypeEnum::Value > Ifc4x3_add2::IfcTank::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcTankTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcTank::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcTankTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcTankTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTank::declaration() const { return *IFC4X3_ADD2_IfcTank_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTank::Class() { return *IFC4X3_ADD2_IfcTank_type; } +Ifc4x3_add2::IfcTank::IfcTank(IfcEntityInstanceData* e) : IfcFlowStorageDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTank_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTank::IfcTank(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcTankTypeEnum::Value > v9_PredefinedType) : IfcFlowStorageDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTank_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcTankTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcTankType +::Ifc4x3_add2::IfcTankTypeEnum::Value Ifc4x3_add2::IfcTankType::PredefinedType() const { return ::Ifc4x3_add2::IfcTankTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcTankType::setPredefinedType(::Ifc4x3_add2::IfcTankTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcTankTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTankType::declaration() const { return *IFC4X3_ADD2_IfcTankType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTankType::Class() { return *IFC4X3_ADD2_IfcTankType_type; } +Ifc4x3_add2::IfcTankType::IfcTankType(IfcEntityInstanceData* e) : IfcFlowStorageDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTankType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTankType::IfcTankType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcTankTypeEnum::Value v10_PredefinedType) : IfcFlowStorageDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTankType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcTankTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcTask +boost::optional< std::string > Ifc4x3_add2::IfcTask::Status() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } std::string v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcTask::setStatus(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTask::WorkMethod() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } std::string v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcTask::setWorkMethod(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } +bool Ifc4x3_add2::IfcTask::IsMilestone() const { bool v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcTask::setIsMilestone(bool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(9,attr);} } +boost::optional< int > Ifc4x3_add2::IfcTask::Priority() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } int v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcTask::setPriority(boost::optional< int > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } +::Ifc4x3_add2::IfcTaskTime* Ifc4x3_add2::IfcTask::TaskTime() const { if(!data_->getArgument(11) || data_->getArgument(11)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(11)))->as<::Ifc4x3_add2::IfcTaskTime>(true); } +void Ifc4x3_add2::IfcTask::setTaskTime(::Ifc4x3_add2::IfcTaskTime* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(11,attr);} } +boost::optional< ::Ifc4x3_add2::IfcTaskTypeEnum::Value > Ifc4x3_add2::IfcTask::PredefinedType() const { if(!data_->getArgument(12) || data_->getArgument(12)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcTaskTypeEnum::FromString(*data_->getArgument(12)); } +void Ifc4x3_add2::IfcTask::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcTaskTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcTaskTypeEnum::ToString(*v)));}data_->setArgument(12,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTask::declaration() const { return *IFC4X3_ADD2_IfcTask_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTask::Class() { return *IFC4X3_ADD2_IfcTask_type; } +Ifc4x3_add2::IfcTask::IfcTask(IfcEntityInstanceData* e) : IfcProcess((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTask_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTask::IfcTask(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, boost::optional< std::string > v8_Status, boost::optional< std::string > v9_WorkMethod, bool v10_IsMilestone, boost::optional< int > v11_Priority, ::Ifc4x3_add2::IfcTaskTime* v12_TaskTime, boost::optional< ::Ifc4x3_add2::IfcTaskTypeEnum::Value > v13_PredefinedType) : IfcProcess((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTask_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Identification));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_LongDescription));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Status) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Status));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_WorkMethod) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_WorkMethod));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v10_IsMilestone));data_->setArgument(9,attr);} if (v11_Priority) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_Priority));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v12_TaskTime));data_->setArgument(11,attr);} if (v13_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v13_PredefinedType,::Ifc4x3_add2::IfcTaskTypeEnum::ToString(*v13_PredefinedType))));data_->setArgument(12,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(12, attr); } } + +// Function implementations for IfcTaskTime +boost::optional< ::Ifc4x3_add2::IfcTaskDurationEnum::Value > Ifc4x3_add2::IfcTaskTime::DurationType() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcTaskDurationEnum::FromString(*data_->getArgument(3)); } +void Ifc4x3_add2::IfcTaskTime::setDurationType(boost::optional< ::Ifc4x3_add2::IfcTaskDurationEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcTaskDurationEnum::ToString(*v)));}data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTaskTime::ScheduleDuration() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcTaskTime::setScheduleDuration(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTaskTime::ScheduleStart() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcTaskTime::setScheduleStart(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTaskTime::ScheduleFinish() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } std::string v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcTaskTime::setScheduleFinish(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTaskTime::EarlyStart() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } std::string v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcTaskTime::setEarlyStart(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTaskTime::EarlyFinish() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } std::string v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcTaskTime::setEarlyFinish(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTaskTime::LateStart() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } std::string v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcTaskTime::setLateStart(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(9,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTaskTime::LateFinish() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } std::string v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcTaskTime::setLateFinish(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTaskTime::FreeFloat() const { if(!data_->getArgument(11) || data_->getArgument(11)->isNull()) { return boost::none; } std::string v = *data_->getArgument(11); return v; } +void Ifc4x3_add2::IfcTaskTime::setFreeFloat(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(11,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTaskTime::TotalFloat() const { if(!data_->getArgument(12) || data_->getArgument(12)->isNull()) { return boost::none; } std::string v = *data_->getArgument(12); return v; } +void Ifc4x3_add2::IfcTaskTime::setTotalFloat(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(12,attr);} } +boost::optional< bool > Ifc4x3_add2::IfcTaskTime::IsCritical() const { if(!data_->getArgument(13) || data_->getArgument(13)->isNull()) { return boost::none; } bool v = *data_->getArgument(13); return v; } +void Ifc4x3_add2::IfcTaskTime::setIsCritical(boost::optional< bool > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(13,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTaskTime::StatusTime() const { if(!data_->getArgument(14) || data_->getArgument(14)->isNull()) { return boost::none; } std::string v = *data_->getArgument(14); return v; } +void Ifc4x3_add2::IfcTaskTime::setStatusTime(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(14,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTaskTime::ActualDuration() const { if(!data_->getArgument(15) || data_->getArgument(15)->isNull()) { return boost::none; } std::string v = *data_->getArgument(15); return v; } +void Ifc4x3_add2::IfcTaskTime::setActualDuration(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(15,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTaskTime::ActualStart() const { if(!data_->getArgument(16) || data_->getArgument(16)->isNull()) { return boost::none; } std::string v = *data_->getArgument(16); return v; } +void Ifc4x3_add2::IfcTaskTime::setActualStart(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(16,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTaskTime::ActualFinish() const { if(!data_->getArgument(17) || data_->getArgument(17)->isNull()) { return boost::none; } std::string v = *data_->getArgument(17); return v; } +void Ifc4x3_add2::IfcTaskTime::setActualFinish(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(17,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTaskTime::RemainingTime() const { if(!data_->getArgument(18) || data_->getArgument(18)->isNull()) { return boost::none; } std::string v = *data_->getArgument(18); return v; } +void Ifc4x3_add2::IfcTaskTime::setRemainingTime(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(18,attr);} } +boost::optional< double > Ifc4x3_add2::IfcTaskTime::Completion() const { if(!data_->getArgument(19) || data_->getArgument(19)->isNull()) { return boost::none; } double v = *data_->getArgument(19); return v; } +void Ifc4x3_add2::IfcTaskTime::setCompletion(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(19,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTaskTime::declaration() const { return *IFC4X3_ADD2_IfcTaskTime_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTaskTime::Class() { return *IFC4X3_ADD2_IfcTaskTime_type; } +Ifc4x3_add2::IfcTaskTime::IfcTaskTime(IfcEntityInstanceData* e) : IfcSchedulingTime((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTaskTime_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTaskTime::IfcTaskTime(boost::optional< std::string > v1_Name, boost::optional< ::Ifc4x3_add2::IfcDataOriginEnum::Value > v2_DataOrigin, boost::optional< std::string > v3_UserDefinedDataOrigin, boost::optional< ::Ifc4x3_add2::IfcTaskDurationEnum::Value > v4_DurationType, boost::optional< std::string > v5_ScheduleDuration, boost::optional< std::string > v6_ScheduleStart, boost::optional< std::string > v7_ScheduleFinish, boost::optional< std::string > v8_EarlyStart, boost::optional< std::string > v9_EarlyFinish, boost::optional< std::string > v10_LateStart, boost::optional< std::string > v11_LateFinish, boost::optional< std::string > v12_FreeFloat, boost::optional< std::string > v13_TotalFloat, boost::optional< bool > v14_IsCritical, boost::optional< std::string > v15_StatusTime, boost::optional< std::string > v16_ActualDuration, boost::optional< std::string > v17_ActualStart, boost::optional< std::string > v18_ActualFinish, boost::optional< std::string > v19_RemainingTime, boost::optional< double > v20_Completion) : IfcSchedulingTime((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTaskTime_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_DataOrigin) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v2_DataOrigin,::Ifc4x3_add2::IfcDataOriginEnum::ToString(*v2_DataOrigin))));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_UserDefinedDataOrigin) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_UserDefinedDataOrigin));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_DurationType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v4_DurationType,::Ifc4x3_add2::IfcTaskDurationEnum::ToString(*v4_DurationType))));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ScheduleDuration) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ScheduleDuration));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_ScheduleStart) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_ScheduleStart));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_ScheduleFinish) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_ScheduleFinish));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_EarlyStart) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_EarlyStart));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_EarlyFinish) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_EarlyFinish));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_LateStart) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_LateStart));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_LateFinish) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_LateFinish));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } if (v12_FreeFloat) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v12_FreeFloat));data_->setArgument(11,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(11, attr); } if (v13_TotalFloat) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v13_TotalFloat));data_->setArgument(12,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(12, attr); } if (v14_IsCritical) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v14_IsCritical));data_->setArgument(13,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(13, attr); } if (v15_StatusTime) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v15_StatusTime));data_->setArgument(14,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(14, attr); } if (v16_ActualDuration) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v16_ActualDuration));data_->setArgument(15,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(15, attr); } if (v17_ActualStart) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v17_ActualStart));data_->setArgument(16,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(16, attr); } if (v18_ActualFinish) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v18_ActualFinish));data_->setArgument(17,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(17, attr); } if (v19_RemainingTime) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v19_RemainingTime));data_->setArgument(18,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(18, attr); } if (v20_Completion) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v20_Completion));data_->setArgument(19,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(19, attr); } } + +// Function implementations for IfcTaskTimeRecurring +::Ifc4x3_add2::IfcRecurrencePattern* Ifc4x3_add2::IfcTaskTimeRecurring::Recurrence() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(20)))->as<::Ifc4x3_add2::IfcRecurrencePattern>(true); } +void Ifc4x3_add2::IfcTaskTimeRecurring::setRecurrence(::Ifc4x3_add2::IfcRecurrencePattern* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(20,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTaskTimeRecurring::declaration() const { return *IFC4X3_ADD2_IfcTaskTimeRecurring_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTaskTimeRecurring::Class() { return *IFC4X3_ADD2_IfcTaskTimeRecurring_type; } +Ifc4x3_add2::IfcTaskTimeRecurring::IfcTaskTimeRecurring(IfcEntityInstanceData* e) : IfcTaskTime((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTaskTimeRecurring_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTaskTimeRecurring::IfcTaskTimeRecurring(boost::optional< std::string > v1_Name, boost::optional< ::Ifc4x3_add2::IfcDataOriginEnum::Value > v2_DataOrigin, boost::optional< std::string > v3_UserDefinedDataOrigin, boost::optional< ::Ifc4x3_add2::IfcTaskDurationEnum::Value > v4_DurationType, boost::optional< std::string > v5_ScheduleDuration, boost::optional< std::string > v6_ScheduleStart, boost::optional< std::string > v7_ScheduleFinish, boost::optional< std::string > v8_EarlyStart, boost::optional< std::string > v9_EarlyFinish, boost::optional< std::string > v10_LateStart, boost::optional< std::string > v11_LateFinish, boost::optional< std::string > v12_FreeFloat, boost::optional< std::string > v13_TotalFloat, boost::optional< bool > v14_IsCritical, boost::optional< std::string > v15_StatusTime, boost::optional< std::string > v16_ActualDuration, boost::optional< std::string > v17_ActualStart, boost::optional< std::string > v18_ActualFinish, boost::optional< std::string > v19_RemainingTime, boost::optional< double > v20_Completion, ::Ifc4x3_add2::IfcRecurrencePattern* v21_Recurrence) : IfcTaskTime((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTaskTimeRecurring_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_DataOrigin) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v2_DataOrigin,::Ifc4x3_add2::IfcDataOriginEnum::ToString(*v2_DataOrigin))));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_UserDefinedDataOrigin) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_UserDefinedDataOrigin));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_DurationType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v4_DurationType,::Ifc4x3_add2::IfcTaskDurationEnum::ToString(*v4_DurationType))));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ScheduleDuration) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ScheduleDuration));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_ScheduleStart) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_ScheduleStart));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_ScheduleFinish) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_ScheduleFinish));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_EarlyStart) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_EarlyStart));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_EarlyFinish) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_EarlyFinish));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_LateStart) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_LateStart));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_LateFinish) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_LateFinish));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } if (v12_FreeFloat) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v12_FreeFloat));data_->setArgument(11,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(11, attr); } if (v13_TotalFloat) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v13_TotalFloat));data_->setArgument(12,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(12, attr); } if (v14_IsCritical) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v14_IsCritical));data_->setArgument(13,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(13, attr); } if (v15_StatusTime) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v15_StatusTime));data_->setArgument(14,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(14, attr); } if (v16_ActualDuration) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v16_ActualDuration));data_->setArgument(15,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(15, attr); } if (v17_ActualStart) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v17_ActualStart));data_->setArgument(16,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(16, attr); } if (v18_ActualFinish) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v18_ActualFinish));data_->setArgument(17,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(17, attr); } if (v19_RemainingTime) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v19_RemainingTime));data_->setArgument(18,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(18, attr); } if (v20_Completion) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v20_Completion));data_->setArgument(19,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(19, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v21_Recurrence));data_->setArgument(20,attr);} } + +// Function implementations for IfcTaskType +::Ifc4x3_add2::IfcTaskTypeEnum::Value Ifc4x3_add2::IfcTaskType::PredefinedType() const { return ::Ifc4x3_add2::IfcTaskTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcTaskType::setPredefinedType(::Ifc4x3_add2::IfcTaskTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcTaskTypeEnum::ToString(v)));data_->setArgument(9,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTaskType::WorkMethod() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } std::string v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcTaskType::setWorkMethod(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTaskType::declaration() const { return *IFC4X3_ADD2_IfcTaskType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTaskType::Class() { return *IFC4X3_ADD2_IfcTaskType_type; } +Ifc4x3_add2::IfcTaskType::IfcTaskType(IfcEntityInstanceData* e) : IfcTypeProcess((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTaskType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTaskType::IfcTaskType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ProcessType, ::Ifc4x3_add2::IfcTaskTypeEnum::Value v10_PredefinedType, boost::optional< std::string > v11_WorkMethod) : IfcTypeProcess((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTaskType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_Identification));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongDescription));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ProcessType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ProcessType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcTaskTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} if (v11_WorkMethod) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_WorkMethod));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } } + +// Function implementations for IfcTelecomAddress +boost::optional< std::vector< std::string > /*[1:?]*/ > Ifc4x3_add2::IfcTelecomAddress::TelephoneNumbers() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } std::vector< std::string > /*[1:?]*/ v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcTelecomAddress::setTelephoneNumbers(boost::optional< std::vector< std::string > /*[1:?]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +boost::optional< std::vector< std::string > /*[1:?]*/ > Ifc4x3_add2::IfcTelecomAddress::FacsimileNumbers() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::vector< std::string > /*[1:?]*/ v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcTelecomAddress::setFacsimileNumbers(boost::optional< std::vector< std::string > /*[1:?]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTelecomAddress::PagerNumber() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcTelecomAddress::setPagerNumber(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< std::vector< std::string > /*[1:?]*/ > Ifc4x3_add2::IfcTelecomAddress::ElectronicMailAddresses() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } std::vector< std::string > /*[1:?]*/ v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcTelecomAddress::setElectronicMailAddresses(boost::optional< std::vector< std::string > /*[1:?]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTelecomAddress::WWWHomePageURL() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } std::string v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcTelecomAddress::setWWWHomePageURL(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +boost::optional< std::vector< std::string > /*[1:?]*/ > Ifc4x3_add2::IfcTelecomAddress::MessagingIDs() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } std::vector< std::string > /*[1:?]*/ v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcTelecomAddress::setMessagingIDs(boost::optional< std::vector< std::string > /*[1:?]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTelecomAddress::declaration() const { return *IFC4X3_ADD2_IfcTelecomAddress_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTelecomAddress::Class() { return *IFC4X3_ADD2_IfcTelecomAddress_type; } +Ifc4x3_add2::IfcTelecomAddress::IfcTelecomAddress(IfcEntityInstanceData* e) : IfcAddress((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTelecomAddress_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTelecomAddress::IfcTelecomAddress(boost::optional< ::Ifc4x3_add2::IfcAddressTypeEnum::Value > v1_Purpose, boost::optional< std::string > v2_Description, boost::optional< std::string > v3_UserDefinedPurpose, boost::optional< std::vector< std::string > /*[1:?]*/ > v4_TelephoneNumbers, boost::optional< std::vector< std::string > /*[1:?]*/ > v5_FacsimileNumbers, boost::optional< std::string > v6_PagerNumber, boost::optional< std::vector< std::string > /*[1:?]*/ > v7_ElectronicMailAddresses, boost::optional< std::string > v8_WWWHomePageURL, boost::optional< std::vector< std::string > /*[1:?]*/ > v9_MessagingIDs) : IfcAddress((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTelecomAddress_type); if (v1_Purpose) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v1_Purpose,::Ifc4x3_add2::IfcAddressTypeEnum::ToString(*v1_Purpose))));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_UserDefinedPurpose) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_UserDefinedPurpose));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_TelephoneNumbers) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_TelephoneNumbers));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_FacsimileNumbers) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_FacsimileNumbers));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_PagerNumber) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_PagerNumber));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_ElectronicMailAddresses) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_ElectronicMailAddresses));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_WWWHomePageURL) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_WWWHomePageURL));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_MessagingIDs) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_MessagingIDs));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcTendon +boost::optional< ::Ifc4x3_add2::IfcTendonTypeEnum::Value > Ifc4x3_add2::IfcTendon::PredefinedType() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcTendonTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcTendon::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcTendonTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcTendonTypeEnum::ToString(*v)));}data_->setArgument(9,attr);} } +boost::optional< double > Ifc4x3_add2::IfcTendon::NominalDiameter() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } double v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcTendon::setNominalDiameter(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } +boost::optional< double > Ifc4x3_add2::IfcTendon::CrossSectionArea() const { if(!data_->getArgument(11) || data_->getArgument(11)->isNull()) { return boost::none; } double v = *data_->getArgument(11); return v; } +void Ifc4x3_add2::IfcTendon::setCrossSectionArea(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(11,attr);} } +boost::optional< double > Ifc4x3_add2::IfcTendon::TensionForce() const { if(!data_->getArgument(12) || data_->getArgument(12)->isNull()) { return boost::none; } double v = *data_->getArgument(12); return v; } +void Ifc4x3_add2::IfcTendon::setTensionForce(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(12,attr);} } +boost::optional< double > Ifc4x3_add2::IfcTendon::PreStress() const { if(!data_->getArgument(13) || data_->getArgument(13)->isNull()) { return boost::none; } double v = *data_->getArgument(13); return v; } +void Ifc4x3_add2::IfcTendon::setPreStress(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(13,attr);} } +boost::optional< double > Ifc4x3_add2::IfcTendon::FrictionCoefficient() const { if(!data_->getArgument(14) || data_->getArgument(14)->isNull()) { return boost::none; } double v = *data_->getArgument(14); return v; } +void Ifc4x3_add2::IfcTendon::setFrictionCoefficient(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(14,attr);} } +boost::optional< double > Ifc4x3_add2::IfcTendon::AnchorageSlip() const { if(!data_->getArgument(15) || data_->getArgument(15)->isNull()) { return boost::none; } double v = *data_->getArgument(15); return v; } +void Ifc4x3_add2::IfcTendon::setAnchorageSlip(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(15,attr);} } +boost::optional< double > Ifc4x3_add2::IfcTendon::MinCurvatureRadius() const { if(!data_->getArgument(16) || data_->getArgument(16)->isNull()) { return boost::none; } double v = *data_->getArgument(16); return v; } +void Ifc4x3_add2::IfcTendon::setMinCurvatureRadius(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(16,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTendon::declaration() const { return *IFC4X3_ADD2_IfcTendon_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTendon::Class() { return *IFC4X3_ADD2_IfcTendon_type; } +Ifc4x3_add2::IfcTendon::IfcTendon(IfcEntityInstanceData* e) : IfcReinforcingElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTendon_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTendon::IfcTendon(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_SteelGrade, boost::optional< ::Ifc4x3_add2::IfcTendonTypeEnum::Value > v10_PredefinedType, boost::optional< double > v11_NominalDiameter, boost::optional< double > v12_CrossSectionArea, boost::optional< double > v13_TensionForce, boost::optional< double > v14_PreStress, boost::optional< double > v15_FrictionCoefficient, boost::optional< double > v16_AnchorageSlip, boost::optional< double > v17_MinCurvatureRadius) : IfcReinforcingElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTendon_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_SteelGrade) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_SteelGrade));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v10_PredefinedType,::Ifc4x3_add2::IfcTendonTypeEnum::ToString(*v10_PredefinedType))));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_NominalDiameter) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_NominalDiameter));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } if (v12_CrossSectionArea) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v12_CrossSectionArea));data_->setArgument(11,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(11, attr); } if (v13_TensionForce) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v13_TensionForce));data_->setArgument(12,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(12, attr); } if (v14_PreStress) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v14_PreStress));data_->setArgument(13,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(13, attr); } if (v15_FrictionCoefficient) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v15_FrictionCoefficient));data_->setArgument(14,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(14, attr); } if (v16_AnchorageSlip) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v16_AnchorageSlip));data_->setArgument(15,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(15, attr); } if (v17_MinCurvatureRadius) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v17_MinCurvatureRadius));data_->setArgument(16,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(16, attr); } } + +// Function implementations for IfcTendonAnchor +boost::optional< ::Ifc4x3_add2::IfcTendonAnchorTypeEnum::Value > Ifc4x3_add2::IfcTendonAnchor::PredefinedType() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcTendonAnchorTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcTendonAnchor::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcTendonAnchorTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcTendonAnchorTypeEnum::ToString(*v)));}data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTendonAnchor::declaration() const { return *IFC4X3_ADD2_IfcTendonAnchor_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTendonAnchor::Class() { return *IFC4X3_ADD2_IfcTendonAnchor_type; } +Ifc4x3_add2::IfcTendonAnchor::IfcTendonAnchor(IfcEntityInstanceData* e) : IfcReinforcingElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTendonAnchor_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTendonAnchor::IfcTendonAnchor(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_SteelGrade, boost::optional< ::Ifc4x3_add2::IfcTendonAnchorTypeEnum::Value > v10_PredefinedType) : IfcReinforcingElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTendonAnchor_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_SteelGrade) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_SteelGrade));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v10_PredefinedType,::Ifc4x3_add2::IfcTendonAnchorTypeEnum::ToString(*v10_PredefinedType))));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } } + +// Function implementations for IfcTendonAnchorType +::Ifc4x3_add2::IfcTendonAnchorTypeEnum::Value Ifc4x3_add2::IfcTendonAnchorType::PredefinedType() const { return ::Ifc4x3_add2::IfcTendonAnchorTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcTendonAnchorType::setPredefinedType(::Ifc4x3_add2::IfcTendonAnchorTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcTendonAnchorTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTendonAnchorType::declaration() const { return *IFC4X3_ADD2_IfcTendonAnchorType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTendonAnchorType::Class() { return *IFC4X3_ADD2_IfcTendonAnchorType_type; } +Ifc4x3_add2::IfcTendonAnchorType::IfcTendonAnchorType(IfcEntityInstanceData* e) : IfcReinforcingElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTendonAnchorType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTendonAnchorType::IfcTendonAnchorType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcTendonAnchorTypeEnum::Value v10_PredefinedType) : IfcReinforcingElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTendonAnchorType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcTendonAnchorTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcTendonConduit +boost::optional< ::Ifc4x3_add2::IfcTendonConduitTypeEnum::Value > Ifc4x3_add2::IfcTendonConduit::PredefinedType() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcTendonConduitTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcTendonConduit::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcTendonConduitTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcTendonConduitTypeEnum::ToString(*v)));}data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTendonConduit::declaration() const { return *IFC4X3_ADD2_IfcTendonConduit_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTendonConduit::Class() { return *IFC4X3_ADD2_IfcTendonConduit_type; } +Ifc4x3_add2::IfcTendonConduit::IfcTendonConduit(IfcEntityInstanceData* e) : IfcReinforcingElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTendonConduit_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTendonConduit::IfcTendonConduit(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_SteelGrade, boost::optional< ::Ifc4x3_add2::IfcTendonConduitTypeEnum::Value > v10_PredefinedType) : IfcReinforcingElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTendonConduit_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_SteelGrade) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_SteelGrade));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v10_PredefinedType,::Ifc4x3_add2::IfcTendonConduitTypeEnum::ToString(*v10_PredefinedType))));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } } + +// Function implementations for IfcTendonConduitType +::Ifc4x3_add2::IfcTendonConduitTypeEnum::Value Ifc4x3_add2::IfcTendonConduitType::PredefinedType() const { return ::Ifc4x3_add2::IfcTendonConduitTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcTendonConduitType::setPredefinedType(::Ifc4x3_add2::IfcTendonConduitTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcTendonConduitTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTendonConduitType::declaration() const { return *IFC4X3_ADD2_IfcTendonConduitType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTendonConduitType::Class() { return *IFC4X3_ADD2_IfcTendonConduitType_type; } +Ifc4x3_add2::IfcTendonConduitType::IfcTendonConduitType(IfcEntityInstanceData* e) : IfcReinforcingElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTendonConduitType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTendonConduitType::IfcTendonConduitType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcTendonConduitTypeEnum::Value v10_PredefinedType) : IfcReinforcingElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTendonConduitType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcTendonConduitTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcTendonType +::Ifc4x3_add2::IfcTendonTypeEnum::Value Ifc4x3_add2::IfcTendonType::PredefinedType() const { return ::Ifc4x3_add2::IfcTendonTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcTendonType::setPredefinedType(::Ifc4x3_add2::IfcTendonTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcTendonTypeEnum::ToString(v)));data_->setArgument(9,attr);} } +boost::optional< double > Ifc4x3_add2::IfcTendonType::NominalDiameter() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } double v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcTendonType::setNominalDiameter(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } +boost::optional< double > Ifc4x3_add2::IfcTendonType::CrossSectionArea() const { if(!data_->getArgument(11) || data_->getArgument(11)->isNull()) { return boost::none; } double v = *data_->getArgument(11); return v; } +void Ifc4x3_add2::IfcTendonType::setCrossSectionArea(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(11,attr);} } +boost::optional< double > Ifc4x3_add2::IfcTendonType::SheathDiameter() const { if(!data_->getArgument(12) || data_->getArgument(12)->isNull()) { return boost::none; } double v = *data_->getArgument(12); return v; } +void Ifc4x3_add2::IfcTendonType::setSheathDiameter(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(12,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTendonType::declaration() const { return *IFC4X3_ADD2_IfcTendonType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTendonType::Class() { return *IFC4X3_ADD2_IfcTendonType_type; } +Ifc4x3_add2::IfcTendonType::IfcTendonType(IfcEntityInstanceData* e) : IfcReinforcingElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTendonType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTendonType::IfcTendonType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcTendonTypeEnum::Value v10_PredefinedType, boost::optional< double > v11_NominalDiameter, boost::optional< double > v12_CrossSectionArea, boost::optional< double > v13_SheathDiameter) : IfcReinforcingElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTendonType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcTendonTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} if (v11_NominalDiameter) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_NominalDiameter));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } if (v12_CrossSectionArea) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v12_CrossSectionArea));data_->setArgument(11,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(11, attr); } if (v13_SheathDiameter) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v13_SheathDiameter));data_->setArgument(12,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(12, attr); } } + +// Function implementations for IfcTessellatedFaceSet +::Ifc4x3_add2::IfcCartesianPointList3D* Ifc4x3_add2::IfcTessellatedFaceSet::Coordinates() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcCartesianPointList3D>(true); } +void Ifc4x3_add2::IfcTessellatedFaceSet::setCoordinates(::Ifc4x3_add2::IfcCartesianPointList3D* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } + +::Ifc4x3_add2::IfcIndexedColourMap::list::ptr Ifc4x3_add2::IfcTessellatedFaceSet::HasColours() const { return data_->getInverse(IFC4X3_ADD2_IfcIndexedColourMap_type, 0)->as(); } +::Ifc4x3_add2::IfcIndexedTextureMap::list::ptr Ifc4x3_add2::IfcTessellatedFaceSet::HasTextures() const { return data_->getInverse(IFC4X3_ADD2_IfcIndexedTextureMap_type, 1)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcTessellatedFaceSet::declaration() const { return *IFC4X3_ADD2_IfcTessellatedFaceSet_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTessellatedFaceSet::Class() { return *IFC4X3_ADD2_IfcTessellatedFaceSet_type; } +Ifc4x3_add2::IfcTessellatedFaceSet::IfcTessellatedFaceSet(IfcEntityInstanceData* e) : IfcTessellatedItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTessellatedFaceSet_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTessellatedFaceSet::IfcTessellatedFaceSet(::Ifc4x3_add2::IfcCartesianPointList3D* v1_Coordinates) : IfcTessellatedItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTessellatedFaceSet_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Coordinates));data_->setArgument(0,attr);} } + +// Function implementations for IfcTessellatedItem + + +const IfcParse::entity& Ifc4x3_add2::IfcTessellatedItem::declaration() const { return *IFC4X3_ADD2_IfcTessellatedItem_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTessellatedItem::Class() { return *IFC4X3_ADD2_IfcTessellatedItem_type; } +Ifc4x3_add2::IfcTessellatedItem::IfcTessellatedItem(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTessellatedItem_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTessellatedItem::IfcTessellatedItem() : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTessellatedItem_type); } + +// Function implementations for IfcTextLiteral +std::string Ifc4x3_add2::IfcTextLiteral::Literal() const { std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcTextLiteral::setLiteral(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcAxis2Placement* Ifc4x3_add2::IfcTextLiteral::Placement() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcAxis2Placement>(true); } +void Ifc4x3_add2::IfcTextLiteral::setPlacement(::Ifc4x3_add2::IfcAxis2Placement* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcTextPath::Value Ifc4x3_add2::IfcTextLiteral::Path() const { return ::Ifc4x3_add2::IfcTextPath::FromString(*data_->getArgument(2)); } +void Ifc4x3_add2::IfcTextLiteral::setPath(::Ifc4x3_add2::IfcTextPath::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcTextPath::ToString(v)));data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTextLiteral::declaration() const { return *IFC4X3_ADD2_IfcTextLiteral_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTextLiteral::Class() { return *IFC4X3_ADD2_IfcTextLiteral_type; } +Ifc4x3_add2::IfcTextLiteral::IfcTextLiteral(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTextLiteral_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTextLiteral::IfcTextLiteral(std::string v1_Literal, ::Ifc4x3_add2::IfcAxis2Placement* v2_Placement, ::Ifc4x3_add2::IfcTextPath::Value v3_Path) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTextLiteral_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Literal));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Placement));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v3_Path,::Ifc4x3_add2::IfcTextPath::ToString(v3_Path))));data_->setArgument(2,attr);} } + +// Function implementations for IfcTextLiteralWithExtent +::Ifc4x3_add2::IfcPlanarExtent* Ifc4x3_add2::IfcTextLiteralWithExtent::Extent() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcPlanarExtent>(true); } +void Ifc4x3_add2::IfcTextLiteralWithExtent::setExtent(::Ifc4x3_add2::IfcPlanarExtent* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +std::string Ifc4x3_add2::IfcTextLiteralWithExtent::BoxAlignment() const { std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcTextLiteralWithExtent::setBoxAlignment(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTextLiteralWithExtent::declaration() const { return *IFC4X3_ADD2_IfcTextLiteralWithExtent_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTextLiteralWithExtent::Class() { return *IFC4X3_ADD2_IfcTextLiteralWithExtent_type; } +Ifc4x3_add2::IfcTextLiteralWithExtent::IfcTextLiteralWithExtent(IfcEntityInstanceData* e) : IfcTextLiteral((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTextLiteralWithExtent_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTextLiteralWithExtent::IfcTextLiteralWithExtent(std::string v1_Literal, ::Ifc4x3_add2::IfcAxis2Placement* v2_Placement, ::Ifc4x3_add2::IfcTextPath::Value v3_Path, ::Ifc4x3_add2::IfcPlanarExtent* v4_Extent, std::string v5_BoxAlignment) : IfcTextLiteral((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTextLiteralWithExtent_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Literal));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Placement));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v3_Path,::Ifc4x3_add2::IfcTextPath::ToString(v3_Path))));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Extent));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_BoxAlignment));data_->setArgument(4,attr);} } + +// Function implementations for IfcTextStyle +::Ifc4x3_add2::IfcTextStyleForDefinedFont* Ifc4x3_add2::IfcTextStyle::TextCharacterAppearance() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcTextStyleForDefinedFont>(true); } +void Ifc4x3_add2::IfcTextStyle::setTextCharacterAppearance(::Ifc4x3_add2::IfcTextStyleForDefinedFont* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcTextStyleTextModel* Ifc4x3_add2::IfcTextStyle::TextStyle() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcTextStyleTextModel>(true); } +void Ifc4x3_add2::IfcTextStyle::setTextStyle(::Ifc4x3_add2::IfcTextStyleTextModel* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcTextFontSelect* Ifc4x3_add2::IfcTextStyle::TextFontStyle() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcTextFontSelect>(true); } +void Ifc4x3_add2::IfcTextStyle::setTextFontStyle(::Ifc4x3_add2::IfcTextFontSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +boost::optional< bool > Ifc4x3_add2::IfcTextStyle::ModelOrDraughting() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } bool v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcTextStyle::setModelOrDraughting(boost::optional< bool > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTextStyle::declaration() const { return *IFC4X3_ADD2_IfcTextStyle_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTextStyle::Class() { return *IFC4X3_ADD2_IfcTextStyle_type; } +Ifc4x3_add2::IfcTextStyle::IfcTextStyle(IfcEntityInstanceData* e) : IfcPresentationStyle((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTextStyle_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTextStyle::IfcTextStyle(boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcTextStyleForDefinedFont* v2_TextCharacterAppearance, ::Ifc4x3_add2::IfcTextStyleTextModel* v3_TextStyle, ::Ifc4x3_add2::IfcTextFontSelect* v4_TextFontStyle, boost::optional< bool > v5_ModelOrDraughting) : IfcPresentationStyle((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTextStyle_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_TextCharacterAppearance));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_TextStyle));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_TextFontStyle));data_->setArgument(3,attr);} if (v5_ModelOrDraughting) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ModelOrDraughting));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcTextStyleFontModel +std::vector< std::string > /*[1:?]*/ Ifc4x3_add2::IfcTextStyleFontModel::FontFamily() const { std::vector< std::string > /*[1:?]*/ v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcTextStyleFontModel::setFontFamily(std::vector< std::string > /*[1:?]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTextStyleFontModel::FontStyle() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcTextStyleFontModel::setFontStyle(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTextStyleFontModel::FontVariant() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } std::string v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcTextStyleFontModel::setFontVariant(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTextStyleFontModel::FontWeight() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcTextStyleFontModel::setFontWeight(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcSizeSelect* Ifc4x3_add2::IfcTextStyleFontModel::FontSize() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(5)))->as<::Ifc4x3_add2::IfcSizeSelect>(true); } +void Ifc4x3_add2::IfcTextStyleFontModel::setFontSize(::Ifc4x3_add2::IfcSizeSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTextStyleFontModel::declaration() const { return *IFC4X3_ADD2_IfcTextStyleFontModel_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTextStyleFontModel::Class() { return *IFC4X3_ADD2_IfcTextStyleFontModel_type; } +Ifc4x3_add2::IfcTextStyleFontModel::IfcTextStyleFontModel(IfcEntityInstanceData* e) : IfcPreDefinedTextFont((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTextStyleFontModel_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTextStyleFontModel::IfcTextStyleFontModel(std::string v1_Name, std::vector< std::string > /*[1:?]*/ v2_FontFamily, boost::optional< std::string > v3_FontStyle, boost::optional< std::string > v4_FontVariant, boost::optional< std::string > v5_FontWeight, ::Ifc4x3_add2::IfcSizeSelect* v6_FontSize) : IfcPreDefinedTextFont((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTextStyleFontModel_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_FontFamily));data_->setArgument(1,attr);} if (v3_FontStyle) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_FontStyle));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_FontVariant) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_FontVariant));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_FontWeight) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_FontWeight));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_FontSize));data_->setArgument(5,attr);} } + +// Function implementations for IfcTextStyleForDefinedFont +::Ifc4x3_add2::IfcColour* Ifc4x3_add2::IfcTextStyleForDefinedFont::Colour() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcColour>(true); } +void Ifc4x3_add2::IfcTextStyleForDefinedFont::setColour(::Ifc4x3_add2::IfcColour* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcColour* Ifc4x3_add2::IfcTextStyleForDefinedFont::BackgroundColour() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcColour>(true); } +void Ifc4x3_add2::IfcTextStyleForDefinedFont::setBackgroundColour(::Ifc4x3_add2::IfcColour* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTextStyleForDefinedFont::declaration() const { return *IFC4X3_ADD2_IfcTextStyleForDefinedFont_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTextStyleForDefinedFont::Class() { return *IFC4X3_ADD2_IfcTextStyleForDefinedFont_type; } +Ifc4x3_add2::IfcTextStyleForDefinedFont::IfcTextStyleForDefinedFont(IfcEntityInstanceData* e) : IfcPresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTextStyleForDefinedFont_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTextStyleForDefinedFont::IfcTextStyleForDefinedFont(::Ifc4x3_add2::IfcColour* v1_Colour, ::Ifc4x3_add2::IfcColour* v2_BackgroundColour) : IfcPresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTextStyleForDefinedFont_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Colour));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_BackgroundColour));data_->setArgument(1,attr);} } + +// Function implementations for IfcTextStyleTextModel +::Ifc4x3_add2::IfcSizeSelect* Ifc4x3_add2::IfcTextStyleTextModel::TextIndent() const { if(!data_->getArgument(0) || data_->getArgument(0)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcSizeSelect>(true); } +void Ifc4x3_add2::IfcTextStyleTextModel::setTextIndent(::Ifc4x3_add2::IfcSizeSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTextStyleTextModel::TextAlign() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcTextStyleTextModel::setTextAlign(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTextStyleTextModel::TextDecoration() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcTextStyleTextModel::setTextDecoration(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +::Ifc4x3_add2::IfcSizeSelect* Ifc4x3_add2::IfcTextStyleTextModel::LetterSpacing() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcSizeSelect>(true); } +void Ifc4x3_add2::IfcTextStyleTextModel::setLetterSpacing(::Ifc4x3_add2::IfcSizeSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +::Ifc4x3_add2::IfcSizeSelect* Ifc4x3_add2::IfcTextStyleTextModel::WordSpacing() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(4)))->as<::Ifc4x3_add2::IfcSizeSelect>(true); } +void Ifc4x3_add2::IfcTextStyleTextModel::setWordSpacing(::Ifc4x3_add2::IfcSizeSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTextStyleTextModel::TextTransform() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcTextStyleTextModel::setTextTransform(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +::Ifc4x3_add2::IfcSizeSelect* Ifc4x3_add2::IfcTextStyleTextModel::LineHeight() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(6)))->as<::Ifc4x3_add2::IfcSizeSelect>(true); } +void Ifc4x3_add2::IfcTextStyleTextModel::setLineHeight(::Ifc4x3_add2::IfcSizeSelect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTextStyleTextModel::declaration() const { return *IFC4X3_ADD2_IfcTextStyleTextModel_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTextStyleTextModel::Class() { return *IFC4X3_ADD2_IfcTextStyleTextModel_type; } +Ifc4x3_add2::IfcTextStyleTextModel::IfcTextStyleTextModel(IfcEntityInstanceData* e) : IfcPresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTextStyleTextModel_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTextStyleTextModel::IfcTextStyleTextModel(::Ifc4x3_add2::IfcSizeSelect* v1_TextIndent, boost::optional< std::string > v2_TextAlign, boost::optional< std::string > v3_TextDecoration, ::Ifc4x3_add2::IfcSizeSelect* v4_LetterSpacing, ::Ifc4x3_add2::IfcSizeSelect* v5_WordSpacing, boost::optional< std::string > v6_TextTransform, ::Ifc4x3_add2::IfcSizeSelect* v7_LineHeight) : IfcPresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTextStyleTextModel_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_TextIndent));data_->setArgument(0,attr);} if (v2_TextAlign) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_TextAlign));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_TextDecoration) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_TextDecoration));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_LetterSpacing));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_WordSpacing));data_->setArgument(4,attr);} if (v6_TextTransform) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_TextTransform));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_LineHeight));data_->setArgument(6,attr);} } + +// Function implementations for IfcTextureCoordinate +aggregate_of< ::Ifc4x3_add2::IfcSurfaceTexture >::ptr Ifc4x3_add2::IfcTextureCoordinate::Maps() const { aggregate_of_instance::ptr es = *data_->getArgument(0); return es->as< ::Ifc4x3_add2::IfcSurfaceTexture >(); } +void Ifc4x3_add2::IfcTextureCoordinate::setMaps(aggregate_of< ::Ifc4x3_add2::IfcSurfaceTexture >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTextureCoordinate::declaration() const { return *IFC4X3_ADD2_IfcTextureCoordinate_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTextureCoordinate::Class() { return *IFC4X3_ADD2_IfcTextureCoordinate_type; } +Ifc4x3_add2::IfcTextureCoordinate::IfcTextureCoordinate(IfcEntityInstanceData* e) : IfcPresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTextureCoordinate_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTextureCoordinate::IfcTextureCoordinate(aggregate_of< ::Ifc4x3_add2::IfcSurfaceTexture >::ptr v1_Maps) : IfcPresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTextureCoordinate_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Maps)->generalize());data_->setArgument(0,attr);} } + +// Function implementations for IfcTextureCoordinateGenerator +std::string Ifc4x3_add2::IfcTextureCoordinateGenerator::Mode() const { std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcTextureCoordinateGenerator::setMode(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +boost::optional< std::vector< double > /*[1:?]*/ > Ifc4x3_add2::IfcTextureCoordinateGenerator::Parameter() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } std::vector< double > /*[1:?]*/ v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcTextureCoordinateGenerator::setParameter(boost::optional< std::vector< double > /*[1:?]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTextureCoordinateGenerator::declaration() const { return *IFC4X3_ADD2_IfcTextureCoordinateGenerator_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTextureCoordinateGenerator::Class() { return *IFC4X3_ADD2_IfcTextureCoordinateGenerator_type; } +Ifc4x3_add2::IfcTextureCoordinateGenerator::IfcTextureCoordinateGenerator(IfcEntityInstanceData* e) : IfcTextureCoordinate((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTextureCoordinateGenerator_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTextureCoordinateGenerator::IfcTextureCoordinateGenerator(aggregate_of< ::Ifc4x3_add2::IfcSurfaceTexture >::ptr v1_Maps, std::string v2_Mode, boost::optional< std::vector< double > /*[1:?]*/ > v3_Parameter) : IfcTextureCoordinate((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTextureCoordinateGenerator_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Maps)->generalize());data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Mode));data_->setArgument(1,attr);} if (v3_Parameter) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Parameter));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } } + +// Function implementations for IfcTextureCoordinateIndices +std::vector< int > /*[3:?]*/ Ifc4x3_add2::IfcTextureCoordinateIndices::TexCoordIndex() const { std::vector< int > /*[3:?]*/ v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcTextureCoordinateIndices::setTexCoordIndex(std::vector< int > /*[3:?]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcIndexedPolygonalFace* Ifc4x3_add2::IfcTextureCoordinateIndices::TexCoordsOf() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcIndexedPolygonalFace>(true); } +void Ifc4x3_add2::IfcTextureCoordinateIndices::setTexCoordsOf(::Ifc4x3_add2::IfcIndexedPolygonalFace* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + +::Ifc4x3_add2::IfcIndexedPolygonalTextureMap::list::ptr Ifc4x3_add2::IfcTextureCoordinateIndices::ToTexMap() const { return data_->getInverse(IFC4X3_ADD2_IfcIndexedPolygonalTextureMap_type, 3)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcTextureCoordinateIndices::declaration() const { return *IFC4X3_ADD2_IfcTextureCoordinateIndices_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTextureCoordinateIndices::Class() { return *IFC4X3_ADD2_IfcTextureCoordinateIndices_type; } +Ifc4x3_add2::IfcTextureCoordinateIndices::IfcTextureCoordinateIndices(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTextureCoordinateIndices_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTextureCoordinateIndices::IfcTextureCoordinateIndices(std::vector< int > /*[3:?]*/ v1_TexCoordIndex, ::Ifc4x3_add2::IfcIndexedPolygonalFace* v2_TexCoordsOf) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTextureCoordinateIndices_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_TexCoordIndex));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_TexCoordsOf));data_->setArgument(1,attr);} } + +// Function implementations for IfcTextureCoordinateIndicesWithVoids +std::vector< std::vector< int > > Ifc4x3_add2::IfcTextureCoordinateIndicesWithVoids::InnerTexCoordIndices() const { std::vector< std::vector< int > > v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcTextureCoordinateIndicesWithVoids::setInnerTexCoordIndices(std::vector< std::vector< int > > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTextureCoordinateIndicesWithVoids::declaration() const { return *IFC4X3_ADD2_IfcTextureCoordinateIndicesWithVoids_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTextureCoordinateIndicesWithVoids::Class() { return *IFC4X3_ADD2_IfcTextureCoordinateIndicesWithVoids_type; } +Ifc4x3_add2::IfcTextureCoordinateIndicesWithVoids::IfcTextureCoordinateIndicesWithVoids(IfcEntityInstanceData* e) : IfcTextureCoordinateIndices((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTextureCoordinateIndicesWithVoids_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTextureCoordinateIndicesWithVoids::IfcTextureCoordinateIndicesWithVoids(std::vector< int > /*[3:?]*/ v1_TexCoordIndex, ::Ifc4x3_add2::IfcIndexedPolygonalFace* v2_TexCoordsOf, std::vector< std::vector< int > > v3_InnerTexCoordIndices) : IfcTextureCoordinateIndices((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTextureCoordinateIndicesWithVoids_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_TexCoordIndex));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_TexCoordsOf));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_InnerTexCoordIndices));data_->setArgument(2,attr);} } + +// Function implementations for IfcTextureMap +aggregate_of< ::Ifc4x3_add2::IfcTextureVertex >::ptr Ifc4x3_add2::IfcTextureMap::Vertices() const { aggregate_of_instance::ptr es = *data_->getArgument(1); return es->as< ::Ifc4x3_add2::IfcTextureVertex >(); } +void Ifc4x3_add2::IfcTextureMap::setVertices(aggregate_of< ::Ifc4x3_add2::IfcTextureVertex >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(1,attr);} } +::Ifc4x3_add2::IfcFace* Ifc4x3_add2::IfcTextureMap::MappedTo() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(2)))->as<::Ifc4x3_add2::IfcFace>(true); } +void Ifc4x3_add2::IfcTextureMap::setMappedTo(::Ifc4x3_add2::IfcFace* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTextureMap::declaration() const { return *IFC4X3_ADD2_IfcTextureMap_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTextureMap::Class() { return *IFC4X3_ADD2_IfcTextureMap_type; } +Ifc4x3_add2::IfcTextureMap::IfcTextureMap(IfcEntityInstanceData* e) : IfcTextureCoordinate((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTextureMap_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTextureMap::IfcTextureMap(aggregate_of< ::Ifc4x3_add2::IfcSurfaceTexture >::ptr v1_Maps, aggregate_of< ::Ifc4x3_add2::IfcTextureVertex >::ptr v2_Vertices, ::Ifc4x3_add2::IfcFace* v3_MappedTo) : IfcTextureCoordinate((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTextureMap_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Maps)->generalize());data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Vertices)->generalize());data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_MappedTo));data_->setArgument(2,attr);} } + +// Function implementations for IfcTextureVertex +std::vector< double > /*[2:2]*/ Ifc4x3_add2::IfcTextureVertex::Coordinates() const { std::vector< double > /*[2:2]*/ v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcTextureVertex::setCoordinates(std::vector< double > /*[2:2]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTextureVertex::declaration() const { return *IFC4X3_ADD2_IfcTextureVertex_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTextureVertex::Class() { return *IFC4X3_ADD2_IfcTextureVertex_type; } +Ifc4x3_add2::IfcTextureVertex::IfcTextureVertex(IfcEntityInstanceData* e) : IfcPresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTextureVertex_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTextureVertex::IfcTextureVertex(std::vector< double > /*[2:2]*/ v1_Coordinates) : IfcPresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTextureVertex_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Coordinates));data_->setArgument(0,attr);} } + +// Function implementations for IfcTextureVertexList +std::vector< std::vector< double > > Ifc4x3_add2::IfcTextureVertexList::TexCoordsList() const { std::vector< std::vector< double > > v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcTextureVertexList::setTexCoordsList(std::vector< std::vector< double > > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTextureVertexList::declaration() const { return *IFC4X3_ADD2_IfcTextureVertexList_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTextureVertexList::Class() { return *IFC4X3_ADD2_IfcTextureVertexList_type; } +Ifc4x3_add2::IfcTextureVertexList::IfcTextureVertexList(IfcEntityInstanceData* e) : IfcPresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTextureVertexList_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTextureVertexList::IfcTextureVertexList(std::vector< std::vector< double > > v1_TexCoordsList) : IfcPresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTextureVertexList_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_TexCoordsList));data_->setArgument(0,attr);} } + +// Function implementations for IfcThirdOrderPolynomialSpiral +double Ifc4x3_add2::IfcThirdOrderPolynomialSpiral::CubicTerm() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcThirdOrderPolynomialSpiral::setCubicTerm(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +boost::optional< double > Ifc4x3_add2::IfcThirdOrderPolynomialSpiral::QuadraticTerm() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcThirdOrderPolynomialSpiral::setQuadraticTerm(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +boost::optional< double > Ifc4x3_add2::IfcThirdOrderPolynomialSpiral::LinearTerm() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return boost::none; } double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcThirdOrderPolynomialSpiral::setLinearTerm(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(3,attr);} } +boost::optional< double > Ifc4x3_add2::IfcThirdOrderPolynomialSpiral::ConstantTerm() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcThirdOrderPolynomialSpiral::setConstantTerm(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcThirdOrderPolynomialSpiral::declaration() const { return *IFC4X3_ADD2_IfcThirdOrderPolynomialSpiral_type; } +const IfcParse::entity& Ifc4x3_add2::IfcThirdOrderPolynomialSpiral::Class() { return *IFC4X3_ADD2_IfcThirdOrderPolynomialSpiral_type; } +Ifc4x3_add2::IfcThirdOrderPolynomialSpiral::IfcThirdOrderPolynomialSpiral(IfcEntityInstanceData* e) : IfcSpiral((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcThirdOrderPolynomialSpiral_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcThirdOrderPolynomialSpiral::IfcThirdOrderPolynomialSpiral(::Ifc4x3_add2::IfcAxis2Placement* v1_Position, double v2_CubicTerm, boost::optional< double > v3_QuadraticTerm, boost::optional< double > v4_LinearTerm, boost::optional< double > v5_ConstantTerm) : IfcSpiral((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcThirdOrderPolynomialSpiral_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Position));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_CubicTerm));data_->setArgument(1,attr);} if (v3_QuadraticTerm) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_QuadraticTerm));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_LinearTerm) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_LinearTerm));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ConstantTerm) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ConstantTerm));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcTimePeriod +std::string Ifc4x3_add2::IfcTimePeriod::StartTime() const { std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcTimePeriod::setStartTime(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +std::string Ifc4x3_add2::IfcTimePeriod::EndTime() const { std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcTimePeriod::setEndTime(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTimePeriod::declaration() const { return *IFC4X3_ADD2_IfcTimePeriod_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTimePeriod::Class() { return *IFC4X3_ADD2_IfcTimePeriod_type; } +Ifc4x3_add2::IfcTimePeriod::IfcTimePeriod(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTimePeriod_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTimePeriod::IfcTimePeriod(std::string v1_StartTime, std::string v2_EndTime) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTimePeriod_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_StartTime));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_EndTime));data_->setArgument(1,attr);} } + +// Function implementations for IfcTimeSeries +std::string Ifc4x3_add2::IfcTimeSeries::Name() const { std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcTimeSeries::setName(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTimeSeries::Description() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::string v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcTimeSeries::setDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +std::string Ifc4x3_add2::IfcTimeSeries::StartTime() const { std::string v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcTimeSeries::setStartTime(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } +std::string Ifc4x3_add2::IfcTimeSeries::EndTime() const { std::string v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcTimeSeries::setEndTime(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +::Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::Value Ifc4x3_add2::IfcTimeSeries::TimeSeriesDataType() const { return ::Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::FromString(*data_->getArgument(4)); } +void Ifc4x3_add2::IfcTimeSeries::setTimeSeriesDataType(::Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::ToString(v)));data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcDataOriginEnum::Value Ifc4x3_add2::IfcTimeSeries::DataOrigin() const { return ::Ifc4x3_add2::IfcDataOriginEnum::FromString(*data_->getArgument(5)); } +void Ifc4x3_add2::IfcTimeSeries::setDataOrigin(::Ifc4x3_add2::IfcDataOriginEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcDataOriginEnum::ToString(v)));data_->setArgument(5,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTimeSeries::UserDefinedDataOrigin() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } std::string v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcTimeSeries::setUserDefinedDataOrigin(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } +::Ifc4x3_add2::IfcUnit* Ifc4x3_add2::IfcTimeSeries::Unit() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(7)))->as<::Ifc4x3_add2::IfcUnit>(true); } +void Ifc4x3_add2::IfcTimeSeries::setUnit(::Ifc4x3_add2::IfcUnit* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(7,attr);} } + +::Ifc4x3_add2::IfcExternalReferenceRelationship::list::ptr Ifc4x3_add2::IfcTimeSeries::HasExternalReference() const { return data_->getInverse(IFC4X3_ADD2_IfcExternalReferenceRelationship_type, 3)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcTimeSeries::declaration() const { return *IFC4X3_ADD2_IfcTimeSeries_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTimeSeries::Class() { return *IFC4X3_ADD2_IfcTimeSeries_type; } +Ifc4x3_add2::IfcTimeSeries::IfcTimeSeries(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTimeSeries_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTimeSeries::IfcTimeSeries(std::string v1_Name, boost::optional< std::string > v2_Description, std::string v3_StartTime, std::string v4_EndTime, ::Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::Value v5_TimeSeriesDataType, ::Ifc4x3_add2::IfcDataOriginEnum::Value v6_DataOrigin, boost::optional< std::string > v7_UserDefinedDataOrigin, ::Ifc4x3_add2::IfcUnit* v8_Unit) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTimeSeries_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Name));data_->setArgument(0,attr);} if (v2_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Description));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_StartTime));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_EndTime));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v5_TimeSeriesDataType,::Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::ToString(v5_TimeSeriesDataType))));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v6_DataOrigin,::Ifc4x3_add2::IfcDataOriginEnum::ToString(v6_DataOrigin))));data_->setArgument(5,attr);} if (v7_UserDefinedDataOrigin) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_UserDefinedDataOrigin));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v8_Unit));data_->setArgument(7,attr);} } + +// Function implementations for IfcTimeSeriesValue +aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr Ifc4x3_add2::IfcTimeSeriesValue::ListValues() const { aggregate_of_instance::ptr es = *data_->getArgument(0); return es->as< ::Ifc4x3_add2::IfcValue >(); } +void Ifc4x3_add2::IfcTimeSeriesValue::setListValues(aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTimeSeriesValue::declaration() const { return *IFC4X3_ADD2_IfcTimeSeriesValue_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTimeSeriesValue::Class() { return *IFC4X3_ADD2_IfcTimeSeriesValue_type; } +Ifc4x3_add2::IfcTimeSeriesValue::IfcTimeSeriesValue(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTimeSeriesValue_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTimeSeriesValue::IfcTimeSeriesValue(aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr v1_ListValues) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTimeSeriesValue_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_ListValues)->generalize());data_->setArgument(0,attr);} } + +// Function implementations for IfcTopologicalRepresentationItem + + +const IfcParse::entity& Ifc4x3_add2::IfcTopologicalRepresentationItem::declaration() const { return *IFC4X3_ADD2_IfcTopologicalRepresentationItem_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTopologicalRepresentationItem::Class() { return *IFC4X3_ADD2_IfcTopologicalRepresentationItem_type; } +Ifc4x3_add2::IfcTopologicalRepresentationItem::IfcTopologicalRepresentationItem(IfcEntityInstanceData* e) : IfcRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTopologicalRepresentationItem_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTopologicalRepresentationItem::IfcTopologicalRepresentationItem() : IfcRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTopologicalRepresentationItem_type); } + +// Function implementations for IfcTopologyRepresentation + + +const IfcParse::entity& Ifc4x3_add2::IfcTopologyRepresentation::declaration() const { return *IFC4X3_ADD2_IfcTopologyRepresentation_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTopologyRepresentation::Class() { return *IFC4X3_ADD2_IfcTopologyRepresentation_type; } +Ifc4x3_add2::IfcTopologyRepresentation::IfcTopologyRepresentation(IfcEntityInstanceData* e) : IfcShapeModel((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTopologyRepresentation_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTopologyRepresentation::IfcTopologyRepresentation(::Ifc4x3_add2::IfcRepresentationContext* v1_ContextOfItems, boost::optional< std::string > v2_RepresentationIdentifier, boost::optional< std::string > v3_RepresentationType, aggregate_of< ::Ifc4x3_add2::IfcRepresentationItem >::ptr v4_Items) : IfcShapeModel((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTopologyRepresentation_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_ContextOfItems));data_->setArgument(0,attr);} if (v2_RepresentationIdentifier) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_RepresentationIdentifier));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_RepresentationType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_RepresentationType));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Items)->generalize());data_->setArgument(3,attr);} } + +// Function implementations for IfcToroidalSurface +double Ifc4x3_add2::IfcToroidalSurface::MajorRadius() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcToroidalSurface::setMajorRadius(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } +double Ifc4x3_add2::IfcToroidalSurface::MinorRadius() const { double v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcToroidalSurface::setMinorRadius(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(2,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcToroidalSurface::declaration() const { return *IFC4X3_ADD2_IfcToroidalSurface_type; } +const IfcParse::entity& Ifc4x3_add2::IfcToroidalSurface::Class() { return *IFC4X3_ADD2_IfcToroidalSurface_type; } +Ifc4x3_add2::IfcToroidalSurface::IfcToroidalSurface(IfcEntityInstanceData* e) : IfcElementarySurface((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcToroidalSurface_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcToroidalSurface::IfcToroidalSurface(::Ifc4x3_add2::IfcAxis2Placement3D* v1_Position, double v2_MajorRadius, double v3_MinorRadius) : IfcElementarySurface((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcToroidalSurface_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Position));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_MajorRadius));data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_MinorRadius));data_->setArgument(2,attr);} } + +// Function implementations for IfcTrackElement +boost::optional< ::Ifc4x3_add2::IfcTrackElementTypeEnum::Value > Ifc4x3_add2::IfcTrackElement::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcTrackElementTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcTrackElement::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcTrackElementTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcTrackElementTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTrackElement::declaration() const { return *IFC4X3_ADD2_IfcTrackElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTrackElement::Class() { return *IFC4X3_ADD2_IfcTrackElement_type; } +Ifc4x3_add2::IfcTrackElement::IfcTrackElement(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTrackElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTrackElement::IfcTrackElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcTrackElementTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTrackElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcTrackElementTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcTrackElementType +::Ifc4x3_add2::IfcTrackElementTypeEnum::Value Ifc4x3_add2::IfcTrackElementType::PredefinedType() const { return ::Ifc4x3_add2::IfcTrackElementTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcTrackElementType::setPredefinedType(::Ifc4x3_add2::IfcTrackElementTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcTrackElementTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTrackElementType::declaration() const { return *IFC4X3_ADD2_IfcTrackElementType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTrackElementType::Class() { return *IFC4X3_ADD2_IfcTrackElementType_type; } +Ifc4x3_add2::IfcTrackElementType::IfcTrackElementType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTrackElementType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTrackElementType::IfcTrackElementType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcTrackElementTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTrackElementType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcTrackElementTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcTransformer +boost::optional< ::Ifc4x3_add2::IfcTransformerTypeEnum::Value > Ifc4x3_add2::IfcTransformer::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcTransformerTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcTransformer::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcTransformerTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcTransformerTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTransformer::declaration() const { return *IFC4X3_ADD2_IfcTransformer_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTransformer::Class() { return *IFC4X3_ADD2_IfcTransformer_type; } +Ifc4x3_add2::IfcTransformer::IfcTransformer(IfcEntityInstanceData* e) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTransformer_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTransformer::IfcTransformer(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcTransformerTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTransformer_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcTransformerTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcTransformerType +::Ifc4x3_add2::IfcTransformerTypeEnum::Value Ifc4x3_add2::IfcTransformerType::PredefinedType() const { return ::Ifc4x3_add2::IfcTransformerTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcTransformerType::setPredefinedType(::Ifc4x3_add2::IfcTransformerTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcTransformerTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTransformerType::declaration() const { return *IFC4X3_ADD2_IfcTransformerType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTransformerType::Class() { return *IFC4X3_ADD2_IfcTransformerType_type; } +Ifc4x3_add2::IfcTransformerType::IfcTransformerType(IfcEntityInstanceData* e) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTransformerType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTransformerType::IfcTransformerType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcTransformerTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTransformerType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcTransformerTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcTransportElement +boost::optional< ::Ifc4x3_add2::IfcTransportElementTypeEnum::Value > Ifc4x3_add2::IfcTransportElement::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcTransportElementTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcTransportElement::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcTransportElementTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcTransportElementTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTransportElement::declaration() const { return *IFC4X3_ADD2_IfcTransportElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTransportElement::Class() { return *IFC4X3_ADD2_IfcTransportElement_type; } +Ifc4x3_add2::IfcTransportElement::IfcTransportElement(IfcEntityInstanceData* e) : IfcTransportationDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTransportElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTransportElement::IfcTransportElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcTransportElementTypeEnum::Value > v9_PredefinedType) : IfcTransportationDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTransportElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcTransportElementTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcTransportElementType +::Ifc4x3_add2::IfcTransportElementTypeEnum::Value Ifc4x3_add2::IfcTransportElementType::PredefinedType() const { return ::Ifc4x3_add2::IfcTransportElementTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcTransportElementType::setPredefinedType(::Ifc4x3_add2::IfcTransportElementTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcTransportElementTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTransportElementType::declaration() const { return *IFC4X3_ADD2_IfcTransportElementType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTransportElementType::Class() { return *IFC4X3_ADD2_IfcTransportElementType_type; } +Ifc4x3_add2::IfcTransportElementType::IfcTransportElementType(IfcEntityInstanceData* e) : IfcTransportationDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTransportElementType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTransportElementType::IfcTransportElementType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcTransportElementTypeEnum::Value v10_PredefinedType) : IfcTransportationDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTransportElementType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcTransportElementTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcTransportationDevice + + +const IfcParse::entity& Ifc4x3_add2::IfcTransportationDevice::declaration() const { return *IFC4X3_ADD2_IfcTransportationDevice_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTransportationDevice::Class() { return *IFC4X3_ADD2_IfcTransportationDevice_type; } +Ifc4x3_add2::IfcTransportationDevice::IfcTransportationDevice(IfcEntityInstanceData* e) : IfcElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTransportationDevice_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTransportationDevice::IfcTransportationDevice(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag) : IfcElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTransportationDevice_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcTransportationDeviceType + + +const IfcParse::entity& Ifc4x3_add2::IfcTransportationDeviceType::declaration() const { return *IFC4X3_ADD2_IfcTransportationDeviceType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTransportationDeviceType::Class() { return *IFC4X3_ADD2_IfcTransportationDeviceType_type; } +Ifc4x3_add2::IfcTransportationDeviceType::IfcTransportationDeviceType(IfcEntityInstanceData* e) : IfcElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTransportationDeviceType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTransportationDeviceType::IfcTransportationDeviceType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType) : IfcElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTransportationDeviceType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcTrapeziumProfileDef +double Ifc4x3_add2::IfcTrapeziumProfileDef::BottomXDim() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcTrapeziumProfileDef::setBottomXDim(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +double Ifc4x3_add2::IfcTrapeziumProfileDef::TopXDim() const { double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcTrapeziumProfileDef::setTopXDim(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +double Ifc4x3_add2::IfcTrapeziumProfileDef::YDim() const { double v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcTrapeziumProfileDef::setYDim(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +double Ifc4x3_add2::IfcTrapeziumProfileDef::TopXOffset() const { double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcTrapeziumProfileDef::setTopXOffset(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTrapeziumProfileDef::declaration() const { return *IFC4X3_ADD2_IfcTrapeziumProfileDef_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTrapeziumProfileDef::Class() { return *IFC4X3_ADD2_IfcTrapeziumProfileDef_type; } +Ifc4x3_add2::IfcTrapeziumProfileDef::IfcTrapeziumProfileDef(IfcEntityInstanceData* e) : IfcParameterizedProfileDef((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTrapeziumProfileDef_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTrapeziumProfileDef::IfcTrapeziumProfileDef(::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_BottomXDim, double v5_TopXDim, double v6_YDim, double v7_TopXOffset) : IfcParameterizedProfileDef((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTrapeziumProfileDef_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_ProfileType,::Ifc4x3_add2::IfcProfileTypeEnum::ToString(v1_ProfileType))));data_->setArgument(0,attr);} if (v2_ProfileName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ProfileName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Position));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_BottomXDim));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_TopXDim));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_YDim));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_TopXOffset));data_->setArgument(6,attr);} } + +// Function implementations for IfcTriangulatedFaceSet +boost::optional< std::vector< std::vector< double > > > Ifc4x3_add2::IfcTriangulatedFaceSet::Normals() const { if(!data_->getArgument(1) || data_->getArgument(1)->isNull()) { return boost::none; } std::vector< std::vector< double > > v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcTriangulatedFaceSet::setNormals(boost::optional< std::vector< std::vector< double > > > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(1,attr);} } +boost::optional< bool > Ifc4x3_add2::IfcTriangulatedFaceSet::Closed() const { if(!data_->getArgument(2) || data_->getArgument(2)->isNull()) { return boost::none; } bool v = *data_->getArgument(2); return v; } +void Ifc4x3_add2::IfcTriangulatedFaceSet::setClosed(boost::optional< bool > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(2,attr);} } +std::vector< std::vector< int > > Ifc4x3_add2::IfcTriangulatedFaceSet::CoordIndex() const { std::vector< std::vector< int > > v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcTriangulatedFaceSet::setCoordIndex(std::vector< std::vector< int > > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +boost::optional< std::vector< int > /*[1:?]*/ > Ifc4x3_add2::IfcTriangulatedFaceSet::PnIndex() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::vector< int > /*[1:?]*/ v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcTriangulatedFaceSet::setPnIndex(boost::optional< std::vector< int > /*[1:?]*/ > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTriangulatedFaceSet::declaration() const { return *IFC4X3_ADD2_IfcTriangulatedFaceSet_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTriangulatedFaceSet::Class() { return *IFC4X3_ADD2_IfcTriangulatedFaceSet_type; } +Ifc4x3_add2::IfcTriangulatedFaceSet::IfcTriangulatedFaceSet(IfcEntityInstanceData* e) : IfcTessellatedFaceSet((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTriangulatedFaceSet_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTriangulatedFaceSet::IfcTriangulatedFaceSet(::Ifc4x3_add2::IfcCartesianPointList3D* v1_Coordinates, boost::optional< std::vector< std::vector< double > > > v2_Normals, boost::optional< bool > v3_Closed, std::vector< std::vector< int > > v4_CoordIndex, boost::optional< std::vector< int > /*[1:?]*/ > v5_PnIndex) : IfcTessellatedFaceSet((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTriangulatedFaceSet_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Coordinates));data_->setArgument(0,attr);} if (v2_Normals) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Normals));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_Closed) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Closed));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_CoordIndex));data_->setArgument(3,attr);} if (v5_PnIndex) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_PnIndex));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } } + +// Function implementations for IfcTriangulatedIrregularNetwork +std::vector< int > /*[1:?]*/ Ifc4x3_add2::IfcTriangulatedIrregularNetwork::Flags() const { std::vector< int > /*[1:?]*/ v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcTriangulatedIrregularNetwork::setFlags(std::vector< int > /*[1:?]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTriangulatedIrregularNetwork::declaration() const { return *IFC4X3_ADD2_IfcTriangulatedIrregularNetwork_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTriangulatedIrregularNetwork::Class() { return *IFC4X3_ADD2_IfcTriangulatedIrregularNetwork_type; } +Ifc4x3_add2::IfcTriangulatedIrregularNetwork::IfcTriangulatedIrregularNetwork(IfcEntityInstanceData* e) : IfcTriangulatedFaceSet((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTriangulatedIrregularNetwork_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTriangulatedIrregularNetwork::IfcTriangulatedIrregularNetwork(::Ifc4x3_add2::IfcCartesianPointList3D* v1_Coordinates, boost::optional< std::vector< std::vector< double > > > v2_Normals, boost::optional< bool > v3_Closed, std::vector< std::vector< int > > v4_CoordIndex, boost::optional< std::vector< int > /*[1:?]*/ > v5_PnIndex, std::vector< int > /*[1:?]*/ v6_Flags) : IfcTriangulatedFaceSet((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTriangulatedIrregularNetwork_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Coordinates));data_->setArgument(0,attr);} if (v2_Normals) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_Normals));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_Closed) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Closed));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_CoordIndex));data_->setArgument(3,attr);} if (v5_PnIndex) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_PnIndex));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_Flags));data_->setArgument(5,attr);} } + +// Function implementations for IfcTrimmedCurve +::Ifc4x3_add2::IfcCurve* Ifc4x3_add2::IfcTrimmedCurve::BasisCurve() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcCurve>(true); } +void Ifc4x3_add2::IfcTrimmedCurve::setBasisCurve(::Ifc4x3_add2::IfcCurve* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcTrimmingSelect >::ptr Ifc4x3_add2::IfcTrimmedCurve::Trim1() const { aggregate_of_instance::ptr es = *data_->getArgument(1); return es->as< ::Ifc4x3_add2::IfcTrimmingSelect >(); } +void Ifc4x3_add2::IfcTrimmedCurve::setTrim1(aggregate_of< ::Ifc4x3_add2::IfcTrimmingSelect >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(1,attr);} } +aggregate_of< ::Ifc4x3_add2::IfcTrimmingSelect >::ptr Ifc4x3_add2::IfcTrimmedCurve::Trim2() const { aggregate_of_instance::ptr es = *data_->getArgument(2); return es->as< ::Ifc4x3_add2::IfcTrimmingSelect >(); } +void Ifc4x3_add2::IfcTrimmedCurve::setTrim2(aggregate_of< ::Ifc4x3_add2::IfcTrimmingSelect >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(2,attr);} } +bool Ifc4x3_add2::IfcTrimmedCurve::SenseAgreement() const { bool v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcTrimmedCurve::setSenseAgreement(bool v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +::Ifc4x3_add2::IfcTrimmingPreference::Value Ifc4x3_add2::IfcTrimmedCurve::MasterRepresentation() const { return ::Ifc4x3_add2::IfcTrimmingPreference::FromString(*data_->getArgument(4)); } +void Ifc4x3_add2::IfcTrimmedCurve::setMasterRepresentation(::Ifc4x3_add2::IfcTrimmingPreference::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcTrimmingPreference::ToString(v)));data_->setArgument(4,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTrimmedCurve::declaration() const { return *IFC4X3_ADD2_IfcTrimmedCurve_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTrimmedCurve::Class() { return *IFC4X3_ADD2_IfcTrimmedCurve_type; } +Ifc4x3_add2::IfcTrimmedCurve::IfcTrimmedCurve(IfcEntityInstanceData* e) : IfcBoundedCurve((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTrimmedCurve_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTrimmedCurve::IfcTrimmedCurve(::Ifc4x3_add2::IfcCurve* v1_BasisCurve, aggregate_of< ::Ifc4x3_add2::IfcTrimmingSelect >::ptr v2_Trim1, aggregate_of< ::Ifc4x3_add2::IfcTrimmingSelect >::ptr v3_Trim2, bool v4_SenseAgreement, ::Ifc4x3_add2::IfcTrimmingPreference::Value v5_MasterRepresentation) : IfcBoundedCurve((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTrimmedCurve_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_BasisCurve));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Trim1)->generalize());data_->setArgument(1,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Trim2)->generalize());data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_SenseAgreement));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v5_MasterRepresentation,::Ifc4x3_add2::IfcTrimmingPreference::ToString(v5_MasterRepresentation))));data_->setArgument(4,attr);} } + +// Function implementations for IfcTubeBundle +boost::optional< ::Ifc4x3_add2::IfcTubeBundleTypeEnum::Value > Ifc4x3_add2::IfcTubeBundle::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcTubeBundleTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcTubeBundle::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcTubeBundleTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcTubeBundleTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTubeBundle::declaration() const { return *IFC4X3_ADD2_IfcTubeBundle_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTubeBundle::Class() { return *IFC4X3_ADD2_IfcTubeBundle_type; } +Ifc4x3_add2::IfcTubeBundle::IfcTubeBundle(IfcEntityInstanceData* e) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTubeBundle_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTubeBundle::IfcTubeBundle(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcTubeBundleTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTubeBundle_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcTubeBundleTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcTubeBundleType +::Ifc4x3_add2::IfcTubeBundleTypeEnum::Value Ifc4x3_add2::IfcTubeBundleType::PredefinedType() const { return ::Ifc4x3_add2::IfcTubeBundleTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcTubeBundleType::setPredefinedType(::Ifc4x3_add2::IfcTubeBundleTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcTubeBundleTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcTubeBundleType::declaration() const { return *IFC4X3_ADD2_IfcTubeBundleType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTubeBundleType::Class() { return *IFC4X3_ADD2_IfcTubeBundleType_type; } +Ifc4x3_add2::IfcTubeBundleType::IfcTubeBundleType(IfcEntityInstanceData* e) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTubeBundleType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTubeBundleType::IfcTubeBundleType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcTubeBundleTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTubeBundleType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcTubeBundleTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcTypeObject +boost::optional< std::string > Ifc4x3_add2::IfcTypeObject::ApplicableOccurrence() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcTypeObject::setApplicableOccurrence(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > Ifc4x3_add2::IfcTypeObject::HasPropertySets() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(5); return es->as< ::Ifc4x3_add2::IfcPropertySetDefinition >(); } +void Ifc4x3_add2::IfcTypeObject::setHasPropertySets(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(5,attr);} } + +::Ifc4x3_add2::IfcRelDefinesByType::list::ptr Ifc4x3_add2::IfcTypeObject::Types() const { return data_->getInverse(IFC4X3_ADD2_IfcRelDefinesByType_type, 5)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcTypeObject::declaration() const { return *IFC4X3_ADD2_IfcTypeObject_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTypeObject::Class() { return *IFC4X3_ADD2_IfcTypeObject_type; } +Ifc4x3_add2::IfcTypeObject::IfcTypeObject(IfcEntityInstanceData* e) : IfcObjectDefinition((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTypeObject_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTypeObject::IfcTypeObject(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets) : IfcObjectDefinition((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTypeObject_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } } + +// Function implementations for IfcTypeProcess +boost::optional< std::string > Ifc4x3_add2::IfcTypeProcess::Identification() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } std::string v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcTypeProcess::setIdentification(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTypeProcess::LongDescription() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } std::string v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcTypeProcess::setLongDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTypeProcess::ProcessType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } std::string v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcTypeProcess::setProcessType(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } + +::Ifc4x3_add2::IfcRelAssignsToProcess::list::ptr Ifc4x3_add2::IfcTypeProcess::OperatesOn() const { return data_->getInverse(IFC4X3_ADD2_IfcRelAssignsToProcess_type, 6)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcTypeProcess::declaration() const { return *IFC4X3_ADD2_IfcTypeProcess_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTypeProcess::Class() { return *IFC4X3_ADD2_IfcTypeProcess_type; } +Ifc4x3_add2::IfcTypeProcess::IfcTypeProcess(IfcEntityInstanceData* e) : IfcTypeObject((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTypeProcess_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTypeProcess::IfcTypeProcess(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ProcessType) : IfcTypeObject((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTypeProcess_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_Identification));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongDescription));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ProcessType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ProcessType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcTypeProduct +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > Ifc4x3_add2::IfcTypeProduct::RepresentationMaps() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(6); return es->as< ::Ifc4x3_add2::IfcRepresentationMap >(); } +void Ifc4x3_add2::IfcTypeProduct::setRepresentationMaps(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(6,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTypeProduct::Tag() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } std::string v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcTypeProduct::setTag(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } + +::Ifc4x3_add2::IfcRelAssignsToProduct::list::ptr Ifc4x3_add2::IfcTypeProduct::ReferencedBy() const { return data_->getInverse(IFC4X3_ADD2_IfcRelAssignsToProduct_type, 6)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcTypeProduct::declaration() const { return *IFC4X3_ADD2_IfcTypeProduct_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTypeProduct::Class() { return *IFC4X3_ADD2_IfcTypeProduct_type; } +Ifc4x3_add2::IfcTypeProduct::IfcTypeProduct(IfcEntityInstanceData* e) : IfcTypeObject((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTypeProduct_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTypeProduct::IfcTypeProduct(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag) : IfcTypeObject((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTypeProduct_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } } + +// Function implementations for IfcTypeResource +boost::optional< std::string > Ifc4x3_add2::IfcTypeResource::Identification() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } std::string v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcTypeResource::setIdentification(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTypeResource::LongDescription() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } std::string v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcTypeResource::setLongDescription(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcTypeResource::ResourceType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } std::string v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcTypeResource::setResourceType(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } + +::Ifc4x3_add2::IfcRelAssignsToResource::list::ptr Ifc4x3_add2::IfcTypeResource::ResourceOf() const { return data_->getInverse(IFC4X3_ADD2_IfcRelAssignsToResource_type, 6)->as(); } + +const IfcParse::entity& Ifc4x3_add2::IfcTypeResource::declaration() const { return *IFC4X3_ADD2_IfcTypeResource_type; } +const IfcParse::entity& Ifc4x3_add2::IfcTypeResource::Class() { return *IFC4X3_ADD2_IfcTypeResource_type; } +Ifc4x3_add2::IfcTypeResource::IfcTypeResource(IfcEntityInstanceData* e) : IfcTypeObject((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcTypeResource_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcTypeResource::IfcTypeResource(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ResourceType) : IfcTypeObject((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcTypeResource_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_Identification));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_LongDescription) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_LongDescription));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ResourceType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ResourceType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcUShapeProfileDef +double Ifc4x3_add2::IfcUShapeProfileDef::Depth() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcUShapeProfileDef::setDepth(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +double Ifc4x3_add2::IfcUShapeProfileDef::FlangeWidth() const { double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcUShapeProfileDef::setFlangeWidth(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +double Ifc4x3_add2::IfcUShapeProfileDef::WebThickness() const { double v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcUShapeProfileDef::setWebThickness(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +double Ifc4x3_add2::IfcUShapeProfileDef::FlangeThickness() const { double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcUShapeProfileDef::setFlangeThickness(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +boost::optional< double > Ifc4x3_add2::IfcUShapeProfileDef::FilletRadius() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } double v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcUShapeProfileDef::setFilletRadius(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +boost::optional< double > Ifc4x3_add2::IfcUShapeProfileDef::EdgeRadius() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } double v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcUShapeProfileDef::setEdgeRadius(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } +boost::optional< double > Ifc4x3_add2::IfcUShapeProfileDef::FlangeSlope() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } double v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcUShapeProfileDef::setFlangeSlope(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcUShapeProfileDef::declaration() const { return *IFC4X3_ADD2_IfcUShapeProfileDef_type; } +const IfcParse::entity& Ifc4x3_add2::IfcUShapeProfileDef::Class() { return *IFC4X3_ADD2_IfcUShapeProfileDef_type; } +Ifc4x3_add2::IfcUShapeProfileDef::IfcUShapeProfileDef(IfcEntityInstanceData* e) : IfcParameterizedProfileDef((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcUShapeProfileDef_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcUShapeProfileDef::IfcUShapeProfileDef(::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_Depth, double v5_FlangeWidth, double v6_WebThickness, double v7_FlangeThickness, boost::optional< double > v8_FilletRadius, boost::optional< double > v9_EdgeRadius, boost::optional< double > v10_FlangeSlope) : IfcParameterizedProfileDef((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcUShapeProfileDef_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_ProfileType,::Ifc4x3_add2::IfcProfileTypeEnum::ToString(v1_ProfileType))));data_->setArgument(0,attr);} if (v2_ProfileName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ProfileName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Position));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Depth));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_FlangeWidth));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_WebThickness));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_FlangeThickness));data_->setArgument(6,attr);} if (v8_FilletRadius) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_FilletRadius));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_EdgeRadius) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_EdgeRadius));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_FlangeSlope) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_FlangeSlope));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } } + +// Function implementations for IfcUnitAssignment +aggregate_of< ::Ifc4x3_add2::IfcUnit >::ptr Ifc4x3_add2::IfcUnitAssignment::Units() const { aggregate_of_instance::ptr es = *data_->getArgument(0); return es->as< ::Ifc4x3_add2::IfcUnit >(); } +void Ifc4x3_add2::IfcUnitAssignment::setUnits(aggregate_of< ::Ifc4x3_add2::IfcUnit >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcUnitAssignment::declaration() const { return *IFC4X3_ADD2_IfcUnitAssignment_type; } +const IfcParse::entity& Ifc4x3_add2::IfcUnitAssignment::Class() { return *IFC4X3_ADD2_IfcUnitAssignment_type; } +Ifc4x3_add2::IfcUnitAssignment::IfcUnitAssignment(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcUnitAssignment_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcUnitAssignment::IfcUnitAssignment(aggregate_of< ::Ifc4x3_add2::IfcUnit >::ptr v1_Units) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcUnitAssignment_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Units)->generalize());data_->setArgument(0,attr);} } + +// Function implementations for IfcUnitaryControlElement +boost::optional< ::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::Value > Ifc4x3_add2::IfcUnitaryControlElement::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcUnitaryControlElement::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcUnitaryControlElement::declaration() const { return *IFC4X3_ADD2_IfcUnitaryControlElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcUnitaryControlElement::Class() { return *IFC4X3_ADD2_IfcUnitaryControlElement_type; } +Ifc4x3_add2::IfcUnitaryControlElement::IfcUnitaryControlElement(IfcEntityInstanceData* e) : IfcDistributionControlElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcUnitaryControlElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcUnitaryControlElement::IfcUnitaryControlElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::Value > v9_PredefinedType) : IfcDistributionControlElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcUnitaryControlElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcUnitaryControlElementType +::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::Value Ifc4x3_add2::IfcUnitaryControlElementType::PredefinedType() const { return ::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcUnitaryControlElementType::setPredefinedType(::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcUnitaryControlElementType::declaration() const { return *IFC4X3_ADD2_IfcUnitaryControlElementType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcUnitaryControlElementType::Class() { return *IFC4X3_ADD2_IfcUnitaryControlElementType_type; } +Ifc4x3_add2::IfcUnitaryControlElementType::IfcUnitaryControlElementType(IfcEntityInstanceData* e) : IfcDistributionControlElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcUnitaryControlElementType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcUnitaryControlElementType::IfcUnitaryControlElementType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::Value v10_PredefinedType) : IfcDistributionControlElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcUnitaryControlElementType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcUnitaryEquipment +boost::optional< ::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::Value > Ifc4x3_add2::IfcUnitaryEquipment::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcUnitaryEquipment::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcUnitaryEquipment::declaration() const { return *IFC4X3_ADD2_IfcUnitaryEquipment_type; } +const IfcParse::entity& Ifc4x3_add2::IfcUnitaryEquipment::Class() { return *IFC4X3_ADD2_IfcUnitaryEquipment_type; } +Ifc4x3_add2::IfcUnitaryEquipment::IfcUnitaryEquipment(IfcEntityInstanceData* e) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcUnitaryEquipment_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcUnitaryEquipment::IfcUnitaryEquipment(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::Value > v9_PredefinedType) : IfcEnergyConversionDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcUnitaryEquipment_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcUnitaryEquipmentType +::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::Value Ifc4x3_add2::IfcUnitaryEquipmentType::PredefinedType() const { return ::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcUnitaryEquipmentType::setPredefinedType(::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcUnitaryEquipmentType::declaration() const { return *IFC4X3_ADD2_IfcUnitaryEquipmentType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcUnitaryEquipmentType::Class() { return *IFC4X3_ADD2_IfcUnitaryEquipmentType_type; } +Ifc4x3_add2::IfcUnitaryEquipmentType::IfcUnitaryEquipmentType(IfcEntityInstanceData* e) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcUnitaryEquipmentType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcUnitaryEquipmentType::IfcUnitaryEquipmentType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::Value v10_PredefinedType) : IfcEnergyConversionDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcUnitaryEquipmentType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcValve +boost::optional< ::Ifc4x3_add2::IfcValveTypeEnum::Value > Ifc4x3_add2::IfcValve::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcValveTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcValve::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcValveTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcValveTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcValve::declaration() const { return *IFC4X3_ADD2_IfcValve_type; } +const IfcParse::entity& Ifc4x3_add2::IfcValve::Class() { return *IFC4X3_ADD2_IfcValve_type; } +Ifc4x3_add2::IfcValve::IfcValve(IfcEntityInstanceData* e) : IfcFlowController((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcValve_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcValve::IfcValve(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcValveTypeEnum::Value > v9_PredefinedType) : IfcFlowController((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcValve_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcValveTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcValveType +::Ifc4x3_add2::IfcValveTypeEnum::Value Ifc4x3_add2::IfcValveType::PredefinedType() const { return ::Ifc4x3_add2::IfcValveTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcValveType::setPredefinedType(::Ifc4x3_add2::IfcValveTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcValveTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcValveType::declaration() const { return *IFC4X3_ADD2_IfcValveType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcValveType::Class() { return *IFC4X3_ADD2_IfcValveType_type; } +Ifc4x3_add2::IfcValveType::IfcValveType(IfcEntityInstanceData* e) : IfcFlowControllerType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcValveType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcValveType::IfcValveType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcValveTypeEnum::Value v10_PredefinedType) : IfcFlowControllerType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcValveType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcValveTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcVector +::Ifc4x3_add2::IfcDirection* Ifc4x3_add2::IfcVector::Orientation() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcDirection>(true); } +void Ifc4x3_add2::IfcVector::setOrientation(::Ifc4x3_add2::IfcDirection* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +double Ifc4x3_add2::IfcVector::Magnitude() const { double v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcVector::setMagnitude(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcVector::declaration() const { return *IFC4X3_ADD2_IfcVector_type; } +const IfcParse::entity& Ifc4x3_add2::IfcVector::Class() { return *IFC4X3_ADD2_IfcVector_type; } +Ifc4x3_add2::IfcVector::IfcVector(IfcEntityInstanceData* e) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcVector_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcVector::IfcVector(::Ifc4x3_add2::IfcDirection* v1_Orientation, double v2_Magnitude) : IfcGeometricRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVector_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_Orientation));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_Magnitude));data_->setArgument(1,attr);} } + +// Function implementations for IfcVehicle +boost::optional< ::Ifc4x3_add2::IfcVehicleTypeEnum::Value > Ifc4x3_add2::IfcVehicle::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcVehicleTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcVehicle::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcVehicleTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcVehicleTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcVehicle::declaration() const { return *IFC4X3_ADD2_IfcVehicle_type; } +const IfcParse::entity& Ifc4x3_add2::IfcVehicle::Class() { return *IFC4X3_ADD2_IfcVehicle_type; } +Ifc4x3_add2::IfcVehicle::IfcVehicle(IfcEntityInstanceData* e) : IfcTransportationDevice((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcVehicle_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcVehicle::IfcVehicle(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcVehicleTypeEnum::Value > v9_PredefinedType) : IfcTransportationDevice((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVehicle_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcVehicleTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcVehicleType +::Ifc4x3_add2::IfcVehicleTypeEnum::Value Ifc4x3_add2::IfcVehicleType::PredefinedType() const { return ::Ifc4x3_add2::IfcVehicleTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcVehicleType::setPredefinedType(::Ifc4x3_add2::IfcVehicleTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcVehicleTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcVehicleType::declaration() const { return *IFC4X3_ADD2_IfcVehicleType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcVehicleType::Class() { return *IFC4X3_ADD2_IfcVehicleType_type; } +Ifc4x3_add2::IfcVehicleType::IfcVehicleType(IfcEntityInstanceData* e) : IfcTransportationDeviceType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcVehicleType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcVehicleType::IfcVehicleType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcVehicleTypeEnum::Value v10_PredefinedType) : IfcTransportationDeviceType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVehicleType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcVehicleTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcVertex + + +const IfcParse::entity& Ifc4x3_add2::IfcVertex::declaration() const { return *IFC4X3_ADD2_IfcVertex_type; } +const IfcParse::entity& Ifc4x3_add2::IfcVertex::Class() { return *IFC4X3_ADD2_IfcVertex_type; } +Ifc4x3_add2::IfcVertex::IfcVertex(IfcEntityInstanceData* e) : IfcTopologicalRepresentationItem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcVertex_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcVertex::IfcVertex() : IfcTopologicalRepresentationItem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVertex_type); } + +// Function implementations for IfcVertexLoop +::Ifc4x3_add2::IfcVertex* Ifc4x3_add2::IfcVertexLoop::LoopVertex() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcVertex>(true); } +void Ifc4x3_add2::IfcVertexLoop::setLoopVertex(::Ifc4x3_add2::IfcVertex* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcVertexLoop::declaration() const { return *IFC4X3_ADD2_IfcVertexLoop_type; } +const IfcParse::entity& Ifc4x3_add2::IfcVertexLoop::Class() { return *IFC4X3_ADD2_IfcVertexLoop_type; } +Ifc4x3_add2::IfcVertexLoop::IfcVertexLoop(IfcEntityInstanceData* e) : IfcLoop((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcVertexLoop_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcVertexLoop::IfcVertexLoop(::Ifc4x3_add2::IfcVertex* v1_LoopVertex) : IfcLoop((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVertexLoop_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_LoopVertex));data_->setArgument(0,attr);} } + +// Function implementations for IfcVertexPoint +::Ifc4x3_add2::IfcPoint* Ifc4x3_add2::IfcVertexPoint::VertexGeometry() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(0)))->as<::Ifc4x3_add2::IfcPoint>(true); } +void Ifc4x3_add2::IfcVertexPoint::setVertexGeometry(::Ifc4x3_add2::IfcPoint* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcVertexPoint::declaration() const { return *IFC4X3_ADD2_IfcVertexPoint_type; } +const IfcParse::entity& Ifc4x3_add2::IfcVertexPoint::Class() { return *IFC4X3_ADD2_IfcVertexPoint_type; } +Ifc4x3_add2::IfcVertexPoint::IfcVertexPoint(IfcEntityInstanceData* e) : IfcVertex((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcVertexPoint_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcVertexPoint::IfcVertexPoint(::Ifc4x3_add2::IfcPoint* v1_VertexGeometry) : IfcVertex((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVertexPoint_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_VertexGeometry));data_->setArgument(0,attr);} } + +// Function implementations for IfcVibrationDamper +boost::optional< ::Ifc4x3_add2::IfcVibrationDamperTypeEnum::Value > Ifc4x3_add2::IfcVibrationDamper::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcVibrationDamperTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcVibrationDamper::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcVibrationDamperTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcVibrationDamperTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcVibrationDamper::declaration() const { return *IFC4X3_ADD2_IfcVibrationDamper_type; } +const IfcParse::entity& Ifc4x3_add2::IfcVibrationDamper::Class() { return *IFC4X3_ADD2_IfcVibrationDamper_type; } +Ifc4x3_add2::IfcVibrationDamper::IfcVibrationDamper(IfcEntityInstanceData* e) : IfcElementComponent((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcVibrationDamper_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcVibrationDamper::IfcVibrationDamper(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcVibrationDamperTypeEnum::Value > v9_PredefinedType) : IfcElementComponent((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVibrationDamper_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcVibrationDamperTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcVibrationDamperType +::Ifc4x3_add2::IfcVibrationDamperTypeEnum::Value Ifc4x3_add2::IfcVibrationDamperType::PredefinedType() const { return ::Ifc4x3_add2::IfcVibrationDamperTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcVibrationDamperType::setPredefinedType(::Ifc4x3_add2::IfcVibrationDamperTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcVibrationDamperTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcVibrationDamperType::declaration() const { return *IFC4X3_ADD2_IfcVibrationDamperType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcVibrationDamperType::Class() { return *IFC4X3_ADD2_IfcVibrationDamperType_type; } +Ifc4x3_add2::IfcVibrationDamperType::IfcVibrationDamperType(IfcEntityInstanceData* e) : IfcElementComponentType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcVibrationDamperType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcVibrationDamperType::IfcVibrationDamperType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcVibrationDamperTypeEnum::Value v10_PredefinedType) : IfcElementComponentType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVibrationDamperType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcVibrationDamperTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcVibrationIsolator +boost::optional< ::Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::Value > Ifc4x3_add2::IfcVibrationIsolator::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcVibrationIsolator::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcVibrationIsolator::declaration() const { return *IFC4X3_ADD2_IfcVibrationIsolator_type; } +const IfcParse::entity& Ifc4x3_add2::IfcVibrationIsolator::Class() { return *IFC4X3_ADD2_IfcVibrationIsolator_type; } +Ifc4x3_add2::IfcVibrationIsolator::IfcVibrationIsolator(IfcEntityInstanceData* e) : IfcElementComponent((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcVibrationIsolator_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcVibrationIsolator::IfcVibrationIsolator(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::Value > v9_PredefinedType) : IfcElementComponent((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVibrationIsolator_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcVibrationIsolatorType +::Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::Value Ifc4x3_add2::IfcVibrationIsolatorType::PredefinedType() const { return ::Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcVibrationIsolatorType::setPredefinedType(::Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcVibrationIsolatorType::declaration() const { return *IFC4X3_ADD2_IfcVibrationIsolatorType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcVibrationIsolatorType::Class() { return *IFC4X3_ADD2_IfcVibrationIsolatorType_type; } +Ifc4x3_add2::IfcVibrationIsolatorType::IfcVibrationIsolatorType(IfcEntityInstanceData* e) : IfcElementComponentType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcVibrationIsolatorType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcVibrationIsolatorType::IfcVibrationIsolatorType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::Value v10_PredefinedType) : IfcElementComponentType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVibrationIsolatorType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcVirtualElement +boost::optional< ::Ifc4x3_add2::IfcVirtualElementTypeEnum::Value > Ifc4x3_add2::IfcVirtualElement::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcVirtualElementTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcVirtualElement::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcVirtualElementTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcVirtualElementTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcVirtualElement::declaration() const { return *IFC4X3_ADD2_IfcVirtualElement_type; } +const IfcParse::entity& Ifc4x3_add2::IfcVirtualElement::Class() { return *IFC4X3_ADD2_IfcVirtualElement_type; } +Ifc4x3_add2::IfcVirtualElement::IfcVirtualElement(IfcEntityInstanceData* e) : IfcElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcVirtualElement_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcVirtualElement::IfcVirtualElement(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcVirtualElementTypeEnum::Value > v9_PredefinedType) : IfcElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVirtualElement_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcVirtualElementTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcVirtualGridIntersection +aggregate_of< ::Ifc4x3_add2::IfcGridAxis >::ptr Ifc4x3_add2::IfcVirtualGridIntersection::IntersectingAxes() const { aggregate_of_instance::ptr es = *data_->getArgument(0); return es->as< ::Ifc4x3_add2::IfcGridAxis >(); } +void Ifc4x3_add2::IfcVirtualGridIntersection::setIntersectingAxes(aggregate_of< ::Ifc4x3_add2::IfcGridAxis >::ptr v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v)->generalize());data_->setArgument(0,attr);} } +std::vector< double > /*[2:3]*/ Ifc4x3_add2::IfcVirtualGridIntersection::OffsetDistances() const { std::vector< double > /*[2:3]*/ v = *data_->getArgument(1); return v; } +void Ifc4x3_add2::IfcVirtualGridIntersection::setOffsetDistances(std::vector< double > /*[2:3]*/ v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcVirtualGridIntersection::declaration() const { return *IFC4X3_ADD2_IfcVirtualGridIntersection_type; } +const IfcParse::entity& Ifc4x3_add2::IfcVirtualGridIntersection::Class() { return *IFC4X3_ADD2_IfcVirtualGridIntersection_type; } +Ifc4x3_add2::IfcVirtualGridIntersection::IfcVirtualGridIntersection(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcVirtualGridIntersection_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcVirtualGridIntersection::IfcVirtualGridIntersection(aggregate_of< ::Ifc4x3_add2::IfcGridAxis >::ptr v1_IntersectingAxes, std::vector< double > /*[2:3]*/ v2_OffsetDistances) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVirtualGridIntersection_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_IntersectingAxes)->generalize());data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OffsetDistances));data_->setArgument(1,attr);} } + +// Function implementations for IfcVoidingFeature +boost::optional< ::Ifc4x3_add2::IfcVoidingFeatureTypeEnum::Value > Ifc4x3_add2::IfcVoidingFeature::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcVoidingFeatureTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcVoidingFeature::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcVoidingFeatureTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcVoidingFeatureTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcVoidingFeature::declaration() const { return *IFC4X3_ADD2_IfcVoidingFeature_type; } +const IfcParse::entity& Ifc4x3_add2::IfcVoidingFeature::Class() { return *IFC4X3_ADD2_IfcVoidingFeature_type; } +Ifc4x3_add2::IfcVoidingFeature::IfcVoidingFeature(IfcEntityInstanceData* e) : IfcFeatureElementSubtraction((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcVoidingFeature_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcVoidingFeature::IfcVoidingFeature(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcVoidingFeatureTypeEnum::Value > v9_PredefinedType) : IfcFeatureElementSubtraction((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcVoidingFeature_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcVoidingFeatureTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcWall +boost::optional< ::Ifc4x3_add2::IfcWallTypeEnum::Value > Ifc4x3_add2::IfcWall::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcWallTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcWall::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcWallTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcWallTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcWall::declaration() const { return *IFC4X3_ADD2_IfcWall_type; } +const IfcParse::entity& Ifc4x3_add2::IfcWall::Class() { return *IFC4X3_ADD2_IfcWall_type; } +Ifc4x3_add2::IfcWall::IfcWall(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcWall_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcWall::IfcWall(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcWallTypeEnum::Value > v9_PredefinedType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWall_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcWallTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcWallStandardCase + + +const IfcParse::entity& Ifc4x3_add2::IfcWallStandardCase::declaration() const { return *IFC4X3_ADD2_IfcWallStandardCase_type; } +const IfcParse::entity& Ifc4x3_add2::IfcWallStandardCase::Class() { return *IFC4X3_ADD2_IfcWallStandardCase_type; } +Ifc4x3_add2::IfcWallStandardCase::IfcWallStandardCase(IfcEntityInstanceData* e) : IfcWall((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcWallStandardCase_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcWallStandardCase::IfcWallStandardCase(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcWallTypeEnum::Value > v9_PredefinedType) : IfcWall((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWallStandardCase_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcWallTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcWallType +::Ifc4x3_add2::IfcWallTypeEnum::Value Ifc4x3_add2::IfcWallType::PredefinedType() const { return ::Ifc4x3_add2::IfcWallTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcWallType::setPredefinedType(::Ifc4x3_add2::IfcWallTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcWallTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcWallType::declaration() const { return *IFC4X3_ADD2_IfcWallType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcWallType::Class() { return *IFC4X3_ADD2_IfcWallType_type; } +Ifc4x3_add2::IfcWallType::IfcWallType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcWallType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcWallType::IfcWallType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcWallTypeEnum::Value v10_PredefinedType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWallType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcWallTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcWasteTerminal +boost::optional< ::Ifc4x3_add2::IfcWasteTerminalTypeEnum::Value > Ifc4x3_add2::IfcWasteTerminal::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcWasteTerminalTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcWasteTerminal::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcWasteTerminalTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcWasteTerminalTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcWasteTerminal::declaration() const { return *IFC4X3_ADD2_IfcWasteTerminal_type; } +const IfcParse::entity& Ifc4x3_add2::IfcWasteTerminal::Class() { return *IFC4X3_ADD2_IfcWasteTerminal_type; } +Ifc4x3_add2::IfcWasteTerminal::IfcWasteTerminal(IfcEntityInstanceData* e) : IfcFlowTerminal((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcWasteTerminal_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcWasteTerminal::IfcWasteTerminal(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcWasteTerminalTypeEnum::Value > v9_PredefinedType) : IfcFlowTerminal((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWasteTerminal_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcWasteTerminalTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcWasteTerminalType +::Ifc4x3_add2::IfcWasteTerminalTypeEnum::Value Ifc4x3_add2::IfcWasteTerminalType::PredefinedType() const { return ::Ifc4x3_add2::IfcWasteTerminalTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcWasteTerminalType::setPredefinedType(::Ifc4x3_add2::IfcWasteTerminalTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcWasteTerminalTypeEnum::ToString(v)));data_->setArgument(9,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcWasteTerminalType::declaration() const { return *IFC4X3_ADD2_IfcWasteTerminalType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcWasteTerminalType::Class() { return *IFC4X3_ADD2_IfcWasteTerminalType_type; } +Ifc4x3_add2::IfcWasteTerminalType::IfcWasteTerminalType(IfcEntityInstanceData* e) : IfcFlowTerminalType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcWasteTerminalType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcWasteTerminalType::IfcWasteTerminalType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcWasteTerminalTypeEnum::Value v10_PredefinedType) : IfcFlowTerminalType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWasteTerminalType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcWasteTerminalTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);} } + +// Function implementations for IfcWellKnownText +std::string Ifc4x3_add2::IfcWellKnownText::WellKnownText() const { std::string v = *data_->getArgument(0); return v; } +void Ifc4x3_add2::IfcWellKnownText::setWellKnownText(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(0,attr);} } +::Ifc4x3_add2::IfcCoordinateReferenceSystem* Ifc4x3_add2::IfcWellKnownText::CoordinateReferenceSystem() const { return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(1)))->as<::Ifc4x3_add2::IfcCoordinateReferenceSystem>(true); } +void Ifc4x3_add2::IfcWellKnownText::setCoordinateReferenceSystem(::Ifc4x3_add2::IfcCoordinateReferenceSystem* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(1,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcWellKnownText::declaration() const { return *IFC4X3_ADD2_IfcWellKnownText_type; } +const IfcParse::entity& Ifc4x3_add2::IfcWellKnownText::Class() { return *IFC4X3_ADD2_IfcWellKnownText_type; } +Ifc4x3_add2::IfcWellKnownText::IfcWellKnownText(IfcEntityInstanceData* e) : IfcUtil::IfcBaseEntity() { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcWellKnownText_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcWellKnownText::IfcWellKnownText(std::string v1_WellKnownText, ::Ifc4x3_add2::IfcCoordinateReferenceSystem* v2_CoordinateReferenceSystem) : IfcUtil::IfcBaseEntity() {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWellKnownText_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_WellKnownText));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_CoordinateReferenceSystem));data_->setArgument(1,attr);} } + +// Function implementations for IfcWindow +boost::optional< double > Ifc4x3_add2::IfcWindow::OverallHeight() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } double v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcWindow::setOverallHeight(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } +boost::optional< double > Ifc4x3_add2::IfcWindow::OverallWidth() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } double v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcWindow::setOverallWidth(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(9,attr);} } +boost::optional< ::Ifc4x3_add2::IfcWindowTypeEnum::Value > Ifc4x3_add2::IfcWindow::PredefinedType() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcWindowTypeEnum::FromString(*data_->getArgument(10)); } +void Ifc4x3_add2::IfcWindow::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcWindowTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcWindowTypeEnum::ToString(*v)));}data_->setArgument(10,attr);} } +boost::optional< ::Ifc4x3_add2::IfcWindowTypePartitioningEnum::Value > Ifc4x3_add2::IfcWindow::PartitioningType() const { if(!data_->getArgument(11) || data_->getArgument(11)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcWindowTypePartitioningEnum::FromString(*data_->getArgument(11)); } +void Ifc4x3_add2::IfcWindow::setPartitioningType(boost::optional< ::Ifc4x3_add2::IfcWindowTypePartitioningEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcWindowTypePartitioningEnum::ToString(*v)));}data_->setArgument(11,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcWindow::UserDefinedPartitioningType() const { if(!data_->getArgument(12) || data_->getArgument(12)->isNull()) { return boost::none; } std::string v = *data_->getArgument(12); return v; } +void Ifc4x3_add2::IfcWindow::setUserDefinedPartitioningType(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(12,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcWindow::declaration() const { return *IFC4X3_ADD2_IfcWindow_type; } +const IfcParse::entity& Ifc4x3_add2::IfcWindow::Class() { return *IFC4X3_ADD2_IfcWindow_type; } +Ifc4x3_add2::IfcWindow::IfcWindow(IfcEntityInstanceData* e) : IfcBuiltElement((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcWindow_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcWindow::IfcWindow(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< double > v9_OverallHeight, boost::optional< double > v10_OverallWidth, boost::optional< ::Ifc4x3_add2::IfcWindowTypeEnum::Value > v11_PredefinedType, boost::optional< ::Ifc4x3_add2::IfcWindowTypePartitioningEnum::Value > v12_PartitioningType, boost::optional< std::string > v13_UserDefinedPartitioningType) : IfcBuiltElement((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWindow_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_ObjectPlacement));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_Representation));data_->setArgument(6,attr);} if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_OverallHeight) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_OverallHeight));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_OverallWidth) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_OverallWidth));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v11_PredefinedType,::Ifc4x3_add2::IfcWindowTypeEnum::ToString(*v11_PredefinedType))));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } if (v12_PartitioningType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v12_PartitioningType,::Ifc4x3_add2::IfcWindowTypePartitioningEnum::ToString(*v12_PartitioningType))));data_->setArgument(11,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(11, attr); } if (v13_UserDefinedPartitioningType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v13_UserDefinedPartitioningType));data_->setArgument(12,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(12, attr); } } + +// Function implementations for IfcWindowLiningProperties +boost::optional< double > Ifc4x3_add2::IfcWindowLiningProperties::LiningDepth() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcWindowLiningProperties::setLiningDepth(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< double > Ifc4x3_add2::IfcWindowLiningProperties::LiningThickness() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } double v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcWindowLiningProperties::setLiningThickness(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } +boost::optional< double > Ifc4x3_add2::IfcWindowLiningProperties::TransomThickness() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcWindowLiningProperties::setTransomThickness(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } +boost::optional< double > Ifc4x3_add2::IfcWindowLiningProperties::MullionThickness() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } double v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcWindowLiningProperties::setMullionThickness(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +boost::optional< double > Ifc4x3_add2::IfcWindowLiningProperties::FirstTransomOffset() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } double v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcWindowLiningProperties::setFirstTransomOffset(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } +boost::optional< double > Ifc4x3_add2::IfcWindowLiningProperties::SecondTransomOffset() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } double v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcWindowLiningProperties::setSecondTransomOffset(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(9,attr);} } +boost::optional< double > Ifc4x3_add2::IfcWindowLiningProperties::FirstMullionOffset() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } double v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcWindowLiningProperties::setFirstMullionOffset(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } +boost::optional< double > Ifc4x3_add2::IfcWindowLiningProperties::SecondMullionOffset() const { if(!data_->getArgument(11) || data_->getArgument(11)->isNull()) { return boost::none; } double v = *data_->getArgument(11); return v; } +void Ifc4x3_add2::IfcWindowLiningProperties::setSecondMullionOffset(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(11,attr);} } +::Ifc4x3_add2::IfcShapeAspect* Ifc4x3_add2::IfcWindowLiningProperties::ShapeAspectStyle() const { if(!data_->getArgument(12) || data_->getArgument(12)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(12)))->as<::Ifc4x3_add2::IfcShapeAspect>(true); } +void Ifc4x3_add2::IfcWindowLiningProperties::setShapeAspectStyle(::Ifc4x3_add2::IfcShapeAspect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(12,attr);} } +boost::optional< double > Ifc4x3_add2::IfcWindowLiningProperties::LiningOffset() const { if(!data_->getArgument(13) || data_->getArgument(13)->isNull()) { return boost::none; } double v = *data_->getArgument(13); return v; } +void Ifc4x3_add2::IfcWindowLiningProperties::setLiningOffset(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(13,attr);} } +boost::optional< double > Ifc4x3_add2::IfcWindowLiningProperties::LiningToPanelOffsetX() const { if(!data_->getArgument(14) || data_->getArgument(14)->isNull()) { return boost::none; } double v = *data_->getArgument(14); return v; } +void Ifc4x3_add2::IfcWindowLiningProperties::setLiningToPanelOffsetX(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(14,attr);} } +boost::optional< double > Ifc4x3_add2::IfcWindowLiningProperties::LiningToPanelOffsetY() const { if(!data_->getArgument(15) || data_->getArgument(15)->isNull()) { return boost::none; } double v = *data_->getArgument(15); return v; } +void Ifc4x3_add2::IfcWindowLiningProperties::setLiningToPanelOffsetY(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(15,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcWindowLiningProperties::declaration() const { return *IFC4X3_ADD2_IfcWindowLiningProperties_type; } +const IfcParse::entity& Ifc4x3_add2::IfcWindowLiningProperties::Class() { return *IFC4X3_ADD2_IfcWindowLiningProperties_type; } +Ifc4x3_add2::IfcWindowLiningProperties::IfcWindowLiningProperties(IfcEntityInstanceData* e) : IfcPreDefinedPropertySet((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcWindowLiningProperties_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcWindowLiningProperties::IfcWindowLiningProperties(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< double > v5_LiningDepth, boost::optional< double > v6_LiningThickness, boost::optional< double > v7_TransomThickness, boost::optional< double > v8_MullionThickness, boost::optional< double > v9_FirstTransomOffset, boost::optional< double > v10_SecondTransomOffset, boost::optional< double > v11_FirstMullionOffset, boost::optional< double > v12_SecondMullionOffset, ::Ifc4x3_add2::IfcShapeAspect* v13_ShapeAspectStyle, boost::optional< double > v14_LiningOffset, boost::optional< double > v15_LiningToPanelOffsetX, boost::optional< double > v16_LiningToPanelOffsetY) : IfcPreDefinedPropertySet((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWindowLiningProperties_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_LiningDepth) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_LiningDepth));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_LiningThickness) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_LiningThickness));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_TransomThickness) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_TransomThickness));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_MullionThickness) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_MullionThickness));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_FirstTransomOffset) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_FirstTransomOffset));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_SecondTransomOffset) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_SecondTransomOffset));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_FirstMullionOffset) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_FirstMullionOffset));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); } if (v12_SecondMullionOffset) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v12_SecondMullionOffset));data_->setArgument(11,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(11, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v13_ShapeAspectStyle));data_->setArgument(12,attr);} if (v14_LiningOffset) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v14_LiningOffset));data_->setArgument(13,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(13, attr); } if (v15_LiningToPanelOffsetX) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v15_LiningToPanelOffsetX));data_->setArgument(14,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(14, attr); } if (v16_LiningToPanelOffsetY) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v16_LiningToPanelOffsetY));data_->setArgument(15,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(15, attr); } } + +// Function implementations for IfcWindowPanelProperties +::Ifc4x3_add2::IfcWindowPanelOperationEnum::Value Ifc4x3_add2::IfcWindowPanelProperties::OperationType() const { return ::Ifc4x3_add2::IfcWindowPanelOperationEnum::FromString(*data_->getArgument(4)); } +void Ifc4x3_add2::IfcWindowPanelProperties::setOperationType(::Ifc4x3_add2::IfcWindowPanelOperationEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcWindowPanelOperationEnum::ToString(v)));data_->setArgument(4,attr);} } +::Ifc4x3_add2::IfcWindowPanelPositionEnum::Value Ifc4x3_add2::IfcWindowPanelProperties::PanelPosition() const { return ::Ifc4x3_add2::IfcWindowPanelPositionEnum::FromString(*data_->getArgument(5)); } +void Ifc4x3_add2::IfcWindowPanelProperties::setPanelPosition(::Ifc4x3_add2::IfcWindowPanelPositionEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcWindowPanelPositionEnum::ToString(v)));data_->setArgument(5,attr);} } +boost::optional< double > Ifc4x3_add2::IfcWindowPanelProperties::FrameDepth() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcWindowPanelProperties::setFrameDepth(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(6,attr);} } +boost::optional< double > Ifc4x3_add2::IfcWindowPanelProperties::FrameThickness() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } double v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcWindowPanelProperties::setFrameThickness(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +::Ifc4x3_add2::IfcShapeAspect* Ifc4x3_add2::IfcWindowPanelProperties::ShapeAspectStyle() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(8)))->as<::Ifc4x3_add2::IfcShapeAspect>(true); } +void Ifc4x3_add2::IfcWindowPanelProperties::setShapeAspectStyle(::Ifc4x3_add2::IfcShapeAspect* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcWindowPanelProperties::declaration() const { return *IFC4X3_ADD2_IfcWindowPanelProperties_type; } +const IfcParse::entity& Ifc4x3_add2::IfcWindowPanelProperties::Class() { return *IFC4X3_ADD2_IfcWindowPanelProperties_type; } +Ifc4x3_add2::IfcWindowPanelProperties::IfcWindowPanelProperties(IfcEntityInstanceData* e) : IfcPreDefinedPropertySet((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcWindowPanelProperties_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcWindowPanelProperties::IfcWindowPanelProperties(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcWindowPanelOperationEnum::Value v5_OperationType, ::Ifc4x3_add2::IfcWindowPanelPositionEnum::Value v6_PanelPosition, boost::optional< double > v7_FrameDepth, boost::optional< double > v8_FrameThickness, ::Ifc4x3_add2::IfcShapeAspect* v9_ShapeAspectStyle) : IfcPreDefinedPropertySet((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWindowPanelProperties_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v5_OperationType,::Ifc4x3_add2::IfcWindowPanelOperationEnum::ToString(v5_OperationType))));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v6_PanelPosition,::Ifc4x3_add2::IfcWindowPanelPositionEnum::ToString(v6_PanelPosition))));data_->setArgument(5,attr);} if (v7_FrameDepth) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_FrameDepth));data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_FrameThickness) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_FrameThickness));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v9_ShapeAspectStyle));data_->setArgument(8,attr);} } + +// Function implementations for IfcWindowType +::Ifc4x3_add2::IfcWindowTypeEnum::Value Ifc4x3_add2::IfcWindowType::PredefinedType() const { return ::Ifc4x3_add2::IfcWindowTypeEnum::FromString(*data_->getArgument(9)); } +void Ifc4x3_add2::IfcWindowType::setPredefinedType(::Ifc4x3_add2::IfcWindowTypeEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcWindowTypeEnum::ToString(v)));data_->setArgument(9,attr);} } +::Ifc4x3_add2::IfcWindowTypePartitioningEnum::Value Ifc4x3_add2::IfcWindowType::PartitioningType() const { return ::Ifc4x3_add2::IfcWindowTypePartitioningEnum::FromString(*data_->getArgument(10)); } +void Ifc4x3_add2::IfcWindowType::setPartitioningType(::Ifc4x3_add2::IfcWindowTypePartitioningEnum::Value v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(v,::Ifc4x3_add2::IfcWindowTypePartitioningEnum::ToString(v)));data_->setArgument(10,attr);} } +boost::optional< bool > Ifc4x3_add2::IfcWindowType::ParameterTakesPrecedence() const { if(!data_->getArgument(11) || data_->getArgument(11)->isNull()) { return boost::none; } bool v = *data_->getArgument(11); return v; } +void Ifc4x3_add2::IfcWindowType::setParameterTakesPrecedence(boost::optional< bool > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(11,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcWindowType::UserDefinedPartitioningType() const { if(!data_->getArgument(12) || data_->getArgument(12)->isNull()) { return boost::none; } std::string v = *data_->getArgument(12); return v; } +void Ifc4x3_add2::IfcWindowType::setUserDefinedPartitioningType(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(12,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcWindowType::declaration() const { return *IFC4X3_ADD2_IfcWindowType_type; } +const IfcParse::entity& Ifc4x3_add2::IfcWindowType::Class() { return *IFC4X3_ADD2_IfcWindowType_type; } +Ifc4x3_add2::IfcWindowType::IfcWindowType(IfcEntityInstanceData* e) : IfcBuiltElementType((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcWindowType_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcWindowType::IfcWindowType(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcWindowTypeEnum::Value v10_PredefinedType, ::Ifc4x3_add2::IfcWindowTypePartitioningEnum::Value v11_PartitioningType, boost::optional< bool > v12_ParameterTakesPrecedence, boost::optional< std::string > v13_UserDefinedPartitioningType) : IfcBuiltElementType((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWindowType_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ApplicableOccurrence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ApplicableOccurrence));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_HasPropertySets) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_HasPropertySets)->generalize());data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_RepresentationMaps) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_RepresentationMaps)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_Tag) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Tag));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_ElementType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_ElementType));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v10_PredefinedType,::Ifc4x3_add2::IfcWindowTypeEnum::ToString(v10_PredefinedType))));data_->setArgument(9,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v11_PartitioningType,::Ifc4x3_add2::IfcWindowTypePartitioningEnum::ToString(v11_PartitioningType))));data_->setArgument(10,attr);} if (v12_ParameterTakesPrecedence) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v12_ParameterTakesPrecedence));data_->setArgument(11,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(11, attr); } if (v13_UserDefinedPartitioningType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v13_UserDefinedPartitioningType));data_->setArgument(12,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(12, attr); } } + +// Function implementations for IfcWorkCalendar +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcWorkTime >::ptr > Ifc4x3_add2::IfcWorkCalendar::WorkingTimes() const { if(!data_->getArgument(6) || data_->getArgument(6)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(6); return es->as< ::Ifc4x3_add2::IfcWorkTime >(); } +void Ifc4x3_add2::IfcWorkCalendar::setWorkingTimes(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcWorkTime >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(6,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcWorkTime >::ptr > Ifc4x3_add2::IfcWorkCalendar::ExceptionTimes() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(7); return es->as< ::Ifc4x3_add2::IfcWorkTime >(); } +void Ifc4x3_add2::IfcWorkCalendar::setExceptionTimes(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcWorkTime >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(7,attr);} } +boost::optional< ::Ifc4x3_add2::IfcWorkCalendarTypeEnum::Value > Ifc4x3_add2::IfcWorkCalendar::PredefinedType() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcWorkCalendarTypeEnum::FromString(*data_->getArgument(8)); } +void Ifc4x3_add2::IfcWorkCalendar::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcWorkCalendarTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcWorkCalendarTypeEnum::ToString(*v)));}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcWorkCalendar::declaration() const { return *IFC4X3_ADD2_IfcWorkCalendar_type; } +const IfcParse::entity& Ifc4x3_add2::IfcWorkCalendar::Class() { return *IFC4X3_ADD2_IfcWorkCalendar_type; } +Ifc4x3_add2::IfcWorkCalendar::IfcWorkCalendar(IfcEntityInstanceData* e) : IfcControl((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcWorkCalendar_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcWorkCalendar::IfcWorkCalendar(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcWorkTime >::ptr > v7_WorkingTimes, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcWorkTime >::ptr > v8_ExceptionTimes, boost::optional< ::Ifc4x3_add2::IfcWorkCalendarTypeEnum::Value > v9_PredefinedType) : IfcControl((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWorkCalendar_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Identification));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } if (v7_WorkingTimes) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v7_WorkingTimes)->generalize());data_->setArgument(6,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(6, attr); } if (v8_ExceptionTimes) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_ExceptionTimes)->generalize());data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v9_PredefinedType,::Ifc4x3_add2::IfcWorkCalendarTypeEnum::ToString(*v9_PredefinedType))));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcWorkControl +std::string Ifc4x3_add2::IfcWorkControl::CreationDate() const { std::string v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcWorkControl::setCreationDate(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPerson >::ptr > Ifc4x3_add2::IfcWorkControl::Creators() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } aggregate_of_instance::ptr es = *data_->getArgument(7); return es->as< ::Ifc4x3_add2::IfcPerson >(); } +void Ifc4x3_add2::IfcWorkControl::setCreators(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPerson >::ptr > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set((*v)->generalize());}data_->setArgument(7,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcWorkControl::Purpose() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } std::string v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcWorkControl::setPurpose(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcWorkControl::Duration() const { if(!data_->getArgument(9) || data_->getArgument(9)->isNull()) { return boost::none; } std::string v = *data_->getArgument(9); return v; } +void Ifc4x3_add2::IfcWorkControl::setDuration(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(9,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcWorkControl::TotalFloat() const { if(!data_->getArgument(10) || data_->getArgument(10)->isNull()) { return boost::none; } std::string v = *data_->getArgument(10); return v; } +void Ifc4x3_add2::IfcWorkControl::setTotalFloat(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(10,attr);} } +std::string Ifc4x3_add2::IfcWorkControl::StartTime() const { std::string v = *data_->getArgument(11); return v; } +void Ifc4x3_add2::IfcWorkControl::setStartTime(std::string v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(11,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcWorkControl::FinishTime() const { if(!data_->getArgument(12) || data_->getArgument(12)->isNull()) { return boost::none; } std::string v = *data_->getArgument(12); return v; } +void Ifc4x3_add2::IfcWorkControl::setFinishTime(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(12,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcWorkControl::declaration() const { return *IFC4X3_ADD2_IfcWorkControl_type; } +const IfcParse::entity& Ifc4x3_add2::IfcWorkControl::Class() { return *IFC4X3_ADD2_IfcWorkControl_type; } +Ifc4x3_add2::IfcWorkControl::IfcWorkControl(IfcEntityInstanceData* e) : IfcControl((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcWorkControl_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcWorkControl::IfcWorkControl(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, std::string v7_CreationDate, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPerson >::ptr > v8_Creators, boost::optional< std::string > v9_Purpose, boost::optional< std::string > v10_Duration, boost::optional< std::string > v11_TotalFloat, std::string v12_StartTime, boost::optional< std::string > v13_FinishTime) : IfcControl((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWorkControl_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Identification));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_CreationDate));data_->setArgument(6,attr);} if (v8_Creators) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Creators)->generalize());data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_Purpose) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_Purpose));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_Duration) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_Duration));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_TotalFloat) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_TotalFloat));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v12_StartTime));data_->setArgument(11,attr);} if (v13_FinishTime) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v13_FinishTime));data_->setArgument(12,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(12, attr); } } + +// Function implementations for IfcWorkPlan +boost::optional< ::Ifc4x3_add2::IfcWorkPlanTypeEnum::Value > Ifc4x3_add2::IfcWorkPlan::PredefinedType() const { if(!data_->getArgument(13) || data_->getArgument(13)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcWorkPlanTypeEnum::FromString(*data_->getArgument(13)); } +void Ifc4x3_add2::IfcWorkPlan::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcWorkPlanTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcWorkPlanTypeEnum::ToString(*v)));}data_->setArgument(13,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcWorkPlan::declaration() const { return *IFC4X3_ADD2_IfcWorkPlan_type; } +const IfcParse::entity& Ifc4x3_add2::IfcWorkPlan::Class() { return *IFC4X3_ADD2_IfcWorkPlan_type; } +Ifc4x3_add2::IfcWorkPlan::IfcWorkPlan(IfcEntityInstanceData* e) : IfcWorkControl((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcWorkPlan_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcWorkPlan::IfcWorkPlan(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, std::string v7_CreationDate, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPerson >::ptr > v8_Creators, boost::optional< std::string > v9_Purpose, boost::optional< std::string > v10_Duration, boost::optional< std::string > v11_TotalFloat, std::string v12_StartTime, boost::optional< std::string > v13_FinishTime, boost::optional< ::Ifc4x3_add2::IfcWorkPlanTypeEnum::Value > v14_PredefinedType) : IfcWorkControl((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWorkPlan_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Identification));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_CreationDate));data_->setArgument(6,attr);} if (v8_Creators) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Creators)->generalize());data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_Purpose) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_Purpose));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_Duration) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_Duration));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_TotalFloat) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_TotalFloat));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v12_StartTime));data_->setArgument(11,attr);} if (v13_FinishTime) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v13_FinishTime));data_->setArgument(12,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(12, attr); } if (v14_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v14_PredefinedType,::Ifc4x3_add2::IfcWorkPlanTypeEnum::ToString(*v14_PredefinedType))));data_->setArgument(13,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(13, attr); } } + +// Function implementations for IfcWorkSchedule +boost::optional< ::Ifc4x3_add2::IfcWorkScheduleTypeEnum::Value > Ifc4x3_add2::IfcWorkSchedule::PredefinedType() const { if(!data_->getArgument(13) || data_->getArgument(13)->isNull()) { return boost::none; } return ::Ifc4x3_add2::IfcWorkScheduleTypeEnum::FromString(*data_->getArgument(13)); } +void Ifc4x3_add2::IfcWorkSchedule::setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcWorkScheduleTypeEnum::Value > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(IfcWrite::IfcWriteArgument::EnumerationReference(*v,::Ifc4x3_add2::IfcWorkScheduleTypeEnum::ToString(*v)));}data_->setArgument(13,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcWorkSchedule::declaration() const { return *IFC4X3_ADD2_IfcWorkSchedule_type; } +const IfcParse::entity& Ifc4x3_add2::IfcWorkSchedule::Class() { return *IFC4X3_ADD2_IfcWorkSchedule_type; } +Ifc4x3_add2::IfcWorkSchedule::IfcWorkSchedule(IfcEntityInstanceData* e) : IfcWorkControl((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcWorkSchedule_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcWorkSchedule::IfcWorkSchedule(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, std::string v7_CreationDate, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPerson >::ptr > v8_Creators, boost::optional< std::string > v9_Purpose, boost::optional< std::string > v10_Duration, boost::optional< std::string > v11_TotalFloat, std::string v12_StartTime, boost::optional< std::string > v13_FinishTime, boost::optional< ::Ifc4x3_add2::IfcWorkScheduleTypeEnum::Value > v14_PredefinedType) : IfcWorkControl((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWorkSchedule_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_Identification) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_Identification));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_CreationDate));data_->setArgument(6,attr);} if (v8_Creators) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_Creators)->generalize());data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_Purpose) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_Purpose));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } if (v10_Duration) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v10_Duration));data_->setArgument(9,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(9, attr); } if (v11_TotalFloat) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v11_TotalFloat));data_->setArgument(10,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(10, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v12_StartTime));data_->setArgument(11,attr);} if (v13_FinishTime) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v13_FinishTime));data_->setArgument(12,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(12, attr); } if (v14_PredefinedType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v14_PredefinedType,::Ifc4x3_add2::IfcWorkScheduleTypeEnum::ToString(*v14_PredefinedType))));data_->setArgument(13,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(13, attr); } } + +// Function implementations for IfcWorkTime +::Ifc4x3_add2::IfcRecurrencePattern* Ifc4x3_add2::IfcWorkTime::RecurrencePattern() const { if(!data_->getArgument(3) || data_->getArgument(3)->isNull()) { return nullptr; } return ((IfcUtil::IfcBaseClass*)(*data_->getArgument(3)))->as<::Ifc4x3_add2::IfcRecurrencePattern>(true); } +void Ifc4x3_add2::IfcWorkTime::setRecurrencePattern(::Ifc4x3_add2::IfcRecurrencePattern* v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcWorkTime::StartDate() const { if(!data_->getArgument(4) || data_->getArgument(4)->isNull()) { return boost::none; } std::string v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcWorkTime::setStartDate(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(4,attr);} } +boost::optional< std::string > Ifc4x3_add2::IfcWorkTime::FinishDate() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcWorkTime::setFinishDate(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcWorkTime::declaration() const { return *IFC4X3_ADD2_IfcWorkTime_type; } +const IfcParse::entity& Ifc4x3_add2::IfcWorkTime::Class() { return *IFC4X3_ADD2_IfcWorkTime_type; } +Ifc4x3_add2::IfcWorkTime::IfcWorkTime(IfcEntityInstanceData* e) : IfcSchedulingTime((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcWorkTime_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcWorkTime::IfcWorkTime(boost::optional< std::string > v1_Name, boost::optional< ::Ifc4x3_add2::IfcDataOriginEnum::Value > v2_DataOrigin, boost::optional< std::string > v3_UserDefinedDataOrigin, ::Ifc4x3_add2::IfcRecurrencePattern* v4_RecurrencePattern, boost::optional< std::string > v5_StartDate, boost::optional< std::string > v6_FinishDate) : IfcSchedulingTime((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcWorkTime_type); if (v1_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v1_Name));data_->setArgument(0,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(0, attr); } if (v2_DataOrigin) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(*v2_DataOrigin,::Ifc4x3_add2::IfcDataOriginEnum::ToString(*v2_DataOrigin))));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); } if (v3_UserDefinedDataOrigin) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_UserDefinedDataOrigin));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_RecurrencePattern));data_->setArgument(3,attr);} if (v5_StartDate) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_StartDate));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_FinishDate) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_FinishDate));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } } + +// Function implementations for IfcZShapeProfileDef +double Ifc4x3_add2::IfcZShapeProfileDef::Depth() const { double v = *data_->getArgument(3); return v; } +void Ifc4x3_add2::IfcZShapeProfileDef::setDepth(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(3,attr);} } +double Ifc4x3_add2::IfcZShapeProfileDef::FlangeWidth() const { double v = *data_->getArgument(4); return v; } +void Ifc4x3_add2::IfcZShapeProfileDef::setFlangeWidth(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(4,attr);} } +double Ifc4x3_add2::IfcZShapeProfileDef::WebThickness() const { double v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcZShapeProfileDef::setWebThickness(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(5,attr);} } +double Ifc4x3_add2::IfcZShapeProfileDef::FlangeThickness() const { double v = *data_->getArgument(6); return v; } +void Ifc4x3_add2::IfcZShapeProfileDef::setFlangeThickness(double v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set(v);data_->setArgument(6,attr);} } +boost::optional< double > Ifc4x3_add2::IfcZShapeProfileDef::FilletRadius() const { if(!data_->getArgument(7) || data_->getArgument(7)->isNull()) { return boost::none; } double v = *data_->getArgument(7); return v; } +void Ifc4x3_add2::IfcZShapeProfileDef::setFilletRadius(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(7,attr);} } +boost::optional< double > Ifc4x3_add2::IfcZShapeProfileDef::EdgeRadius() const { if(!data_->getArgument(8) || data_->getArgument(8)->isNull()) { return boost::none; } double v = *data_->getArgument(8); return v; } +void Ifc4x3_add2::IfcZShapeProfileDef::setEdgeRadius(boost::optional< double > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(8,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcZShapeProfileDef::declaration() const { return *IFC4X3_ADD2_IfcZShapeProfileDef_type; } +const IfcParse::entity& Ifc4x3_add2::IfcZShapeProfileDef::Class() { return *IFC4X3_ADD2_IfcZShapeProfileDef_type; } +Ifc4x3_add2::IfcZShapeProfileDef::IfcZShapeProfileDef(IfcEntityInstanceData* e) : IfcParameterizedProfileDef((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcZShapeProfileDef_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcZShapeProfileDef::IfcZShapeProfileDef(::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_Depth, double v5_FlangeWidth, double v6_WebThickness, double v7_FlangeThickness, boost::optional< double > v8_FilletRadius, boost::optional< double > v9_EdgeRadius) : IfcParameterizedProfileDef((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcZShapeProfileDef_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((IfcWrite::IfcWriteArgument::EnumerationReference(v1_ProfileType,::Ifc4x3_add2::IfcProfileTypeEnum::ToString(v1_ProfileType))));data_->setArgument(0,attr);} if (v2_ProfileName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v2_ProfileName));data_->setArgument(1,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(1, attr); }{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v3_Position));data_->setArgument(2,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v4_Depth));data_->setArgument(3,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v5_FlangeWidth));data_->setArgument(4,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v6_WebThickness));data_->setArgument(5,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v7_FlangeThickness));data_->setArgument(6,attr);} if (v8_FilletRadius) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v8_FilletRadius));data_->setArgument(7,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(7, attr); } if (v9_EdgeRadius) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v9_EdgeRadius));data_->setArgument(8,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(8, attr); } } + +// Function implementations for IfcZone +boost::optional< std::string > Ifc4x3_add2::IfcZone::LongName() const { if(!data_->getArgument(5) || data_->getArgument(5)->isNull()) { return boost::none; } std::string v = *data_->getArgument(5); return v; } +void Ifc4x3_add2::IfcZone::setLongName(boost::optional< std::string > v) { {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();if (v) {attr->set(*v);}data_->setArgument(5,attr);} } + + +const IfcParse::entity& Ifc4x3_add2::IfcZone::declaration() const { return *IFC4X3_ADD2_IfcZone_type; } +const IfcParse::entity& Ifc4x3_add2::IfcZone::Class() { return *IFC4X3_ADD2_IfcZone_type; } +Ifc4x3_add2::IfcZone::IfcZone(IfcEntityInstanceData* e) : IfcSystem((IfcEntityInstanceData*)0) { if (!e) return; if (e->type() != IFC4X3_ADD2_IfcZone_type) throw IfcException("Unable to find keyword in schema"); data_ = e; } +Ifc4x3_add2::IfcZone::IfcZone(std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_LongName) : IfcSystem((IfcEntityInstanceData*)0) {data_ = new IfcEntityInstanceData(IFC4X3_ADD2_IfcZone_type); {IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v1_GlobalId));data_->setArgument(0,attr);}{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((v2_OwnerHistory));data_->setArgument(1,attr);} if (v3_Name) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v3_Name));data_->setArgument(2,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(2, attr); } if (v4_Description) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v4_Description));data_->setArgument(3,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(3, attr); } if (v5_ObjectType) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v5_ObjectType));data_->setArgument(4,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(4, attr); } if (v6_LongName) {{IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument();attr->set((*v6_LongName));data_->setArgument(5,attr);} } else { IfcWrite::IfcWriteArgument* attr = new IfcWrite::IfcWriteArgument(); attr->set(boost::blank()); data_->setArgument(5, attr); } } + diff --git a/src/ifcparse/Ifc4x3_add2.h b/src/ifcparse/Ifc4x3_add2.h new file mode 100644 index 0000000000..0035c71ab8 --- /dev/null +++ b/src/ifcparse/Ifc4x3_add2.h @@ -0,0 +1,49990 @@ +/******************************************************************************** + * * + * 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. * + * * + ********************************************************************************/ + +#ifndef IFC4X3_ADD2_H +#define IFC4X3_ADD2_H + +#include +#include + +#include + +#include "../ifcparse/ifc_parse_api.h" + +#include "../ifcparse/aggregate_of_instance.h" +#include "../ifcparse/IfcBaseClass.h" +#include "../ifcparse/IfcSchema.h" +#include "../ifcparse/IfcException.h" +#include "../ifcparse/Argument.h" + +struct Ifc4x3_add2 { + +IFC_PARSE_API static const IfcParse::schema_definition& get_schema(); + +IFC_PARSE_API static void clear_schema(); + +static const char* const Identifier; + +// Forward definitions +class IfcActionRequest; class IfcActor; class IfcActorRole; class IfcActuator; class IfcActuatorType; class IfcAddress; class IfcAdvancedBrep; class IfcAdvancedBrepWithVoids; class IfcAdvancedFace; class IfcAirTerminal; class IfcAirTerminalBox; class IfcAirTerminalBoxType; class IfcAirTerminalType; class IfcAirToAirHeatRecovery; class IfcAirToAirHeatRecoveryType; class IfcAlarm; class IfcAlarmType; class IfcAlignment; class IfcAlignmentCant; class IfcAlignmentCantSegment; class IfcAlignmentHorizontal; class IfcAlignmentHorizontalSegment; class IfcAlignmentParameterSegment; class IfcAlignmentSegment; class IfcAlignmentVertical; class IfcAlignmentVerticalSegment; class IfcAnnotation; class IfcAnnotationFillArea; class IfcApplication; class IfcAppliedValue; class IfcApproval; class IfcApprovalRelationship; class IfcArbitraryClosedProfileDef; class IfcArbitraryOpenProfileDef; class IfcArbitraryProfileDefWithVoids; class IfcAsset; class IfcAsymmetricIShapeProfileDef; class IfcAudioVisualAppliance; class IfcAudioVisualApplianceType; class IfcAxis1Placement; class IfcAxis2Placement2D; class IfcAxis2Placement3D; class IfcAxis2PlacementLinear; class IfcBSplineCurve; class IfcBSplineCurveWithKnots; class IfcBSplineSurface; class IfcBSplineSurfaceWithKnots; class IfcBeam; class IfcBeamType; class IfcBearing; class IfcBearingType; class IfcBlobTexture; class IfcBlock; class IfcBoiler; class IfcBoilerType; class IfcBooleanClippingResult; class IfcBooleanResult; class IfcBorehole; class IfcBoundaryCondition; class IfcBoundaryCurve; class IfcBoundaryEdgeCondition; class IfcBoundaryFaceCondition; class IfcBoundaryNodeCondition; class IfcBoundaryNodeConditionWarping; class IfcBoundedCurve; class IfcBoundedSurface; class IfcBoundingBox; class IfcBoxedHalfSpace; class IfcBridge; class IfcBridgePart; class IfcBuilding; class IfcBuildingElementPart; class IfcBuildingElementPartType; class IfcBuildingElementProxy; class IfcBuildingElementProxyType; class IfcBuildingStorey; class IfcBuildingSystem; class IfcBuiltElement; class IfcBuiltElementType; class IfcBuiltSystem; class IfcBurner; class IfcBurnerType; class IfcCShapeProfileDef; class IfcCableCarrierFitting; class IfcCableCarrierFittingType; class IfcCableCarrierSegment; class IfcCableCarrierSegmentType; class IfcCableFitting; class IfcCableFittingType; class IfcCableSegment; class IfcCableSegmentType; class IfcCaissonFoundation; class IfcCaissonFoundationType; class IfcCartesianPoint; class IfcCartesianPointList; class IfcCartesianPointList2D; class IfcCartesianPointList3D; class IfcCartesianTransformationOperator; class IfcCartesianTransformationOperator2D; class IfcCartesianTransformationOperator2DnonUniform; class IfcCartesianTransformationOperator3D; class IfcCartesianTransformationOperator3DnonUniform; class IfcCenterLineProfileDef; class IfcChiller; class IfcChillerType; class IfcChimney; class IfcChimneyType; class IfcCircle; class IfcCircleHollowProfileDef; class IfcCircleProfileDef; class IfcCivilElement; class IfcCivilElementType; class IfcClassification; class IfcClassificationReference; class IfcClosedShell; class IfcClothoid; class IfcCoil; class IfcCoilType; class IfcColourRgb; class IfcColourRgbList; class IfcColourSpecification; class IfcColumn; class IfcColumnType; class IfcCommunicationsAppliance; class IfcCommunicationsApplianceType; class IfcComplexProperty; class IfcComplexPropertyTemplate; class IfcCompositeCurve; class IfcCompositeCurveOnSurface; class IfcCompositeCurveSegment; class IfcCompositeProfileDef; class IfcCompressor; class IfcCompressorType; class IfcCondenser; class IfcCondenserType; class IfcConic; class IfcConnectedFaceSet; class IfcConnectionCurveGeometry; class IfcConnectionGeometry; class IfcConnectionPointEccentricity; class IfcConnectionPointGeometry; class IfcConnectionSurfaceGeometry; class IfcConnectionVolumeGeometry; class IfcConstraint; class IfcConstructionEquipmentResource; class IfcConstructionEquipmentResourceType; class IfcConstructionMaterialResource; class IfcConstructionMaterialResourceType; class IfcConstructionProductResource; class IfcConstructionProductResourceType; class IfcConstructionResource; class IfcConstructionResourceType; class IfcContext; class IfcContextDependentUnit; class IfcControl; class IfcController; class IfcControllerType; class IfcConversionBasedUnit; class IfcConversionBasedUnitWithOffset; class IfcConveyorSegment; class IfcConveyorSegmentType; class IfcCooledBeam; class IfcCooledBeamType; class IfcCoolingTower; class IfcCoolingTowerType; class IfcCoordinateOperation; class IfcCoordinateReferenceSystem; class IfcCosineSpiral; class IfcCostItem; class IfcCostSchedule; class IfcCostValue; class IfcCourse; class IfcCourseType; class IfcCovering; class IfcCoveringType; class IfcCrewResource; class IfcCrewResourceType; class IfcCsgPrimitive3D; class IfcCsgSolid; class IfcCurrencyRelationship; class IfcCurtainWall; class IfcCurtainWallType; class IfcCurve; class IfcCurveBoundedPlane; class IfcCurveBoundedSurface; class IfcCurveSegment; class IfcCurveStyle; class IfcCurveStyleFont; class IfcCurveStyleFontAndScaling; class IfcCurveStyleFontPattern; class IfcCylindricalSurface; class IfcDamper; class IfcDamperType; class IfcDeepFoundation; class IfcDeepFoundationType; class IfcDerivedProfileDef; class IfcDerivedUnit; class IfcDerivedUnitElement; class IfcDimensionalExponents; class IfcDirection; class IfcDirectrixCurveSweptAreaSolid; class IfcDirectrixDerivedReferenceSweptAreaSolid; class IfcDiscreteAccessory; class IfcDiscreteAccessoryType; class IfcDistributionBoard; class IfcDistributionBoardType; class IfcDistributionChamberElement; class IfcDistributionChamberElementType; class IfcDistributionCircuit; class IfcDistributionControlElement; class IfcDistributionControlElementType; class IfcDistributionElement; class IfcDistributionElementType; class IfcDistributionFlowElement; class IfcDistributionFlowElementType; class IfcDistributionPort; class IfcDistributionSystem; class IfcDocumentInformation; class IfcDocumentInformationRelationship; class IfcDocumentReference; class IfcDoor; class IfcDoorLiningProperties; class IfcDoorPanelProperties; class IfcDoorType; class IfcDraughtingPreDefinedColour; class IfcDraughtingPreDefinedCurveFont; class IfcDuctFitting; class IfcDuctFittingType; class IfcDuctSegment; class IfcDuctSegmentType; class IfcDuctSilencer; class IfcDuctSilencerType; class IfcEarthworksCut; class IfcEarthworksElement; class IfcEarthworksFill; class IfcEdge; class IfcEdgeCurve; class IfcEdgeLoop; class IfcElectricAppliance; class IfcElectricApplianceType; class IfcElectricDistributionBoard; class IfcElectricDistributionBoardType; class IfcElectricFlowStorageDevice; class IfcElectricFlowStorageDeviceType; class IfcElectricFlowTreatmentDevice; class IfcElectricFlowTreatmentDeviceType; class IfcElectricGenerator; class IfcElectricGeneratorType; class IfcElectricMotor; class IfcElectricMotorType; class IfcElectricTimeControl; class IfcElectricTimeControlType; class IfcElement; class IfcElementAssembly; class IfcElementAssemblyType; class IfcElementComponent; class IfcElementComponentType; class IfcElementQuantity; class IfcElementType; class IfcElementarySurface; class IfcEllipse; class IfcEllipseProfileDef; class IfcEnergyConversionDevice; class IfcEnergyConversionDeviceType; class IfcEngine; class IfcEngineType; class IfcEvaporativeCooler; class IfcEvaporativeCoolerType; class IfcEvaporator; class IfcEvaporatorType; class IfcEvent; class IfcEventTime; class IfcEventType; class IfcExtendedProperties; class IfcExternalInformation; class IfcExternalReference; class IfcExternalReferenceRelationship; class IfcExternalSpatialElement; class IfcExternalSpatialStructureElement; class IfcExternallyDefinedHatchStyle; class IfcExternallyDefinedSurfaceStyle; class IfcExternallyDefinedTextFont; class IfcExtrudedAreaSolid; class IfcExtrudedAreaSolidTapered; class IfcFace; class IfcFaceBasedSurfaceModel; class IfcFaceBound; class IfcFaceOuterBound; class IfcFaceSurface; class IfcFacetedBrep; class IfcFacetedBrepWithVoids; class IfcFacility; class IfcFacilityPart; class IfcFacilityPartCommon; class IfcFailureConnectionCondition; class IfcFan; class IfcFanType; class IfcFastener; class IfcFastenerType; class IfcFeatureElement; class IfcFeatureElementAddition; class IfcFeatureElementSubtraction; class IfcFillAreaStyle; class IfcFillAreaStyleHatching; class IfcFillAreaStyleTiles; class IfcFilter; class IfcFilterType; class IfcFireSuppressionTerminal; class IfcFireSuppressionTerminalType; class IfcFixedReferenceSweptAreaSolid; class IfcFlowController; class IfcFlowControllerType; class IfcFlowFitting; class IfcFlowFittingType; class IfcFlowInstrument; class IfcFlowInstrumentType; class IfcFlowMeter; class IfcFlowMeterType; class IfcFlowMovingDevice; class IfcFlowMovingDeviceType; class IfcFlowSegment; class IfcFlowSegmentType; class IfcFlowStorageDevice; class IfcFlowStorageDeviceType; class IfcFlowTerminal; class IfcFlowTerminalType; class IfcFlowTreatmentDevice; class IfcFlowTreatmentDeviceType; class IfcFooting; class IfcFootingType; class IfcFurnishingElement; class IfcFurnishingElementType; class IfcFurniture; class IfcFurnitureType; class IfcGeographicCRS; class IfcGeographicElement; class IfcGeographicElementType; class IfcGeometricCurveSet; class IfcGeometricRepresentationContext; class IfcGeometricRepresentationItem; class IfcGeometricRepresentationSubContext; class IfcGeometricSet; class IfcGeomodel; class IfcGeoslice; class IfcGeotechnicalAssembly; class IfcGeotechnicalElement; class IfcGeotechnicalStratum; class IfcGradientCurve; class IfcGrid; class IfcGridAxis; class IfcGridPlacement; class IfcGroup; class IfcHalfSpaceSolid; class IfcHeatExchanger; class IfcHeatExchangerType; class IfcHumidifier; class IfcHumidifierType; class IfcIShapeProfileDef; class IfcImageTexture; class IfcImpactProtectionDevice; class IfcImpactProtectionDeviceType; class IfcIndexedColourMap; class IfcIndexedPolyCurve; class IfcIndexedPolygonalFace; class IfcIndexedPolygonalFaceWithVoids; class IfcIndexedPolygonalTextureMap; class IfcIndexedTextureMap; class IfcIndexedTriangleTextureMap; class IfcInterceptor; class IfcInterceptorType; class IfcIntersectionCurve; class IfcInventory; class IfcIrregularTimeSeries; class IfcIrregularTimeSeriesValue; class IfcJunctionBox; class IfcJunctionBoxType; class IfcKerb; class IfcKerbType; class IfcLShapeProfileDef; class IfcLaborResource; class IfcLaborResourceType; class IfcLagTime; class IfcLamp; class IfcLampType; class IfcLibraryInformation; class IfcLibraryReference; class IfcLightDistributionData; class IfcLightFixture; class IfcLightFixtureType; class IfcLightIntensityDistribution; class IfcLightSource; class IfcLightSourceAmbient; class IfcLightSourceDirectional; class IfcLightSourceGoniometric; class IfcLightSourcePositional; class IfcLightSourceSpot; class IfcLine; class IfcLinearElement; class IfcLinearPlacement; class IfcLinearPositioningElement; class IfcLiquidTerminal; class IfcLiquidTerminalType; class IfcLocalPlacement; class IfcLoop; class IfcManifoldSolidBrep; class IfcMapConversion; class IfcMapConversionScaled; class IfcMappedItem; class IfcMarineFacility; class IfcMarinePart; class IfcMaterial; class IfcMaterialClassificationRelationship; class IfcMaterialConstituent; class IfcMaterialConstituentSet; class IfcMaterialDefinition; class IfcMaterialDefinitionRepresentation; class IfcMaterialLayer; class IfcMaterialLayerSet; class IfcMaterialLayerSetUsage; class IfcMaterialLayerWithOffsets; class IfcMaterialList; class IfcMaterialProfile; class IfcMaterialProfileSet; class IfcMaterialProfileSetUsage; class IfcMaterialProfileSetUsageTapering; class IfcMaterialProfileWithOffsets; class IfcMaterialProperties; class IfcMaterialRelationship; class IfcMaterialUsageDefinition; class IfcMeasureWithUnit; class IfcMechanicalFastener; class IfcMechanicalFastenerType; class IfcMedicalDevice; class IfcMedicalDeviceType; class IfcMember; class IfcMemberType; class IfcMetric; class IfcMirroredProfileDef; class IfcMobileTelecommunicationsAppliance; class IfcMobileTelecommunicationsApplianceType; class IfcMonetaryUnit; class IfcMooringDevice; class IfcMooringDeviceType; class IfcMotorConnection; class IfcMotorConnectionType; class IfcNamedUnit; class IfcNavigationElement; class IfcNavigationElementType; class IfcObject; class IfcObjectDefinition; class IfcObjectPlacement; class IfcObjective; class IfcOccupant; class IfcOffsetCurve; class IfcOffsetCurve2D; class IfcOffsetCurve3D; class IfcOffsetCurveByDistances; class IfcOpenCrossProfileDef; class IfcOpenShell; class IfcOpeningElement; class IfcOrganization; class IfcOrganizationRelationship; class IfcOrientedEdge; class IfcOuterBoundaryCurve; class IfcOutlet; class IfcOutletType; class IfcOwnerHistory; class IfcParameterizedProfileDef; class IfcPath; class IfcPavement; class IfcPavementType; class IfcPcurve; class IfcPerformanceHistory; class IfcPermeableCoveringProperties; class IfcPermit; class IfcPerson; class IfcPersonAndOrganization; class IfcPhysicalComplexQuantity; class IfcPhysicalQuantity; class IfcPhysicalSimpleQuantity; class IfcPile; class IfcPileType; class IfcPipeFitting; class IfcPipeFittingType; class IfcPipeSegment; class IfcPipeSegmentType; class IfcPixelTexture; class IfcPlacement; class IfcPlanarBox; class IfcPlanarExtent; class IfcPlane; class IfcPlate; class IfcPlateType; class IfcPoint; class IfcPointByDistanceExpression; class IfcPointOnCurve; class IfcPointOnSurface; class IfcPolyLoop; class IfcPolygonalBoundedHalfSpace; class IfcPolygonalFaceSet; class IfcPolyline; class IfcPolynomialCurve; class IfcPort; class IfcPositioningElement; class IfcPostalAddress; class IfcPreDefinedColour; class IfcPreDefinedCurveFont; class IfcPreDefinedItem; class IfcPreDefinedProperties; class IfcPreDefinedPropertySet; class IfcPreDefinedTextFont; class IfcPresentationItem; class IfcPresentationLayerAssignment; class IfcPresentationLayerWithStyle; class IfcPresentationStyle; class IfcProcedure; class IfcProcedureType; class IfcProcess; class IfcProduct; class IfcProductDefinitionShape; class IfcProductRepresentation; class IfcProfileDef; class IfcProfileProperties; class IfcProject; class IfcProjectLibrary; class IfcProjectOrder; class IfcProjectedCRS; class IfcProjectionElement; class IfcProperty; class IfcPropertyAbstraction; class IfcPropertyBoundedValue; class IfcPropertyDefinition; class IfcPropertyDependencyRelationship; class IfcPropertyEnumeratedValue; class IfcPropertyEnumeration; class IfcPropertyListValue; class IfcPropertyReferenceValue; class IfcPropertySet; class IfcPropertySetDefinition; class IfcPropertySetTemplate; class IfcPropertySingleValue; class IfcPropertyTableValue; class IfcPropertyTemplate; class IfcPropertyTemplateDefinition; class IfcProtectiveDevice; class IfcProtectiveDeviceTrippingUnit; class IfcProtectiveDeviceTrippingUnitType; class IfcProtectiveDeviceType; class IfcPump; class IfcPumpType; class IfcQuantityArea; class IfcQuantityCount; class IfcQuantityLength; class IfcQuantityNumber; class IfcQuantitySet; class IfcQuantityTime; class IfcQuantityVolume; class IfcQuantityWeight; class IfcRail; class IfcRailType; class IfcRailing; class IfcRailingType; class IfcRailway; class IfcRailwayPart; class IfcRamp; class IfcRampFlight; class IfcRampFlightType; class IfcRampType; class IfcRationalBSplineCurveWithKnots; class IfcRationalBSplineSurfaceWithKnots; class IfcRectangleHollowProfileDef; class IfcRectangleProfileDef; class IfcRectangularPyramid; class IfcRectangularTrimmedSurface; class IfcRecurrencePattern; class IfcReference; class IfcReferent; class IfcRegularTimeSeries; class IfcReinforcedSoil; class IfcReinforcementBarProperties; class IfcReinforcementDefinitionProperties; class IfcReinforcingBar; class IfcReinforcingBarType; class IfcReinforcingElement; class IfcReinforcingElementType; class IfcReinforcingMesh; class IfcReinforcingMeshType; class IfcRelAdheresToElement; class IfcRelAggregates; class IfcRelAssigns; class IfcRelAssignsToActor; class IfcRelAssignsToControl; class IfcRelAssignsToGroup; class IfcRelAssignsToGroupByFactor; class IfcRelAssignsToProcess; class IfcRelAssignsToProduct; class IfcRelAssignsToResource; class IfcRelAssociates; class IfcRelAssociatesApproval; class IfcRelAssociatesClassification; class IfcRelAssociatesConstraint; class IfcRelAssociatesDocument; class IfcRelAssociatesLibrary; class IfcRelAssociatesMaterial; class IfcRelAssociatesProfileDef; class IfcRelConnects; class IfcRelConnectsElements; class IfcRelConnectsPathElements; class IfcRelConnectsPortToElement; class IfcRelConnectsPorts; class IfcRelConnectsStructuralActivity; class IfcRelConnectsStructuralMember; class IfcRelConnectsWithEccentricity; class IfcRelConnectsWithRealizingElements; class IfcRelContainedInSpatialStructure; class IfcRelCoversBldgElements; class IfcRelCoversSpaces; class IfcRelDeclares; class IfcRelDecomposes; class IfcRelDefines; class IfcRelDefinesByObject; class IfcRelDefinesByProperties; class IfcRelDefinesByTemplate; class IfcRelDefinesByType; class IfcRelFillsElement; class IfcRelFlowControlElements; class IfcRelInterferesElements; class IfcRelNests; class IfcRelPositions; class IfcRelProjectsElement; class IfcRelReferencedInSpatialStructure; class IfcRelSequence; class IfcRelServicesBuildings; class IfcRelSpaceBoundary; class IfcRelSpaceBoundary1stLevel; class IfcRelSpaceBoundary2ndLevel; class IfcRelVoidsElement; class IfcRelationship; class IfcReparametrisedCompositeCurveSegment; class IfcRepresentation; class IfcRepresentationContext; class IfcRepresentationItem; class IfcRepresentationMap; class IfcResource; class IfcResourceApprovalRelationship; class IfcResourceConstraintRelationship; class IfcResourceLevelRelationship; class IfcResourceTime; class IfcRevolvedAreaSolid; class IfcRevolvedAreaSolidTapered; class IfcRightCircularCone; class IfcRightCircularCylinder; class IfcRigidOperation; class IfcRoad; class IfcRoadPart; class IfcRoof; class IfcRoofType; class IfcRoot; class IfcRoundedRectangleProfileDef; class IfcSIUnit; class IfcSanitaryTerminal; class IfcSanitaryTerminalType; class IfcSchedulingTime; class IfcSeamCurve; class IfcSecondOrderPolynomialSpiral; class IfcSectionProperties; class IfcSectionReinforcementProperties; class IfcSectionedSolid; class IfcSectionedSolidHorizontal; class IfcSectionedSpine; class IfcSectionedSurface; class IfcSegment; class IfcSegmentedReferenceCurve; class IfcSensor; class IfcSensorType; class IfcSeventhOrderPolynomialSpiral; class IfcShadingDevice; class IfcShadingDeviceType; class IfcShapeAspect; class IfcShapeModel; class IfcShapeRepresentation; class IfcShellBasedSurfaceModel; class IfcSign; class IfcSignType; class IfcSignal; class IfcSignalType; class IfcSimpleProperty; class IfcSimplePropertyTemplate; class IfcSineSpiral; class IfcSite; class IfcSlab; class IfcSlabType; class IfcSlippageConnectionCondition; class IfcSolarDevice; class IfcSolarDeviceType; class IfcSolidModel; class IfcSpace; class IfcSpaceHeater; class IfcSpaceHeaterType; class IfcSpaceType; class IfcSpatialElement; class IfcSpatialElementType; class IfcSpatialStructureElement; class IfcSpatialStructureElementType; class IfcSpatialZone; class IfcSpatialZoneType; class IfcSphere; class IfcSphericalSurface; class IfcSpiral; class IfcStackTerminal; class IfcStackTerminalType; class IfcStair; class IfcStairFlight; class IfcStairFlightType; class IfcStairType; class IfcStructuralAction; class IfcStructuralActivity; class IfcStructuralAnalysisModel; class IfcStructuralConnection; class IfcStructuralConnectionCondition; class IfcStructuralCurveAction; class IfcStructuralCurveConnection; class IfcStructuralCurveMember; class IfcStructuralCurveMemberVarying; class IfcStructuralCurveReaction; class IfcStructuralItem; class IfcStructuralLinearAction; class IfcStructuralLoad; class IfcStructuralLoadCase; class IfcStructuralLoadConfiguration; class IfcStructuralLoadGroup; class IfcStructuralLoadLinearForce; class IfcStructuralLoadOrResult; class IfcStructuralLoadPlanarForce; class IfcStructuralLoadSingleDisplacement; class IfcStructuralLoadSingleDisplacementDistortion; class IfcStructuralLoadSingleForce; class IfcStructuralLoadSingleForceWarping; class IfcStructuralLoadStatic; class IfcStructuralLoadTemperature; class IfcStructuralMember; class IfcStructuralPlanarAction; class IfcStructuralPointAction; class IfcStructuralPointConnection; class IfcStructuralPointReaction; class IfcStructuralReaction; class IfcStructuralResultGroup; class IfcStructuralSurfaceAction; class IfcStructuralSurfaceConnection; class IfcStructuralSurfaceMember; class IfcStructuralSurfaceMemberVarying; class IfcStructuralSurfaceReaction; class IfcStyleModel; class IfcStyledItem; class IfcStyledRepresentation; class IfcSubContractResource; class IfcSubContractResourceType; class IfcSubedge; class IfcSurface; class IfcSurfaceCurve; class IfcSurfaceCurveSweptAreaSolid; class IfcSurfaceFeature; class IfcSurfaceOfLinearExtrusion; class IfcSurfaceOfRevolution; class IfcSurfaceReinforcementArea; class IfcSurfaceStyle; class IfcSurfaceStyleLighting; class IfcSurfaceStyleRefraction; class IfcSurfaceStyleRendering; class IfcSurfaceStyleShading; class IfcSurfaceStyleWithTextures; class IfcSurfaceTexture; class IfcSweptAreaSolid; class IfcSweptDiskSolid; class IfcSweptDiskSolidPolygonal; class IfcSweptSurface; class IfcSwitchingDevice; class IfcSwitchingDeviceType; class IfcSystem; class IfcSystemFurnitureElement; class IfcSystemFurnitureElementType; class IfcTShapeProfileDef; class IfcTable; class IfcTableColumn; class IfcTableRow; class IfcTank; class IfcTankType; class IfcTask; class IfcTaskTime; class IfcTaskTimeRecurring; class IfcTaskType; class IfcTelecomAddress; class IfcTendon; class IfcTendonAnchor; class IfcTendonAnchorType; class IfcTendonConduit; class IfcTendonConduitType; class IfcTendonType; class IfcTessellatedFaceSet; class IfcTessellatedItem; class IfcTextLiteral; class IfcTextLiteralWithExtent; class IfcTextStyle; class IfcTextStyleFontModel; class IfcTextStyleForDefinedFont; class IfcTextStyleTextModel; class IfcTextureCoordinate; class IfcTextureCoordinateGenerator; class IfcTextureCoordinateIndices; class IfcTextureCoordinateIndicesWithVoids; class IfcTextureMap; class IfcTextureVertex; class IfcTextureVertexList; class IfcThirdOrderPolynomialSpiral; class IfcTimePeriod; class IfcTimeSeries; class IfcTimeSeriesValue; class IfcTopologicalRepresentationItem; class IfcTopologyRepresentation; class IfcToroidalSurface; class IfcTrackElement; class IfcTrackElementType; class IfcTransformer; class IfcTransformerType; class IfcTransportElement; class IfcTransportElementType; class IfcTransportationDevice; class IfcTransportationDeviceType; class IfcTrapeziumProfileDef; class IfcTriangulatedFaceSet; class IfcTriangulatedIrregularNetwork; class IfcTrimmedCurve; class IfcTubeBundle; class IfcTubeBundleType; class IfcTypeObject; class IfcTypeProcess; class IfcTypeProduct; class IfcTypeResource; class IfcUShapeProfileDef; class IfcUnitAssignment; class IfcUnitaryControlElement; class IfcUnitaryControlElementType; class IfcUnitaryEquipment; class IfcUnitaryEquipmentType; class IfcValve; class IfcValveType; class IfcVector; class IfcVehicle; class IfcVehicleType; class IfcVertex; class IfcVertexLoop; class IfcVertexPoint; class IfcVibrationDamper; class IfcVibrationDamperType; class IfcVibrationIsolator; class IfcVibrationIsolatorType; class IfcVirtualElement; class IfcVirtualGridIntersection; class IfcVoidingFeature; class IfcWall; class IfcWallStandardCase; class IfcWallType; class IfcWasteTerminal; class IfcWasteTerminalType; class IfcWellKnownText; class IfcWindow; class IfcWindowLiningProperties; class IfcWindowPanelProperties; class IfcWindowType; class IfcWorkCalendar; class IfcWorkControl; class IfcWorkPlan; class IfcWorkSchedule; class IfcWorkTime; class IfcZShapeProfileDef; class IfcZone; class IfcAbsorbedDoseMeasure; class IfcAccelerationMeasure; class IfcAmountOfSubstanceMeasure; class IfcAngularVelocityMeasure; class IfcArcIndex; class IfcAreaDensityMeasure; class IfcAreaMeasure; class IfcBinary; class IfcBoolean; class IfcBoxAlignment; class IfcCardinalPointReference; class IfcComplexNumber; class IfcCompoundPlaneAngleMeasure; class IfcContextDependentMeasure; class IfcCountMeasure; class IfcCurvatureMeasure; class IfcDate; class IfcDateTime; class IfcDayInMonthNumber; class IfcDayInWeekNumber; class IfcDescriptiveMeasure; class IfcDimensionCount; class IfcDoseEquivalentMeasure; class IfcDuration; class IfcDynamicViscosityMeasure; class IfcElectricCapacitanceMeasure; class IfcElectricChargeMeasure; class IfcElectricConductanceMeasure; class IfcElectricCurrentMeasure; class IfcElectricResistanceMeasure; class IfcElectricVoltageMeasure; class IfcEnergyMeasure; class IfcFontStyle; class IfcFontVariant; class IfcFontWeight; class IfcForceMeasure; class IfcFrequencyMeasure; class IfcGloballyUniqueId; class IfcHeatFluxDensityMeasure; class IfcHeatingValueMeasure; class IfcIdentifier; class IfcIlluminanceMeasure; class IfcInductanceMeasure; class IfcInteger; class IfcIntegerCountRateMeasure; class IfcIonConcentrationMeasure; class IfcIsothermalMoistureCapacityMeasure; class IfcKinematicViscosityMeasure; class IfcLabel; class IfcLanguageId; class IfcLengthMeasure; class IfcLineIndex; class IfcLinearForceMeasure; class IfcLinearMomentMeasure; class IfcLinearStiffnessMeasure; class IfcLinearVelocityMeasure; class IfcLogical; class IfcLuminousFluxMeasure; class IfcLuminousIntensityDistributionMeasure; class IfcLuminousIntensityMeasure; class IfcMagneticFluxDensityMeasure; class IfcMagneticFluxMeasure; class IfcMassDensityMeasure; class IfcMassFlowRateMeasure; class IfcMassMeasure; class IfcMassPerLengthMeasure; class IfcModulusOfElasticityMeasure; class IfcModulusOfLinearSubgradeReactionMeasure; class IfcModulusOfRotationalSubgradeReactionMeasure; class IfcModulusOfSubgradeReactionMeasure; class IfcMoistureDiffusivityMeasure; class IfcMolecularWeightMeasure; class IfcMomentOfInertiaMeasure; class IfcMonetaryMeasure; class IfcMonthInYearNumber; class IfcNonNegativeLengthMeasure; class IfcNormalisedRatioMeasure; class IfcNumericMeasure; class IfcPHMeasure; class IfcParameterValue; class IfcPlanarForceMeasure; class IfcPlaneAngleMeasure; class IfcPositiveInteger; class IfcPositiveLengthMeasure; class IfcPositivePlaneAngleMeasure; class IfcPositiveRatioMeasure; class IfcPowerMeasure; class IfcPresentableText; class IfcPressureMeasure; class IfcPropertySetDefinitionSet; class IfcRadioActivityMeasure; class IfcRatioMeasure; class IfcReal; class IfcRotationalFrequencyMeasure; class IfcRotationalMassMeasure; class IfcRotationalStiffnessMeasure; class IfcSectionModulusMeasure; class IfcSectionalAreaIntegralMeasure; class IfcShearModulusMeasure; class IfcSolidAngleMeasure; class IfcSoundPowerLevelMeasure; class IfcSoundPowerMeasure; class IfcSoundPressureLevelMeasure; class IfcSoundPressureMeasure; class IfcSpecificHeatCapacityMeasure; class IfcSpecularExponent; class IfcSpecularRoughness; class IfcStrippedOptional; class IfcTemperatureGradientMeasure; class IfcTemperatureRateOfChangeMeasure; class IfcText; class IfcTextAlignment; class IfcTextDecoration; class IfcTextFontName; class IfcTextTransformation; class IfcThermalAdmittanceMeasure; class IfcThermalConductivityMeasure; class IfcThermalExpansionCoefficientMeasure; class IfcThermalResistanceMeasure; class IfcThermalTransmittanceMeasure; class IfcThermodynamicTemperatureMeasure; class IfcTime; class IfcTimeMeasure; class IfcTimeStamp; class IfcTorqueMeasure; class IfcURIReference; class IfcVaporPermeabilityMeasure; class IfcVolumeMeasure; class IfcVolumetricFlowRateMeasure; class IfcWarpingConstantMeasure; class IfcWarpingMomentMeasure; class IfcWellKnownTextLiteral; + +/// The actor select type allows a person, or an organization, or a person associated with an organization to be referenced. +/// +/// NOTE Corresponds to the following entity in ISO 10303-41: person_organization_select. +/// +/// HISTORY New entity in IFC Release 1.5.1 +/// +/// SELECT +/// +/// IfcOrganization An organization. +/// IfcPerson A person. +/// IfcPersonAndOrganization A person related to an organization. +class IFC_PARSE_API IfcActorSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcActorSelect > list; +}; +/// IfcAppliedValueSelect defines the selection of whether a value (expressed as a ratio) or an amount should be used as the value for an IfcAppliedValue. +/// +/// Select from: +/// +/// IfcMeasureWithUnit +/// IfcMonetaryMeasure +/// IfcRatioMeasure +/// +/// HISTORY: New SELECT type in IFC 2x2. +/// +/// Use definitions +/// Selecting IfcMeasureWithUnit allows the specification of both the actual figure for the value together with the currency in which the value is represented. +/// Selecting IfcMonetaryMeasure allows the specification only of the value, the currency being as set by the global context +/// Selecting IfcRatioMeasure assumes that the amount is a percentage or other REAL number. Note that if the amount is normally specified as -20%, then this figure will need to be converted to a multiplier of 0.8 +class IFC_PARSE_API IfcAppliedValueSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcAppliedValueSelect > list; +}; +/// Definition from ISO/CD 10303-42:1992: This select type collects together both versions of the placement as used in two dimensional or in three dimensional Cartesian space. This enables entities requiring this information to reference them without specifying the space dimensionality. +/// +/// NOTE: Corresponding STEP type: axis2_placement, please refer to ISO/IS 10303-42:1994, p. 19 for the final definition of the formal standard. +/// +/// HISTORY: New type in IFC Release 1.5 +class IFC_PARSE_API IfcAxis2Placement : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcAxis2Placement > list; +}; +/// Definition from IAI: A select type for selecting between simple measure types for reinforcement bending parameters. +/// +/// HISTORY New type in IFC Release 2x4 +class IFC_PARSE_API IfcBendingParameterSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcBendingParameterSelect > list; +}; +/// Definition from ISO/CD 10303-42:1992: This select type identifies +/// all those types of entities which may participate in a Boolean operation to +/// form a CSG solid. +/// Definition from IAI: CSG primitives are out of scope for the +/// current IFC Release. Only faceted B-reps, swept area solids and half space +/// solids are available as Boolean operands. Boolean results themselves can be used +/// as operands thus enabling nested Boolean operations. +/// +/// NOTE Corresponding STEP type: +/// boolean_operand, please refer to ISO/IS 10303-42:1994, p.167 for the final +/// definition of the formal standard. In IFC Release 1.5.1 & 2.0 only Boolean +/// results (IfcBooleanResult), half space solids +/// (IfcHalfSpaceSolid), faceted B-Rep, extruded solids and revolved solids +/// (IfcSolidModel) are defined for being valid Boolean operands. +/// +/// HISTORY: New Type in IFC Release 1.5.1 +class IFC_PARSE_API IfcBooleanOperand : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcBooleanOperand > list; +}; +/// IfcClassificationReferenceSelect enables selection of whether a classification reference is a subset of another classification reference or is a top level entry of a classification source. +/// +/// HISTORY: New Select Type in IFC2x +/// +/// Select From: +/// +/// IfcClassification (for classification information) +/// IfcClassificationReference (for reference into a classification source) +class IFC_PARSE_API IfcClassificationReferenceSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcClassificationReferenceSelect > list; +}; +/// IfcClassificationSelect enables selection of whether a classification reference is to be referenced from an external source, or whether a classification is referenced as such. +/// +/// NOTE  Generally, it is expected that selection will be by IfcClassificationReference to identify an individual classification notation that classifies an element in the building information model. For example an element, such as IfcTank, might be further classified by assigning an IfcClassificationReference with Identification = "L6814" and a ClassificationSource identifying the appropriate version of Uniclass. IfcClassification should only be selected in +/// circumstances where there could be a need to indicate the classification system that will be used without associating a notation or reference to an individual object. This may occur for higher level objects such as IfcProject, IfcSystem, or similar. For example an IfcStructuralAnalysisModel might be classified to be applicable to a particular version of EuroCode. +/// +/// HISTORY  New select type in IFC2x +/// +/// IFC2x4 CHANGE  Select renamed from IfcClassificationNotationSelect. +/// +/// Select from: +/// +/// IfcClassification (for referencing a classification system) +/// IfcClassificationReference (for referencing a classification item (or facet) inside a classification system) +class IFC_PARSE_API IfcClassificationSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcClassificationSelect > list; +}; +/// Definition from ISO/CD 10303-46:1992: The colour entity defines a basic appearance of elements which shall be visualized in a picture. +/// +/// NOTE  Corresponding STEP name: colour. It has been made into a SELECT type in IFC to avoid multiple inheritance for pre defined colour. Please refer to ISO/IS 10303-46:1994, p. 138 for the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC2x2. +class IFC_PARSE_API IfcColour : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcColour > list; +}; +/// The IfcColourOrFactor enables the selection of either a RGB colour value or a scalar factor value for the use as values of the reflectance components. +/// +/// HISTORY: New type in IFC2x2. +class IFC_PARSE_API IfcColourOrFactor : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcColourOrFactor > list; +}; +/// IfcCoordinateReferenceSystemSelect is a select between either the local engineering coordinate system, represented by the IfcGeometricRepresentationContext, or another coordinate reference system, represented by IfcCoordinateReferenceSystem, to be the source of a coordinate operation. +/// +/// HISTORY  New select type in IFC2x4. +class IFC_PARSE_API IfcCoordinateReferenceSystemSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcCoordinateReferenceSystemSelect > list; +}; +/// Definition from ISO/CD 10303-42:1992: This type identifies the types of entity which may be selected as the root of a CSG tree including a single CSG primitive as a special case. +/// Definition from IAI: The IfcBooleanResult, and subtypes of IfcCsgPrimitive3D are defined as potential root tree expression (at IfcCsgSolid). A subtype of IfcCsgPrimitive3D marks the special case of a CSG solid solely expressed by a single primitive. +/// +/// NOTE Corresponding ISO 10303-42 type: csg_select, please refer to ISO/IS 10303-42:1994, p.168 for the final definition of the formal standard. +/// +/// HISTORY New Type in IFC Release 1.5.1. +class IFC_PARSE_API IfcCsgSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcCsgSelect > list; +}; +/// Definition from ISO/CD 10303-46:1992: The curve font or scaled curve font select is a selection of either a curve font style select (being either a predefined curve font or an explicitly defined curve font) or a curve style font and scaling. +/// +/// NOTE Corresponding ISO 10303 name: curve_font_or_scaled_curve_font_select. Please refer to ISO/IS 10303-46:1994 for the final definition of the formal standard. +/// +/// HISTORY New entity in IFC2x2. +class IFC_PARSE_API IfcCurveFontOrScaledCurveFontSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcCurveFontOrScaledCurveFontSelect > list; +}; + +class IFC_PARSE_API IfcCurveMeasureSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcCurveMeasureSelect > list; +}; + +class IFC_PARSE_API IfcCurveOnSurface : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcCurveOnSurface > list; +}; +/// IfcCurveOrEdgeCurve provides the option to either select a geometric curve (IfcCurve +/// and subtypes) within a geometric model, or a curve with associated geometry and coordinates (IfcEdgeCurve) within a topological model. +/// SELECT +/// +/// IfcCurve +/// IfcEdgeCurve +/// +/// HISTORY  New select type in IFC2x Edition 3. +class IFC_PARSE_API IfcCurveOrEdgeCurve : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcCurveOrEdgeCurve > list; +}; +/// Definition from ISO/CD 10303-46:1992: The curve style font select is a selection of a curve style font or a predefined curve style font. +/// +/// NOTE Corresponding ISO 10303 name: curve_style_font_select. Please refer to ISO/IS 10303-46:1994 for the final definition of the formal standard. +/// +/// HISTORY New entity in IFC2x2. +class IFC_PARSE_API IfcCurveStyleFontSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcCurveStyleFontSelect > list; +}; +/// IfcDefinitionSelectprovides the option to either select an object or type object IfcObjectDefinition, or a property set template or property set, IfcPropertyDefinition. +/// SELECT +/// +/// IfcObjectDefinition, +/// IfcPropertyDefinition +/// +/// HISTORY New select type in IFC2x4. +class IFC_PARSE_API IfcDefinitionSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcDefinitionSelect > list; +}; +/// IfcDerivedMeasureValue is a select type for selecting between derived measure types. +/// +/// SELECT +/// +/// IfcAbsorbedDoseMeasure +/// IfcAccelerationMeasure +/// IfcAngularVelocityMeasure +/// IfcCompoundPlaneAngleMeasure +/// IfcDoseEquivalentMeasure +/// IfcDynamicViscosityMeasure +/// IfcElectricCapacitanceMeasure +/// IfcElectricChargeMeasure +/// IfcElectricConductanceMeasure +/// IfcElectricResistanceMeasure +/// IfcElectricVoltageMeasure +/// IfcEnergyMeasure +/// IfcForceMeasure +/// IfcFrequencyMeasure +/// IfcHeatFluxDensityMeasure +/// IfcIlluminanceMeasure +/// IfcInductanceMeasure +/// IfcIntegerCountRateMeasure +/// IfcIsothermalMoisturecapacityMeasure +/// IfcKinematicViscosityMeasure +/// IfcLinearForceMeasure +/// IfcLinearMomentMeasure +/// IfcLinearStiffnessMeasure +/// IfcLinearVelocityMeasure +/// IfcLuminousFluxMeasure +/// IfcMagneticFluxDensityMeasure +/// IfcMagneticFluxMeasure +/// IfcMassDensityMeasure +/// IfcMassFlowRateMeasure +/// IfcModulusOfElasticityMeasure +/// IfcModulusOfSubgradeReactionMeasure +/// IfcMoistureDiffusivityMeasure +/// IfcMolecularWeightMeasure +/// IfcMomentOfInertiaMeasure +/// IfcMonetaryMeasure +/// IfcPlanarForceMeasure +/// IfcPowerMeasure +/// IfcPressureMeasure +/// IfcRadioActivityMeasure +/// IfcRotationalFrequencyMeasure +/// IfcRotationalStiffnessMeasure +/// IfcShearModulusMeasure +/// IfcSpecificHeatCapacityMeasure +/// IfcThermalAdmittanceMeasure +/// IfcThermalConductivityMeasure +/// IfcThermalResistanceMeasure +/// IfcThermalTransmittanceMeasure +/// IfcTimeStamp +/// IfcTorqueMeasure +/// IfcVaporPermeabilityMeasure +/// IfcVolumetricFlowRateMeasure +/// IfcCurvatureMeasure +/// IfcMassPerLengthMeasure +/// IfcRotationalMassMeasure +/// IfcSectionalAreaIntegralMeasure +/// IfcSectionModulusMeasure +/// IfcTemperatureGradientMeasure +/// IfcTemperatureRateOfChangeMeasure +/// IfcWarpingConstantMeasure +/// IfcWarpingMomentMeasure +/// IfcThermalExpansionCoefficientMeasure +/// IfcModulusOfLinearSubgradeReactionMeasure +/// IfcModulusOfRotationalSubgradeReactionMeasure +/// IfcLuminousIntensityDistributionMeasure +/// IfcSoundPowerMeasure +/// IfcSoundPressureMeasure +/// +/// HISTORY New type in IFC Release 2x. +/// +/// IFC2x4 change: added IfcTemperatureRateOfChangeMeasure. +class IFC_PARSE_API IfcDerivedMeasureValue : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcDerivedMeasureValue > list; +}; +/// IfcDocumentSelect enables selection of whether document information is to be contained within an IFC model or is to be referenced from an external source. +/// +/// HISTORY: New Select Type in IFC 2x +/// +/// Select From: +/// +/// IfcDocumentInformation (for "metadata" of an external document) +/// IfcDocumentReference (for reference within a document) +class IFC_PARSE_API IfcDocumentSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcDocumentSelect > list; +}; +/// Definition from ISO/CD 10303-46:1992: The fill style select is a selection between different fill area styles. +/// +/// NOTE Corresponding ISO 10303 name: fill_style_select. Please refer to ISO/IS 10303-46:1994 for +/// the final definition of the formal standard. +/// +/// HISTORY New type in IFC2x2. +class IFC_PARSE_API IfcFillStyleSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcFillStyleSelect > list; +}; +/// Definition from ISO/CD 10303-42:1992: This select type identifies the types of entities which can occur in a geometric set. +/// +/// NOTE: Corresponding ISO 10303 type: geometric_set_select. Please refer to ISO/IS 10303-42:1994, p. 169 for the final definition of the formal standard. +/// +/// HISTORY: New type in IFC Release 2x. +class IFC_PARSE_API IfcGeometricSetSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcGeometricSetSelect > list; +}; +/// IfcGridPlacementDirectionSelect enables the choice of defining a grid placement be either an explicit direction, or by referencing a second grid intersection to provide the direction. +/// +/// SELECT +/// +/// IfcDirection, +/// IfcVirtualGridIntersection +/// +/// HISTORY New select type in IFC2x4. +class IFC_PARSE_API IfcGridPlacementDirectionSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcGridPlacementDirectionSelect > list; +}; +/// The IfcHatchLineDistanceSelect is a selection between different ways to determine the distance and potentially start point of hatch lines, either by an offset distance length measure or by a vector. +/// +/// HISTORY  New type in IFC2x3. +class IFC_PARSE_API IfcHatchLineDistanceSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcHatchLineDistanceSelect > list; +}; + +class IFC_PARSE_API IfcInterferenceSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcInterferenceSelect > list; +}; +/// Definition from ISO/CD 10303-46:1992: The layered things type selects those things, which can be grouped in layers. +/// +/// It is the collection of all those items, that are assigned to a single layer. These items are representation items or complete representations (IfcRepresentationItem, IfcRepresentation). If an IfcRepresentation is referenced, all IfcRepresentationItem within its set of Items are assigned to the same layer. +/// +/// NOTE: Corresponding ISO 10303 name: layered_item. It was called layered_things in the ISO/CD version and had been renamed to layered_item in the ISO/IS final version. Please refer to ISO/IS 10303-46:1994, p. 13 for the final definition of the formal standard. +/// +/// HISTORY: New type in IFC2x2. +class IFC_PARSE_API IfcLayeredItem : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcLayeredItem > list; +}; +/// IfcLibrarySelect enables selection of whether library information is to be contained within an IFC model or is to be referenced from an external source. +/// +/// HISTORY: New Select Type in IFC2x +/// +/// Select From: +/// +/// IfcLibraryInformation (for library information) +/// IfcLibraryReference (for reference into a library of information by location) +/// +/// Generally, it is expected that selection will be IfcLibraryReference and only rarely IfcLibraryInformation. IfcLibraryInformation should only be selected in circumstances where there could be a need to indicate the libraries that will be used without making individual references. This may occur for higher level objects such as a project or building. +class IFC_PARSE_API IfcLibrarySelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcLibrarySelect > list; +}; +/// A goniometric light gets its intensity distribution function (how much light goes in any one direction) from one of two sources: (i) an industry-standard file, (ii) from distribution data passed directly via the IfcLightIntensityDistribution. +/// +/// The light distribution provides the luminous intensity distribution according to some standardized light distribution curves. +/// +/// Select: +/// +/// Type +/// Definition +/// +/// IfcExternalReference +/// Light distribution is represented by a standard photometric data file such as Eulumdat, IES, CIBSE TM14. +/// +/// IfcLightIntensityDistribution +/// For representing a light distribution directly the +/// following values needs to be given in a table like structure with column and +/// row headings. These headings should contain the angles (C/γ or B/β ) +/// and the table body contains the intensity values, (normally normalized to +/// cd/Klm). The angles can be non- equidistant and the angle steps can be almost +/// any value in the valid range, so a list of all available angles in both +/// directions covers all cases. +/// +/// HISTORY New type in IFC2x2. +class IFC_PARSE_API IfcLightDistributionDataSourceSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcLightDistributionDataSourceSelect > list; +}; +/// IfcMaterialSelect provides selection of either a material +/// definition or a material usage definition that can be assigned to +/// an element, a resource or another entity within IFC. +/// SELECT +/// +/// IfcMaterialDefinition +/// +/// IfcMaterial +/// IfcMaterialLayer +/// IfcMaterialLayerSet +/// IfcMaterialProfile +/// IfcMaterialProfileSet +/// IfcMaterialConstituent +/// IfcMaterialConstituentSet +/// +/// IfcMaterialUsageDefinition +/// +/// IfcMaterialLayerSetUsage +/// IfcMaterialProfileSetUsage +/// +/// IfcMaterialList +/// +/// HISTORY New select in IFC 1.0 +/// +/// IFC2x4 CHANGE The select now includes two new abstract entities IfcMaterialDefinition +/// and IfcMaterialUsageDefinition with upward compatibility. The use of IfcMaterialList is deprecated from IFC2x4 onwards. +class IFC_PARSE_API IfcMaterialSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcMaterialSelect > list; +}; +/// Definition from ISO/CD 10303-41:1992: A measure value is a value as defined in ISO 31-0 (clause 2). +/// +/// NOTE IfcMeasureValue is a select data type for most basic measure types coming from ISO 10303-41. Select item IfcNonNegativeLengthMeasure is in addition to ISO 10303-41. +/// +/// NOTE Corresponding ISO 10303 name: measure_value, please refer to ISO/IS 10303-41 for the final definition of the formal standard. +/// +/// HISTORY New type in IFC Release 1.5.1. +/// +/// IFC 2x4 change: added IfcNonNegativeLengthMeasure +class IFC_PARSE_API IfcMeasureValue : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcMeasureValue > list; +}; +/// IfcMetricValueSelect is a select type that enables selection of the data type for the value component of an IfcMetric. +/// +/// HISTORY: New type in IFC Release 2.0 +/// +/// Select +/// +/// IfcCostValue +/// IfcDateTime +/// IfcMeasureWithUnit +/// IfcTable +/// IfcText +/// IfcTimeSeries +class IFC_PARSE_API IfcMetricValueSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcMetricValueSelect > list; +}; +/// Definition from IAI: A measure for modulus of rotational subgrade reaction which expresses the rotational bedding of a structural curve item per length. TRUE denotes infinite stiffness (rigidity). FALSE denotes no stiffness (a release). A numeric value denotes finite linear-elastic stiffness. +/// +/// HISTORY: New type in IFC 2x4. +class IFC_PARSE_API IfcModulusOfRotationalSubgradeReactionSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcModulusOfRotationalSubgradeReactionSelect > list; +}; +/// Definition from IAI: Bedding measure which expresses the bedding of a structural face item per area. TRUE denotes infinite stiffness (rigidity). FALSE denotes no stiffness (a release). A numeric value denotes finite linear-elastic stiffness. +/// +/// HISTORY: New type in IFC 2x4. +class IFC_PARSE_API IfcModulusOfSubgradeReactionSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcModulusOfSubgradeReactionSelect > list; +}; +/// Definition from IAI: A measure for modulus of translational subgrade reaction which expresses the translational bedding of a structural curve item per length. TRUE denotes infinite stiffness (rigidity). FALSE denotes no stiffness (a release). A numeric value denotes finite linear-elastic stiffness. +/// +/// HISTORY: New type in IFC 2x4. +class IFC_PARSE_API IfcModulusOfTranslationalSubgradeReactionSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcModulusOfTranslationalSubgradeReactionSelect > list; +}; +/// IfcObjectReferenceSelect is a select type, that holds a list of resource level entities that can be used as properties within a property set. +/// +/// HISTORY  New select type in IFC Release 2.0. +class IFC_PARSE_API IfcObjectReferenceSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcObjectReferenceSelect > list; +}; +/// IfcPointOrVertexPoint provides the option to either select a geometric point (IfcPoint and subtypes) within a geometric model, or a vertex with associated point coordinates (IfcVertexPoint) within a topological model. +/// SELECT +/// +/// IfcPoint, +/// IfcVertexPoint +/// +/// HISTORY  New select type in IFC2x Edition 3. +class IFC_PARSE_API IfcPointOrVertexPoint : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcPointOrVertexPoint > list; +}; +/// IfcProcessSelectprovides the option to either +/// select a process or activity occurrence, IfcProcess, +/// or a process or activity type, IfcTypeProcess. +/// SELECT +/// +/// IfcProcess, +/// +/// IfcTypeProcess +/// +/// HISTORY New select type in IFC2x4. +class IFC_PARSE_API IfcProcessSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcProcessSelect > list; +}; + +class IFC_PARSE_API IfcProductRepresentationSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcProductRepresentationSelect > list; +}; +/// IfcProductSelectprovides the option to either select a +/// product occurrence, IfcProduct, or a product type, +/// IfcTypeProduct. +/// SELECT +/// +/// IfcProduct, +/// IfcTypeProduct +/// +/// HISTORY New select type in IFC2x4. +class IFC_PARSE_API IfcProductSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcProductSelect > list; +}; + +class IFC_PARSE_API IfcPropertySetDefinitionSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcPropertySetDefinitionSelect > list; +}; +/// IfcResourceObjectSelect enables selection of resource level objects that are to be related to an resource level relationship object. The use of IfcResourceObjectSelect includes the ability to assign an external reference entity (library, classification, or documentation reference) to entities within the resource level. +/// +/// HISTORY  New Select type in IFC2x4. +class IFC_PARSE_API IfcResourceObjectSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcResourceObjectSelect > list; +}; +/// IfcResourceSelectprovides the option to either select a +/// resource occurrence, IfcResource, or a resource type, +/// IfcTypeResource. +/// SELECT +/// +/// IfcResource, +/// IfcTypeResource +/// +/// HISTORY New select type in IFC2x4. +class IFC_PARSE_API IfcResourceSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcResourceSelect > list; +}; +/// Definition from IAI: A measure of rotational stiffness. TRUE denotes infinite stiffness (rigidity). FALSE denotes no stiffness (a release). A numeric value denotes finite linear-elastic stiffness. +/// +/// HISTORY: New type in IFC 2x4. +class IFC_PARSE_API IfcRotationalStiffnessSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcRotationalStiffnessSelect > list; +}; + +class IFC_PARSE_API IfcSegmentIndexSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcSegmentIndexSelect > list; +}; +/// Definition from ISO/CD 10303-42:1992 This type collects together, for reference when constructing more complex models, the subtypes which have the characteristics of a shell. A shell is a connected object of fixed dimensionality d = 0; 1; or 2, typically used to bound a region. The domain of a shell, if present, includes its bounds and 0 £ X < Â¥. +/// +/// A shell of dimensionality 0 is represented by a graph consisting of a single vertex. The vertex shall not have any associated edges. +/// A shell of dimensionality 1 is represented by a connected graph of dimensionality 1. +/// A shell of dimensionality 2 is a topological entity constructed by joining faces along edges. Its domain, if present, is a connected, orientable 2-manifold with boundary, that is, a connected, oriented, finite, non-self-intersecting surface, which may be closed or open. +/// +/// Shells of dimensionality 0 and 1 are not part of the current IFC release. +/// +/// NOTE  Corresponding ISO 10303 type: shell. Please refer to ISO/IS 10303-42:1994, p. 127 for the final definition of the formal standard. Only the select items closed_shell (IfcClosedShell) and open_shell (IfcOpenShell) have been incorporated in the current IFC release. +/// +/// HISTORY  New type in IFC2x. +class IFC_PARSE_API IfcShell : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcShell > list; +}; +/// IfcSimpleValue is a select type for selecting between simple value types. +/// +/// SELECT +/// +/// IfcInteger: Defined type of simple type INTEGER. +/// IfcReal: Defined type of simple type REAL. +/// IfcBoolean: Defined type of simple type BOOLEAN. +/// IfcLogical: Defined type of simple type LOGICAL. +/// IfcIdentifier: Defined type of simple type STRING for identification purposes. +/// IfcLabel: Defined type of simple type STRING for naming purposes. +/// IfcText: Defined type of simple type STRING for descriptive purposes. +/// IfcDateTime: Defined type of simple type STRING to represent a date and time. +/// IfcDate: Defined type of simple type STRING to represent a date. +/// IfcTime: Defined type of simple type STRING to represent a time. +/// IfcDuration: Defined type of simple type STRING to represent a duration. +/// +/// HISTORY New type in IFC Release 2x. +/// +/// IFC2x4 CHANGE Items IfcDateTime, IfcDate, IfcTime, IfcDuration added. +class IFC_PARSE_API IfcSimpleValue : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcSimpleValue > list; +}; +/// Definition from ISO/CD 10303-46:1992: The size select is a selection of a specific positive length measure. +/// +/// Definition from ISO: The size (or width) measure value is given in the global drawing length units. +/// +/// NOTE  global units are defined at the single IfcProject instance, given by UnitsInContext:IfcUnitAssignment, the same units are used for the geometric representation items and for the style definitions. +/// +/// NOTE  Corresponding ISO 10303 name: size_select. Please refer to ISO/IS 10303-46:1994 for the final +/// definition of the formal standard. +/// +/// HISTORY  New type in IFC2x2. +/// +/// IFC2x3 CHANGE  The SELECT item IfcMeasureWithUnit has been removed from the IfcSizeSelect, the IfcRatioMeasure and IfcDescriptiveMeasure has been added. +class IFC_PARSE_API IfcSizeSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcSizeSelect > list; +}; +/// The IfcSolidOrShell provides the option to either select a geometric volume (IfcSolidModel and subtypes) within a geometric model, or a shell (IfcClosedShell) within a topological model. +/// SELECT +/// +/// IfcSolidModel +/// IfcClosedShell +/// +/// HISTORY New select type in IFC2x4. +class IFC_PARSE_API IfcSolidOrShell : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcSolidOrShell > list; +}; +/// Definition from IAI: The +/// IfcSpaceBoundarySelectselects either an internal space +/// for internal or external space boundaries, or an external spatial +/// element for external space boundaries at the outer envelop of the +/// building. +/// SELECT +/// +/// IfcSpace, +/// IfcExternalSpatialElement +/// +/// HISTORY New select type +/// in IFC2x4. +class IFC_PARSE_API IfcSpaceBoundarySelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcSpaceBoundarySelect > list; +}; + +class IFC_PARSE_API IfcSpatialReferenceSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcSpatialReferenceSelect > list; +}; +/// The IfcSpecularHighlightSelect defines the selectable types of value for specular highlight sharpness. +/// +/// NOTE: The two select types relate to the different ways to specifiy the sharpness (or shininess) of the specular part of the reflectance equation. It relates to the attributes: +/// +/// in ISO10303-46 the attribute specular_exponent is given +/// in VRML97 the attribute shininess is given +/// +/// For each surface side style only one of the two methods is needed for calculating the specular part of the equation. +/// +/// HISTORY: New type in IFC2x2. +class IFC_PARSE_API IfcSpecularHighlightSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcSpecularHighlightSelect > list; +}; +/// Definition from IAI: This type definition shall be used to +/// distinguish between a reference to an instance either of +/// IfcStructuralItem or IfcBuildingElement. The +/// IfcStructuralActivityAssignmentSelect type is referenced by the entity +/// IfcRelConnectsStructuralActivity which defines the connection between +/// activities (IfcStructuralActivity) and the loaded element. +/// +/// HISTORY: New type in Release IFC2x +/// Edition 2. +class IFC_PARSE_API IfcStructuralActivityAssignmentSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcStructuralActivityAssignmentSelect > list; +}; +/// IfcSurfaceOrFaceSurface provides the option to either select a geometric surface (IfcSurface +/// and subtypes) within a geometric model, or a face with associated surface geometry and coordinates (IfcFaceSurface) within a topological model. +/// SELECT +/// +/// IfcSurface +/// IfcFaceSurface +/// IfcFaceBasedSurfaceModel (a connected face set, representing a faceted surface as an approximation of a non planar, non rectangular bounded surface) +/// +/// HISTORY  New select type in IFC2x3. +class IFC_PARSE_API IfcSurfaceOrFaceSurface : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcSurfaceOrFaceSurface > list; +}; +/// Definition from ISO/CD 10303-46:1992: The surface style element select is a selection of the different surface styles to use in the presentation of the side of a surface. +/// +/// The select type only includes the IfcSurfaceStyleRendering (which is the equivalent to surface_style_rendering) from the select type surface_style_element_select. In addition it has the IfcSurfaceStyleLighting, which holds the exact physically based lighting properties for lighting based calculation algorithms (as the opposite to the rendering based calculation), the IfcSurfaceStyleRefraction (for more advanced refraction indices) and IfcSurfaceStyleWithTextures (to allow for image textures applied to surfaces). In addition an IfcExternallyDefinedSurfaceStyle can be selected that points into an external material library. +/// +/// NOTE The IfcSurfaceLightingProperties are needed for exact lighting calculation, because physically based lighting calculation algorithms need exact physically based parameters. The factors in IfcSurfaceStyleRendering lack the physical base, they are intended for rendering calculations, but a lighting calculation based software cannot use these values. +/// +/// NOTE: Corresponding ISO 10303 type: surface_style_element_select. Please refer to ISO/IS 10303-46:1994, p. 85 for the final definition of the formal standard. +/// +/// HISTORY: New Select type in IFC2x2. +class IFC_PARSE_API IfcSurfaceStyleElementSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcSurfaceStyleElementSelect > list; +}; +/// IfcTextFontSelect allows for either a predefined text font, a text font model or an externally defined text font to be used to describe the font of a text literal. The definition of the text font model is based on W3C TR Cascading Style Sheet Version 1, whereas the definition of predefined text font is based on ISO 10303. +/// +/// NOTE  IfcTextFontSelect is an entity that had been adopted from ISO 10303, Industrial automation systems and integration—Product data representation and exchange, Part 46: Integrated generic resources: Visual presentation. Corresponding ISO 10303 name: font_select. Please refer to ISO/IS 10303-46:1994, p. 133 for the final definition of the formal standard. +/// +/// HISTORY  New type in IFC2x2. +/// +/// IFC2x3 CHANGE  The select type has been renamed from IfcFontSelect. +class IFC_PARSE_API IfcTextFontSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcTextFontSelect > list; +}; +/// IfcTimeOrRatioSelect allows a value to be selected as being either a ratio or a time measure. +/// HISTORY New SELECT in IFC2x4 +class IFC_PARSE_API IfcTimeOrRatioSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcTimeOrRatioSelect > list; +}; +/// Definition from IAI: A measure of linear stiffness. TRUE denotes infinite stiffness (rigidity). FALSE denotes no stiffness (a release). A numeric value denotes finite linear-elastic stiffness. +/// +/// HISTORY: New type in IFC 2x4. +class IFC_PARSE_API IfcTranslationalStiffnessSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcTranslationalStiffnessSelect > list; +}; +/// Definition from ISO/CD 10303-42:1992: This select type identifies the two possible ways of trimming a parametric curve; by a Cartesian point on the curve, or by a REAL number defining a parameter value within the parametric range of the curve. +/// +/// NOTE Corresponding ISO 10303 type: trimming_select, please refer to ISO/IS 10303-42:1994, p. 20 for the final definition of the formal standard. +/// +/// HISTORY New Type in IFC Release 1.0 +class IFC_PARSE_API IfcTrimmingSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcTrimmingSelect > list; +}; +/// Definition from ISO/CD 10303-41:1992: A unit is a physical quantity, with a value of one, which is used as a standard in terms of which other quantities are expressed. +/// +/// NOTE: Select item IfcMonetaryUnit is an addition to ISO 10303-41. +/// +/// NOTE: Corresponding ISO 10303 name: unit, please refer to ISO/IS 10303-41 for the final definition of the formal standard. +/// +/// SELECT +/// +/// IfcNamedUnit: A unit which is identified by a name. +/// IfcDerivedUnit: A unit which is derived from an expression of units. +/// IfcMonetaryUnit: A unit for defining currencies. +/// +/// HISTORY: New type in IFC Release 1.5.1. +class IFC_PARSE_API IfcUnit : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcUnit > list; +}; +/// IfcValue is a select type for selecting between more specialised select types IfcSimpleValue, +/// IfcMeasureValue and IfcDerivedMeasureValue. +/// +/// SELECT +/// +/// IfcSimpleValue A select type for basic defined types of simple data type. +/// IfcMeasureValue A select type for basic measure types of ISO 10303-41. +/// IfcDerivedMeasureValue A select type for derived measure types. +/// +/// HISTORY New type in IFC Release 2x. +class IFC_PARSE_API IfcValue : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcValue > list; +}; +/// Definition from ISO/CD 10303-42:1992: This type is used to +/// identify the types of entity which can participate in vector computations. +/// +/// NOTE Corresponding STEP type: +/// vector_or_direction, please refer to ISO/IS 10303-42:1994, p. 20 for the final +/// definition of the formal standard. +/// HISTORY New Type in IFC Release +/// 1.5 +class IFC_PARSE_API IfcVectorOrDirection : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcVectorOrDirection > list; +}; +/// Definition from IAI: A measure of warping stiffness. TRUE denotes infinite stiffness (rigidity). FALSE denotes no stiffness (a release). A numeric value denotes finite linear-elastic stiffness. +/// +/// HISTORY: New type in IFC 2x4. +class IFC_PARSE_API IfcWarpingStiffnessSelect : public virtual IfcUtil::IfcBaseInterface { +public: + static const IfcParse::select_type& Class(); + typedef aggregate_of< IfcWarpingStiffnessSelect > list; +}; +class IFC_PARSE_API IfcActionRequestTypeEnum : public IfcUtil::IfcBaseType { +/// IfcActionRequestTypeEnum defines the types of sources through which a request can be made. +/// HISTORY: New Enumeration in IFC2x4. +/// Enumeration: +/// +/// EMAIL: Request was made through email. +/// FAX: Request was made through facsimile. +/// PHONE: Request was made verbally over a telephone. +/// POST: Request was made through postal mail. +/// VERBAL: Request was made verbally in person. +/// USERDEFINED: User-defined type. +/// NOTDEFINED: Undefined type. +public: + typedef enum {IfcActionRequestType_EMAIL, IfcActionRequestType_FAX, IfcActionRequestType_PHONE, IfcActionRequestType_POST, IfcActionRequestType_VERBAL, IfcActionRequestType_USERDEFINED, IfcActionRequestType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcActionRequestTypeEnum (IfcEntityInstanceData* e); + IfcActionRequestTypeEnum (Value v); + IfcActionRequestTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcActionSourceTypeEnum : public IfcUtil::IfcBaseType { +/// Definition from IAI:This enumeration type contains possible +/// action sources. +/// +/// HISTORY: New type in Release IFC2x +/// Edition 2. +public: + typedef enum {IfcActionSourceType_BRAKES, IfcActionSourceType_BUOYANCY, IfcActionSourceType_COMPLETION_G1, IfcActionSourceType_CREEP, IfcActionSourceType_CURRENT, IfcActionSourceType_DEAD_LOAD_G, IfcActionSourceType_EARTHQUAKE_E, IfcActionSourceType_ERECTION, IfcActionSourceType_FIRE, IfcActionSourceType_ICE, IfcActionSourceType_IMPACT, IfcActionSourceType_IMPULSE, IfcActionSourceType_LACK_OF_FIT, IfcActionSourceType_LIVE_LOAD_Q, IfcActionSourceType_PRESTRESSING_P, IfcActionSourceType_PROPPING, IfcActionSourceType_RAIN, IfcActionSourceType_SETTLEMENT_U, IfcActionSourceType_SHRINKAGE, IfcActionSourceType_SNOW_S, IfcActionSourceType_SYSTEM_IMPERFECTION, IfcActionSourceType_TEMPERATURE_T, IfcActionSourceType_TRANSPORT, IfcActionSourceType_WAVE, IfcActionSourceType_WIND_W, IfcActionSourceType_USERDEFINED, IfcActionSourceType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcActionSourceTypeEnum (IfcEntityInstanceData* e); + IfcActionSourceTypeEnum (Value v); + IfcActionSourceTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcActionTypeEnum : public IfcUtil::IfcBaseType { +/// Definition from IAI: This enumeration type is used to distinguish +/// between possible action types at a high level. It can be used for an automated +/// definition of load combinations and for dimensioning. The contained items and +/// their acronyms are adopted from the Eurocode standard. +/// +/// HISTORY: New type in Release IFC2x +/// Edition 2. +public: + typedef enum {IfcActionType_EXTRAORDINARY_A, IfcActionType_PERMANENT_G, IfcActionType_VARIABLE_Q, IfcActionType_USERDEFINED, IfcActionType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcActionTypeEnum (IfcEntityInstanceData* e); + IfcActionTypeEnum (Value v); + IfcActionTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcActuatorTypeEnum : public IfcUtil::IfcBaseType { +/// The IfcActuatorTypeEnum defines the range of different types of actuator that can be specified. +/// +/// HISTORY: New type in IFC +/// R2.0 +/// Enumeration +/// +/// ELECTRICACTUATOR: A device that electrically actuates a control element. +/// PNEUMATICACTUATOR<: A device that pneumatically actuates a control element +/// HYDRAULICACTUATOR: A device that electrically actuates a control element. +/// HANDOPERATEDACTUATOR: A device that manually actuates a control element. +/// THERMOSTATICACTUATOR: A device that thermostatically actuates a control element. +/// USERDEFINED: User-defined type. +/// NOTDEFINED: Undefined type. +/// +/// See property set of actuator common attributes for specification of +/// properties for hand operated actuators. +public: + typedef enum {IfcActuatorType_ELECTRICACTUATOR, IfcActuatorType_HANDOPERATEDACTUATOR, IfcActuatorType_HYDRAULICACTUATOR, IfcActuatorType_PNEUMATICACTUATOR, IfcActuatorType_THERMOSTATICACTUATOR, IfcActuatorType_USERDEFINED, IfcActuatorType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcActuatorTypeEnum (IfcEntityInstanceData* e); + IfcActuatorTypeEnum (Value v); + IfcActuatorTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcAddressTypeEnum : public IfcUtil::IfcBaseType { +/// Definition from IAI: Identifies the logical location of the address. +/// +/// HISTORY New type in IFC Release 2x. +/// +/// ENUMERATION +/// +/// OFFICE An office address. +/// SITE A site address. +/// HOME A home address. +/// DISTRIBUTIONPOINT A postal distribution point address. +/// USERDEFINED A user defined address type to be provided. +public: + typedef enum {IfcAddressType_DISTRIBUTIONPOINT, IfcAddressType_HOME, IfcAddressType_OFFICE, IfcAddressType_SITE, IfcAddressType_USERDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcAddressTypeEnum (IfcEntityInstanceData* e); + IfcAddressTypeEnum (Value v); + IfcAddressTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcAirTerminalBoxTypeEnum : public IfcUtil::IfcBaseType { +/// This enumeration identifies different types of air terminal boxes. +/// +/// Valid enumerations are: +/// +/// CONSTANTFLOW: Terminal box does not include a means to reset the volume automatically to an outside signal such as thermostat. +/// VARIABLEFLOWPRESSUREDEPENDANT: terminal box includes a means to reset the volume automatically to a different control point in response to an outside signal such as thermostat: air-flow rate depends on supply pressure. +/// VARIABLEFLOWPRESSUREINDEPENDANT: terminal box includes a means to reset the volume automatically to a different control point in response to an outside signal such as thermostat: air-flow rate is independant of supply pressure. +/// USERDEFINED: User-defined terminal box. +/// NOTDEFINED: Undefined terminal box. +/// +/// HISTORY: New enumeration in IFC R2.0 +public: + typedef enum {IfcAirTerminalBoxType_CONSTANTFLOW, IfcAirTerminalBoxType_VARIABLEFLOWPRESSUREDEPENDANT, IfcAirTerminalBoxType_VARIABLEFLOWPRESSUREINDEPENDANT, IfcAirTerminalBoxType_USERDEFINED, IfcAirTerminalBoxType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcAirTerminalBoxTypeEnum (IfcEntityInstanceData* e); + IfcAirTerminalBoxTypeEnum (Value v); + IfcAirTerminalBoxTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcAirTerminalTypeEnum : public IfcUtil::IfcBaseType { +/// Enumeration defining the functional types of air terminals. +/// The IfcAirTerminalTypeEnum contains the following: +/// +/// GRILLE: A covering for any area through which air passes. +/// REGISTER: A grille typically equipped with a damper or control valve. +/// DIFFUSER: An outlet discharging supply air in various directions and planes. +/// LOUVRE: A rectilinear louvre. +/// USERDEFINED: User-defined air terminal type. +/// NOTDEFINED: Undefined air terminal type. +/// +/// NOTE: Architectural louvres within doors or windows are defined by IfcPermeableCoveringProperties. +/// +/// HISTORY: New enumeration in IFC R2x2. Modified in IFC R2x4 to add LOUVRE and remove EYEBALL, IRIS, LINEARGRILLE, LINEARDIFFUSER +public: + typedef enum {IfcAirTerminalType_DIFFUSER, IfcAirTerminalType_GRILLE, IfcAirTerminalType_LOUVRE, IfcAirTerminalType_REGISTER, IfcAirTerminalType_USERDEFINED, IfcAirTerminalType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcAirTerminalTypeEnum (IfcEntityInstanceData* e); + IfcAirTerminalTypeEnum (Value v); + IfcAirTerminalTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcAirToAirHeatRecoveryTypeEnum : public IfcUtil::IfcBaseType { +/// Defines general types of pumps. +/// The IfcPumpTypeEnum contains the following: +/// +/// FIXEDPLATECOUNTERFLOWEXCHANGER: Heat exchanger with moving parts and alternate layers of plates, separated and sealed from the exhaust and supply air stream passages with primary air enters at secondary air outlet location and exits at secondary air inlet location. +/// FIXEDPLATECROSSFLOWEXCHANGER: Heat exchanger with moving parts and alternate layers of plates, separated and sealed from the exhaust and supply air stream passages with secondary air flow in the direction perpendicular to primary air flow. +/// FIXEDPLATEPARALLELFLOWEXCHANGER: Heat exchanger with moving parts and alternate layers of plates, separated and sealed from the exhaust and supply air stream passages with primary air enters at secondary air inlet location and exits at secondary air outlet location. +/// ROTARYWHEEL: A heat wheel with a revolving cylinder filled with an air-permeable medium having a large internal surface area. +/// RUNAROUNDCOILLOOP: A typical coil energy recovery loop places extended surface, finned tube water coils in the supply and exhaust airstreams of a building. +/// HEATPIPE: A passive energy recovery device with a heat pipe divided into evaporator and condenser sections. +/// TWINTOWERENTHALPYRECOVERYLOOPS: An air-to-liquid, liquid-to-air enthalpy recovery system with a sorbent liquid circulates continuously between supply and exhaust airstreams, alternately contacting both airstreams directly in contactor towers. +/// THERMOSIPHONSEALEDTUBEHEATEXCHANGERS: Sealed systems that consist of an evaporator, a condenser, interconnecting piping, and an intermediate working fluid that is present in both liquid and vapor phases where the evaporator and the condenser are usually at opposite ends of a bundle of straight, individual thermosiphon tubes and the exhaust and supply ducts are adjacent to each other. +/// THERMOSIPHONCOILTYPEHEATEXCHANGERS: Sealed systems that consist of an evaporator, a condenser, interconnecting piping, and an intermediate working fluid that is present in both liquid and vapor phases where the evaporator and condensor coils are installed independently in the ducts and are interconnected by the working fluid piping. +/// USERDEFINED: User-defined air to air heat recovery type. +/// NOTDEFINED: Undefined air to air heat recovery type. +/// +/// HISTORY: New enumeration in IFC R2x. +public: + typedef enum {IfcAirToAirHeatRecoveryType_FIXEDPLATECOUNTERFLOWEXCHANGER, IfcAirToAirHeatRecoveryType_FIXEDPLATECROSSFLOWEXCHANGER, IfcAirToAirHeatRecoveryType_FIXEDPLATEPARALLELFLOWEXCHANGER, IfcAirToAirHeatRecoveryType_HEATPIPE, IfcAirToAirHeatRecoveryType_ROTARYWHEEL, IfcAirToAirHeatRecoveryType_RUNAROUNDCOILLOOP, IfcAirToAirHeatRecoveryType_THERMOSIPHONCOILTYPEHEATEXCHANGERS, IfcAirToAirHeatRecoveryType_THERMOSIPHONSEALEDTUBEHEATEXCHANGERS, IfcAirToAirHeatRecoveryType_TWINTOWERENTHALPYRECOVERYLOOPS, IfcAirToAirHeatRecoveryType_USERDEFINED, IfcAirToAirHeatRecoveryType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcAirToAirHeatRecoveryTypeEnum (IfcEntityInstanceData* e); + IfcAirToAirHeatRecoveryTypeEnum (Value v); + IfcAirToAirHeatRecoveryTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcAlarmTypeEnum : public IfcUtil::IfcBaseType { +/// The IfcAlarmTypeEnum defines the range of different types of alarm that can be specified. +/// +/// HISTORY: New type in IFC 2x2 +/// +/// Enumeration +/// +/// BELL: An audible alarm. +/// BREAKGLASSBUTTON: An alarm activation mechanism in which a protective glass has to be broken to enable a button to be pressed. +/// LIGHT: A visual alarm. +/// MANUALPULLBOX: An alarm activation mechanism in which activation is achieved by a pulling action. +/// SIREN: An audible alarm. +/// WHISTLE: An audible alarm. +/// USERDEFINED: User-defined type. +/// NOTDEFINED: Undefined type. +public: + typedef enum {IfcAlarmType_BELL, IfcAlarmType_BREAKGLASSBUTTON, IfcAlarmType_LIGHT, IfcAlarmType_MANUALPULLBOX, IfcAlarmType_RAILWAYCROCODILE, IfcAlarmType_RAILWAYDETONATOR, IfcAlarmType_SIREN, IfcAlarmType_WHISTLE, IfcAlarmType_USERDEFINED, IfcAlarmType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcAlarmTypeEnum (IfcEntityInstanceData* e); + IfcAlarmTypeEnum (Value v); + IfcAlarmTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcAlignmentCantSegmentTypeEnum : public IfcUtil::IfcBaseType { + +public: + typedef enum {IfcAlignmentCantSegmentType_BLOSSCURVE, IfcAlignmentCantSegmentType_CONSTANTCANT, IfcAlignmentCantSegmentType_COSINECURVE, IfcAlignmentCantSegmentType_HELMERTCURVE, IfcAlignmentCantSegmentType_LINEARTRANSITION, IfcAlignmentCantSegmentType_SINECURVE, IfcAlignmentCantSegmentType_VIENNESEBEND} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcAlignmentCantSegmentTypeEnum (IfcEntityInstanceData* e); + IfcAlignmentCantSegmentTypeEnum (Value v); + IfcAlignmentCantSegmentTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcAlignmentHorizontalSegmentTypeEnum : public IfcUtil::IfcBaseType { + +public: + typedef enum {IfcAlignmentHorizontalSegmentType_BLOSSCURVE, IfcAlignmentHorizontalSegmentType_CIRCULARARC, IfcAlignmentHorizontalSegmentType_CLOTHOID, IfcAlignmentHorizontalSegmentType_COSINECURVE, IfcAlignmentHorizontalSegmentType_CUBIC, IfcAlignmentHorizontalSegmentType_HELMERTCURVE, IfcAlignmentHorizontalSegmentType_LINE, IfcAlignmentHorizontalSegmentType_SINECURVE, IfcAlignmentHorizontalSegmentType_VIENNESEBEND} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcAlignmentHorizontalSegmentTypeEnum (IfcEntityInstanceData* e); + IfcAlignmentHorizontalSegmentTypeEnum (Value v); + IfcAlignmentHorizontalSegmentTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcAlignmentTypeEnum : public IfcUtil::IfcBaseType { + +public: + typedef enum {IfcAlignmentType_USERDEFINED, IfcAlignmentType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcAlignmentTypeEnum (IfcEntityInstanceData* e); + IfcAlignmentTypeEnum (Value v); + IfcAlignmentTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcAlignmentVerticalSegmentTypeEnum : public IfcUtil::IfcBaseType { + +public: + typedef enum {IfcAlignmentVerticalSegmentType_CIRCULARARC, IfcAlignmentVerticalSegmentType_CLOTHOID, IfcAlignmentVerticalSegmentType_CONSTANTGRADIENT, IfcAlignmentVerticalSegmentType_PARABOLICARC} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcAlignmentVerticalSegmentTypeEnum (IfcEntityInstanceData* e); + IfcAlignmentVerticalSegmentTypeEnum (Value v); + IfcAlignmentVerticalSegmentTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcAnalysisModelTypeEnum : public IfcUtil::IfcBaseType { +/// Definition from IAI: This type definition is used to distinguish +/// between different types of structural analysis models. The analysis models are +/// differentiated by their dimensionality. +/// +/// HISTORY: New type in Release IFC2x +/// Edition 2. +public: + typedef enum {IfcAnalysisModelType_IN_PLANE_LOADING_2D, IfcAnalysisModelType_LOADING_3D, IfcAnalysisModelType_OUT_PLANE_LOADING_2D, IfcAnalysisModelType_USERDEFINED, IfcAnalysisModelType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcAnalysisModelTypeEnum (IfcEntityInstanceData* e); + IfcAnalysisModelTypeEnum (Value v); + IfcAnalysisModelTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcAnalysisTheoryTypeEnum : public IfcUtil::IfcBaseType { +/// Definition from IAI: This type definition is used to distinguish +/// between different types of structural analysis methods, i.e. first order +/// theory, second order theory (small deformations), third order theory (large +/// deformations) and the full nonlinear theory (geometric nonlinearity together with other nonlinearities, e.g. plasticity). +/// +/// HISTORY: New type in Release IFC2x +/// Edition 2. +public: + typedef enum {IfcAnalysisTheoryType_FIRST_ORDER_THEORY, IfcAnalysisTheoryType_FULL_NONLINEAR_THEORY, IfcAnalysisTheoryType_SECOND_ORDER_THEORY, IfcAnalysisTheoryType_THIRD_ORDER_THEORY, IfcAnalysisTheoryType_USERDEFINED, IfcAnalysisTheoryType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcAnalysisTheoryTypeEnum (IfcEntityInstanceData* e); + IfcAnalysisTheoryTypeEnum (Value v); + IfcAnalysisTheoryTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcAnnotationTypeEnum : public IfcUtil::IfcBaseType { + +public: + typedef enum {IfcAnnotationType_CONTOURLINE, IfcAnnotationType_DIMENSION, IfcAnnotationType_ISOBAR, IfcAnnotationType_ISOLUX, IfcAnnotationType_ISOTHERM, IfcAnnotationType_LEADER, IfcAnnotationType_SURVEY, IfcAnnotationType_SYMBOL, IfcAnnotationType_TEXT, IfcAnnotationType_USERDEFINED, IfcAnnotationType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcAnnotationTypeEnum (IfcEntityInstanceData* e); + IfcAnnotationTypeEnum (Value v); + IfcAnnotationTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcArithmeticOperatorEnum : public IfcUtil::IfcBaseType { +/// IfcArithmeticOperatorEnum specifies the form of arithmetical operation implied by the relationship. +/// Enumeration +/// +/// ADD +/// DIVIDE +/// MULTIPLY +/// SUBTRACT +/// +/// HISTORY: New enumeration in IFC2x2. +/// +/// Use definitions +/// There can be only one arithmetic operator for each applied value relationship. This is to enforce arithmetic consistency. Given this consistency, the cardinality of the IfcAppliedValueRelationship.Components attribute is a set of one to many applied values that are components of an applied value. +public: + typedef enum {IfcArithmeticOperator_ADD, IfcArithmeticOperator_DIVIDE, IfcArithmeticOperator_MODULO, IfcArithmeticOperator_MULTIPLY, IfcArithmeticOperator_SUBTRACT} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcArithmeticOperatorEnum (IfcEntityInstanceData* e); + IfcArithmeticOperatorEnum (Value v); + IfcArithmeticOperatorEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcAssemblyPlaceEnum : public IfcUtil::IfcBaseType { +/// Definition from IAI: Enumeration defining where the +/// assembly is intended to take place, either in a factory or +/// on the building site. +/// +/// HISTORY New enumeration in +/// Release IFC2x Edition 2. +/// +/// Enumeration +/// +/// SITE - this assembly is assembled at site +/// +/// FACTORY - this assembly is assembled in a factory +public: + typedef enum {IfcAssemblyPlace_FACTORY, IfcAssemblyPlace_SITE, IfcAssemblyPlace_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcAssemblyPlaceEnum (IfcEntityInstanceData* e); + IfcAssemblyPlaceEnum (Value v); + IfcAssemblyPlaceEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcAudioVisualApplianceTypeEnum : public IfcUtil::IfcBaseType { +/// Defines the range of different types of audio-video devices that can be specified. +/// HISTORY: New enumeration in IFC2x4 +/// +/// AMPLIFIER: A device that receives an audio signal and amplifies it to play through speakers. +/// CAMERA: A device that records images, either as a still photograph or as moving images known as videos or movies. Note that a camera may operate with light from the visible spectrum or from other parts of the electromagnetic spectrum such as infrared or ultraviolet. +/// DISPLAY: An electronic device that represents information in visual form such as a flat-panel display or television. +/// MICROPHONE: An acoustic-to-electric transducer or sensor that converts sound into an electrical signal. Microphones types in use include electromagnetic induction (dynamic microphones), capacitance change (condenser microphones) or piezoelectric generation to produce the signal from mechanical vibration. +/// PLAYER: A device that plays audio and/or video content directly or to another device, having fixed or removable storage media. +/// PROJECTOR: An apparatus for projecting a picture on a screen. Whether the device is an overhead, slide projector, or a film projector, it is usually referred to as simply a projector. +/// RECEIVER: A device that receives audio and/or video signals, switches sources, and amplifies signals to play through speakers. +/// SPEAKER: A loudspeaker, speaker, or speaker system is an electroacoustical transducer that converts an electrical signal to sound. +/// SWITCHER: A device that receives audio and/or video signals, switches sources, and transmits signals to downstream devices. +/// TELEPHONE: A telecommunications device that is used to transmit and receive sound, and optionally video. +/// TUNER: An electronic receiver that detects, demodulates, and amplifies transmitted signals. +public: + typedef enum {IfcAudioVisualApplianceType_AMPLIFIER, IfcAudioVisualApplianceType_CAMERA, IfcAudioVisualApplianceType_COMMUNICATIONTERMINAL, IfcAudioVisualApplianceType_DISPLAY, IfcAudioVisualApplianceType_MICROPHONE, IfcAudioVisualApplianceType_PLAYER, IfcAudioVisualApplianceType_PROJECTOR, IfcAudioVisualApplianceType_RECEIVER, IfcAudioVisualApplianceType_RECORDINGEQUIPMENT, IfcAudioVisualApplianceType_SPEAKER, IfcAudioVisualApplianceType_SWITCHER, IfcAudioVisualApplianceType_TELEPHONE, IfcAudioVisualApplianceType_TUNER, IfcAudioVisualApplianceType_USERDEFINED, IfcAudioVisualApplianceType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcAudioVisualApplianceTypeEnum (IfcEntityInstanceData* e); + IfcAudioVisualApplianceTypeEnum (Value v); + IfcAudioVisualApplianceTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcBSplineCurveForm : public IfcUtil::IfcBaseType { +/// Definition from ISO/CD 10303-42:1992: This type is used to indicate that the B-spline curve represents a part of a curve of some specific form. +/// +/// Enumeration +/// +/// polyline form: A connected sequence of line segments represented by degree 1 B-spline basis functions. +/// circular arc: An arc of a circle, or a complete circle represented by a B-spline curve. +/// elliptic arc: An arc of an ellipse, or a complete ellipse, represented by a B-spline curve. +/// parabolic arc: An arc of finite length of a parabola represented by a B-spline curve. +/// hyperbolic arc: An arc of finite length of one branch of a hyperbola represented by a B-spline curve. +/// unspecified: A B-spline curve for which no particular form is specified. +/// +/// NOTE Corresponding ISO 10303 type: b_spline_curve_form. Please refer to ISO/IS 10303-42:1994, p. 15 for the final definition of the formal standard. +/// +/// HISTORY New type in Release IFC2x2. +public: + typedef enum {IfcBSplineCurveForm_CIRCULAR_ARC, IfcBSplineCurveForm_ELLIPTIC_ARC, IfcBSplineCurveForm_HYPERBOLIC_ARC, IfcBSplineCurveForm_PARABOLIC_ARC, IfcBSplineCurveForm_POLYLINE_FORM, IfcBSplineCurveForm_UNSPECIFIED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcBSplineCurveForm (IfcEntityInstanceData* e); + IfcBSplineCurveForm (Value v); + IfcBSplineCurveForm (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcBSplineSurfaceForm : public IfcUtil::IfcBaseType { + +public: + typedef enum {IfcBSplineSurfaceForm_CONICAL_SURF, IfcBSplineSurfaceForm_CYLINDRICAL_SURF, IfcBSplineSurfaceForm_GENERALISED_CONE, IfcBSplineSurfaceForm_PLANE_SURF, IfcBSplineSurfaceForm_QUADRIC_SURF, IfcBSplineSurfaceForm_RULED_SURF, IfcBSplineSurfaceForm_SPHERICAL_SURF, IfcBSplineSurfaceForm_SURF_OF_LINEAR_EXTRUSION, IfcBSplineSurfaceForm_SURF_OF_REVOLUTION, IfcBSplineSurfaceForm_TOROIDAL_SURF, IfcBSplineSurfaceForm_UNSPECIFIED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcBSplineSurfaceForm (IfcEntityInstanceData* e); + IfcBSplineSurfaceForm (Value v); + IfcBSplineSurfaceForm (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcBeamTypeEnum : public IfcUtil::IfcBaseType { +/// Definition from IAI: This enumeration defines the +/// different types of linear elements an IfcBeamType object +/// can fulfill: +/// +/// BEAM: A standard beam usually used horizontally. +/// JOIST: A beam used to support a floor or ceiling. +/// HOLLOWCORE: A wide often prestressed beam with a +/// hollow-core profile that usually serves as a slab component. +/// LINTEL: A beam or horizontal piece of material over an +/// opening (e.g. door, window). +/// SPANDREL: A tall beam placed on the facade of a +/// building. One tall side is usually finished to provide the +/// exterior of the building. Can be used to support joists or slab +/// elements on its interior side. +/// +/// NOTE They are also referred to as "spandrel +/// panels", which are parts of a facade and sometimes have +/// supporting consoles for floor slabs +/// integrated. +/// +/// T_BEAM: A beam that forms part of a slab construction +/// and acts together with the slab which its carries. Such beams are +/// often of T-shape (therefore the English name), but may have other +/// shapes as well, e.g. an L-Shape or an Inverted-T-Shape. +/// +/// NOTE In order to distinguish beams by shape, +/// the assigned IfcProfileDef subtypes provide the shape type +/// and, if using a subtype of +/// IfcParameterizedProfileDef, also the shape +/// parameterization. +/// +/// USERDEFINED: User-defined linear beam element. +/// NOTDEFINED: Undefined linear beam element +/// +/// HISTORY New Enumeration +/// in Release IFC2x Edition 2. +/// IFC2x4 CHANGE The enumerators +/// HOLLOWCORE and SPANDREL have been +/// added. +public: + typedef enum {IfcBeamType_BEAM, IfcBeamType_CORNICE, IfcBeamType_DIAPHRAGM, IfcBeamType_EDGEBEAM, IfcBeamType_GIRDER_SEGMENT, IfcBeamType_HATSTONE, IfcBeamType_HOLLOWCORE, IfcBeamType_JOIST, IfcBeamType_LINTEL, IfcBeamType_PIERCAP, IfcBeamType_SPANDREL, IfcBeamType_T_BEAM, IfcBeamType_USERDEFINED, IfcBeamType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcBeamTypeEnum (IfcEntityInstanceData* e); + IfcBeamTypeEnum (Value v); + IfcBeamTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcBearingTypeEnum : public IfcUtil::IfcBaseType { + +public: + typedef enum {IfcBearingType_CYLINDRICAL, IfcBearingType_DISK, IfcBearingType_ELASTOMERIC, IfcBearingType_GUIDE, IfcBearingType_POT, IfcBearingType_ROCKER, IfcBearingType_ROLLER, IfcBearingType_SPHERICAL, IfcBearingType_USERDEFINED, IfcBearingType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcBearingTypeEnum (IfcEntityInstanceData* e); + IfcBearingTypeEnum (Value v); + IfcBearingTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcBenchmarkEnum : public IfcUtil::IfcBaseType { +/// IfcBenchmarkEnum is an enumeration used to identify the logical comparators that can be applied in conjunction with constraint values. +/// +/// HISTORY: New type in IFC Release 2.0 +/// +/// IFC2x4 CHANGE: Extended to include comparators for item-set and set-item comparisons: INCLUDES, NOTINCLUDES, INCLUDEDIN and NOTINCLUDEDIN, to test if an individual item is a member of a given aggregation, or if an aggregation has a given individual item as a member. +/// +/// Enumeration +/// +/// Value +/// Definition +/// +/// GREATERTHAN +/// Identifies that a value must be greater than that set by the constraint. +/// +/// GREATERTHANOREQUALTO +/// Identifies that a value must be either greater than or equal to that set by the constraint. +/// +/// LESSTHAN +/// Identifies that a value must be less than that set by the constraint. +/// +/// LESSTHANOREQUALTO +/// Identifies that a value must be either less than or equal to that set by the constraint. +/// +/// EQUALTO +/// Identifies that a value must be equal to that set by the constraint. +/// +/// NOTEQUALTO +/// Identifies that a value must be not equal to that set by the constraint. +/// +/// INCLUDES +/// Identifies that an aggregation (set, list or table) must include the value (individual item) set by the constraint. +/// +/// NOTINCLUDES +/// Identifies that an aggregation (set, list or table) must not include (i.e must exclude) the value (individual item) set by the constraint. +/// +/// INCLUDEDIN +/// Identifies that a value (individual item) must be included in the aggregation (set, list or table) set by the constraint. +/// +/// NOTINCLUDEDIN +/// Identifies that a value (individual item) must not be included (i.e. must be excluded) in the aggregation (set, list or table) set by the constraint. +public: + typedef enum {IfcBenchmark_EQUALTO, IfcBenchmark_GREATERTHAN, IfcBenchmark_GREATERTHANOREQUALTO, IfcBenchmark_INCLUDEDIN, IfcBenchmark_INCLUDES, IfcBenchmark_LESSTHAN, IfcBenchmark_LESSTHANOREQUALTO, IfcBenchmark_NOTEQUALTO, IfcBenchmark_NOTINCLUDEDIN, IfcBenchmark_NOTINCLUDES} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcBenchmarkEnum (IfcEntityInstanceData* e); + IfcBenchmarkEnum (Value v); + IfcBenchmarkEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcBoilerTypeEnum : public IfcUtil::IfcBaseType { +/// Enumeration defining the typical types of boilers. +/// The IfcBoilerTypeEnum contains the following: +/// +/// WATER: Water boiler. +/// STEAM: Steam boiler. +/// USERDEFINED: User-defined Boiler type. +/// NOTDEFINED: Undefined Boiler type. +/// +/// HISTORY: New enumeration in IFC R2x. +public: + typedef enum {IfcBoilerType_STEAM, IfcBoilerType_WATER, IfcBoilerType_USERDEFINED, IfcBoilerType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcBoilerTypeEnum (IfcEntityInstanceData* e); + IfcBoilerTypeEnum (Value v); + IfcBoilerTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcBooleanOperator : public IfcUtil::IfcBaseType { +/// Definition from ISO/CD 10303-42:1992: This type defines the three Boolean operators used in the definition of CSG solids. +/// +/// UNION: The operation of constructing the regularized set theoretic union of the volumes defined by two solids. +/// INTERSECTION: The operation of constructing the regularised set theoretic intersection of the volumes defined by two solids. +/// DIFFERENCE: The operation of constructing the regularized set theoretic intersection of the volumes defined by two solids. +/// +/// NOTE Corresponding STEP type: boolean_operator, please refer to ISO/IS 10303-42:1994, p.167 for the final definition of the formal standard. +/// +/// HISTORY New Type in IFC Release 1.5.1. +public: + typedef enum {IfcBooleanOperator_DIFFERENCE, IfcBooleanOperator_INTERSECTION, IfcBooleanOperator_UNION} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcBooleanOperator (IfcEntityInstanceData* e); + IfcBooleanOperator (Value v); + IfcBooleanOperator (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcBridgePartTypeEnum : public IfcUtil::IfcBaseType { + +public: + typedef enum {IfcBridgePartType_ABUTMENT, IfcBridgePartType_DECK, IfcBridgePartType_DECK_SEGMENT, IfcBridgePartType_FOUNDATION, IfcBridgePartType_PIER, IfcBridgePartType_PIER_SEGMENT, IfcBridgePartType_PYLON, IfcBridgePartType_SUBSTRUCTURE, IfcBridgePartType_SUPERSTRUCTURE, IfcBridgePartType_SURFACESTRUCTURE, IfcBridgePartType_USERDEFINED, IfcBridgePartType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcBridgePartTypeEnum (IfcEntityInstanceData* e); + IfcBridgePartTypeEnum (Value v); + IfcBridgePartTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcBridgeTypeEnum : public IfcUtil::IfcBaseType { + +public: + typedef enum {IfcBridgeType_ARCHED, IfcBridgeType_CABLE_STAYED, IfcBridgeType_CANTILEVER, IfcBridgeType_CULVERT, IfcBridgeType_FRAMEWORK, IfcBridgeType_GIRDER, IfcBridgeType_SUSPENSION, IfcBridgeType_TRUSS, IfcBridgeType_USERDEFINED, IfcBridgeType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcBridgeTypeEnum (IfcEntityInstanceData* e); + IfcBridgeTypeEnum (Value v); + IfcBridgeTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcBuildingElementPartTypeEnum : public IfcUtil::IfcBaseType { +/// Definition from IAI: This enumeration defines the different types of building element parts: +/// +/// INSULATION: The part provides thermal insulation, for example as insulation layer between wall panels in sandwich walls or as infill in stud walls. +/// PRECASTPANEL: The part is a precast panel, usually as an internal or external layer in a sandwich wall panel. +/// USERDEFINED: User-defined accessory +/// NOTDEFINED: Undefined accessory +/// +/// HISTORY New Enumeration in IFC 2x4. +public: + typedef enum {IfcBuildingElementPartType_APRON, IfcBuildingElementPartType_ARMOURUNIT, IfcBuildingElementPartType_INSULATION, IfcBuildingElementPartType_PRECASTPANEL, IfcBuildingElementPartType_SAFETYCAGE, IfcBuildingElementPartType_USERDEFINED, IfcBuildingElementPartType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcBuildingElementPartTypeEnum (IfcEntityInstanceData* e); + IfcBuildingElementPartTypeEnum (Value v); + IfcBuildingElementPartTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcBuildingElementProxyTypeEnum : public IfcUtil::IfcBaseType { +/// Definition from IAI: This enumeration defines the +/// available generic types for IfcBuildingElementProxyType. +/// +/// HISTORY New enumeration +/// inRelease IFC2x Edition 3. +/// +/// Enumeration +/// +/// USERDEFINED +/// +/// NOTDEFINED +public: + typedef enum {IfcBuildingElementProxyType_COMPLEX, IfcBuildingElementProxyType_ELEMENT, IfcBuildingElementProxyType_PARTIAL, IfcBuildingElementProxyType_PROVISIONFORSPACE, IfcBuildingElementProxyType_PROVISIONFORVOID, IfcBuildingElementProxyType_USERDEFINED, IfcBuildingElementProxyType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcBuildingElementProxyTypeEnum (IfcEntityInstanceData* e); + IfcBuildingElementProxyTypeEnum (Value v); + IfcBuildingElementProxyTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcBuildingSystemTypeEnum : public IfcUtil::IfcBaseType { +/// Definition from IAI: This enumeration identifies +/// different types of distribution systems. +/// HISTORY New enumeration +/// in IFC2x4. +/// Valid enumerations for building systems include: +/// +/// FENESTRATION: System of doors, windows, and other +/// fillings in opening in a building envelop that are designed to +/// permit the passage of air or light, +/// SHADING: System of shading elements (external or +/// internal) that permits the limitation or control of impact of +/// natural sun light, +/// TRANSPORT: System of all transport elements in a +/// building that enables the transport of people or goods. +public: + typedef enum {IfcBuildingSystemType_FENESTRATION, IfcBuildingSystemType_FOUNDATION, IfcBuildingSystemType_LOADBEARING, IfcBuildingSystemType_OUTERSHELL, IfcBuildingSystemType_SHADING, IfcBuildingSystemType_TRANSPORT, IfcBuildingSystemType_USERDEFINED, IfcBuildingSystemType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcBuildingSystemTypeEnum (IfcEntityInstanceData* e); + IfcBuildingSystemTypeEnum (Value v); + IfcBuildingSystemTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcBuiltSystemTypeEnum : public IfcUtil::IfcBaseType { + +public: + typedef enum {IfcBuiltSystemType_EROSIONPREVENTION, IfcBuiltSystemType_FENESTRATION, IfcBuiltSystemType_FOUNDATION, IfcBuiltSystemType_LOADBEARING, IfcBuiltSystemType_MOORING, IfcBuiltSystemType_OUTERSHELL, IfcBuiltSystemType_PRESTRESSING, IfcBuiltSystemType_RAILWAYLINE, IfcBuiltSystemType_RAILWAYTRACK, IfcBuiltSystemType_REINFORCING, IfcBuiltSystemType_SHADING, IfcBuiltSystemType_TRACKCIRCUIT, IfcBuiltSystemType_TRANSPORT, IfcBuiltSystemType_USERDEFINED, IfcBuiltSystemType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcBuiltSystemTypeEnum (IfcEntityInstanceData* e); + IfcBuiltSystemTypeEnum (Value v); + IfcBuiltSystemTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcBurnerTypeEnum : public IfcUtil::IfcBaseType { +/// Enumeration defining the functional type of burner. +/// The IfcBurnerTypeEnum contains the following: +/// +/// USERDEFINED: User-defined burner type. +/// NOTDEFINED: Undefined burner type. +/// +/// HISTORY: New enumeration in IFC R2x4. +public: + typedef enum {IfcBurnerType_USERDEFINED, IfcBurnerType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcBurnerTypeEnum (IfcEntityInstanceData* e); + IfcBurnerTypeEnum (Value v); + IfcBurnerTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcCableCarrierFittingTypeEnum : public IfcUtil::IfcBaseType { +/// The IfcCableCarrierFittingTypeEnum defines the range of different types of cable carrier fitting that can be specified. +/// HISTORY: New type in IFC 2x2 +/// Enumeration +/// +/// BEND: A fitting that changes the route of the cable carrier. +/// CROSS: A fitting at which two branches are taken from the main route of the cable carrier simultaneously. +/// REDUCER: A fitting that changes the physical size of the main route of the cable carrier. +/// TEE: A fitting at which a branch is taken from the main route of the cable carrier. +/// USERDEFINED: User-defined type. +/// NOTDEFINED: Undefined type. +public: + typedef enum {IfcCableCarrierFittingType_BEND, IfcCableCarrierFittingType_CONNECTOR, IfcCableCarrierFittingType_CROSS, IfcCableCarrierFittingType_JUNCTION, IfcCableCarrierFittingType_REDUCER, IfcCableCarrierFittingType_TEE, IfcCableCarrierFittingType_TRANSITION, IfcCableCarrierFittingType_USERDEFINED, IfcCableCarrierFittingType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcCableCarrierFittingTypeEnum (IfcEntityInstanceData* e); + IfcCableCarrierFittingTypeEnum (Value v); + IfcCableCarrierFittingTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcCableCarrierSegmentTypeEnum : public IfcUtil::IfcBaseType { +/// The IfcCableCarrierSegmentTypeEnum defines the range of different types of cable carrier segment that can be specified. +/// HISTORY: New type in IFC 2x2 +/// Enumeration +/// +/// CABLELADDERSEGMENT: An open carrier segment on which cables are carried on a ladder structure. +/// CABLETRAYSEGMENT: A (typically) open carrier segment onto which cables are laid. +/// CABLETRUNKINGSEGMENT: An enclosed carrier segment with one or more compartments into which cables are placed. +/// CONDUITSEGMENT: An enclosed tubular carrier segment through which cables are pulled. +/// USERDEFINED: User-defined type. +/// NOTDEFINED: Undefined type. +public: + typedef enum {IfcCableCarrierSegmentType_CABLEBRACKET, IfcCableCarrierSegmentType_CABLELADDERSEGMENT, IfcCableCarrierSegmentType_CABLETRAYSEGMENT, IfcCableCarrierSegmentType_CABLETRUNKINGSEGMENT, IfcCableCarrierSegmentType_CATENARYWIRE, IfcCableCarrierSegmentType_CONDUITSEGMENT, IfcCableCarrierSegmentType_DROPPER, IfcCableCarrierSegmentType_USERDEFINED, IfcCableCarrierSegmentType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcCableCarrierSegmentTypeEnum (IfcEntityInstanceData* e); + IfcCableCarrierSegmentTypeEnum (Value v); + IfcCableCarrierSegmentTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcCableFittingTypeEnum : public IfcUtil::IfcBaseType { +/// The IfcCableFittingTypeEnum defines the range of different types of cable fitting that can be specified. +/// HISTORY: New type in IFC 2x4 +/// Enumeration +/// +/// CONNECTOR: A fitting that joins two cable segments of the same connector type (though potentially different gender). +/// ENTRY: A fitting that begins a cable segment at a non-electrical element such as a grounding clamp attached to a pipe. +/// EXIT: A fitting that ends a cable segment at a non-electrical element such as a grounding clamp attached to a pipe or to the ground. +/// JUNCTION: A fitting that joins three or more segments of arbitrary connector types for signal splitting or multiplexing. +/// TRANSITION: A fitting that joins two cable segments of different connector types. +/// USERDEFINED: User-defined type. +/// NOTDEFINED: Undefined type. +public: + typedef enum {IfcCableFittingType_CONNECTOR, IfcCableFittingType_ENTRY, IfcCableFittingType_EXIT, IfcCableFittingType_FANOUT, IfcCableFittingType_JUNCTION, IfcCableFittingType_TRANSITION, IfcCableFittingType_USERDEFINED, IfcCableFittingType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcCableFittingTypeEnum (IfcEntityInstanceData* e); + IfcCableFittingTypeEnum (Value v); + IfcCableFittingTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcCableSegmentTypeEnum : public IfcUtil::IfcBaseType { +/// The IfcCableSegmentTypeEnum defines the range of different types of cable segment that can be specified. +/// +/// HISTORY: New type in IFC +/// 2x2. Core and busbar segment added in IFC 2x4. +/// Enumeration +/// +/// BUSBARSEGMENT: Electrical conductor that makes a common connection between several electrical circuits. Properties of a busbar are the same as those of a cable segment and are captured by the cable segment property set. +/// CABLESEGMENT: 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 core segments or conductor segments wrapped together. +/// CONDUCTORSEGMENT: A single linear element within a cable or an exposed wire (such as for grounding) with the specific purpose to lead electric current, data, or a telecommunications signal. +/// CORESEGMENT: A self contained element of a cable that comprises one or more conductors and sheathing.The core of one lead is normally single wired or multiwired which are intertwined. +/// USERDEFINED: User-defined type. +/// NOTDEFINED: Undefined type. +public: + typedef enum {IfcCableSegmentType_BUSBARSEGMENT, IfcCableSegmentType_CABLESEGMENT, IfcCableSegmentType_CONDUCTORSEGMENT, IfcCableSegmentType_CONTACTWIRESEGMENT, IfcCableSegmentType_CORESEGMENT, IfcCableSegmentType_FIBERSEGMENT, IfcCableSegmentType_FIBERTUBE, IfcCableSegmentType_OPTICALCABLESEGMENT, IfcCableSegmentType_STITCHWIRE, IfcCableSegmentType_WIREPAIRSEGMENT, IfcCableSegmentType_USERDEFINED, IfcCableSegmentType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcCableSegmentTypeEnum (IfcEntityInstanceData* e); + IfcCableSegmentTypeEnum (Value v); + IfcCableSegmentTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcCaissonFoundationTypeEnum : public IfcUtil::IfcBaseType { + +public: + typedef enum {IfcCaissonFoundationType_CAISSON, IfcCaissonFoundationType_WELL, IfcCaissonFoundationType_USERDEFINED, IfcCaissonFoundationType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcCaissonFoundationTypeEnum (IfcEntityInstanceData* e); + IfcCaissonFoundationTypeEnum (Value v); + IfcCaissonFoundationTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcChangeActionEnum : public IfcUtil::IfcBaseType { +/// IfcChangeActionEnum identifies the type of change that might have occurred to the object during the last session (for example, added, modified, deleted). This information is required in a partial model exchange scenario so that an application or model server will know how an object might have been affected by the previous application. Valid enumerations are: +/// +/// NOCHANGE: Object has not been modified. +/// MODIFIED: A modification to the object has been made by the user and application defined by the LastModifyingUser and LastModifyingApplication respectively. +/// ADDED: The object has been created by the user and application defined by the OwningUser and OwningApplication respectively. +/// DELETED: The object has been deleted by the user and application defined by the LastModifyingUser and LastModifyingApplication respectively. +/// NOTDEFINED: The change action is not known or has not been defined. +/// +/// Consider Application A will create an IFC dataset that it wants to publish to others for modification and have the ability to subsequently merge these changes back into the original model. Before publication, it may want to set the IfcChangeActionEnum to NOCHANGE to establish a baseline so that other application changes can be easily identified. Application B then receives this IFC dataset and adds a new object and sets IfcChangeActionEnum to ADDED with Application B defined as the OwningApplication. Application B then modifies an existing object and (re)defines the LastModifiedDate to the time of the modification, LastModifyingUser to the IfcPersonAndOrganization making the change, and sets the LastModifyingApplication to Application B. When Application A receives this modified dataset, it can determine which objects have been added and modified by Application B and either merge or reject these changes as necessary. Consequently, the intent is that an application only modifies the value of IfcChangeActionEnum when it does something to the object, with the further intent that a model server is responsible for clearing the IfcChangeActionEnum back to NOCHANGE when it is ready to be republished. +/// +/// HISTORY: New enumeration in IFC R2.0. Modified in IFC2x4. +public: + typedef enum {IfcChangeAction_ADDED, IfcChangeAction_DELETED, IfcChangeAction_MODIFIED, IfcChangeAction_NOCHANGE, IfcChangeAction_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcChangeActionEnum (IfcEntityInstanceData* e); + IfcChangeActionEnum (Value v); + IfcChangeActionEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcChillerTypeEnum : public IfcUtil::IfcBaseType { +/// Enumeration defining the typical types of Chillers classified by their method of heat rejection. +/// The IfcChillerTypeEnum contains the following: +/// +/// AIRCOOLED: Air cooled chiller. +/// WATERCOOLED: Water cooled chiller. +/// HEATRECOVERY: Heat recovery chiller. +/// USERDEFINED: User-defined chiller type. +/// NOTDEFINED: Undefined chiller type. +/// +/// HISTORY: New enumeration in IFC R2x. +public: + typedef enum {IfcChillerType_AIRCOOLED, IfcChillerType_HEATRECOVERY, IfcChillerType_WATERCOOLED, IfcChillerType_USERDEFINED, IfcChillerType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcChillerTypeEnum (IfcEntityInstanceData* e); + IfcChillerTypeEnum (Value v); + IfcChillerTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcChimneyTypeEnum : public IfcUtil::IfcBaseType { +/// Definition from IAI: Enumeration defining the valid +/// types of chimneys that can be predefined using the +/// enumeration values. +/// +/// HISTORY New Enumeration in +/// ReleaseIFC2x4 +/// +/// NOTE Currently there are no specific enumerators +/// defined, the IfcChimneyTypeEnum has been added +/// for future extensions. +public: + typedef enum {IfcChimneyType_USERDEFINED, IfcChimneyType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcChimneyTypeEnum (IfcEntityInstanceData* e); + IfcChimneyTypeEnum (Value v); + IfcChimneyTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcCoilTypeEnum : public IfcUtil::IfcBaseType { +/// Enumeration defining the typical types of coils. +/// +/// The IfcCoilTypeEnum contains the following: +/// +/// DXCOOLINGCOIL: Cooling coil using a refrigerant to cool the air stream directly. +/// +/// WATERCOOLINGCOIL: Cooling coil using chilled water. HYDRONICCOIL supercedes this enumerator. +/// +/// STEAMHEATINGCOIL: Heating coil using steam as heating source. +/// +/// WATERHEATINGCOIL: Heating coil using hot water as a heating source. HYDRONICCOIL supercedes this enumerator. +/// +/// ELECTRICHEATINGCOIL: Heating coil using electricity as a heating source. +/// +/// GASHEATINGCOIL: Heating coil using gas as a heating source. +/// +/// HYDRONICCOIL: Cooling or Heating coil that uses a hydronic fluid as a cooling or heating source. +/// USERDEFINED: User-defined coil type. +/// +/// NOTDEFINED: Undefined coil type. +/// +/// HISTORY: New enumeration in IFC R2x. +public: + typedef enum {IfcCoilType_DXCOOLINGCOIL, IfcCoilType_ELECTRICHEATINGCOIL, IfcCoilType_GASHEATINGCOIL, IfcCoilType_HYDRONICCOIL, IfcCoilType_STEAMHEATINGCOIL, IfcCoilType_WATERCOOLINGCOIL, IfcCoilType_WATERHEATINGCOIL, IfcCoilType_USERDEFINED, IfcCoilType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcCoilTypeEnum (IfcEntityInstanceData* e); + IfcCoilTypeEnum (Value v); + IfcCoilTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcColumnTypeEnum : public IfcUtil::IfcBaseType { +/// Definition from IAI: This enumeration defines the +/// different types of linear elements an IfcColumnType object +/// can fulfill: +/// +/// COLUMN: A standard column element usually used +/// vertically. +/// USERDEFINED: User-defined linear element. +/// NOTDEFINED: Undefined linear element +/// +/// NOTE: This enumeration has been mainly +/// introduced to allow further detailing of the type information in +/// future releases of IFC. +/// HISTORY New Enumeration +/// in Release IFC2x Edition 2. +public: + typedef enum {IfcColumnType_COLUMN, IfcColumnType_PIERSTEM, IfcColumnType_PIERSTEM_SEGMENT, IfcColumnType_PILASTER, IfcColumnType_STANDCOLUMN, IfcColumnType_USERDEFINED, IfcColumnType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcColumnTypeEnum (IfcEntityInstanceData* e); + IfcColumnTypeEnum (Value v); + IfcColumnTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcCommunicationsApplianceTypeEnum : public IfcUtil::IfcBaseType { +/// Defines the range of different types of communications appliance that can be specified. +/// +/// HISTORY: New enumeration in IFC2x4 +/// +/// ANTENNA: A transducer designed to transmit or receive electromagnetic waves. +/// COMPUTER: A desktop, laptop, PDA or other type of computer that can be moved from one place to another and connected to an electrical supply via a plugged outlet. +/// FAX: A machine that has the primary function of transmitting a facsimile copy of printed matter using a telephone line. +/// GATEWAY: A gateway connects multiple network segments with different protocols at all layers (layers 1-7) of the OSI model +/// MODEM: A modem (from modulator-demodulator) is a device that modulates an analog carrier signal to encode digital information, and also demodulates such a carrier signal to decode the transmitted information +/// NETWORKAPPLIANCE: A network appliance performs a dedicated function such as firewall protection, content filtering, load balancing, or equipment management. +/// NETWORKBRIDGE: A network bridge connects multiple network segments at the data link layer (layer 2) of the OSI model, and the term layer 2 switch is very often used interchangeably with bridge +/// NETWORKHUB: A network hub connects multiple network segments at the physical layer (layer 1) of the OSI model. +/// PRINTER: A machine that has the primary function of printing text and/or graphics onto paper or other media. +/// REPEATER: A repeater is an electronic device that receives a signal and retransmits it at a higher level and/or higher power, or onto the other side of an obstruction, so that the signal can cover longer distances without degradation. +/// ROUTER: A router is a networking device whose software and hardware are usually tailored to the tasks of routing and forwarding information. For example, on the Internet, information is directed to various paths by routers. +/// SCANNER: A machine that has the primary function of scanning the content of printed matter and converting it to digital format that can be stored in a computer. +public: + typedef enum {IfcCommunicationsApplianceType_ANTENNA, IfcCommunicationsApplianceType_AUTOMATON, IfcCommunicationsApplianceType_COMPUTER, IfcCommunicationsApplianceType_FAX, IfcCommunicationsApplianceType_GATEWAY, IfcCommunicationsApplianceType_INTELLIGENTPERIPHERAL, IfcCommunicationsApplianceType_IPNETWORKEQUIPMENT, IfcCommunicationsApplianceType_LINESIDEELECTRONICUNIT, IfcCommunicationsApplianceType_MODEM, IfcCommunicationsApplianceType_NETWORKAPPLIANCE, IfcCommunicationsApplianceType_NETWORKBRIDGE, IfcCommunicationsApplianceType_NETWORKHUB, IfcCommunicationsApplianceType_OPTICALLINETERMINAL, IfcCommunicationsApplianceType_OPTICALNETWORKUNIT, IfcCommunicationsApplianceType_PRINTER, IfcCommunicationsApplianceType_RADIOBLOCKCENTER, IfcCommunicationsApplianceType_REPEATER, IfcCommunicationsApplianceType_ROUTER, IfcCommunicationsApplianceType_SCANNER, IfcCommunicationsApplianceType_TELECOMMAND, IfcCommunicationsApplianceType_TELEPHONYEXCHANGE, IfcCommunicationsApplianceType_TRANSITIONCOMPONENT, IfcCommunicationsApplianceType_TRANSPONDER, IfcCommunicationsApplianceType_TRANSPORTEQUIPMENT, IfcCommunicationsApplianceType_USERDEFINED, IfcCommunicationsApplianceType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcCommunicationsApplianceTypeEnum (IfcEntityInstanceData* e); + IfcCommunicationsApplianceTypeEnum (Value v); + IfcCommunicationsApplianceTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcComplexPropertyTemplateTypeEnum : public IfcUtil::IfcBaseType { +/// This enumeration defines the subtype of instances of IfcComplexProperty or IfcPhysicalComplexQuantity that may be created and defined by an IfcComplexPropertyTemplate. +/// +/// HISTORY New enumeration in IFC2x4. +/// +/// Enumeration +/// +/// P_COMPLEX: the properties defined by this IfcComplexPropertyTemplate are of type IfcComplexProperty. +/// Q_COMPLEX: the properties defined by this IfcComplexPropertyTemplate are of type IfcPhysicalComplexQuantity. +public: + typedef enum {IfcComplexPropertyTemplateType_P_COMPLEX, IfcComplexPropertyTemplateType_Q_COMPLEX} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcComplexPropertyTemplateTypeEnum (IfcEntityInstanceData* e); + IfcComplexPropertyTemplateTypeEnum (Value v); + IfcComplexPropertyTemplateTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcCompressorTypeEnum : public IfcUtil::IfcBaseType { +/// Types of compressors. +/// The IfcCompressorTypeEnum contains the following: +/// +/// DYNAMIC: The pressure of refrigerant vapor is increased by a continuous transfer of angular momentum from a rotating member to the vapor followed by conversion of this momentum into static pressure. +/// RECIPROCATING: Positive-displacement compressor using a piston driven by a connecting rod from a crankshaft. +/// ROTARY: Positive-displacement compressor using a roller or rotor device. +/// SCROLL: Positive-displacement compressor using two inter-fitting, spiral-shaped scroll members. +/// TROCHOIDAL: Positive-displacement compressor using a rolling motion of one circle outside or inside the circumference of a basic circle and produce either epitrochoids or hypotrochoids. +/// SINGLESTAGE: Positive-displacement reciprocating compressor where vapor is compressed in a single stage. +/// BOOSTER: Positive-displacement reciprocating compressor where pressure is increased by a booster. +/// OPENTYPE: Positive-displacement reciprocating compressor where the shaft extends through a seal in the crankcase for an external drive. +/// HERMETIC: Positive-displacement reciprocating compressor where the motor and compressor are contained within the same housing, with the motor shaft integral with the compressor crankshaft and the motor in contact with refrigerant. +/// SEMIHERMETIC: Positive-displacement reciprocating compressor where the hermetic compressors use bolted construction amenable to field repair. +/// WELDEDSHELLHERMETIC: Positive-displacement reciprocating compressor where the motor compressor is mounted inside a steel shell, which, in turn is sealed by welding. +/// ROLLINGPISTON: Positive-displacement rotary compressor using a roller mounted on the eccentric of a shaft with a single vane in the nonrotating cylindrical housing. +/// ROTARYVANE: Positive-displacement rotary compressor using a roller mounted on the eccentric of a shaft with multiple vanes in the nontotating cylindrical housing. +/// SINGLESCREW: Positive-displacement rotary compressor using a single cylindrical main rotor that works with a pair of gate rotors. +/// TWINSCREW: Positive-displacement rotary compressor using two mating helically grooved rotors, male (lobes) and female (flutes) in a stationary housing with inlet and outlet gas ports. +/// USERDEFINED: User-defined compressor type. +/// NOTDEFINED: Undefined compressor type. +/// +/// HISTORY: New enumeration in IFC R2x. +public: + typedef enum {IfcCompressorType_BOOSTER, IfcCompressorType_DYNAMIC, IfcCompressorType_HERMETIC, IfcCompressorType_OPENTYPE, IfcCompressorType_RECIPROCATING, IfcCompressorType_ROLLINGPISTON, IfcCompressorType_ROTARY, IfcCompressorType_ROTARYVANE, IfcCompressorType_SCROLL, IfcCompressorType_SEMIHERMETIC, IfcCompressorType_SINGLESCREW, IfcCompressorType_SINGLESTAGE, IfcCompressorType_TROCHOIDAL, IfcCompressorType_TWINSCREW, IfcCompressorType_WELDEDSHELLHERMETIC, IfcCompressorType_USERDEFINED, IfcCompressorType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcCompressorTypeEnum (IfcEntityInstanceData* e); + IfcCompressorTypeEnum (Value v); + IfcCompressorTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcCondenserTypeEnum : public IfcUtil::IfcBaseType { +/// Enumeration defining the typical types of condensers. Air is used as the cooling medium for AIRCOOLED; water is used as the cooling medium for all other types. The IfcCondenserTypeEnum contains the following: +/// +/// AIRCOOLED: A condenser in which heat is transferred to an air-stream. +/// EVAPORATIVECOOLED: A condenser that is cooled evaporatively. +/// WATERCOOLED: Water-cooled condenser with unspecified operation. +/// WATERCOOLEDSHELLTUBE: Water-cooled condenser with cooling water circulated through one or more tubes contained within the shell. +/// WATERCOOLEDSHELLCOIL: Water-cooled condenser with cooling water circulated through one or more continuous or assembled coils contained within the shell. +/// WATERCOOLEDTUBEINTUBE: Water-cooled condenser consisting of one or more assemblies of two tubes, one within the other. +/// WATERCOOLEDBRAZEDPLATE: Water-cooled condenser condenser with plates brazed together to form an assembly of separate channels. +/// USERDEFINED: User-defined condenser type. +/// NOTDEFINED: Undefined condenser type. +/// +/// HISTORY: New enumeration in IFC 2x2. WATERCOOLED added in IFC 2x4. +public: + typedef enum {IfcCondenserType_AIRCOOLED, IfcCondenserType_EVAPORATIVECOOLED, IfcCondenserType_WATERCOOLED, IfcCondenserType_WATERCOOLEDBRAZEDPLATE, IfcCondenserType_WATERCOOLEDSHELLCOIL, IfcCondenserType_WATERCOOLEDSHELLTUBE, IfcCondenserType_WATERCOOLEDTUBEINTUBE, IfcCondenserType_USERDEFINED, IfcCondenserType_NOTDEFINED} Value; + static const char* ToString(Value v); + static Value FromString(const std::string& s); + + virtual const IfcParse::enumeration_type& declaration() const; + static const IfcParse::enumeration_type& Class(); + IfcCondenserTypeEnum (IfcEntityInstanceData* e); + IfcCondenserTypeEnum (Value v); + IfcCondenserTypeEnum (const std::string& v); + operator Value() const; +}; +class IFC_PARSE_API IfcConnectionTypeEnum : public IfcUtil::IfcBaseType { +/// This enumeration defines the different ways how path based elements (such as IfcWallStandardCase) can connect, as shown in Figure 65. +/// +/// HISTORY New type in IFC Release 2.0 +/// +/// L-Shape Connection +/// +/// RelatingConnectionType: AtStart +/// RelatedConnectionType: AtStart +/// +/// L-Shape Connection +/// +/// RelatingConnectionType: AtEnd +/// RelatedConnectionType: AtStart +/// +/// T-Shape Connection +/// +/// RelatingConnectionType: AtPath +/// RelatedConnectionType: AtStart +/// +/// Figure 65 — Connection types /*[3:3]*/ v); + operator std::vector< int > /*[3:3]*/() const; +}; + +class IFC_PARSE_API IfcAreaDensityMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcAreaDensityMeasure (IfcEntityInstanceData* e); + IfcAreaDensityMeasure (double v); + operator double() const; +}; +/// Definition from ISO/CD 10303-41:1992: An area measure is the value of the extent of a surface. +/// Usually measured in square metre (m2). +/// Type: REAL +/// +/// NOTE Corresponding ISO 10303 name: area_measure, please refer to ISO/IS 10303-41 for the final definition of the formal standard. +/// +/// HISTORY New type in IFC Release 1.5.1. +class IFC_PARSE_API IfcAreaMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcAreaMeasure (IfcEntityInstanceData* e); + IfcAreaMeasure (double v); + operator double() const; +}; + +class IFC_PARSE_API IfcBinary : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcMetricValueSelect, public IfcSimpleValue, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcBinary (IfcEntityInstanceData* e); + IfcBinary (boost::dynamic_bitset<> v); + operator boost::dynamic_bitset<>() const; +}; +/// IfcBoolean is a defined data type of simple data type Boolean. It is required since a select type (IfcSimpleValue) cannot directly include simple types in its select list. A boolean type can have value TRUE or FALSE. +/// +/// Type: BOOLEAN +/// +/// HISTORY New type in IFC Release 1.5.1. +class IFC_PARSE_API IfcBoolean : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcMetricValueSelect, public IfcModulusOfRotationalSubgradeReactionSelect, public IfcModulusOfSubgradeReactionSelect, public IfcModulusOfTranslationalSubgradeReactionSelect, public IfcRotationalStiffnessSelect, public IfcSimpleValue, public IfcTranslationalStiffnessSelect, public IfcValue, public IfcWarpingStiffnessSelect { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcBoolean (IfcEntityInstanceData* e); + IfcBoolean (bool v); + operator bool() const; +}; +/// An IfcCardinalPointReference is an index reference to +/// significant points of a section profile. This index is used to +/// describe the spatial relationship between the section of a member +/// and a reference axis of the same member. +/// +/// HISTORY New Type in IFC2x4. +/// +/// Indexes 1...9 refer to points at the bounding box of a +/// profile. Indexes 10...19 refer to points defined by geometric +/// centroid (usually centre of gravity) and shear centre, and their +/// combinations with bounding box coordinates. In particular, the +/// following index values are specified in this IFC Release: +/// +/// bottom left +/// bottom centre +/// bottom right +/// mid-depth left +/// mid-depth centre +/// mid-depth right +/// top left +/// top centre +/// top right +/// geometric centroid +/// bottom in line with the geometric centroid +/// left in line with the geometric centroid +/// right in line with the geometric centroid +/// top in line with the geometric centroid +/// shear centre +/// bottom in line with the shear centre +/// left in line with the shear centre +/// right in line with the shear centre +/// top in line with the shear centre +/// +/// Other index values are possible but outside the scope of this +/// specification. +/// +/// Figure 283 illustrates cardinal point values. +/// +/// Figure 283 — Cardinal point values +/// +/// Figure 284 illustrates an example extrusion shape with arbitrary profile (IfcArbitraryClosedProfileDef), aligned "mid-depth right" on the member axis. The line of sight follows the extrusion direction Z which points into the drawing plane of above illustration. Hence, "left" is in the positive X direction of the IfcProfileDef. "Top" is in the positive Y direction of the IfcProfileDef. +/// +/// Figure 284 — Cardinal point extrusion +class IFC_PARSE_API IfcCardinalPointReference : public IfcUtil::IfcBaseType { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcCardinalPointReference (IfcEntityInstanceData* e); + IfcCardinalPointReference (int v); + operator int() const; +}; +/// IfcComplexNumber is a representation of a complex number expressed as an array with two elements. +/// The first element (index 1) denotes the real component which is the numerical +/// component of a complex number whose square roots can be calculated explicitly. +/// The second element (index 2) denotes the imaginary component which is the numerical +/// component of a complex number whose square roots cannot be determined other +/// than through the provision of the square of the imaginary number j where j^2 = -1. +/// Note that the imaginary component may be referred to as i in certain references. +/// +/// Type: ARRAY [1:2] OF REAL +/// +/// HISTORY New type in IFC Release 2x2. +class IFC_PARSE_API IfcComplexNumber : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcComplexNumber (IfcEntityInstanceData* e); + IfcComplexNumber (std::vector< double > /*[1:2]*/ v); + operator std::vector< double > /*[1:2]*/() const; +}; +/// IfcCompoundPlaneAngleMeasure is a compound measure of plane angle in degrees, minutes, seconds, and optionally millionth-seconds of arc. +/// +/// NOTE: IfcCompoundPlaneAngleMeasure is used where angles need to be described to an accuracy as fine as one millionth of a degree and expressed as parts of an arc. It may be used for angular measurement by surveyors or for other angular measurements where precision is required. Another usage is exact or approximate global positioning against a geographic coordinate systems using longitude and latitude. +/// +/// NOTE: While the unit of measurement of the type IfcPlaneAngleMeasure depends on unit assignment (radian or degree or other derived units; globally at the IfcPoject or locally at an IfcMeasureWithUnit), the units of IfcCompoundPlaneAngleMeasure are always degrees, minutes, seconds, and millionth-seconds irrespective of unit assignments. +/// +/// HISTORY New type in IFC Release 1.5.1. +/// +/// Type: LIST [3:4] OF INTEGER +/// +/// Value restrictions +/// +/// The first integer measure is the number of degrees and is generally not range-restricted. However, when IfcCompoundPlaneAngleMeasure is used to express geographic coordinates, only latitudes of [-90, 90] and longitudes of [-180, 180] are used in practice. +/// The second integer measure is the number of minutes and shall be in the range (-60, 60). +/// The third integer measure is the number of seconds and shall be in the range (-60, 60). +/// The optional fourth integer measure is the number of millionth-seconds and shall be in the range (-1 000 000, 1 000 000). +/// +/// Signedness +/// +/// All measure components have the same sign (positive or negative). It is therefore trivial to convert between floating point representation (decimal degrees) and compound representation regardless whether the angle is greater or smaller than zero. Example: +/// +/// LOCAL +///   a : IfcPlaneAngleMeasure := -50.975864;  (* decimal degrees, -50° 58' 33" 110400 *) +///   b : IfcPlaneAngleMeasure; +///   c : IfcCompoundPlaneAngleMeasure; +///   s : IfcText; +/// END_LOCAL; +/// +/// (* convert from float to compound *) +///   c[1] :=    a;                                           -- -50 +///   c[2] :=   (a - c[1]) * 60;                              -- -58 +///   c[3] :=  ((a - c[1]) * 60 - c[2]) * 60;                 -- -33 +///   c[4] := (((a - c[1]) * 60 - c[2]) * 60 - c[3]) * 1.e6;  -- -110400 +/// +/// (* convert from compound to float *) +///   b := c[1] + c[2]/60. + c[3]/3600. + c[4]/3600.e6;       -- -50.975864 +/// +/// Use in string representations +/// +/// When a compound plane angle measure is formatted for display or printout, the signs of the fractional components will usually be discarded because, to a human reader, the sign of the first component alone already indicates the sense of the angle: +/// +/// (* convert from compound to human-readable string *) +///   s := FORMAT(c[1], '+##')     + "000000B0" +///      + FORMAT(ABS(c[2]), '##') + '''' +///      + FORMAT(ABS(c[3]), '##') + '"' +///      + FORMAT(ABS(c[4]), '##');  -- -50° 58' 33" 110400 +/// +/// Another often encountered display format of latitudes and longitudes is to omit the signs and print N, S, E, W indicators instead, for example, 50°58'33"S. When stored as IfcCompoundPlaneAngleMeasure however, a compound plane angle measure is always signed, with same sign of all components. +class IFC_PARSE_API IfcCompoundPlaneAngleMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcCompoundPlaneAngleMeasure (IfcEntityInstanceData* e); + IfcCompoundPlaneAngleMeasure (std::vector< int > /*[3:4]*/ v); + operator std::vector< int > /*[3:4]*/() const; +}; +/// Definition from ISO/CD 10303-41:1992: Is the value of a physical quantity as defined by an application context. +/// Type: REAL +/// +/// NOTE Corresponding ISO 10303 name: context_dependent_measure, please refer to ISO/IS 10303-41 for the final definition of the formal standard. +/// +/// HISTORY New type in IFC Release 1.5.1. +class IFC_PARSE_API IfcContextDependentMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcContextDependentMeasure (IfcEntityInstanceData* e); + IfcContextDependentMeasure (double v); + operator double() const; +}; +/// Definition from ISO/CD 10303-41:1992: A count measure is the value of a count. +/// Type: NUMBER +/// +/// NOTE Corresponding ISO 10303 name: count_measure, please refer to ISO/IS 10303-41 for the final definition of the formal standard. +/// +/// HISTORY New type in IFC Release 1.5.1. +class IFC_PARSE_API IfcCountMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcCountMeasure (IfcEntityInstanceData* e); + IfcCountMeasure (int v); + operator int() const; +}; +/// IfcCurvatureMeasure is a measure for curvature, which is defined as the change of slope per length. +/// This is typically a computed value in structural analysis. +/// It is usually measured in rad/m. +/// +/// Type: REAL +/// +/// HISTORY New type in IFC2x2. +class IFC_PARSE_API IfcCurvatureMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcCurvatureMeasure (IfcEntityInstanceData* e); + IfcCurvatureMeasure (double v); + operator double() const; +}; +/// The lexical representation for date is the reduced (right truncated) lexical representation for dateTime: CCYY-MM-DD. No left truncation is allowed. An optional following time zone qualifier is allowed as for dateTime. To accommodate year values outside the range from 0001 to 9999, additional digits can be added to the left of this representation and a preceding "-" sign is allowed. +/// +/// HISTORY: New type in IFC2x4 +/// +/// Use definitions +/// All given values should be provided in context and converted into a Gregorian date context and be shall be processable by a receiving application. +class IFC_PARSE_API IfcDate : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcMetricValueSelect, public IfcSimpleValue, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcDate (IfcEntityInstanceData* e); + IfcDate (std::string v); + operator std::string() const; +}; +/// This lexical representation is the [ISO 8601] extended +/// format CCYY-MM-DDThh:mm:ss where "CC" represents the +/// century, "YY" the year, "MM" the month and "DD" the day, +/// preceded by an optional leading "-" sign to indicate a +/// negative number. If the sign is omitted, "+" is assumed. +/// The letter "T" is the date/time separator and "hh", "mm", +/// "ss" represent hour, minute and second respectively. +/// Additional digits can be used to increase the precision of +/// fractional seconds if desired i.e the format ss.ss... with +/// any number of digits after the decimal point is supported. +/// The fractional seconds part is optional; other parts of the +/// lexical form are not optional. To accommodate year values +/// greater than 9999 additional digits can be added to the +/// left of this representation. Leading zeros are required if +/// the year value would otherwise have fewer than four digits; +/// otherwise they are forbidden. The year 0000 is prohibited. +/// +/// HISTORY: New type in IFC2x4 +class IFC_PARSE_API IfcDateTime : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcMetricValueSelect, public IfcSimpleValue, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcDateTime (IfcEntityInstanceData* e); + IfcDateTime (std::string v); + operator std::string() const; +}; +/// Definition from IAI: The IfcDayInMonthNumber is +/// an integer that defines the position of the specified day in a +/// month. +/// Type: INTEGER +/// NOTE Corresponding STEP +/// name: day_in_month_number, please refer to ISO/IS 10303-41:1994 +/// for the final definition of the formal +/// standard. +/// HISTORY New type in IFC +/// Release 1.5.1. +/// IFC2x4 CHANGE Where rule +/// ValidRange added. +class IFC_PARSE_API IfcDayInMonthNumber : public IfcUtil::IfcBaseType { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcDayInMonthNumber (IfcEntityInstanceData* e); + IfcDayInMonthNumber (int v); + operator int() const; +}; +/// Definition from IAI: The IfcDayInWeekNumber is +/// an integer that defines the position of the specified day in a +/// week. The positions have the following meaning (according to +/// ISO8601 "the calendar week") that assigns the ordinal day number +/// in the week to the Calender day name. +/// +/// Ordinal day number +/// Calendar day +/// name +/// +/// 01 +/// Monday +/// +/// 02 +/// Tuesday +/// +/// 03 +/// Wednesday +/// +/// 04 +/// Thursday +/// +/// 05 +/// Friday +/// +/// 06 +/// Saturday +/// +/// 07 +/// Sunday +/// +/// Type: INTEGER +/// HISTORY New type in +/// IFC2x4. +class IFC_PARSE_API IfcDayInWeekNumber : public IfcUtil::IfcBaseType { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcDayInWeekNumber (IfcEntityInstanceData* e); + IfcDayInWeekNumber (int v); + operator int() const; +}; +/// Definition from ISO/CD 10303-41:1992: A descriptive measure is a human interpretable definition of a quantifiable value. +/// Type: STRING +/// +/// NOTE Corresponding ISO 10303 name:descriptive_measure, please refer to ISO/IS 10303-41 for the final definition of the formal standard. +/// +/// HISTORY New type in IFC Release 1.5.1. +class IFC_PARSE_API IfcDescriptiveMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcMeasureValue, public IfcMetricValueSelect, public IfcSizeSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcDescriptiveMeasure (IfcEntityInstanceData* e); + IfcDescriptiveMeasure (std::string v); + operator std::string() const; +}; +/// Definition from ISO/CD 10303-42:1992: A dimension count is a positive integer used to define the coordinate space dimensionality. +/// +/// The IfcDimensionCount is restricted to have the dimensionality of either 1, 2, or 3 - the WR1 had been added as an addition to the ISO 10303:42 entity dimension_count. In contrary to the ISO 10303:42 constraint, that all geometric representation items within a geometric representation context are forced to have the same dimension count, the IFC geometry allows mixed dimensions, particularly when defining the boundary of planar surfaces. +/// +/// NOTE Corresponding ISO 10303 type: dimension_count, please refer to ISO/IS 10303-42:1994, p. 14 for the final definition of the formal standard. +/// +/// HISTORY New Type in IFC Release 1.5 +class IFC_PARSE_API IfcDimensionCount : public IfcUtil::IfcBaseType { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcDimensionCount (IfcEntityInstanceData* e); + IfcDimensionCount (int v); + operator int() const; +}; +/// IfcDoseEquivalentMeasure is a measure of the radioactive dose equivalent. +/// Usually measured in Sievert (Sv, J/kg). +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2x. +class IFC_PARSE_API IfcDoseEquivalentMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcDoseEquivalentMeasure (IfcEntityInstanceData* e); + IfcDoseEquivalentMeasure (double v); + operator double() const; +}; +/// String representation of a time duration according to ISO8601:2000 "Data elements and interchange formats - Information interchange - Representation of dates and times" as defined in section 5.5.3 "Representation of duration". +/// It is recommended to use the alternative format (section 5.5.4.2.2) in its extended version: PYYYY-MM-DDThh:mm:ss. +/// EXAMPLE: P0002-10-15T10:30:20 (duration of two years, 10 months, 15 days, 10 hours, 30 minutes and 20 seconds). +/// +/// HISTORY: New type in IFC2x4 +class IFC_PARSE_API IfcDuration : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcMetricValueSelect, public IfcSimpleValue, public IfcTimeOrRatioSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcDuration (IfcEntityInstanceData* e); + IfcDuration (std::string v); + operator std::string() const; +}; +/// IfcDynamicViscosityMeasure is a measure of the viscous resistance of a medium. +/// +/// Usually measured in Pascal second (Pa s). +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2.0. +class IFC_PARSE_API IfcDynamicViscosityMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcDynamicViscosityMeasure (IfcEntityInstanceData* e); + IfcDynamicViscosityMeasure (double v); + operator double() const; +}; +/// IfcElectricCapacitanceMeasure is a measure of the electric capacitance. +/// Usually measured in Farad (F, C/V = A s/V). +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2x. +class IFC_PARSE_API IfcElectricCapacitanceMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcElectricCapacitanceMeasure (IfcEntityInstanceData* e); + IfcElectricCapacitanceMeasure (double v); + operator double() const; +}; +/// IfcElectricChargeMeasure is a measure of the electric charge. +/// Usually measured in Coulomb (C, A s). +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2x. +class IFC_PARSE_API IfcElectricChargeMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcElectricChargeMeasure (IfcEntityInstanceData* e); + IfcElectricChargeMeasure (double v); + operator double() const; +}; +/// IfcElectricConductanceMeasure is a measure of the electric conductance. +/// Usually measured in Siemens (S, 1/Ohm = A/V). +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2x. +class IFC_PARSE_API IfcElectricConductanceMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcElectricConductanceMeasure (IfcEntityInstanceData* e); + IfcElectricConductanceMeasure (double v); + operator double() const; +}; +/// Definition from ISO/CD 10303-41:1992: The value for the movement of electrically charged particles. +/// Usually measured in Ampere (A). +/// Type: REAL +/// +/// NOTE Corresponding ISO 10303 name: electric_current_measure, please refer to ISO/IS 10303-41 for the final definition of the formal standard. +/// +/// HISTORY New type in IFC Release 1.5.1. +class IFC_PARSE_API IfcElectricCurrentMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcElectricCurrentMeasure (IfcEntityInstanceData* e); + IfcElectricCurrentMeasure (double v); + operator double() const; +}; +/// IfcElectricResistanceMeasure is a measure of the electric resistance. +/// Usually measured in Ohm (V/A). +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2x. +class IFC_PARSE_API IfcElectricResistanceMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcElectricResistanceMeasure (IfcEntityInstanceData* e); + IfcElectricResistanceMeasure (double v); + operator double() const; +}; +/// IfcElectricVoltageMeasure is a measure of electromotive force. +/// Usually measured in Volts (V, W/A). +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2.0. +class IFC_PARSE_API IfcElectricVoltageMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcElectricVoltageMeasure (IfcEntityInstanceData* e); + IfcElectricVoltageMeasure (double v); + operator double() const; +}; +/// IfcEnergyMeasure is a measure of energy required or used. +/// Usually measured in Joules, (J, Nm). +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2.0. +class IFC_PARSE_API IfcEnergyMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcEnergyMeasure (IfcEntityInstanceData* e); + IfcEnergyMeasure (double v); + operator double() const; +}; +/// Definition from CSS1 (W3C Recommendation): The font-style property selects between normal (sometimes +/// referred to as "roman" or "upright"), italic and oblique faces within a font family. Values are: +/// +/// normal +/// italic +/// oblique +/// +/// A value of 'normal' selects a font that is classified as 'normal' in the user agents font database, while 'oblique' selects a font that is labeled 'oblique'. A value of 'italic' selects a font that is labeled 'italic', or, if that is not available, one labeled 'oblique'. The font that is labeled 'oblique' in the user agents font database may actually have been generated by electronically slanting a normal font. +/// +/// Fonts with Oblique, Slanted or Incline in their names will typically be labeled 'oblique' in the user agents font database. Fonts with Italic, Cursive or Kursiv in their names will typically be labeled 'italic'. +/// +/// NOTE  Corresponding CSS1 definitions is font-style. +/// +/// HISTORY  New type in IFC2x3. +class IFC_PARSE_API IfcFontStyle : public IfcUtil::IfcBaseType { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcFontStyle (IfcEntityInstanceData* e); + IfcFontStyle (std::string v); + operator std::string() const; +}; +/// Definition from CSS1 (W3C Recommendation): The font-style property selects between normal and small-caps within a font family. Values are: +/// +/// normal +/// small-caps +/// +/// Another type of variation within a font family is the small-caps. In a small-caps font the lower case letters look similar to the uppercase ones, but in a smaller size and with slightly different proportions. The 'font-variant' property selects that font. +/// +/// A value of 'normal' selects a font that is not a small-caps font, 'small-caps' selects a small-caps font. It is acceptable (but not required) in CSS1 if the small-caps font is a created by taking a normal font and replacing the lower case letters by scaled uppercase characters. As a last resort, uppercase letters will be used as replacement for a small-caps font. +/// +/// NOTE  Corresponding CSS1 definitions is font-variant. +/// +/// HISTORY  New type in IFC2x3. +class IFC_PARSE_API IfcFontVariant : public IfcUtil::IfcBaseType { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcFontVariant (IfcEntityInstanceData* e); + IfcFontVariant (std::string v); + operator std::string() const; +}; +/// Definition from CSS1 (W3C Recommendation): The 'font-weight' property selects the weight of the font. The values '100' to '900' form an ordered sequence, where each number indicates a weight that is at least as dark as its predecessor. The keyword 'normal' is synonymous with '400', and 'bold' is synonymous with '700'. Keywords other than 'normal' and 'bold' have been shown to be often confused with font names and a numerical scale was therefore chosen for the 9-value list. Values are: +/// +/// normal +/// bold +/// 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 +/// +/// Fonts (the font data) typically have one or more properties whose values are names that are descriptive of the "weight" of a font. There is no accepted, universal meaning to these weight names. Their primary role is to distinguish faces of differing darkness within a single font family. Usage across font families is quite variant; for example a font that you might think of as being bold might be described as being Regular, Roman, Book, Medium, Semi- or DemiBold, Bold, or Black, depending on how black the "normal" face of the font is within the design. Because there is no standard usage of names, the weight property values in CSS1 are given on a numerical scale in which the value '400' (or 'normal') corresponds to the "normal" text face for that family. The weight name associated with that face will typically be Book, Regular, Roman, Normal or sometimes Medium. +/// +/// The association of other weights within a family to the numerical weight values is intended only to preserve the ordering of darkness within that family. However, the following heuristics tell how the assignment is done in typical cases: +/// +/// If the font family already uses a numerical scale with nine values (such as with OpenType), the font weights should be mapped directly. +/// If there is both a face labeled Medium and one labeled Book, Regular, Roman or Normal, then the Medium is normally assigned to the '500'. +/// The font labeled "Bold" will often correspond to the weight value '700'. +/// If there are fewer then 9 weights in the family, the default algorithm for filling the "holes" is as follows. If '500' is unassigned, it will be assigned the same font as '400'. If any of the values '600', '700', '800' or '900' remains unassigned, they are assigned to the same face as the next darker assigned keyword, if any, or the next lighter one otherwise. If any of '300', '200' or '100' remains unassigned, it is assigned to the next lighter assigned keyword, if any, or the next darker otherwise. +/// +/// The following two examples illustrate the process. Assume four weights in the "Example1" family, from lightest to darkest: Regular, Medium, Bold, Heavy. And assume six weights in the "Example2" family: Book, Medium, Bold, Heavy, Black, ExtraBlack. Note how in the second example it has been decided not to assign "Example2 ExtraBlack" to anything. +/// +/// Available faces | Assignments | Filling the holes----------------------+---------------+-------------------"Example1 Regular" | 400 | 100, 200, 300"Example1 Medium" | 500 |"Example1 Bold" | 700 | 600"Example1 Heavy" | 800 | 900 +/// Available faces | Assignments | Filling the holes----------------------+---------------+-------------------"Example2 Book" | 400 | 100, 200, 300"Example2 Medium" | 500 |"Example2 Bold" | 700 | 600 "Example2 Heavy" | 800 |"Example2 Black" | 900 |"Example2 ExtraBlack" | (none) | +/// +/// NOTE  Corresponding CSS1 definitions is font-weight. +/// +/// HISTORY  New type in IFC2x2 Addendum 2. +class IFC_PARSE_API IfcFontWeight : public IfcUtil::IfcBaseType { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcFontWeight (IfcEntityInstanceData* e); + IfcFontWeight (std::string v); + operator std::string() const; +}; +/// IfcForceMeasure is a measure of the force. +/// Usually measured in Newton (N, kg m/s2). +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2x. +class IFC_PARSE_API IfcForceMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcForceMeasure (IfcEntityInstanceData* e); + IfcForceMeasure (double v); + operator double() const; +}; +/// IfcFrequencyMeasure is a measure of the number of times that an item vibrates in unit time. +/// Usually measured in cycles/s or Herz (Hz). +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2.0. +class IFC_PARSE_API IfcFrequencyMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcFrequencyMeasure (IfcEntityInstanceData* e); + IfcFrequencyMeasure (double v); + operator double() const; +}; +/// An IfcGloballyUniqueId holds an encoded string identifier that is used to uniquely identify an IFC object. An IfcGloballyUniqueId is a Globally +/// Unique Identifier (GUID) which is an auto-generated 128-bit number. Since this identifier is +/// required for all IFC object instances, it is desirable to compress it to reduce overhead. The encoding of the base 64 character set is shown below: +/// +///            1         2         3         4         5         6 +///  0123456789012345678901234567890123456789012345678901234567890123 +/// "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_$"; +/// +/// The resulting string is a fixed 22 character length string to be exchanged within the IFC exchange file structure. +/// +/// Refer to the BuildingSMART website (www.buildingsmart-tech.org) for more information and sample encoding algorithms. +/// +/// HISTORY  New type in IFC R1.5.1. +class IFC_PARSE_API IfcGloballyUniqueId : public IfcUtil::IfcBaseType { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcGloballyUniqueId (IfcEntityInstanceData* e); + IfcGloballyUniqueId (std::string v); + operator std::string() const; +}; +/// IfcHeatFluxDensityMeasure is a measure of the density of heat flux within a body. +/// Usually measured in W/m2 (J/s m2). +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2.0. +class IFC_PARSE_API IfcHeatFluxDensityMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcHeatFluxDensityMeasure (IfcEntityInstanceData* e); + IfcHeatFluxDensityMeasure (double v); + operator double() const; +}; +/// IfcHeatingValueMeasure defines the amount of energy released (usually in MJ/kg) when a fuel is burned. +/// +/// HISTORY: This is new type in IFC2x2. +class IFC_PARSE_API IfcHeatingValueMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcHeatingValueMeasure (IfcEntityInstanceData* e); + IfcHeatingValueMeasure (double v); + operator double() const; +}; +/// Definition from ISO/CD 10303-41:1992: An identifier is an alphanumeric string which allows an individual thing to be identified. It may not provide natural-language meaning. +/// +/// Type: STRING of up to 255 characters +/// +/// NOTE Corresponding STEP name: identifier, please refer to ISO/IS 10303-41 for the final definition of the formal standard. +/// +/// HISTORY New type in IFC Release 2x. +/// IFC 2x4 CHANGE: Previously recommended size restriction of 255 characters is now mandatory. +/// +/// As a merely machine-readable string for identification purposes, an identifier is usually machine-generated and locale-independent (in contrast to human-readable labels, IfcLabel). +/// +/// Per ISO 10303-11, the set of characters that may appear in STRINGs is defined in ISO 10646. The encoding of characters in case of file-based exchange is defined in ISO 10303-21 (STEP physical files) and ISO 10303-28 (XML files). Among else, these specifications define the encoding of 8-bit characters from ISO 8859-1...-16 and of 2-byte Unicode characters. +/// +/// Note that while IfcIdentifier is restricted to 255 characters, the size in exchange files after encoding may be considerably larger than 255 octets, depending on the particular encoding and on the contents of the identifier. +class IFC_PARSE_API IfcIdentifier : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcMetricValueSelect, public IfcSimpleValue, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcIdentifier (IfcEntityInstanceData* e); + IfcIdentifier (std::string v); + operator std::string() const; +}; +/// IfcIlluminanceMeasure is a measure of the illuminance. +/// Usually measured in Lux (lx, Lumen/m2 = Candela Steradian/m2). +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2x. +class IFC_PARSE_API IfcIlluminanceMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcIlluminanceMeasure (IfcEntityInstanceData* e); + IfcIlluminanceMeasure (double v); + operator double() const; +}; +/// IfcInductanceMeasure is a measure of the inductance. +/// Usually measure in Henry (H, Weber/A = V s/A). +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2x. +class IFC_PARSE_API IfcInductanceMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcInductanceMeasure (IfcEntityInstanceData* e); + IfcInductanceMeasure (double v); + operator double() const; +}; +/// IfcInteger is a defined type of simple data type Integer. It is required since a select type (IfcSimpleValue) cannot include directly simple types in its select list. +/// +/// In principle, the domain of IfcInteger (being an Integer) is all integer numbers. Here the number of bits used for the IfcInteger representation is unconstrained, but in practice it is implementation specific. +/// +/// Type: INTEGER +/// +/// HISTORY New type in IFC Release 1.5.1. +class IFC_PARSE_API IfcInteger : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcMetricValueSelect, public IfcSimpleValue, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcInteger (IfcEntityInstanceData* e); + IfcInteger (int v); + operator int() const; +}; +/// IfcIntegerCountRateMeasure is a measure of the integer number of units flowing per unit time. +/// +/// EXAMPLE: This measure may be used for measuring integer units per second or per hour. For example, it may be used to measure the number of books per hour passing along a part of a mechanical book handling system, the number of people per hour travelling along a moving walkway or the number of vehicles per hour travelling along a section of road. +/// +/// Type: INTEGER +/// +/// HISTORY New type in IFC Release 2.0. +class IFC_PARSE_API IfcIntegerCountRateMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcIntegerCountRateMeasure (IfcEntityInstanceData* e); + IfcIntegerCountRateMeasure (int v); + operator int() const; +}; +/// IfcIonConcentrationMeasure is a measure of particular ion concentration in a liquid, given in mg/L. +/// +/// HISTORY: New type in IFC2x2. +class IFC_PARSE_API IfcIonConcentrationMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcIonConcentrationMeasure (IfcEntityInstanceData* e); + IfcIonConcentrationMeasure (double v); + operator double() const; +}; +/// IfcIsothermalMoistureCapacityMeasure is a measure of isothermal moisture capacity. +/// Usually measured in m3/kg. +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2x. +class IFC_PARSE_API IfcIsothermalMoistureCapacityMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcIsothermalMoistureCapacityMeasure (IfcEntityInstanceData* e); + IfcIsothermalMoistureCapacityMeasure (double v); + operator double() const; +}; +/// IfcKinematicViscosityMeasure is a measure of the viscous resistance of a medium to a moving body. +/// Usually measured in m2/s. +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2.0. +class IFC_PARSE_API IfcKinematicViscosityMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcKinematicViscosityMeasure (IfcEntityInstanceData* e); + IfcKinematicViscosityMeasure (double v); + operator double() const; +}; +/// Definition from ISO/CD 10303-41:1992: A label is the term by which something may be referred to. It is a string which represents the human-interpretable name of something and shall have a natural-language meaning. +/// +/// Type: STRING of up to 255 characters +/// +/// NOTE Corresponding STEP name: label, please refer to ISO/IS 10303-41 for the final definition of the formal standard. +/// +/// HISTORY New type in IFC Release 2x. +/// IFC 2x4 CHANGE: Previously recommended size restriction of 255 characters is now mandatory. +/// +/// As a human-readable string for naming purposes, a label is usually human-specified and locale-dependent (in contrast to purely machine-readable identifiers, IfcIdentifier). +/// +/// Per ISO 10303-11, the set of characters that may appear in STRINGs is defined in ISO 10646. The encoding of characters in case of file-based exchange is defined in ISO 10303-21 (STEP physical files) and ISO 10303-28 (XML files). Among else, these specifications define the encoding of 8-bit characters from ISO 8859-1...-16 and of 2-byte Unicode characters. +/// +/// Note that while IfcLabel is restricted to 255 characters, the size in exchange files after encoding may be considerably larger than 255 octets, depending on the particular encoding and on the contents of the label. +class IFC_PARSE_API IfcLabel : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcMetricValueSelect, public IfcSimpleValue, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcLabel (IfcEntityInstanceData* e); + IfcLabel (std::string v); + operator std::string() const; +}; +/// IfcLanguageId identifies the language in which a natural language text is expressed. It uses a language tag to identify the language. +/// The tag shall comply to the Internet Engineering Task Force (IETF) language tag as expressed in RFC 5646. A conforming program shall support the "simple language" subtag and the "language-region" tag format. +/// +/// EXAMPLE  for simple language tags en (English), de (German), fr (France), or ja (Japanese), and for language-region tags en-US (English as used in United States), de-CH (German as used in German speaking part of Switzerland). +/// +/// Type: IfcIdentifier +/// +/// NOTE  The use of IfcLanguageId should conform to the use of language tags in HTML and XML as published by the W3C consortium. +/// +/// HISTORY  New defined datatype in IFC2x4. +class IFC_PARSE_API IfcLanguageId : public IfcIdentifier { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcLanguageId (IfcEntityInstanceData* e); + IfcLanguageId (std::string v); + operator std::string() const; +}; +/// Definition from ISO/CD 10303-41:1992: A length measure is the value of a distance. +/// Usually measured in millimeters (mm). +/// Type: REAL +/// +/// NOTE Corresponding ISO 10303 name: length_measure, please refer to ISO/IS 10303-41 for the final definition of the formal standard. +/// +/// HISTORY New type in IFC Release 1.5.1. +class IFC_PARSE_API IfcLengthMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcBendingParameterSelect, public IfcCurveMeasureSelect, public IfcMeasureValue, public IfcMetricValueSelect, public IfcSizeSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcLengthMeasure (IfcEntityInstanceData* e); + IfcLengthMeasure (double v); + operator double() const; +}; + +class IFC_PARSE_API IfcLineIndex : public IfcUtil::IfcBaseType, public IfcSegmentIndexSelect { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcLineIndex (IfcEntityInstanceData* e); + IfcLineIndex (std::vector< int > /*[2:?]*/ v); + operator std::vector< int > /*[2:?]*/() const; +}; +/// IfcLinearForceMeasure is a measure of linear force. +/// Usually measured in N/m. +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2x. +class IFC_PARSE_API IfcLinearForceMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcLinearForceMeasure (IfcEntityInstanceData* e); + IfcLinearForceMeasure (double v); + operator double() const; +}; +/// IfcLinearMomentMeasure is a measure of linear moment. +/// Usually measured in Nm/m. +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2x. +class IFC_PARSE_API IfcLinearMomentMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcLinearMomentMeasure (IfcEntityInstanceData* e); + IfcLinearMomentMeasure (double v); + operator double() const; +}; +/// IfcLinearStiffnessMeasureA measure of linear stiffness. +/// Usually measured in N/m. +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2x. +class IFC_PARSE_API IfcLinearStiffnessMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcTranslationalStiffnessSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcLinearStiffnessMeasure (IfcEntityInstanceData* e); + IfcLinearStiffnessMeasure (double v); + operator double() const; +}; +/// IfcLinearVelocityMeasure is a measure of the velocity of a body measured in terms of distance moved per unit time. +/// Usually measured in m/s. +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2.0. +class IFC_PARSE_API IfcLinearVelocityMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcLinearVelocityMeasure (IfcEntityInstanceData* e); + IfcLinearVelocityMeasure (double v); + operator double() const; +}; +/// IfcLogical::ptr v); + operator aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr() const; +}; +/// IfcRadioActivityMeasure is a measure of activity of radionuclide. +/// Usually measured in Becquerel (Bq, 1/s). +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2x. +class IFC_PARSE_API IfcRadioActivityMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcRadioActivityMeasure (IfcEntityInstanceData* e); + IfcRadioActivityMeasure (double v); + operator double() const; +}; +/// Definition from ISO/CD 10303-41:1992: A ratio measure is the value of the relation between two +/// physical quantities that are of the same kind. +/// +/// NOTE: Input given in percent is to be divided by 100% when stored as an IfcRatioMeasure. For example, 25% becomes 0.25. +/// +/// Type: REAL +/// +/// NOTE Corresponding STEP name: ratio_measure, please refer to ISO/IS 10303-41 for the final definition of the formal standard. +/// +/// HISTORY New type in IFC Release 1.5.1. +class IFC_PARSE_API IfcRatioMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcMeasureValue, public IfcMetricValueSelect, public IfcSizeSelect, public IfcTimeOrRatioSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcRatioMeasure (IfcEntityInstanceData* e); + IfcRatioMeasure (double v); + operator double() const; +}; +/// IfcReal is a defined type of simple data type REAL. It is required since a select type (IfcSimpleValue), cannot directly include simple types in its select list. +/// +/// In principle, the domain of IfcReal (being a Real) is all rational, irrational and scientific real numbers. Here the precision is unconstrained, but in practice it is implementation specific. +/// +/// Type: REAL +/// +/// HISTORY: New type in IFC Release 1.5.1. +class IFC_PARSE_API IfcReal : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcMetricValueSelect, public IfcSimpleValue, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcReal (IfcEntityInstanceData* e); + IfcReal (double v); + operator double() const; +}; +/// IfcRotationalFrequencyMeasure is a measure of the number of cycles that an item revolves in unit time. +/// Usually measured in cycles/s. +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2x. +class IFC_PARSE_API IfcRotationalFrequencyMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcRotationalFrequencyMeasure (IfcEntityInstanceData* e); + IfcRotationalFrequencyMeasure (double v); + operator double() const; +}; +/// The rotational mass measure denotes the inertia of a body with respect to angular acceleration. +/// It is usually measured in kg*m^2. +/// +/// Type: REAL +/// +/// HISTORY New type in IFC2x2. +class IFC_PARSE_API IfcRotationalMassMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcRotationalMassMeasure (IfcEntityInstanceData* e); + IfcRotationalMassMeasure (double v); + operator double() const; +}; +/// IfcRotationalStiffnessMeasure is a measure of rotational stiffness. +/// Usually measured in Nm/rad. +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2x. +class IFC_PARSE_API IfcRotationalStiffnessMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcRotationalStiffnessSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcRotationalStiffnessMeasure (IfcEntityInstanceData* e); + IfcRotationalStiffnessMeasure (double v); + operator double() const; +}; +/// IfcSectionModulusMeasure is a measure for the resistance of a cross section against bending or torsional moment. It is usually measured in m^3. +/// +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2x2. +class IFC_PARSE_API IfcSectionModulusMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcSectionModulusMeasure (IfcEntityInstanceData* e); + IfcSectionModulusMeasure (double v); + operator double() const; +}; +/// The sectional area integral measure is typically used in torsional analysis. It is usually measured in m^5. +/// +/// Type: REAL +/// +/// HISTORY New type in IFC2x2. +class IFC_PARSE_API IfcSectionalAreaIntegralMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcSectionalAreaIntegralMeasure (IfcEntityInstanceData* e); + IfcSectionalAreaIntegralMeasure (double v); + operator double() const; +}; +/// IfcShearModulusMeasure is a measure of shear modulus. +/// Usually measured in N/m2. +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2x. +class IFC_PARSE_API IfcShearModulusMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcShearModulusMeasure (IfcEntityInstanceData* e); + IfcShearModulusMeasure (double v); + operator double() const; +}; +/// Definition from ISO/CD 10303-41:1992: A solid angle measure is the value of an angle in a solid. +/// Usually measured in Steradians, (sr, m2/m2). +/// Type: REAL +/// +/// NOTE Corresponding ISO 10303 name: solid_angle_measure, please refer to ISO/IS 10303-41 for the final definition of the formal standard. +/// +/// HISTORY New type in IFC Release 1.5.1. +class IFC_PARSE_API IfcSolidAngleMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcSolidAngleMeasure (IfcEntityInstanceData* e); + IfcSolidAngleMeasure (double v); + operator double() const; +}; + +class IFC_PARSE_API IfcSoundPowerLevelMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcSoundPowerLevelMeasure (IfcEntityInstanceData* e); + IfcSoundPowerLevelMeasure (double v); + operator double() const; +}; +/// A sound power measure is a measure of total radiated noise with units of decibels with a reference value of picowatts. +/// +/// Type: REAL +/// +/// HISTORY New type in IFC2x2. +class IFC_PARSE_API IfcSoundPowerMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcSoundPowerMeasure (IfcEntityInstanceData* e); + IfcSoundPowerMeasure (double v); + operator double() const; +}; + +class IFC_PARSE_API IfcSoundPressureLevelMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcSoundPressureLevelMeasure (IfcEntityInstanceData* e); + IfcSoundPressureLevelMeasure (double v); + operator double() const; +}; +/// A sound pressure measure is a measure of the pressure fluctuations superimposed over the ambient pressure level with units of decibels with a reference value of micropascals. +/// +/// Type: REAL +/// +/// HISTORY New type in IFC2x2. +class IFC_PARSE_API IfcSoundPressureMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcSoundPressureMeasure (IfcEntityInstanceData* e); + IfcSoundPressureMeasure (double v); + operator double() const; +}; +/// IfcSpecificHeatCapacityMeasure defines the specific heat of material: The heat energy absorbed per temperature unit. +/// Usually measured in J / kg Kelvin. +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2x. +class IFC_PARSE_API IfcSpecificHeatCapacityMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcSpecificHeatCapacityMeasure (IfcEntityInstanceData* e); + IfcSpecificHeatCapacityMeasure (double v); + operator double() const; +}; +/// The IfcSpecularExponent defines the datatype for exponent determining the sharpness of the 'reflection'. reflection is made sharper with large values of the exponent, such as 10.0. Small values, such as 1.0, decrease the specular fall-off. +/// +/// IfcSpecularExponent is of type REAL. +/// +/// NOTE: The datatype relates to the definition of specular_exponent in ISO 10303-46 entity surface_style_reflectance_ambient_diffuse_specular. +/// +/// HISTORY: New type in IFC2x2. +class IFC_PARSE_API IfcSpecularExponent : public IfcUtil::IfcBaseType, public IfcSpecularHighlightSelect { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcSpecularExponent (IfcEntityInstanceData* e); + IfcSpecularExponent (double v); + operator double() const; +}; +/// The IfcSpecularRoughness defines the datatype for the reflection resulting from the roughness of a surface through the height of surface impurities where the specular highlight is made sharper with small values for the roughness, such as 0.1. +/// +/// Applies to "glass", "metal", "mirror" and "plastic" reflection models. Larger values, close to 1.0 decrease the specular fall-off. +/// +/// IfcSpecularRoughness is of type REAL. It is constraint to values between (and including) 0 and 1. +/// +/// NOTE: The datatype relates to the definition of "shiness" in VRML97, which is the reciprocate value to the specular roughness. +/// +/// HISTORY: New type in Release IFC2x2. +class IFC_PARSE_API IfcSpecularRoughness : public IfcUtil::IfcBaseType, public IfcSpecularHighlightSelect { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcSpecularRoughness (IfcEntityInstanceData* e); + IfcSpecularRoughness (double v); + operator double() const; +}; + +class IFC_PARSE_API IfcStrippedOptional : public IfcUtil::IfcBaseType { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcStrippedOptional (IfcEntityInstanceData* e); + IfcStrippedOptional (bool v); + operator bool() const; +}; +/// The temperature gradient measures the difference of a temperature per lenght, as for instance used in an external wall or its layers. It is usually measured in K/m. +/// +/// Type: REAL +/// +/// HISTORY New type in IFC2x2. +class IFC_PARSE_API IfcTemperatureGradientMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcTemperatureGradientMeasure (IfcEntityInstanceData* e); + IfcTemperatureGradientMeasure (double v); + operator double() const; +}; +/// The temperature rate of change measures the difference of a temperature per time (positive: rise, negative: fall), as for instance used with heat sensors. It is for example measured in K/s (Kelvin per second). +/// +/// Type: REAL +/// +/// HISTORY  New type in IFC2x4. +class IFC_PARSE_API IfcTemperatureRateOfChangeMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcTemperatureRateOfChangeMeasure (IfcEntityInstanceData* e); + IfcTemperatureRateOfChangeMeasure (double v); + operator double() const; +}; +/// Definition from ISO/CD 10303-41:1992: A text is an alphanumeric string of characters which is intended to be read and understood by a human being. It is for information purposes only. +/// +/// Type: STRING +/// +/// NOTE Corresponding STEP name: text, please refer to ISO/IS 10303-41 for the final definition of the formal standard. +/// +/// HISTORY New type in IFC Release 2x. +/// +/// Per ISO 10303-11, the set of characters that may appear in STRINGs is defined in ISO 10646. The encoding of characters in case of file-based exchange is defined in ISO 10303-21 (STEP physical files) and ISO 10303-28 (XML files). Among else, these specifications define the encoding of 8-bit characters from ISO 8859-1...-16 and of 2-byte Unicode characters. +/// +/// Note that while IfcText is not formally restricted in length, the size of a string in ISO 10303-21:2002 conforming exchange files must not exceed 32767 octets after encoding and escaping. +class IFC_PARSE_API IfcText : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcMetricValueSelect, public IfcSimpleValue, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcText (IfcEntityInstanceData* e); + IfcText (std::string v); + operator std::string() const; +}; +/// Definition from CSS1 (W3C Recommendation): This property describes how text is aligned within the element. The actual justification algorithm used is user agent and human language dependent. If 'justify' is not supported, the user agent will supply a replacement. Typically, this will be 'left' for western languages. Values are: +/// +/// left +/// right +/// center +/// justify +/// +/// NOTE  Corresponding CSS1 definition is text-align. +/// +/// HISTORY  New type in IFC2x3. +class IFC_PARSE_API IfcTextAlignment : public IfcUtil::IfcBaseType { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcTextAlignment (IfcEntityInstanceData* e); + IfcTextAlignment (std::string v); + operator std::string() const; +}; +/// Definition from CSS1 (W3C Recommendation): This property describes decorations that are added to the text of an element. A value of 'blink' causes the text to blink.. Values are: +/// +/// none +/// underline +/// overline +/// line-through +/// blink +/// +/// User agents must recognize the keyword 'blink', but are not required to support the blink effect. +/// +/// NOTE  Corresponding CSS1 definition is text-decoration. +/// +/// HISTORY  New type in IFC2x3. +class IFC_PARSE_API IfcTextDecoration : public IfcUtil::IfcBaseType { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcTextDecoration (IfcEntityInstanceData* e); + IfcTextDecoration (std::string v); + operator std::string() const; +}; +/// Definition from CSS1 (W3C Recommendation): The value is a font family name and/or generic family name. Values are: +/// +/// The name of a font family of choice. For example, "gill" and "helvetica" are font families. +/// +/// In the example above, the last value is a generic family name. The following generic families are defined: +/// +/// 'serif' (Example: Times) +/// 'sans-serif' (Example: Helvetica) +/// 'cursive' (Example: Zapf-Chancery) +/// 'fantasy' (Example: Western) +/// 'monospace' (Example: Courier) +/// +/// It is encouraged to offer a generic font family as a last alternative. +/// +/// NOTE  Corresponding CSS1 definitions are font-family. +/// +/// HISTORY  New type in IFC2x2 Addendum 2. +/// +/// IFC2x2 Addendum 2 CHANGE: The IfcFontFamily has been added. +class IFC_PARSE_API IfcTextFontName : public IfcUtil::IfcBaseType { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcTextFontName (IfcEntityInstanceData* e); + IfcTextFontName (std::string v); + operator std::string() const; +}; +/// Definition from CSS1 (W3C Recommendation): This property describes how the cases of characters are handled. Values are: +/// +/// capitalize: uppercases the first character of each word +/// uppercase: uppercases all letters of the element +/// lowercase: lowercases all letters of the element +/// none +/// +/// NOTE  Corresponding CSS1 definition is text-transform. +/// +/// HISTORY  New type in IFC2x3. +class IFC_PARSE_API IfcTextTransformation : public IfcUtil::IfcBaseType { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcTextTransformation (IfcEntityInstanceData* e); + IfcTextTransformation (std::string v); + operator std::string() const; +}; +/// IfcThermalAdmittanceMeasure is the measure of the ability of a surface to smooth out temperature variations. +/// Usually measured in Watt / m2 Kelvin. +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2.0. +class IFC_PARSE_API IfcThermalAdmittanceMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcThermalAdmittanceMeasure (IfcEntityInstanceData* e); + IfcThermalAdmittanceMeasure (double v); + operator double() const; +}; +/// IfcThermalConductivityMeasure is a measure of thermal conductivity. +/// Usually measured in Watt / m Kelvin. +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2x. +class IFC_PARSE_API IfcThermalConductivityMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcThermalConductivityMeasure (IfcEntityInstanceData* e); + IfcThermalConductivityMeasure (double v); + operator double() const; +}; +/// IfcThermalExpansionCoeffientMeasure is a measure of the thermal expansion coefficient of a material, which expresses its elongation (as a ratio) per temperature difference. It is usually measured in 1/K. A positive elongation per (positive) rise of temperature is expressed by a positive value. +/// Type: REAL +/// +/// HISTORY New type in IFC2x2. +class IFC_PARSE_API IfcThermalExpansionCoefficientMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcThermalExpansionCoefficientMeasure (IfcEntityInstanceData* e); + IfcThermalExpansionCoefficientMeasure (double v); + operator double() const; +}; +/// IfcThermalResistanceMeasure is a measure of the resistance offered by a body to the flow of energy. +/// Usually measured in m2 Kelvin/Watt. +/// +/// HISTORY New type in IFC Release 2.0. +class IFC_PARSE_API IfcThermalResistanceMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcThermalResistanceMeasure (IfcEntityInstanceData* e); + IfcThermalResistanceMeasure (double v); + operator double() const; +}; +/// IfcThermalTransmittanceMeasure is a measure of the rate at which energy is transmitted through a body. +/// Usually measured in Watts/m2 Kelvin. +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2.0. +class IFC_PARSE_API IfcThermalTransmittanceMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcThermalTransmittanceMeasure (IfcEntityInstanceData* e); + IfcThermalTransmittanceMeasure (double v); + operator double() const; +}; +/// Definition from ISO/CD 10303-41:1992: A thermodynamic temperature measure is the value for the degree of heat of a body. +/// Usually measured in degrees Kelvin (K). +/// Type: REAL +/// +/// NOTE Corresponding ISO 10303 name: thermodynamic_temperature_measure, please refer to ISO/IS 10303-41 for the final definition of the formal standard. +/// +/// HISTORY New type in IFC Release 1.5.1. +class IFC_PARSE_API IfcThermodynamicTemperatureMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcThermodynamicTemperatureMeasure (IfcEntityInstanceData* e); + IfcThermodynamicTemperatureMeasure (double v); + operator double() const; +}; +/// The lexical representation for time is the left truncated +/// lexical representation for dateTime: hh:mm:ss.sss with +/// optional following time zone indicator. For example, to +/// indicate 1:20 pm for Eastern Standard Time which is 5 hours +/// behind Coordinated Universal Time (UTC), one would write: +/// 13:20:00-05:00. +/// +/// HISTORY: New type in IFC2x4 +class IFC_PARSE_API IfcTime : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcMetricValueSelect, public IfcSimpleValue, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcTime (IfcEntityInstanceData* e); + IfcTime (std::string v); + operator std::string() const; +}; +/// Definition from ISO/CD 10303-41:1992: A time measure is the value of the duration of periods. +/// Measured in seconds (s) or days (d) or other units of time. +/// Type: REAL +/// +/// NOTE Corresponding ISO 10303 name: time_measure, please refer to ISO/IS 10303-41 for the final definition of the formal standard. +/// +/// HISTORY New type in IFC Release 1.5.1. +class IFC_PARSE_API IfcTimeMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcTimeMeasure (IfcEntityInstanceData* e); + IfcTimeMeasure (double v); + operator double() const; +}; +/// IfcTimeStamp is an indication of date and time by measuring the number of seconds which have elapsed since the beginning of the year 1970. +/// Type: INTEGER +/// +/// HISTORY New type in IFC Release 1.5.1. +class IFC_PARSE_API IfcTimeStamp : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcMetricValueSelect, public IfcSimpleValue, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcTimeStamp (IfcEntityInstanceData* e); + IfcTimeStamp (int v); + operator int() const; +}; +/// IfcTorqueMeasure is a measure of the torque or moment of a couple. +/// Usually measured in N m. +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2x. +class IFC_PARSE_API IfcTorqueMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcTorqueMeasure (IfcEntityInstanceData* e); + IfcTorqueMeasure (double v); + operator double() const; +}; +/// IfcURIReference provides for identifying a Uniform Resource Identifier, URI, as defined by the RFC3986 of the Network Working Group. A URI can be classified as a locator or a name or both, that is it may comprise a Uniform Resource Locator (URL) and/or a Uniform Resource Name (URN). +/// +/// A Uniform Resource Locator, URL, is a string conforming to a standardized format, which refers to a resource on the internet (such as a document or an image) by its location. +/// A Uniform Resource Name, URN, is intended to serve as persistent, location-independent resource identifier and is +/// designed to make it easy to map other namespaces (that share the properties of URNs) into URN-space. +/// +/// HISTORY New defined datatype in IFC 2x4. +class IFC_PARSE_API IfcURIReference : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcMetricValueSelect, public IfcSimpleValue, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcURIReference (IfcEntityInstanceData* e); + IfcURIReference (std::string v); + operator std::string() const; +}; +/// IfcVaporPermeabilityMeasure is a measure of vapor permeability. +/// Usually measured in kg / s m Pascal. +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2x. +class IFC_PARSE_API IfcVaporPermeabilityMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcVaporPermeabilityMeasure (IfcEntityInstanceData* e); + IfcVaporPermeabilityMeasure (double v); + operator double() const; +}; +/// Definition from ISO/CD 10303-41:1992: A volume measure is the value of the solid content of a body. +/// Usually measured in cubic metre (m3). +/// Type: REAL +/// +/// NOTE Corresponding ISO 10303 name: volume_measure, please refer to ISO/IS 10303-41 for the final definition of the formal standard. +/// +/// HISTORY New type in IFC Release 1.5.1. +class IFC_PARSE_API IfcVolumeMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcVolumeMeasure (IfcEntityInstanceData* e); + IfcVolumeMeasure (double v); + operator double() const; +}; +/// IfcVolumetricFlowRateMeasure is a measure of the volume of a medium flowing per unit time. +/// Usually measured in m3/s. +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2.0. +class IFC_PARSE_API IfcVolumetricFlowRateMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcVolumetricFlowRateMeasure (IfcEntityInstanceData* e); + IfcVolumetricFlowRateMeasure (double v); + operator double() const; +}; +/// IfcWarpingConstantMeasure is a measure for the warping constant or warping resistance of a cross section under torsional loading. It is usually measured in m^6. +/// +/// Type: REAL +/// +/// HISTORY New type in IFC2x2. +class IFC_PARSE_API IfcWarpingConstantMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcWarpingConstantMeasure (IfcEntityInstanceData* e); + IfcWarpingConstantMeasure (double v); + operator double() const; +}; +/// The warping moment measure is a measure for the warping moment, which occurs in warping torsional analysis. It is usually measured in kN*m^2. +/// +/// Type: REAL +/// +/// HISTORY New type in IFC2x2. +class IFC_PARSE_API IfcWarpingMomentMeasure : public IfcUtil::IfcBaseType, public IfcAppliedValueSelect, public IfcDerivedMeasureValue, public IfcMetricValueSelect, public IfcValue, public IfcWarpingStiffnessSelect { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcWarpingMomentMeasure (IfcEntityInstanceData* e); + IfcWarpingMomentMeasure (double v); + operator double() const; +}; + +class IFC_PARSE_API IfcWellKnownTextLiteral : public IfcUtil::IfcBaseType { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcWellKnownTextLiteral (IfcEntityInstanceData* e); + IfcWellKnownTextLiteral (std::string v); + operator std::string() const; +}; +/// The box alignment specifies the alignment of the text box relative to its position. The following string values shall be used: +/// +/// top-left +/// top-middle +/// top-right +/// middle-left +/// center +/// middle-right +/// bottom-left +/// bottom-middle +/// bottom-right +/// +/// NOTE  The top-left is the default value. +/// +/// Figure 298 illustrates alignment values. +/// +/// Figure 298 — Box alignment values +/// +/// Figure 299 illustrates use of alignment values together with the placement and planar extent. +/// +/// Figure 299 — Box alignment examples +/// +/// HISTORY  New type in IFC2x2 Addendum2. +/// +/// IFC2x3 CHANGE  The IfcBoxAlignment has been added. +class IFC_PARSE_API IfcBoxAlignment : public IfcLabel { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcBoxAlignment (IfcEntityInstanceData* e); + IfcBoxAlignment (std::string v); + operator std::string() const; +}; +/// IfcNormalisedRatioMeasure is a dimensionless measure to express ratio values ranging from 0.0 to 1.0. +/// +/// Type: REAL +/// +/// HISTORY New type in IFC Release 2x. +class IFC_PARSE_API IfcNormalisedRatioMeasure : public IfcRatioMeasure, public IfcColourOrFactor { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcNormalisedRatioMeasure (IfcEntityInstanceData* e); + IfcNormalisedRatioMeasure (double v); + operator double() const; +}; +/// Definition from ISO/CD 10303-41:1992: A positive ratio measure is a ratio measure that is greater than zero. +/// Type: IfcRatioMeasure +/// +/// NOTE Corresponding ISO 10303 name: positive_ratio_measure, please refer to ISO/IS 10303-41 for the final definition of the formal standard. +/// +/// HISTORY New type in IFC Release 1.5.1. +class IFC_PARSE_API IfcPositiveRatioMeasure : public IfcRatioMeasure { +public: + virtual const IfcParse::type_declaration& declaration() const; + static const IfcParse::type_declaration& Class(); + explicit IfcPositiveRatioMeasure (IfcEntityInstanceData* e); + IfcPositiveRatioMeasure (double v); + operator double() const; +}; + + +/// Definition: A role which is performed by an actor, either a person, an organization or a +/// person related to an organization. +/// +/// NOTE: The list of roles of the enumeration values of the Role attribute can never +/// be complete. Therefore using enumeration value USERDEFINED, the user can provide his/her own role as a value +/// of the attribute UserDefinedRole. +/// +/// Corresponds to the following entity in ISO-10303-41: organization_role and person_role. +/// +/// HISTORY New entity in IFC Release 1.5.1 +class IFC_PARSE_API IfcActorRole : public IfcUtil::IfcBaseEntity, public IfcResourceObjectSelect { +public: + /// The name of the role played by an actor. If the Role has value USERDEFINED, then + /// the user defined role shall be provided as a value of the attribute UserDefinedRole. + ::Ifc4x3_add2::IfcRoleEnum::Value Role() const; + void setRole(::Ifc4x3_add2::IfcRoleEnum::Value v); + /// Allows for specification of user defined roles beyond the + /// enumeration values provided by Role attribute of type IfcRoleEnum. + /// When a value is provided for attribute UserDefinedRole in parallel + /// the attribute Role shall have enumeration value USERDEFINED. + boost::optional< std::string > UserDefinedRole() const; + void setUserDefinedRole(boost::optional< std::string > v); + /// A textual description relating the nature of the role played by an actor. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + aggregate_of< IfcExternalReferenceRelationship >::ptr HasExternalReference() const; // INVERSE IfcExternalReferenceRelationship::RelatedResourceObjects + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcActorRole (IfcEntityInstanceData* e); + IfcActorRole (::Ifc4x3_add2::IfcRoleEnum::Value v1_Role, boost::optional< std::string > v2_UserDefinedRole, boost::optional< std::string > v3_Description); + typedef aggregate_of< IfcActorRole > list; +}; +/// Definition: An abstract entity type for various kinds of postal and telecom addresses. +/// +/// NOTE Corresponds to the following entity in ISO-10303-41: address. +/// +/// HISTORY New entity in IFC Release 1.5.1. +class IFC_PARSE_API IfcAddress : public IfcUtil::IfcBaseEntity, public IfcObjectReferenceSelect { +public: + /// Identifies the logical location of the address. + boost::optional< ::Ifc4x3_add2::IfcAddressTypeEnum::Value > Purpose() const; + void setPurpose(boost::optional< ::Ifc4x3_add2::IfcAddressTypeEnum::Value > v); + /// Text that relates the nature of the address. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + /// Allows for specification of user specific purpose of the address beyond the + /// enumeration values provided by Purpose attribute of type IfcAddressTypeEnum. + /// When a value is provided for attribute UserDefinedPurpose, in parallel the + /// attribute Purpose shall have enumeration value USERDEFINED. + boost::optional< std::string > UserDefinedPurpose() const; + void setUserDefinedPurpose(boost::optional< std::string > v); + aggregate_of< IfcPerson >::ptr OfPerson() const; // INVERSE IfcPerson::Addresses + aggregate_of< IfcOrganization >::ptr OfOrganization() const; // INVERSE IfcOrganization::Addresses + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAddress (IfcEntityInstanceData* e); + IfcAddress (boost::optional< ::Ifc4x3_add2::IfcAddressTypeEnum::Value > v1_Purpose, boost::optional< std::string > v2_Description, boost::optional< std::string > v3_UserDefinedPurpose); + typedef aggregate_of< IfcAddress > list; +}; + +class IFC_PARSE_API IfcAlignmentParameterSegment : public IfcUtil::IfcBaseEntity { +public: + boost::optional< std::string > StartTag() const; + void setStartTag(boost::optional< std::string > v); + boost::optional< std::string > EndTag() const; + void setEndTag(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAlignmentParameterSegment (IfcEntityInstanceData* e); + IfcAlignmentParameterSegment (boost::optional< std::string > v1_StartTag, boost::optional< std::string > v2_EndTag); + typedef aggregate_of< IfcAlignmentParameterSegment > list; +}; + +class IFC_PARSE_API IfcAlignmentVerticalSegment : public IfcAlignmentParameterSegment { +public: + double StartDistAlong() const; + void setStartDistAlong(double v); + double HorizontalLength() const; + void setHorizontalLength(double v); + double StartHeight() const; + void setStartHeight(double v); + double StartGradient() const; + void setStartGradient(double v); + double EndGradient() const; + void setEndGradient(double v); + boost::optional< double > RadiusOfCurvature() const; + void setRadiusOfCurvature(boost::optional< double > v); + ::Ifc4x3_add2::IfcAlignmentVerticalSegmentTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcAlignmentVerticalSegmentTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAlignmentVerticalSegment (IfcEntityInstanceData* e); + IfcAlignmentVerticalSegment (boost::optional< std::string > v1_StartTag, boost::optional< std::string > v2_EndTag, double v3_StartDistAlong, double v4_HorizontalLength, double v5_StartHeight, double v6_StartGradient, double v7_EndGradient, boost::optional< double > v8_RadiusOfCurvature, ::Ifc4x3_add2::IfcAlignmentVerticalSegmentTypeEnum::Value v9_PredefinedType); + typedef aggregate_of< IfcAlignmentVerticalSegment > list; +}; +/// IfcApplication holds the information about an IFC compliant application developed by an application developer. The IfcApplication utilizes a short identifying name as provided by the application developer. +/// +/// HISTORY  New entity in IFC R1.5. +class IFC_PARSE_API IfcApplication : public IfcUtil::IfcBaseEntity { +public: + /// Name of the application developer, being requested to be member of the IAI. + ::Ifc4x3_add2::IfcOrganization* ApplicationDeveloper() const; + void setApplicationDeveloper(::Ifc4x3_add2::IfcOrganization* v); + /// The version number of this software as specified by the developer of the application. + std::string Version() const; + void setVersion(std::string v); + /// The full name of the application as specified by the application developer. + std::string ApplicationFullName() const; + void setApplicationFullName(std::string v); + /// Short identifying name for the application. + std::string ApplicationIdentifier() const; + void setApplicationIdentifier(std::string v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcApplication (IfcEntityInstanceData* e); + IfcApplication (::Ifc4x3_add2::IfcOrganization* v1_ApplicationDeveloper, std::string v2_Version, std::string v3_ApplicationFullName, std::string v4_ApplicationIdentifier); + typedef aggregate_of< IfcApplication > list; +}; +/// IfcAppliedValue is an abstract supertype that specifies the common attributes for cost values. +/// +/// HISTORY: New Entity in IFC2x2. Modifed in IFC2x4 to use IfcDate for date values. +/// +/// Use definitions +/// The extent of the IfcAppliedValue is determined by the AppliedValue attribute which may be defined either as an IfcMeasureWithUnit or as an IfcMonetaryMeasure or as an IfcRatioMeasure via the IfcAppliedValueSelect type. +/// +/// Optionally, an IfcAppliedValue may have an applicable date. This is intended to fix the date on which the value became relevant for use. It may be the date on which the value was set in the model or it may be a prior or future date when the value becomes operable. +/// +/// Similarly, an IfcAppliedValue may have a 'fixed until' date. This is intended to fix the date on which the value ceases to be relevant for use. +/// +/// An instance of IfcAppliedValue may have a unit basis asserted. This is defined as an IfcMeasureWithUnit that determines the extent of the unit value for application purposes. It is assumed that when this attribute is asserted, then the value given to IfcAppliedValue is that for unit quantity. This is not enforced within the IFC schema and thus needs to be controlled within an application. +/// +/// Applied values may be referenced from a document (such as a price list). The relationship between one or more occurrences of IfcAppliedValue (or its subtypes) is achieved through the use of the IfcExternalReferenceRelationship in which the document provides the IfcExternalReferenceRelationship.RelatingExtReference and the value occurrences are the IfcExternalReferenceRelationship.RelatedResourceObjects. +class IFC_PARSE_API IfcAppliedValue : public IfcUtil::IfcBaseEntity, public IfcMetricValueSelect, public IfcObjectReferenceSelect, public IfcResourceObjectSelect { +public: + /// A name or additional clarification given to a cost value. + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + /// The description that may apply additional information about a cost value. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + /// The extent or quantity or amount of an applied value. + ::Ifc4x3_add2::IfcAppliedValueSelect* AppliedValue() const; + void setAppliedValue(::Ifc4x3_add2::IfcAppliedValueSelect* v); + /// The number and unit of measure on which the unit cost is based. + /// + /// Note: As well as the normally expected units of measure such as length, area, volume etc., costs may be based on units of measure which need to be defined e.g. sack, drum, pallet, item etc. Unit costs may be based on quantities greater (or lesser) than a unitary value of the basis measure. For instance, timber may have a unit cost rate per X meters where X > 1; similarly for cable, piping and many other items. The basis number may be either an integer or a real value. + /// + /// Note: This attribute should be asserted for all circumstances where the cost to be applied is per unit quantity. It may be asserted even for circumstances where an item price is used, in which case the unit cost basis should be by item (or equivalent definition). + ::Ifc4x3_add2::IfcMeasureWithUnit* UnitBasis() const; + void setUnitBasis(::Ifc4x3_add2::IfcMeasureWithUnit* v); + /// The date on or from which an applied value is applicable. + /// + /// IFC2x4 CHANGE Type changed from IfcDateTimeSelect. + boost::optional< std::string > ApplicableDate() const; + void setApplicableDate(boost::optional< std::string > v); + /// The date until which applied value is applicable. + /// + /// IFC2x4 CHANGE Type changed from IfcDateTimeSelect. + boost::optional< std::string > FixedUntilDate() const; + void setFixedUntilDate(boost::optional< std::string > v); + boost::optional< std::string > Category() const; + void setCategory(boost::optional< std::string > v); + boost::optional< std::string > Condition() const; + void setCondition(boost::optional< std::string > v); + boost::optional< ::Ifc4x3_add2::IfcArithmeticOperatorEnum::Value > ArithmeticOperator() const; + void setArithmeticOperator(boost::optional< ::Ifc4x3_add2::IfcArithmeticOperatorEnum::Value > v); + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > Components() const; + void setComponents(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v); + aggregate_of< IfcExternalReferenceRelationship >::ptr HasExternalReference() const; // INVERSE IfcExternalReferenceRelationship::RelatedResourceObjects + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAppliedValue (IfcEntityInstanceData* e); + IfcAppliedValue (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcAppliedValueSelect* v3_AppliedValue, ::Ifc4x3_add2::IfcMeasureWithUnit* v4_UnitBasis, boost::optional< std::string > v5_ApplicableDate, boost::optional< std::string > v6_FixedUntilDate, boost::optional< std::string > v7_Category, boost::optional< std::string > v8_Condition, boost::optional< ::Ifc4x3_add2::IfcArithmeticOperatorEnum::Value > v9_ArithmeticOperator, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v10_Components); + typedef aggregate_of< IfcAppliedValue > list; +}; +/// Definition: An IfcApproval represents information about approval processes such as for a plan, a design, a proposal, or a change order in a construction or facilities management project. IfcApproval is referenced by IfcRelAssociatesApproval in IfcControlExtension schema, and thereby can be related to all subtypes of IfcRoot. An approval may also be given to resource objects using IfcResourceApprovalRelationship +/// +/// HISTORY New Entity in IFC Release 2.0 +/// +/// IFC2x Edition 4 CHANGE  Attributes Identifier and Name made optional, where rule added to require at least one of them being asserted. Inverse attributes ApprovedObjects, ApprovedResources and HasExternalReferences added. Inverse attribute Properties deleted (more general relationship via inverse ApprovedResources to be used instead). +class IFC_PARSE_API IfcApproval : public IfcUtil::IfcBaseEntity, public IfcResourceObjectSelect { +public: + /// A computer interpretable identifier by which the approval is known. + boost::optional< std::string > Identifier() const; + void setIdentifier(boost::optional< std::string > v); + /// A human readable name given to an approval. + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + /// A general textual description of a design, work task, plan, etc. that is being approved for. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + /// Date and time when the result of the approval process is produced. + /// + /// IFC2x4 CHANGE  Attribute data type changed to IfcDateTime using ISO 8601 representation, renamed from ApprovalDateTime and made OPTIONAL. + boost::optional< std::string > TimeOfApproval() const; + void setTimeOfApproval(boost::optional< std::string > v); + /// The result or current status of the approval, e.g. Requested, Processed, Approved, Not Approved. + boost::optional< std::string > Status() const; + void setStatus(boost::optional< std::string > v); + /// Level of the approval e.g. Draft v.s. Completed design. + boost::optional< std::string > Level() const; + void setLevel(boost::optional< std::string > v); + /// Textual description of special constraints or conditions for the approval. + boost::optional< std::string > Qualifier() const; + void setQualifier(boost::optional< std::string > v); + /// The actor that is acting in the role specified at IfcOrganization or individually at IfcPerson and requesting an approval. + /// + /// IFC2x4 CHANGE  New attribute for approval request replacing IfcApprovalActorRelationship (being deleted). + ::Ifc4x3_add2::IfcActorSelect* RequestingApproval() const; + void setRequestingApproval(::Ifc4x3_add2::IfcActorSelect* v); + /// The actor that is acting in the role specified at IfcOrganization or individually at IfcPerson and giving an approval. + /// + /// IFC2x4 CHANGE  New attribute for approval provision replacing IfcApprovalActorRelationship (being deleted). + ::Ifc4x3_add2::IfcActorSelect* GivingApproval() const; + void setGivingApproval(::Ifc4x3_add2::IfcActorSelect* v); + aggregate_of< IfcExternalReferenceRelationship >::ptr HasExternalReferences() const; // INVERSE IfcExternalReferenceRelationship::RelatedResourceObjects + aggregate_of< IfcRelAssociatesApproval >::ptr ApprovedObjects() const; // INVERSE IfcRelAssociatesApproval::RelatingApproval + aggregate_of< IfcResourceApprovalRelationship >::ptr ApprovedResources() const; // INVERSE IfcResourceApprovalRelationship::RelatingApproval + aggregate_of< IfcApprovalRelationship >::ptr IsRelatedWith() const; // INVERSE IfcApprovalRelationship::RelatedApprovals + aggregate_of< IfcApprovalRelationship >::ptr Relates() const; // INVERSE IfcApprovalRelationship::RelatingApproval + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcApproval (IfcEntityInstanceData* e); + IfcApproval (boost::optional< std::string > v1_Identifier, boost::optional< std::string > v2_Name, boost::optional< std::string > v3_Description, boost::optional< std::string > v4_TimeOfApproval, boost::optional< std::string > v5_Status, boost::optional< std::string > v6_Level, boost::optional< std::string > v7_Qualifier, ::Ifc4x3_add2::IfcActorSelect* v8_RequestingApproval, ::Ifc4x3_add2::IfcActorSelect* v9_GivingApproval); + typedef aggregate_of< IfcApproval > list; +}; +/// Definition +/// from IAI: The abstract entity IfcBoundaryCondition +/// is the supertype of all boundary conditions that can be applied to +/// structural connection definitions, either directly for the connection +/// (e.g. the joint) or for the relation between a structural member and +/// the connection. +/// NOTE: The boundary conditions are used +/// within other parts, mainly by instances of IfcStructuralConnection +/// (for the definition of supports) and instances of IfcRelConnectsStructuralMember +/// (for the definition of connections between structural members and +/// structural connections). +/// +/// HISTORY: New entity +/// in Release IFC2x Edition +/// 2. +class IFC_PARSE_API IfcBoundaryCondition : public IfcUtil::IfcBaseEntity { +public: + /// Optionally defines a name for this boundary condition. + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBoundaryCondition (IfcEntityInstanceData* e); + IfcBoundaryCondition (boost::optional< std::string > v1_Name); + typedef aggregate_of< IfcBoundaryCondition > list; +}; +/// Definition from IAI: Describes linearly elastic support conditions or connection conditions. +/// +/// Applicability: +/// +/// Curve supports and connections. +/// +/// HISTORY: New entity in IFC 2x2. +/// IFC 2x4 change: Attributes LinearStiffnessX/Y/Z renamed to TranslationalStiffnessX/Y/Z. +/// +/// IFC 2x4 change: All attribute data types changed from numeric to SELECT between Boolean and numeric. Stiffnesses may now also be negative, for example to capture destabilizing effects in boundary conditions. The IFC 2x3 convention of -1. representing infinite stiffness is no longer valid and must not be used. Infinite stiffness, i.e. fixed supports, are now modeled by the Boolean value TRUE. +class IFC_PARSE_API IfcBoundaryEdgeCondition : public IfcBoundaryCondition { +public: + /// Translational stiffness value in x-direction of the coordinate system defined by the instance which uses this resource object. + ::Ifc4x3_add2::IfcModulusOfTranslationalSubgradeReactionSelect* TranslationalStiffnessByLengthX() const; + void setTranslationalStiffnessByLengthX(::Ifc4x3_add2::IfcModulusOfTranslationalSubgradeReactionSelect* v); + /// Translational stiffness value in y-direction of the coordinate system defined by the instance which uses this resource object. + ::Ifc4x3_add2::IfcModulusOfTranslationalSubgradeReactionSelect* TranslationalStiffnessByLengthY() const; + void setTranslationalStiffnessByLengthY(::Ifc4x3_add2::IfcModulusOfTranslationalSubgradeReactionSelect* v); + /// Translational stiffness value in z-direction of the coordinate system defined by the instance which uses this resource object. + ::Ifc4x3_add2::IfcModulusOfTranslationalSubgradeReactionSelect* TranslationalStiffnessByLengthZ() const; + void setTranslationalStiffnessByLengthZ(::Ifc4x3_add2::IfcModulusOfTranslationalSubgradeReactionSelect* v); + /// Rotational stiffness value about the x-axis of the coordinate system defined by the instance which uses this resource object. + ::Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionSelect* RotationalStiffnessByLengthX() const; + void setRotationalStiffnessByLengthX(::Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionSelect* v); + /// Rotational stiffness value about the y-axis of the coordinate system defined by the instance which uses this resource object. + ::Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionSelect* RotationalStiffnessByLengthY() const; + void setRotationalStiffnessByLengthY(::Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionSelect* v); + /// Rotational stiffness value about the z-axis of the coordinate system defined by the instance which uses this resource object. + ::Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionSelect* RotationalStiffnessByLengthZ() const; + void setRotationalStiffnessByLengthZ(::Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionSelect* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBoundaryEdgeCondition (IfcEntityInstanceData* e); + IfcBoundaryEdgeCondition (boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcModulusOfTranslationalSubgradeReactionSelect* v2_TranslationalStiffnessByLengthX, ::Ifc4x3_add2::IfcModulusOfTranslationalSubgradeReactionSelect* v3_TranslationalStiffnessByLengthY, ::Ifc4x3_add2::IfcModulusOfTranslationalSubgradeReactionSelect* v4_TranslationalStiffnessByLengthZ, ::Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionSelect* v5_RotationalStiffnessByLengthX, ::Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionSelect* v6_RotationalStiffnessByLengthY, ::Ifc4x3_add2::IfcModulusOfRotationalSubgradeReactionSelect* v7_RotationalStiffnessByLengthZ); + typedef aggregate_of< IfcBoundaryEdgeCondition > list; +}; +/// Definition from IAI: Describes linearly elastic support conditions or connection conditions. +/// +/// Applicability: +/// +/// Surface supports and connections. +/// +/// HISTORY: New entity in IFC 2x2. +/// IFC 2x4 change: Attributes LinearStiffnessX/Y/Z renamed to TranslationalStiffnessX/Y/Z. +/// +/// IFC 2x4 change: All attribute data types changed from numeric to SELECT between Boolean and numeric. Stiffnesses may now also be negative, for example to capture destabilizing effects in boundary conditions. The IFC 2x3 convention of -1. representing infinite stiffness is no longer valid and must not be used. Infinite stiffness, i.e. fixed supports, are now modeled by the Boolean value TRUE. +class IFC_PARSE_API IfcBoundaryFaceCondition : public IfcBoundaryCondition { +public: + /// Translational stiffness value in x-direction of the coordinate system defined by the instance which uses this resource object. + ::Ifc4x3_add2::IfcModulusOfSubgradeReactionSelect* TranslationalStiffnessByAreaX() const; + void setTranslationalStiffnessByAreaX(::Ifc4x3_add2::IfcModulusOfSubgradeReactionSelect* v); + /// Translational stiffness value in y-direction of the coordinate system defined by the instance which uses this resource object. + ::Ifc4x3_add2::IfcModulusOfSubgradeReactionSelect* TranslationalStiffnessByAreaY() const; + void setTranslationalStiffnessByAreaY(::Ifc4x3_add2::IfcModulusOfSubgradeReactionSelect* v); + /// Translational stiffness value in z-direction of the coordinate system defined by the instance which uses this resource object. + ::Ifc4x3_add2::IfcModulusOfSubgradeReactionSelect* TranslationalStiffnessByAreaZ() const; + void setTranslationalStiffnessByAreaZ(::Ifc4x3_add2::IfcModulusOfSubgradeReactionSelect* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBoundaryFaceCondition (IfcEntityInstanceData* e); + IfcBoundaryFaceCondition (boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcModulusOfSubgradeReactionSelect* v2_TranslationalStiffnessByAreaX, ::Ifc4x3_add2::IfcModulusOfSubgradeReactionSelect* v3_TranslationalStiffnessByAreaY, ::Ifc4x3_add2::IfcModulusOfSubgradeReactionSelect* v4_TranslationalStiffnessByAreaZ); + typedef aggregate_of< IfcBoundaryFaceCondition > list; +}; +/// Definition from IAI: Describes linearly elastic support conditions or connection conditions. +/// +/// Applicability: +/// +/// Point supports and connections. +/// +/// HISTORY: New entity in IFC 2x2. +/// IFC 2x4 change: Attributes LinearStiffnessX/Y/Z renamed to TranslationalStiffnessX/Y/Z. +/// +/// IFC 2x4 change: All attribute data types changed from numeric to SELECT between Boolean and numeric. Stiffnesses may now also be negative, for example to capture destabilizing effects in boundary conditions. The IFC 2x3 convention of -1. representing infinite stiffness is no longer valid and must not be used. Infinite stiffness, i.e. fixed supports, are now modeled by the Boolean value TRUE. +class IFC_PARSE_API IfcBoundaryNodeCondition : public IfcBoundaryCondition { +public: + /// Translational stiffness value in x-direction of the coordinate system defined by the instance which uses this resource object. + ::Ifc4x3_add2::IfcTranslationalStiffnessSelect* TranslationalStiffnessX() const; + void setTranslationalStiffnessX(::Ifc4x3_add2::IfcTranslationalStiffnessSelect* v); + /// Translational stiffness value in y-direction of the coordinate system defined by the instance which uses this resource object. + ::Ifc4x3_add2::IfcTranslationalStiffnessSelect* TranslationalStiffnessY() const; + void setTranslationalStiffnessY(::Ifc4x3_add2::IfcTranslationalStiffnessSelect* v); + /// Translational stiffness value in z-direction of the coordinate system defined by the instance which uses this resource object. + ::Ifc4x3_add2::IfcTranslationalStiffnessSelect* TranslationalStiffnessZ() const; + void setTranslationalStiffnessZ(::Ifc4x3_add2::IfcTranslationalStiffnessSelect* v); + /// Rotational stiffness value about the x-axis of the coordinate system defined by the instance which uses this resource object. + ::Ifc4x3_add2::IfcRotationalStiffnessSelect* RotationalStiffnessX() const; + void setRotationalStiffnessX(::Ifc4x3_add2::IfcRotationalStiffnessSelect* v); + /// Rotational stiffness value about the y-axis of the coordinate system defined by the instance which uses this resource object. + ::Ifc4x3_add2::IfcRotationalStiffnessSelect* RotationalStiffnessY() const; + void setRotationalStiffnessY(::Ifc4x3_add2::IfcRotationalStiffnessSelect* v); + /// Rotational stiffness value about the z-axis of the coordinate system defined by the instance which uses this resource object. + ::Ifc4x3_add2::IfcRotationalStiffnessSelect* RotationalStiffnessZ() const; + void setRotationalStiffnessZ(::Ifc4x3_add2::IfcRotationalStiffnessSelect* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBoundaryNodeCondition (IfcEntityInstanceData* e); + IfcBoundaryNodeCondition (boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcTranslationalStiffnessSelect* v2_TranslationalStiffnessX, ::Ifc4x3_add2::IfcTranslationalStiffnessSelect* v3_TranslationalStiffnessY, ::Ifc4x3_add2::IfcTranslationalStiffnessSelect* v4_TranslationalStiffnessZ, ::Ifc4x3_add2::IfcRotationalStiffnessSelect* v5_RotationalStiffnessX, ::Ifc4x3_add2::IfcRotationalStiffnessSelect* v6_RotationalStiffnessY, ::Ifc4x3_add2::IfcRotationalStiffnessSelect* v7_RotationalStiffnessZ); + typedef aggregate_of< IfcBoundaryNodeCondition > list; +}; +/// Definition from IAI: Describes linearly elastic support conditions or connection conditions, including linearly elastic warping restraints. +/// +/// Applicability: +/// +/// Point supports and connections. +/// +/// HISTORY: New entity in IFC 2x2. +/// +/// IFC 2x4 change: All attribute data types changed from numeric to SELECT between Boolean and numeric. Stiffnesses may now also be negative, for example to capture destabilizing effects in boundary conditions. The IFC 2x3 convention of -1. representing infinite stiffness is no longer valid and must not be used. Infinite stiffness, i.e. fixed supports, are now modeled by the Boolean value TRUE. +class IFC_PARSE_API IfcBoundaryNodeConditionWarping : public IfcBoundaryNodeCondition { +public: + /// Defines the warping stiffness value. + ::Ifc4x3_add2::IfcWarpingStiffnessSelect* WarpingStiffness() const; + void setWarpingStiffness(::Ifc4x3_add2::IfcWarpingStiffnessSelect* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBoundaryNodeConditionWarping (IfcEntityInstanceData* e); + IfcBoundaryNodeConditionWarping (boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcTranslationalStiffnessSelect* v2_TranslationalStiffnessX, ::Ifc4x3_add2::IfcTranslationalStiffnessSelect* v3_TranslationalStiffnessY, ::Ifc4x3_add2::IfcTranslationalStiffnessSelect* v4_TranslationalStiffnessZ, ::Ifc4x3_add2::IfcRotationalStiffnessSelect* v5_RotationalStiffnessX, ::Ifc4x3_add2::IfcRotationalStiffnessSelect* v6_RotationalStiffnessY, ::Ifc4x3_add2::IfcRotationalStiffnessSelect* v7_RotationalStiffnessZ, ::Ifc4x3_add2::IfcWarpingStiffnessSelect* v8_WarpingStiffness); + typedef aggregate_of< IfcBoundaryNodeConditionWarping > list; +}; +/// IfcConnectionGeometry is used to describe the geometric and topological constraints that facilitate the physical connection of two objects. It is envisioned as a control that applies to the element connection relationships. +/// +/// NOTE  The element connection relationship normally provides for a logical connection information, by referencing the relating and related elements. If in addition an IfcConnectionGeometry is provided, physical connection information is given by specifying exactly where at the relating and related element the element connection occurs. +/// Using the eccentricity subtypes, the connection can also be described when there is a physical distance (or eccentricity) between the connection elements. +/// +/// The IfcConnectionGeometry allows for the provision of connection constraints between geometric and topological elements, the following connection geometry/topology types are in scope: +/// +/// point | vertex point, +/// curve | edge curve, +/// surface | face surface, +/// +/// HISTORY  New entity in IFC Release 1.5. +/// +/// IFC2x Edition 3 CHANGE  The definition of the subtypes has been enhanced by allowing either geometric representation items (point | curve | surface) or topological representation items with associated geometry (vertex point | edge curve | face  surface). +class IFC_PARSE_API IfcConnectionGeometry : public IfcUtil::IfcBaseEntity { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcConnectionGeometry (IfcEntityInstanceData* e); + IfcConnectionGeometry (); + typedef aggregate_of< IfcConnectionGeometry > list; +}; +/// IfcConnectionPointGeometry +/// is used to describe the geometric constraints that facilitate the +/// physical connection of two objects at a point (here IfcCartesianPoint) or at an vertex with point +/// coordinates associated. It is envisioned as a control that applies to the element connection relationships. +/// +/// EXAMPLE  The connection relationship between two path based elements (like a column and a beam) has a geometric constraint which describes the connection points by a PointOnRelatingElement for the column and a PointOnRelatedElement for the beam. The exact usage of the IfcConnectionPointGeometry is further defined in the geometry use sections of the elements that use it. +/// +/// NOTE  If the point connection has an offset (if the two points or vertex points at the relating and related element do not physically match), the subtype IfcConnectionPointEccentricity shall be used. +/// +/// HISTORY  New entity in IFC Release 1.5, has been renamed from IfcPointConnectionGeometry in IFC Release 2x. +/// +/// IFC2x Edition 3 CHANGE  The provision of topology with associated geometry, IfcVertexPoint, is +/// enabled by using the IfcPointOrVertexPoint. +/// +/// Geometry use definitions +/// The IfcPoint (or the IfcVertexPoint with an associated IfcPoint) at the PointOnRelatingElement attribute defines the point where the basic geometry items of the connected elements connect. The point coordinates are provided within the local coordinate system of the RelatingElement, as specified at the IfcRelConnectsSubtype that utilizes the IfcConnectionPointGeometry. Optionally, the same point coordinates can also be provided within the local coordinate system of the RelatedElement by using the PointOnRelatedElement attribute. If both point coordinates are not identical within a common parent coordinate system (ultimately within the world coordinate system), the subtype IfcConnectionPointEccentricity shall be used. +class IFC_PARSE_API IfcConnectionPointGeometry : public IfcConnectionGeometry { +public: + /// Point at which the connected object is aligned at the relating element, given in the LCS of the relating element. + ::Ifc4x3_add2::IfcPointOrVertexPoint* PointOnRelatingElement() const; + void setPointOnRelatingElement(::Ifc4x3_add2::IfcPointOrVertexPoint* v); + /// Point at which connected objects are aligned at the related element, given in the LCS of the related element. If the information is omitted, then the origin of the related element is used. + ::Ifc4x3_add2::IfcPointOrVertexPoint* PointOnRelatedElement() const; + void setPointOnRelatedElement(::Ifc4x3_add2::IfcPointOrVertexPoint* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcConnectionPointGeometry (IfcEntityInstanceData* e); + IfcConnectionPointGeometry (::Ifc4x3_add2::IfcPointOrVertexPoint* v1_PointOnRelatingElement, ::Ifc4x3_add2::IfcPointOrVertexPoint* v2_PointOnRelatedElement); + typedef aggregate_of< IfcConnectionPointGeometry > list; +}; +/// IfcConnectionSurfaceGeometry is used to describe the geometric constraints that facilitate the physical connection of two objects at a surface or at a face with surface geometry associated. It is envisioned as a control that applies to the element connection relationships. +/// +/// HISTORY  New entity in IFC Release 2x. +/// +/// IFC2x Edition 3 CHANGE  The provision of topology with associated geometry, IfcFaceSurface, is enabled by using the IfcSurfaceOrFaceSurface. +/// +/// Geometry use definitions +/// The IfcSurface (or the IfcFaceSurface with an associated IfcSurface) at the SurfaceOnRelatingElement attribute defines the surface where the basic geometry items of the connected elements connects. The surface geometry and coordinates are provided within the local coordinate system of the RelatingElement, as specified at the IfcRelConnectsSubtype that utilizes the IfcConnectionSurfaceGeometry. Optionally, the same surface geometry and coordinates can also be provided within the local coordinate system of the RelatedElement by using the SurfaceOnRelatedElement attribute. +class IFC_PARSE_API IfcConnectionSurfaceGeometry : public IfcConnectionGeometry { +public: + /// Surface at which related object is aligned at the relating element, given in the LCS of the relating element. + ::Ifc4x3_add2::IfcSurfaceOrFaceSurface* SurfaceOnRelatingElement() const; + void setSurfaceOnRelatingElement(::Ifc4x3_add2::IfcSurfaceOrFaceSurface* v); + /// Surface at which the relating element is aligned at the related element, given in the LCS of the related element. If the information is omitted, then the origin of the related element is used. + ::Ifc4x3_add2::IfcSurfaceOrFaceSurface* SurfaceOnRelatedElement() const; + void setSurfaceOnRelatedElement(::Ifc4x3_add2::IfcSurfaceOrFaceSurface* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcConnectionSurfaceGeometry (IfcEntityInstanceData* e); + IfcConnectionSurfaceGeometry (::Ifc4x3_add2::IfcSurfaceOrFaceSurface* v1_SurfaceOnRelatingElement, ::Ifc4x3_add2::IfcSurfaceOrFaceSurface* v2_SurfaceOnRelatedElement); + typedef aggregate_of< IfcConnectionSurfaceGeometry > list; +}; +/// IfcConnectionVolumeGeometry is used to describe the geometric constraints that facilitate the physical connection (or overlap) of two objects at a volume defined by a solid or closed shell. It is envisioned as a control that applies to the element connection or interference relationships. +/// +/// HISTORY New entity in IFC2x4. +/// +/// Geometry use definitions +/// The IfcSolidModel (or the IfcClosedShell) at the VolumeOnRelatingElement attribute defines the volume where the basic geometry items of the interfering elements overlap. The volume geometry and coordinates are provided within the local coordinate system of the RelatingElement, as specified at the subtypes of the relationship IfcRelConnects that utilizes the IfcConnectionSurfaceGeometry. Optionally, the samevolume geometry and coordinates can also be provided within the local coordinate system of the RelatedElement by using the VolumeOnRelatedElement attribute. +class IFC_PARSE_API IfcConnectionVolumeGeometry : public IfcConnectionGeometry { +public: + /// Volume at which related object overlaps with the relating element, given in the LCS of the relating element. + ::Ifc4x3_add2::IfcSolidOrShell* VolumeOnRelatingElement() const; + void setVolumeOnRelatingElement(::Ifc4x3_add2::IfcSolidOrShell* v); + /// Volume at which related object overlaps with the relating element, given in the LCS of the related element. + ::Ifc4x3_add2::IfcSolidOrShell* VolumeOnRelatedElement() const; + void setVolumeOnRelatedElement(::Ifc4x3_add2::IfcSolidOrShell* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcConnectionVolumeGeometry (IfcEntityInstanceData* e); + IfcConnectionVolumeGeometry (::Ifc4x3_add2::IfcSolidOrShell* v1_VolumeOnRelatingElement, ::Ifc4x3_add2::IfcSolidOrShell* v2_VolumeOnRelatedElement); + typedef aggregate_of< IfcConnectionVolumeGeometry > list; +}; +/// An IfcConstraint is used to define a constraint or limiting value or boundary condition that may be applied to an object or to the value of a property. +/// +/// HISTORY: New Entity in IFC Release 2.0 +/// +/// Use Definition +/// IfcConstraint may be associated with any subtype of IfcRoot (unless restricted in specific subtypes) through the IfcRelAssociatesConstraint relationship in the IfcControlExtension schema, or may be associated with IfcProperty by IfcPropertyConstraintRelationship. +/// +/// A constraint may aggregate other constraints through the IfcConstraintAggregationRelationship through which a logical association between constraints may be applied, or constraints may have other defined relationship to other constraints via IfcConstraintRelationship. +/// +/// A constraint must have a name applied through the IfcConstraint.Name attribute and optionally, a description through IfcConstraint.Description. The grade of the constraint (hard, soft, advisory) must be specified through IfcConstraint.ConstraintGrade or IfcConstraint.UserDefinedGrade whilst the source, creating actor and time at which the constraint is created may be optionally asserted through IfcConstraint.ConstraintSource, IfcConstraint.CreatingActor and IfcConstraint.CreationTime. +/// +/// A constraint may also have additional external information (such as classification or document information) associated to it by IfcExternalReferenceRelationship, accessible through inverse attribute IfcConstraint.HasExternalReferences +class IFC_PARSE_API IfcConstraint : public IfcUtil::IfcBaseEntity, public IfcResourceObjectSelect { +public: + /// A name to be used for the constraint (e.g., ChillerCoefficientOfPerformance). + std::string Name() const; + void setName(std::string v); + /// A description that may apply additional information about a constraint. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + /// Enumeration that qualifies the type of constraint. + ::Ifc4x3_add2::IfcConstraintEnum::Value ConstraintGrade() const; + void setConstraintGrade(::Ifc4x3_add2::IfcConstraintEnum::Value v); + /// Any source material, such as a code or standard, from which the constraint originated. + boost::optional< std::string > ConstraintSource() const; + void setConstraintSource(boost::optional< std::string > v); + /// Person and/or organization that has created the constraint. + ::Ifc4x3_add2::IfcActorSelect* CreatingActor() const; + void setCreatingActor(::Ifc4x3_add2::IfcActorSelect* v); + /// Time when information specifying the constraint instance was created. + /// + /// Note IFC2x4 CHANGE: Attribute data type changed to IfcDateTime using ISO 8601 representation + boost::optional< std::string > CreationTime() const; + void setCreationTime(boost::optional< std::string > v); + /// Allows for specification of user defined grade of the constraint beyond the enumeration values (hard, soft, advisory) provided by ConstraintGrade attribute of type IfcConstraintEnum. + /// When a value is provided for attribute UserDefinedGrade in parallel the attribute ConstraintGrade shall have enumeration value USERDEFINED. + boost::optional< std::string > UserDefinedGrade() const; + void setUserDefinedGrade(boost::optional< std::string > v); + aggregate_of< IfcExternalReferenceRelationship >::ptr HasExternalReferences() const; // INVERSE IfcExternalReferenceRelationship::RelatedResourceObjects + aggregate_of< IfcResourceConstraintRelationship >::ptr PropertiesForConstraint() const; // INVERSE IfcResourceConstraintRelationship::RelatingConstraint + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcConstraint (IfcEntityInstanceData* e); + IfcConstraint (std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcConstraintEnum::Value v3_ConstraintGrade, boost::optional< std::string > v4_ConstraintSource, ::Ifc4x3_add2::IfcActorSelect* v5_CreatingActor, boost::optional< std::string > v6_CreationTime, boost::optional< std::string > v7_UserDefinedGrade); + typedef aggregate_of< IfcConstraint > list; +}; +/// Definition from OpenGIS® Abstract Specification, +/// Topic 2: If the relationship between any two coordinate +/// reference systems is known, coordinates can be transformed +/// or converted to another coordinate reference system. +/// Coordinate operations are divided into two subtypes: +/// +/// Coordinate conversion – mathematical +/// operation on coordinates that does not include any change +/// of datum. The best-known example of a coordinate +/// conversion is a map projection. The parameters describing +/// coordinate conversions are defined rather than +/// empirically derived. Note that some conversions have no +/// parameters. +/// +/// Coordinate transformation – mathematical +/// operation on coordinates that usually includes a change +/// of datum. The parameters of a coordinate transformation +/// are empirically derived from data containing the +/// coordinates of a series of points in both coordinate +/// reference systems. This computational process is usually +/// ‘over-determined’, allowing derivation of +/// error (or accuracy) estimates for the transformation. +/// Also, the stochastic nature of the parameters may result +/// in multiple (different) versions of the same coordinate +/// transformation. Because of this several transformations +/// may exist for a given pair of coordinate reference +/// systems, differing in their transformation method, +/// parameter values and accuracy characteristics. +/// +/// The coordinate operation is an +/// abstract supertype to handle any operation (transformation +/// or conversion) between two coordinate reference systems. It +/// is meant to provide expandability for future versions, +/// since currently only the conversion of a local engineering +/// coordinate system into a map coordinate reference system is +/// dealt with by the subtype IfcMapConversion. +/// +/// By convention, a coordinate operation is given between the +/// SourceCRS being the more local, or child coordinate +/// reference system, and the TargetCRS being the more +/// remote or parent coordinate reference system, in +/// thespecial case the coordinate operation between the local +/// engineering coordinate system of the construction project +/// and any map or other coordinate reference system. +/// +/// HISTORY  New entity in IFC2x4. +class IFC_PARSE_API IfcCoordinateOperation : public IfcUtil::IfcBaseEntity { +public: + /// Source coordinate reference system for the operation. + ::Ifc4x3_add2::IfcCoordinateReferenceSystemSelect* SourceCRS() const; + void setSourceCRS(::Ifc4x3_add2::IfcCoordinateReferenceSystemSelect* v); + /// Target coordinate reference system for the operation. + ::Ifc4x3_add2::IfcCoordinateReferenceSystem* TargetCRS() const; + void setTargetCRS(::Ifc4x3_add2::IfcCoordinateReferenceSystem* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCoordinateOperation (IfcEntityInstanceData* e); + IfcCoordinateOperation (::Ifc4x3_add2::IfcCoordinateReferenceSystemSelect* v1_SourceCRS, ::Ifc4x3_add2::IfcCoordinateReferenceSystem* v2_TargetCRS); + typedef aggregate_of< IfcCoordinateOperation > list; +}; +/// Definition from OpenGIS® Abstract Specification, Topic +/// 2: A coordinate reference system is a coordinate system which +/// is related to the real world by a datum. The coordinate system is +/// composed of a set of coordinate axes with specified units of +/// measure. The datum specifies the relationship of a coordinate +/// system to the earth. The resulting combination of coordinate +/// system and datum is a coordinate reference system. +/// +/// IfcCoordinateReferenceSystem is a definition of a coordinate +/// reference system by means of qualified identifiers only. The +/// interpretation of the identifier is expected to be well-known to +/// the receiving software. +/// +/// NOTE  One widely-used, publicly-available +/// authority is the European Petroleum Survey Group (EPSG), and use +/// of this authority is currently specified in several OGC +/// Implementation Specifications. Software used to transport IFC +/// engineering models into GIS applications (and vice versa) is +/// expected to have knowledge about the OGC Implementation +/// Specifications. +/// +/// HISTORY  New entity in IFC2x4. +class IFC_PARSE_API IfcCoordinateReferenceSystem : public IfcUtil::IfcBaseEntity, public IfcCoordinateReferenceSystemSelect { +public: + /// Name by which the coordinate reference system is identified. + /// Note  The name shall be taken from the list recognized by the European Petroleum Survey Group EPSG. + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + /// Informal description of this coordinate reference system. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + /// Name by which this datum is identified. The geodetic datum is associated with the coordinate reference system and indicates the shape and size of the rotation ellipsoid and this ellipsoid's connection and orientation to the actual globe/earth. Examples for geodetic datums include: + /// + /// ED50 + /// EUREF89 + /// WSG84 + boost::optional< std::string > GeodeticDatum() const; + void setGeodeticDatum(boost::optional< std::string > v); + aggregate_of< IfcCoordinateOperation >::ptr HasCoordinateOperation() const; // INVERSE IfcCoordinateOperation::SourceCRS + aggregate_of< IfcWellKnownText >::ptr WellKnownText() const; // INVERSE IfcWellKnownText::CoordinateReferenceSystem + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCoordinateReferenceSystem (IfcEntityInstanceData* e); + IfcCoordinateReferenceSystem (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, boost::optional< std::string > v3_GeodeticDatum); + typedef aggregate_of< IfcCoordinateReferenceSystem > list; +}; +/// IfcCostValue is an amount of money or a value that affects an amount of money. +/// +/// HISTORY: New Entity in IFC Release 1.0 +/// +/// Use definitions +/// Each instance of IfcCostValue may also have a CostType. There are many possible types of cost value that may be identified. While there is a broad understanding of the meaning of names that may be assigned to different types of costs, there is no general standard for naming cost types nor are there any broadly defined classifications. To allow for any type of cost value, the IfcLabel datatype is assigned. +/// +/// The following defines some cost types that might be applied: +/// +/// Annual rate of return +/// Bonus +/// Bulk purchase rebate +/// Contract +/// Consultancy +/// Delivery +/// Estimated cost +/// Hire +/// Installation +/// Interest rate +/// Labor +/// Lease +/// List price +/// Maintenance +/// Material +/// Overhead +/// Postage and packing +/// Profit +/// Purchase +/// Rental +/// Repair +/// Replacement +/// Sale +/// Small quantity surcharge +/// Spares +/// Storage +/// Sub-Contract +/// Trade discount +/// Transportation +/// Waste allowance +/// Whole life +/// +/// In the absence of any well-defined standard, it is recommended that local agreements should be made to define allowable and understandable cost value types within a project or region. +class IFC_PARSE_API IfcCostValue : public IfcAppliedValue { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCostValue (IfcEntityInstanceData* e); + IfcCostValue (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcAppliedValueSelect* v3_AppliedValue, ::Ifc4x3_add2::IfcMeasureWithUnit* v4_UnitBasis, boost::optional< std::string > v5_ApplicableDate, boost::optional< std::string > v6_FixedUntilDate, boost::optional< std::string > v7_Category, boost::optional< std::string > v8_Condition, boost::optional< ::Ifc4x3_add2::IfcArithmeticOperatorEnum::Value > v9_ArithmeticOperator, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v10_Components); + typedef aggregate_of< IfcCostValue > list; +}; +/// Definition from ISO/CD 10303-41:1992: A derived unit is an expression of units. +/// +/// EXAMPLE: Newton per square millimetre is a derived unit. +/// +/// NOTE: Corresponding ISO 10303 name: derived_unit, please refer to ISO/IS 10303-41 for the final definition of the formal standard. +/// +/// HISTORY: New entity in IFC Release 1.5.1. +class IFC_PARSE_API IfcDerivedUnit : public IfcUtil::IfcBaseEntity, public IfcUnit { +public: + /// The group of units and their exponents that define the derived unit. + aggregate_of< ::Ifc4x3_add2::IfcDerivedUnitElement >::ptr Elements() const; + void setElements(aggregate_of< ::Ifc4x3_add2::IfcDerivedUnitElement >::ptr v); + /// Name of the derived unit chosen from an enumeration of derived unit types for use in IFC models. + ::Ifc4x3_add2::IfcDerivedUnitEnum::Value UnitType() const; + void setUnitType(::Ifc4x3_add2::IfcDerivedUnitEnum::Value v); + boost::optional< std::string > UserDefinedType() const; + void setUserDefinedType(boost::optional< std::string > v); + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDerivedUnit (IfcEntityInstanceData* e); + IfcDerivedUnit (aggregate_of< ::Ifc4x3_add2::IfcDerivedUnitElement >::ptr v1_Elements, ::Ifc4x3_add2::IfcDerivedUnitEnum::Value v2_UnitType, boost::optional< std::string > v3_UserDefinedType, boost::optional< std::string > v4_Name); + typedef aggregate_of< IfcDerivedUnit > list; +}; +/// Definition from ISO/CD 10303-41:1992: A derived unit element is one of the unit quantities +/// which makes up a derived unit. +/// +/// EXAMPLE: Newtons per square millimetre is a derived unit. +/// It has two elements, Newton whose exponent has a value of 1 and millimetre whose exponent is -2. +/// +/// NOTE: Corresponding ISO 10303 name: derived_unit_element, please refer to ISO/IS 10303-41 for the final definition of the formal standard. +/// +/// HISTORY New entity in IFC Release 1.5.1. +class IFC_PARSE_API IfcDerivedUnitElement : public IfcUtil::IfcBaseEntity { +public: + /// The fixed quantity which is used as the mathematical factor. + ::Ifc4x3_add2::IfcNamedUnit* Unit() const; + void setUnit(::Ifc4x3_add2::IfcNamedUnit* v); + /// The power that is applied to the unit attribute. + int Exponent() const; + void setExponent(int v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDerivedUnitElement (IfcEntityInstanceData* e); + IfcDerivedUnitElement (::Ifc4x3_add2::IfcNamedUnit* v1_Unit, int v2_Exponent); + typedef aggregate_of< IfcDerivedUnitElement > list; +}; +/// Definition from ISO/CD 10303-41:1992: The dimensionality of any quantity can be expressed as a product of powers of the dimensions of base quantities. +/// The dimensional exponents entity defines the powers of the dimensions of the base quantities. All the physical +/// quantities are founded on seven base quantities (ISO 31 (clause 2)). +/// +/// NOTE: Length, mass, time, electric current, thermodynamic temperature, amount of substance, +/// and luminous intensity are the seven base quantities. +/// +/// EXAMPLE: A length of 2 millimetres has a length exponent of 1. The remaining exponents +/// are equal to 0. +/// +/// EXAMPLE: A velocity of 2 millimetres per second has a length exponent of 1 and +/// a time exponent of -1. The remaining exponents are equal to 0. +/// +/// NOTE Corresponding STEP name: dimensional_exponents, please refer to ISO/IS 10303-41 +/// for the final definition of the formal standard. +/// +/// HISTORY New entity in IFC Release 1.5.1. +class IFC_PARSE_API IfcDimensionalExponents : public IfcUtil::IfcBaseEntity { +public: + /// The power of the length base quantity. + int LengthExponent() const; + void setLengthExponent(int v); + /// The power of the mass base quantity. + int MassExponent() const; + void setMassExponent(int v); + /// The power of the time base quantity. + int TimeExponent() const; + void setTimeExponent(int v); + /// The power of the electric current base quantity. + int ElectricCurrentExponent() const; + void setElectricCurrentExponent(int v); + /// The power of the thermodynamic temperature base quantity. + int ThermodynamicTemperatureExponent() const; + void setThermodynamicTemperatureExponent(int v); + /// The power of the amount of substance base quantity. + int AmountOfSubstanceExponent() const; + void setAmountOfSubstanceExponent(int v); + /// The power of the luminous intensity base quantity. + int LuminousIntensityExponent() const; + void setLuminousIntensityExponent(int v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDimensionalExponents (IfcEntityInstanceData* e); + IfcDimensionalExponents (int v1_LengthExponent, int v2_MassExponent, int v3_TimeExponent, int v4_ElectricCurrentExponent, int v5_ThermodynamicTemperatureExponent, int v6_AmountOfSubstanceExponent, int v7_LuminousIntensityExponent); + typedef aggregate_of< IfcDimensionalExponents > list; +}; +/// An IfcExternalInformation is the identification of an information source that is not explicitly represented in the current model or in the project database (as an implementation of the current model). The IfcExternalInformation identifies the external source (classification, document, or library), but not the particular items such as a dictionary entry, a classification notation, or a document reference within the external source +/// +/// The IfcExternalInformation is an abstract supertype of +/// all external information entities. +/// +/// HISTORY New entity in IFC2x4. +class IFC_PARSE_API IfcExternalInformation : public IfcUtil::IfcBaseEntity, public IfcResourceObjectSelect { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcExternalInformation (IfcEntityInstanceData* e); + IfcExternalInformation (); + typedef aggregate_of< IfcExternalInformation > list; +}; +/// An IfcExternalReference is the identification of information that is not explicitly represented in the current model or in the project database (as an implementation of the current model). Such information may be contained in classifications, documents or libraries. The IfcExternalReference identifies a particular item, such as a +/// dictionary entry, a classification notation, or a document reference within the external source. +/// +/// Only the Location (as a URL) is given to describe the place where the information can be found. Also an optional +/// Identification as a key to allow more specific references (as to sections or tables) is provided. The Identification defines a system interpretable method to identify the relevant part of information at the source. In addition a human interpretable Name can be assigned to identify the information subject, such as a classification code. +/// +/// IfcExternalReference is an abstract supertype of all external reference entities. +/// +/// HISTORY New entity in IFC2x. +class IFC_PARSE_API IfcExternalReference : public IfcUtil::IfcBaseEntity, public IfcLightDistributionDataSourceSelect, public IfcObjectReferenceSelect, public IfcResourceObjectSelect { +public: + /// Location, where the external source (classification, document or library) can be accessed by electronic means. The electronic location is provided as an URI, and would normally be given as an URL location string. + /// + /// IFC2x4 CHANGE  The data type has been changed from IfcLabel to IfcURIReference. + boost::optional< std::string > Location() const; + void setLocation(boost::optional< std::string > v); + /// The Identification provides a unique identifier of the referenced item within the external source (classification, document or library). It may be provided as + /// + /// a key, e.g. a classification notation, like NF2.3 + /// a handle + /// a uuid or guid + /// + /// It may be human readable (such as a key) or not (such as a handle or uuid) depending on the context of its usage (which has to be determined by local agreement). + /// + /// IFC2x4 CHANGE Attribute renamed from ItemReference for consistency. + boost::optional< std::string > Identification() const; + void setIdentification(boost::optional< std::string > v); + /// Optional name to further specify the reference. It can provide a human readable identifier (which does not necessarily need to have a counterpart in the internal structure of the document). + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + aggregate_of< IfcExternalReferenceRelationship >::ptr ExternalReferenceForResources() const; // INVERSE IfcExternalReferenceRelationship::RelatingReference + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcExternalReference (IfcEntityInstanceData* e); + IfcExternalReference (boost::optional< std::string > v1_Location, boost::optional< std::string > v2_Identification, boost::optional< std::string > v3_Name); + typedef aggregate_of< IfcExternalReference > list; +}; +/// Definition from ISO/CD 10303-46:1992: The externally defined hatch style is an entity which makes an external reference to a hatching style. +/// +/// NOTE: The allowable values for the name source and item reference, by which the externally defined hatch style is identified, need to be determined by implementer agreements. +/// +/// NOTE: Corresponding ISO 10303 name: fill_style_select. Please refer to ISO/IS 10303-46:1994 for +/// the final definition of the formal standard. +/// +/// HISTORY: New entity in IFC2x2. +class IFC_PARSE_API IfcExternallyDefinedHatchStyle : public IfcExternalReference, public IfcFillStyleSelect { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcExternallyDefinedHatchStyle (IfcEntityInstanceData* e); + IfcExternallyDefinedHatchStyle (boost::optional< std::string > v1_Location, boost::optional< std::string > v2_Identification, boost::optional< std::string > v3_Name); + typedef aggregate_of< IfcExternallyDefinedHatchStyle > list; +}; +/// IfcExternallyDefinedSurfaceStyle is a definition of a surface style through referencing an external source, such as a material library for rendering information. +/// +/// NOTE  In order to achieve expected results, the externally defined surface style should normally only be given in addition to an explicitly defined surface styles. +/// +/// HISTORY  New entity in IFC2x2. +/// +/// IFC2x3 CHANGE  The spelling has been corrected from IfcExternallyDefinedSufaceStyle with no upward compatibility. +class IFC_PARSE_API IfcExternallyDefinedSurfaceStyle : public IfcExternalReference, public IfcSurfaceStyleElementSelect { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcExternallyDefinedSurfaceStyle (IfcEntityInstanceData* e); + IfcExternallyDefinedSurfaceStyle (boost::optional< std::string > v1_Location, boost::optional< std::string > v2_Identification, boost::optional< std::string > v3_Name); + typedef aggregate_of< IfcExternallyDefinedSurfaceStyle > list; +}; +/// Definition from ISO/CD 10303-46:1992: The externally defined text font is an external reference to a text font +/// +/// NOTE  Restrictions of the font source and font names to be used may be exposed by implementation guidelines. +/// +/// NOTE  Corresponding ISO 10303 name: externally_defined_text_font. Please refer to ISO/IS 10303-46:1994, p. 137 for the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC2x2. +class IFC_PARSE_API IfcExternallyDefinedTextFont : public IfcExternalReference, public IfcTextFontSelect { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcExternallyDefinedTextFont (IfcEntityInstanceData* e); + IfcExternallyDefinedTextFont (boost::optional< std::string > v1_Location, boost::optional< std::string > v2_Identification, boost::optional< std::string > v3_Name); + typedef aggregate_of< IfcExternallyDefinedTextFont > list; +}; + +class IFC_PARSE_API IfcGeographicCRS : public IfcCoordinateReferenceSystem { +public: + boost::optional< std::string > PrimeMeridian() const; + void setPrimeMeridian(boost::optional< std::string > v); + ::Ifc4x3_add2::IfcNamedUnit* AngleUnit() const; + void setAngleUnit(::Ifc4x3_add2::IfcNamedUnit* v); + ::Ifc4x3_add2::IfcNamedUnit* HeightUnit() const; + void setHeightUnit(::Ifc4x3_add2::IfcNamedUnit* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcGeographicCRS (IfcEntityInstanceData* e); + IfcGeographicCRS (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, boost::optional< std::string > v3_GeodeticDatum, boost::optional< std::string > v4_PrimeMeridian, ::Ifc4x3_add2::IfcNamedUnit* v5_AngleUnit, ::Ifc4x3_add2::IfcNamedUnit* v6_HeightUnit); + typedef aggregate_of< IfcGeographicCRS > list; +}; +/// An individual axis, IfcGridAxis, is defined in the context of a design grid. The axis definition is based on a curve of dimensionality 2. The grid axis is positioned within the XY plane of the position coordinate system defined by the IfcDesignGrid. +/// +/// HISTORY  New entity in IFC Release 1.0 +/// +/// Geometry use definitions +/// The standard geometric representation of IfcGridAxis is +/// defined using a 2D curve entity. Grid axes are normally defined +/// by an offset to another axis. The IfcOffsetCurve2D +/// supports this concept. +/// Each grid axis has a sense given by the parameterization of +/// the curve. The attribute SameSense is an indicator of +/// whether or not the sense of the grid axis agrees with, or +/// opposes, that of the underlying curve. +/// As shown in Figure 242, the grid axis is defined as a 2D curve within +/// the xy plane of the position coordinate system. Any curve can be +/// used to define a grid axis, most common is the use of IfcLine for +/// linear grids and IfcCircle for radial grids. +/// Most grids are defined by a pair of axis +/// lists, each defined by a base grid axis and axes given by an +/// offset to the base axis. The use of IfcOffsetCurve2D as +/// underlying AxisCurve supports this concept. +/// +/// Figure 242 — Grid axis +class IFC_PARSE_API IfcGridAxis : public IfcUtil::IfcBaseEntity { +public: + /// The tag or name for this grid axis. + boost::optional< std::string > AxisTag() const; + void setAxisTag(boost::optional< std::string > v); + /// Underlying curve which provides the geometry for this grid axis. + ::Ifc4x3_add2::IfcCurve* AxisCurve() const; + void setAxisCurve(::Ifc4x3_add2::IfcCurve* v); + /// Defines whether the original sense of curve is used or whether it is reversed in the context of the grid axis. + bool SameSense() const; + void setSameSense(bool v); + aggregate_of< IfcGrid >::ptr PartOfW() const; // INVERSE IfcGrid::WAxes + aggregate_of< IfcGrid >::ptr PartOfV() const; // INVERSE IfcGrid::VAxes + aggregate_of< IfcGrid >::ptr PartOfU() const; // INVERSE IfcGrid::UAxes + aggregate_of< IfcVirtualGridIntersection >::ptr HasIntersections() const; // INVERSE IfcVirtualGridIntersection::IntersectingAxes + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcGridAxis (IfcEntityInstanceData* e); + IfcGridAxis (boost::optional< std::string > v1_AxisTag, ::Ifc4x3_add2::IfcCurve* v2_AxisCurve, bool v3_SameSense); + typedef aggregate_of< IfcGridAxis > list; +}; +/// The IfcIrregularTimeSeriesValue describes a value (or set of values) at a particular time point. +/// +/// HISTORY: New entity in IFC 2x2. +class IFC_PARSE_API IfcIrregularTimeSeriesValue : public IfcUtil::IfcBaseEntity { +public: + /// The specification of the time point. + std::string TimeStamp() const; + void setTimeStamp(std::string v); + /// A list of time-series values. At least one value is required. + aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr ListValues() const; + void setListValues(aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcIrregularTimeSeriesValue (IfcEntityInstanceData* e); + IfcIrregularTimeSeriesValue (std::string v1_TimeStamp, aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr v2_ListValues); + typedef aggregate_of< IfcIrregularTimeSeriesValue > list; +}; +/// An IfcLibraryInformation describes a library where a library is a structured store of information, normally organized in a manner which allows information lookup through an index or reference value. IfcLibraryInformation provides the library Name and optional Version, VersionDate and Publisher attributes. A Location may be added for electronic access to the library. +/// +/// NOTE  The complete definition of the information in an external library is out of scope in this IFC release. +/// +/// HISTORY  New +/// Entity in IFC2x. +/// +/// IFC2x4 CHANGE  Location attribute added, HasLibraryReferences inverse attribute added (previous LibraryReference changed to inverse). +class IFC_PARSE_API IfcLibraryInformation : public IfcExternalInformation, public IfcLibrarySelect { +public: + /// The name which is used to identify the library. + std::string Name() const; + void setName(std::string v); + /// Identifier for the library version used for reference. + boost::optional< std::string > Version() const; + void setVersion(boost::optional< std::string > v); + /// Information of the organization that acts as the library publisher. + ::Ifc4x3_add2::IfcActorSelect* Publisher() const; + void setPublisher(::Ifc4x3_add2::IfcActorSelect* v); + /// Date of the referenced version of the library. + /// + /// IFC2x4 CHANGE  The data type has been changed to IfcDate, the date string according to ISO8601. + boost::optional< std::string > VersionDate() const; + void setVersionDate(boost::optional< std::string > v); + /// Resource identifier or locator, provided as URI, URN or URL, of the library information for online references. + /// + /// IFC2x4 CHANGE  New attribute added at the end of the attribute list. + boost::optional< std::string > Location() const; + void setLocation(boost::optional< std::string > v); + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + aggregate_of< IfcRelAssociatesLibrary >::ptr LibraryInfoForObjects() const; // INVERSE IfcRelAssociatesLibrary::RelatingLibrary + aggregate_of< IfcLibraryReference >::ptr HasLibraryReferences() const; // INVERSE IfcLibraryReference::ReferencedLibrary + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLibraryInformation (IfcEntityInstanceData* e); + IfcLibraryInformation (std::string v1_Name, boost::optional< std::string > v2_Version, ::Ifc4x3_add2::IfcActorSelect* v3_Publisher, boost::optional< std::string > v4_VersionDate, boost::optional< std::string > v5_Location, boost::optional< std::string > v6_Description); + typedef aggregate_of< IfcLibraryInformation > list; +}; +/// An IfcLibraryReference is a reference into a library of information by Location (provided as a URI). It also provides an optional inherited Identification key to allow more specific references to library sections or tables. The inherited Name attribute allows for a human interpretable identification of the library item. Also, general information on the library from which the reference is taken, is given by the ReferencedLibrary relation which identifies the relevant occurrence of IfcLibraryInformation. +/// +/// The ifcLibraryReference additionally provides the capability to handle multilingual library entries. The Language attribute then holds the language tag for the language used by the strings kept in the Name and the Description attribute. +/// +/// HISTORY  New Entity in IFC2.0. +/// +/// IFC2x4 CHANGE  Description and Language attribute added; ReferencedLibrary attribute added (reversing previous ReferenceIntoLibrary inverse relationship). +class IFC_PARSE_API IfcLibraryReference : public IfcExternalReference, public IfcLibrarySelect { +public: + /// Additional description provided for the library reference. + /// + /// IFC2x4 CHANGE  New attribute added at the end of the attribute list. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + /// The language in which a library reference is expressed. + /// + /// IFC2x4 CHANGE  New attribute added at the end of the attribute list. + boost::optional< std::string > Language() const; + void setLanguage(boost::optional< std::string > v); + /// The library information that is being referenced. + ::Ifc4x3_add2::IfcLibraryInformation* ReferencedLibrary() const; + void setReferencedLibrary(::Ifc4x3_add2::IfcLibraryInformation* v); + aggregate_of< IfcRelAssociatesLibrary >::ptr LibraryRefForObjects() const; // INVERSE IfcRelAssociatesLibrary::RelatingLibrary + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLibraryReference (IfcEntityInstanceData* e); + IfcLibraryReference (boost::optional< std::string > v1_Location, boost::optional< std::string > v2_Identification, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_Language, ::Ifc4x3_add2::IfcLibraryInformation* v6_ReferencedLibrary); + typedef aggregate_of< IfcLibraryReference > list; +}; +/// IfcLightDistributionData defines the luminous intensity of a light source given at a particular main plane angle. It is based on some standardized light distribution curves; the MainPlaneAngle is either the +/// +/// A angle; if the IfcLightDistributionCurveEnum is set to TYPE_A +/// B angle; if the IfcLightDistributionCurveEnum is set to TYPE_B +/// C angle; if the IfcLightDistributionCurveEnum is set to TYPE_C +/// +/// For each MainPlaneAngle (considered as being the row of a table) a list of SecondaryPlaneAngle's are given (considered to be the columns of a table). They are either the: +/// +/// α angle; if the IfcLightDistributionCurveEnum is set to TYPE_A +/// β angle; if the IfcLightDistributionCurveEnum is set to TYPE_B +/// γ angle; if the IfcLightDistributionCurveEnum is set to TYPE_C +/// +/// For each pair of MainPlaneAngle and SecondaryPlaneAngle the LuminousIntensity is provided (the unit is given by the IfcUnitAssignment referring to the LuminousIntensityDistributionUnit, normally cd/klm). +/// +/// HISTORY: New entity in IFC2x2. +class IFC_PARSE_API IfcLightDistributionData : public IfcUtil::IfcBaseEntity { +public: + /// The main plane angle (A, B or C angles, according to the light distribution curve chosen). + double MainPlaneAngle() const; + void setMainPlaneAngle(double v); + /// The list of secondary plane angles (the α, β or γ angles) according to the light distribution curve chosen. + /// + /// NOTE: The SecondaryPlaneAngle and LuminousIntensity lists are corresponding lists. + std::vector< double > /*[1:?]*/ SecondaryPlaneAngle() const; + void setSecondaryPlaneAngle(std::vector< double > /*[1:?]*/ v); + /// The luminous intensity distribution measure for this pair of main and secondary plane angles according to the light distribution curve chosen. + std::vector< double > /*[1:?]*/ LuminousIntensity() const; + void setLuminousIntensity(std::vector< double > /*[1:?]*/ v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLightDistributionData (IfcEntityInstanceData* e); + IfcLightDistributionData (double v1_MainPlaneAngle, std::vector< double > /*[1:?]*/ v2_SecondaryPlaneAngle, std::vector< double > /*[1:?]*/ v3_LuminousIntensity); + typedef aggregate_of< IfcLightDistributionData > list; +}; +/// IfcLightIntensityDistribution defines the the luminous intensity of a light source that changes according to the direction of the ray. It is based on some standardized light distribution curves, which are defined by the LightDistributionCurve attribute. +/// +/// New entity in IFC2x2. +class IFC_PARSE_API IfcLightIntensityDistribution : public IfcUtil::IfcBaseEntity, public IfcLightDistributionDataSourceSelect { +public: + /// Standardized light distribution curve used to define the luminous intensity of the light in all directions. + ::Ifc4x3_add2::IfcLightDistributionCurveEnum::Value LightDistributionCurve() const; + void setLightDistributionCurve(::Ifc4x3_add2::IfcLightDistributionCurveEnum::Value v); + /// Light distribution data applied to the light source. It is defined by a list of main plane angles (B or C according to the light distribution curve chosen) that includes (for each B or C angle) a second list of secondary plane angles (the β or γ angles) and the according luminous intensity distribution measures. + aggregate_of< ::Ifc4x3_add2::IfcLightDistributionData >::ptr DistributionData() const; + void setDistributionData(aggregate_of< ::Ifc4x3_add2::IfcLightDistributionData >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLightIntensityDistribution (IfcEntityInstanceData* e); + IfcLightIntensityDistribution (::Ifc4x3_add2::IfcLightDistributionCurveEnum::Value v1_LightDistributionCurve, aggregate_of< ::Ifc4x3_add2::IfcLightDistributionData >::ptr v2_DistributionData); + typedef aggregate_of< IfcLightIntensityDistribution > list; +}; +/// The map conversion deals with transforming the local engineering coordinate system, often called world coordinate system, into the coordinate reference system of the underlying map. +/// +/// NOTE  The IfcMapConversion does not handle the projection of a map from the geodetic coordinate reference system. +/// +/// The map conversion allows to convert the local origin of the local engineering coordinate system to its place within a map (easting, northing, orthogonal height) and to rotate the x-axis of the local engineering coordinate system within the horizontal (easting/westing) plane of the map. +/// +/// NOTE  The z axis of the local engineering coordinate system is always parallel to the z axis of the map coordinate system. +/// +/// The scale factor can be used when the length unit for the 3 axes of the map coordinate system are not identical with the length unit established for this project (seeIfcProject.UnitsInContext), if omitted, the scale factor 1.0 is assumed. +/// +/// HISTORY  New entity in IFC2x4. +class IFC_PARSE_API IfcMapConversion : public IfcCoordinateOperation { +public: + /// Specifies the location along the easting of the coordinate system of the target map coordinate reference system. + /// NOTE  for right-handed Cartesian coordinate systems this would establish the location along the x axis + double Eastings() const; + void setEastings(double v); + /// Specifies the location along the northing of the coordinate system of the target map coordinate reference system. + /// NOTE  for right-handed Cartesian coordinate systems this would establish the location along the y axis + double Northings() const; + void setNorthings(double v); + /// Orthogonal height relativ to the vertical datum specified. + /// NOTE  for right-handed Cartesian coordinate systems this would establish the location along the z axis + double OrthogonalHeight() const; + void setOrthogonalHeight(double v); + /// Specifies the value along the easing axis of the end point of a vector indicating the position of the local x axis of the engineering coordinate reference system. + /// NOTE  for right-handed Cartesian coordinate systems this would establish the location along the x axis + /// NOTE  together with the XAxisOrdinate it provides the direction of the local x axis within the horizontal plane of the map coordinate system + boost::optional< double > XAxisAbscissa() const; + void setXAxisAbscissa(boost::optional< double > v); + /// Specifies the value along the northing axis of the end point of a vector indicating the position of the local x axis of the engineering coordinate reference system. + /// NOTE  for right-handed Cartesian coordinate systems this would establish the location along the y axis + /// NOTE  together with the XAxisAbscissa it provides the direction of the local x axis within the horizontal plane of the map coordinate system + boost::optional< double > XAxisOrdinate() const; + void setXAxisOrdinate(boost::optional< double > v); + /// Scale to be used, when the units of the CRS are not identical to the units of the engineering coordinate system. If omited, the value of 1.0 is assumed. + boost::optional< double > Scale() const; + void setScale(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMapConversion (IfcEntityInstanceData* e); + IfcMapConversion (::Ifc4x3_add2::IfcCoordinateReferenceSystemSelect* v1_SourceCRS, ::Ifc4x3_add2::IfcCoordinateReferenceSystem* v2_TargetCRS, double v3_Eastings, double v4_Northings, double v5_OrthogonalHeight, boost::optional< double > v6_XAxisAbscissa, boost::optional< double > v7_XAxisOrdinate, boost::optional< double > v8_Scale); + typedef aggregate_of< IfcMapConversion > list; +}; + +class IFC_PARSE_API IfcMapConversionScaled : public IfcMapConversion { +public: + double FactorX() const; + void setFactorX(double v); + double FactorY() const; + void setFactorY(double v); + double FactorZ() const; + void setFactorZ(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMapConversionScaled (IfcEntityInstanceData* e); + IfcMapConversionScaled (::Ifc4x3_add2::IfcCoordinateReferenceSystemSelect* v1_SourceCRS, ::Ifc4x3_add2::IfcCoordinateReferenceSystem* v2_TargetCRS, double v3_Eastings, double v4_Northings, double v5_OrthogonalHeight, boost::optional< double > v6_XAxisAbscissa, boost::optional< double > v7_XAxisOrdinate, boost::optional< double > v8_Scale, double v9_FactorX, double v10_FactorY, double v11_FactorZ); + typedef aggregate_of< IfcMapConversionScaled > list; +}; +/// IfcMaterialClassificationRelationship is a relationship assigning classifications to materials. +/// +/// HISTORY New entity in IFC2x. +/// +/// IFC2x4 CHANGE The entity IfcMaterialClassificationRelationship is deprecated since IFC2x4 and shall no longer be used. Use IfcExternalReferenceRelationship instead. +class IFC_PARSE_API IfcMaterialClassificationRelationship : public IfcUtil::IfcBaseEntity { +public: + /// The material classifications identifying the type of material. + aggregate_of< ::Ifc4x3_add2::IfcClassificationSelect >::ptr MaterialClassifications() const; + void setMaterialClassifications(aggregate_of< ::Ifc4x3_add2::IfcClassificationSelect >::ptr v); + /// Material being classified. + ::Ifc4x3_add2::IfcMaterial* ClassifiedMaterial() const; + void setClassifiedMaterial(::Ifc4x3_add2::IfcMaterial* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMaterialClassificationRelationship (IfcEntityInstanceData* e); + IfcMaterialClassificationRelationship (aggregate_of< ::Ifc4x3_add2::IfcClassificationSelect >::ptr v1_MaterialClassifications, ::Ifc4x3_add2::IfcMaterial* v2_ClassifiedMaterial); + typedef aggregate_of< IfcMaterialClassificationRelationship > list; +}; +/// IfcMaterialDefinition is a general supertype for all +/// material related information items in IFC that have common +/// material related properties that may include association of +/// material with some shape parameters or assignments to identified +/// parts of a component. +/// There are three ways of assigning materials to a single component or +/// multiple components; they are characterized as: +/// +/// by layer - assigning a material to a layer with constant +/// thickness +/// by profile - assigning a material to a profile with a +/// constant of varying shape along an extrusion +/// by constituents - assigning a material to an identified part +/// of a component shape; the identification is by a keyword rather than +/// by a shape parameter +/// +/// Each instantiable subtype of IfcMaterialDefinition may +/// have material properties assigned, or have an external +/// classification of its definition. It can be assigned to either a +/// subtype of IfcElement, or a subtype of +/// IfcElementType by using the objectified relationship +/// IfcRelAssociatesMaterial. +/// +/// HISTORY New entity in IFC2x4 +class IFC_PARSE_API IfcMaterialDefinition : public IfcUtil::IfcBaseEntity, public IfcMaterialSelect, public IfcObjectReferenceSelect, public IfcResourceObjectSelect { +public: + aggregate_of< IfcRelAssociatesMaterial >::ptr AssociatedTo() const; // INVERSE IfcRelAssociatesMaterial::RelatingMaterial + aggregate_of< IfcExternalReferenceRelationship >::ptr HasExternalReferences() const; // INVERSE IfcExternalReferenceRelationship::RelatedResourceObjects + aggregate_of< IfcMaterialProperties >::ptr HasProperties() const; // INVERSE IfcMaterialProperties::Material + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMaterialDefinition (IfcEntityInstanceData* e); + IfcMaterialDefinition (); + typedef aggregate_of< IfcMaterialDefinition > list; +}; +/// IfcMaterialLayer is a single and identifiable part of an element which is constructed of a number of layers (one or more). Each IfcMaterialLayer has a constant thickness and is located relative to the referencing IfcMaterialLayerSet along the MlsBase. +/// +/// EXAMPLE  A cavity wall with brick masonry used with +/// an air gap in between would be modeled using three +/// IfcMaterialLayer's: [1] Brick, [2] Air gap, [3] Brick. The +/// inner layer "Brick" would have a Name = "Brick", an +/// individual LayerThickness, and potentially a +/// Category indicating it as "load bearing", and a +/// Priority that controls how this material layer interacts +/// with other material layers in wall connections. +/// +/// The IfcMaterialLayer may have a material layer name, +/// that might be different to the IfcMaterial name +/// referenced. +/// +/// EXAMPLE  The IfcMaterialLayer name of an +/// insulation layer can be "Insulation", whereas the +/// IfcMaterial name is "polystyrene insulating +/// boards". +/// +/// HISTORY  New entity in IFC 1.5 +/// +/// IFC2x4 CHANGE  The attributes Name, Description, Category, Priority have been added at the end of attribute list. Data type of LayerThickness relaxed to IfcNonNegativeLengthMeasure. +class IFC_PARSE_API IfcMaterialLayer : public IfcMaterialDefinition { +public: + /// Optional reference to the material from which the layer is constructed. Note that if this value is not given, it does not denote a layer with no material (an air gap), it only means that the material is not specified at that point. + ::Ifc4x3_add2::IfcMaterial* Material() const; + void setMaterial(::Ifc4x3_add2::IfcMaterial* v); + /// The thickness of the material layer. The dimension is measured along the positive MlsDirection as specified in IfcMaterialLayerSet (that is mapped to AXIS-2, as specified in IfcMaterialLayerSetUsage for element occurrences supporting IfcMaterialLayerSetUsage. + /// + /// NOTE  The attribute value can be 0. for material thicknesses very close to zero, such as for a membrane. Material layers with thickess 0. shall not be rendered in the geometric representation. + /// + /// IFC2x4 CHANGE  The attribute datatype has been changed to IfcNonNegativeLengthMeasure allowing for 0. as thickness. + double LayerThickness() const; + void setLayerThickness(double v); + /// Indication of whether the material layer represents an air layer (or cavity). + /// + /// set to TRUE if the material layer is an air gap and provides air exchange from the layer to the outside air. + /// set to UNKNOWN if the material layer is an air gap and does not provide air exchange (or when this information about air exchange of the air gap is not available). + /// set to FALSE if the material layer is a solid material layer (the default). + boost::optional< boost::logic::tribool > IsVentilated() const; + void setIsVentilated(boost::optional< boost::logic::tribool > v); + /// The name by which the material layer is known. + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + /// Definition of the material layer in more descriptive terms than given by attributes Name or Category. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + /// Category of the material layer, e.g. the role it has in the layer set it belongs to (such as 'load bearing', 'thermal insulation' etc.). + boost::optional< std::string > Category() const; + void setCategory(boost::optional< std::string > v); + /// The relative priority of the layer, expressed as ratio measure, normalised to 0..1. Controls how layers intersect in connections and corners of building elements: a layer from one element protrudes into (i.e. displaces) a layer from another element in a joint of these elements if the former element's layer has higher priority than the latter. The priorty value for a material layer in an element has to be set and maintained by software applications, in relation to the material layers in connected elements. The usage has to be further specified for each element, especially to avoid simultanious use with IfcLayerOffset. + boost::optional< int > Priority() const; + void setPriority(boost::optional< int > v); + aggregate_of< IfcMaterialLayerSet >::ptr ToMaterialLayerSet() const; // INVERSE IfcMaterialLayerSet::MaterialLayers + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMaterialLayer (IfcEntityInstanceData* e); + IfcMaterialLayer (::Ifc4x3_add2::IfcMaterial* v1_Material, double v2_LayerThickness, boost::optional< boost::logic::tribool > v3_IsVentilated, boost::optional< std::string > v4_Name, boost::optional< std::string > v5_Description, boost::optional< std::string > v6_Category, boost::optional< int > v7_Priority); + typedef aggregate_of< IfcMaterialLayer > list; +}; +/// IfcMaterialLayerSet is a designation by which materials of an element constructed of a number of material layers is known and through which the relative positioning of individual layers can be expressed. +/// +/// The Material Layer Set Base (MlsBase) describes the axis along +/// which the material layers are positioned. The MlsBase is positioned +/// along the reference axis or reference plane of the element +/// supporting the IfcMaterialLayerSetUsage concept with a +/// potential offset (see here). The positive Material Layer Set +/// Direction (MlsDirection) describes the direction by which the +/// individual material layers, with their material layer thicknesses +/// are stacked. IfcMaterialLayer's are stacked with no gap, +/// gaps within a material layer set are expresses as layers by +/// themselves. +/// +/// EXAMPLE A cavity brick wall would be modeled as +/// IfcMaterialLayerSet consisting of three +/// IfcMaterialLayer's: brick, air cavity and brick. The air +/// gap is identified, using the IsVentilated flag at +/// IfcMaterialLayer. +/// +/// HISTORY  New entity in IFC 1.0 +/// +/// IFC2x4 CHANGE  Subtyped from IfcMaterialDefinition, the attribute Description +/// has been added at the end of attribute list. +/// +/// Attribute use definition +/// As shown in Figure 285, each IfcMaterialLayerSet implicitly defines a material +/// layer set base line (MlsBase), to which the start of the first +/// IfcMaterialLayer is aligned. The total thickness of a +/// layer set is calculated from the individual layer thicknesses, the +/// first layer starting from the MlsBase and following layers being +/// placed on top of the previous (no gaps or overlaps). +/// +/// Figure 285 — Material layer set +class IFC_PARSE_API IfcMaterialLayerSet : public IfcMaterialDefinition { +public: + /// Identification of the layers from which the material layer set is composed. + aggregate_of< ::Ifc4x3_add2::IfcMaterialLayer >::ptr MaterialLayers() const; + void setMaterialLayers(aggregate_of< ::Ifc4x3_add2::IfcMaterialLayer >::ptr v); + /// The name by which the material layer set is known. + boost::optional< std::string > LayerSetName() const; + void setLayerSetName(boost::optional< std::string > v); + /// Definition of the material layer set in descriptive terms. + /// + /// IFC2x4 CHANGE  The attribute has been added at the end of attribute list. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMaterialLayerSet (IfcEntityInstanceData* e); + IfcMaterialLayerSet (aggregate_of< ::Ifc4x3_add2::IfcMaterialLayer >::ptr v1_MaterialLayers, boost::optional< std::string > v2_LayerSetName, boost::optional< std::string > v3_Description); + typedef aggregate_of< IfcMaterialLayerSet > list; +}; +/// IfcMaterialLayerWithOffsets is a specialization of IfcMaterialLayer enabling definition +/// of offset values along edges (within the material layer set usage in parent layer set). +/// +/// It defines the assignment of two offset values for a material +/// layer in its intended use within a material layer set. Offsets are +/// applied to the edges of layered elements (that is, in directions +/// perpendicular to the layer set direction). Offsets shall not be +/// used in layer set direction, that is, for modelling gaps (or overlaps) +/// between layers; gaps shall be modeled as layers with appropriate +/// material assignment for the void. +/// +/// EXAMPLE   At the top of a standard wall, +/// with shape representation SweptSolid, offset of a given layer can +/// be specified in the direction of the extrusion (positive Z axis), +/// applied at the start or end (extruded from bottom to top), and with +/// a positive (extending above extrusion) or negative (ending below +/// extrusion). +/// +/// Take a standard wall with the outer material layer for the +/// external isolation extending above extrusion by 100mm, but starting +/// at the same base height. In this case the following values are +/// set: +/// +/// OffsetDirection = .AXIS3. +/// OffsetValues[1] = 0.0 +/// OffsetValues[2] = 100.0 (default unit assumed to +/// be mm) +/// +/// HISTORY  New Entity in IFC2x4. +/// +/// Informal propositions +/// +/// The OffestDirection shall not be identical to the +/// LayerSetDirection of the corresponding +/// IfcMaterialLayerSetUsage +/// The attribute ReferenceExtent shall be asserted at the +/// corresponding IfcMaterialLayerSetUsage +/// +/// Attribute use definition +/// The OffsetValues and OffsetDirection correspond to the definitions ReferenceExtent and LayerSetDirection at the IfcMaterialLayerSetUsage. +/// Figure 289 shows an example of applying the OffsetValues to the material layers of a standard wall. +/// +/// Figure 289 — Material layer with offsets +class IFC_PARSE_API IfcMaterialLayerWithOffsets : public IfcMaterialLayer { +public: + /// Orientation of the offset; shall be perpendicular to the parent layer set direction. + ::Ifc4x3_add2::IfcLayerSetDirectionEnum::Value OffsetDirection() const; + void setOffsetDirection(::Ifc4x3_add2::IfcLayerSetDirectionEnum::Value v); + /// The numerical value of layer offset, in the direction of the axis assigned by the attribute OffsetDirection. The OffsetValues[1] identifies the offset from the lower position along the axis direction (normally the start of the standard extrusion), the OffsetValues[2] identifies the offset from the upper position along the axis direction (normally the end of the standard extrusion), + std::vector< double > /*[1:2]*/ OffsetValues() const; + void setOffsetValues(std::vector< double > /*[1:2]*/ v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMaterialLayerWithOffsets (IfcEntityInstanceData* e); + IfcMaterialLayerWithOffsets (::Ifc4x3_add2::IfcMaterial* v1_Material, double v2_LayerThickness, boost::optional< boost::logic::tribool > v3_IsVentilated, boost::optional< std::string > v4_Name, boost::optional< std::string > v5_Description, boost::optional< std::string > v6_Category, boost::optional< int > v7_Priority, ::Ifc4x3_add2::IfcLayerSetDirectionEnum::Value v8_OffsetDirection, std::vector< double > /*[1:2]*/ v9_OffsetValues); + typedef aggregate_of< IfcMaterialLayerWithOffsets > list; +}; +/// IfcMaterialList is a list of the different materials +/// that are used in an element. +/// +/// NOTE: The class IfcMaterialList will +/// normally be used where an element is described at a more abstract +/// level. For example, for an architectural specification writer, +/// the only information that may be needed about a concrete column +/// is that it contains concrete, reinforcing steel and mild steel +/// ligatures. It shall not be used for elements consisting of +/// material layers when the different layers can be defined and the +/// class IfcMaterialLayerSet can be used. Also, +/// IfcMaterialList shall not be used for elements consisting +/// of a single identifiable material (for example, to represent anisotropic +/// material). +/// +/// IFC2x4 CHANGE The entity IfcMaterialList is deprecated and shall no longer +/// be used. Use IfcMaterialConstituentSet instead. +class IFC_PARSE_API IfcMaterialList : public IfcUtil::IfcBaseEntity, public IfcMaterialSelect { +public: + /// Materials used in a composition of substances. + aggregate_of< ::Ifc4x3_add2::IfcMaterial >::ptr Materials() const; + void setMaterials(aggregate_of< ::Ifc4x3_add2::IfcMaterial >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMaterialList (IfcEntityInstanceData* e); + IfcMaterialList (aggregate_of< ::Ifc4x3_add2::IfcMaterial >::ptr v1_Materials); + typedef aggregate_of< IfcMaterialList > list; +}; +/// IfcMaterialProfile is a single and identifiable part of an element which is constructed of a number of profiles (one or more). +/// +/// NOTE In case of multiple MaterialProfiles, the relative positioning of individual profiles in IfcMaterialProfileSet are defined using the concept of IfcCompositeProfileDef in IfcProfileResource schema; otherwise, only one MaterialProfile is given and defined by an individual IfcProfileDef (subtype). +/// +/// HISTORYNew Entity in IFC2x4 +class IFC_PARSE_API IfcMaterialProfile : public IfcMaterialDefinition { +public: + /// The name by which the material profile is known. + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + /// Definition of the material profile in descriptive terms. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + /// Optional reference to the material from which the profile is constructed. + ::Ifc4x3_add2::IfcMaterial* Material() const; + void setMaterial(::Ifc4x3_add2::IfcMaterial* v); + /// Identification of the profile for which this material profile is associating material. + ::Ifc4x3_add2::IfcProfileDef* Profile() const; + void setProfile(::Ifc4x3_add2::IfcProfileDef* v); + /// The relative priority of the profile, expressed as ratio measure, normalised to 0..1. Controls how profiles intersect in connections and corners of building elements: a profile from one element protrudes into (i.e. displaces) a profile from another element in a joint of these elements if the former element's profile has higher priority than the latter. The priorty value for a material profile in an element has to be set and maintained by software applications, in relation to the material profiles in connected elements. + boost::optional< int > Priority() const; + void setPriority(boost::optional< int > v); + /// Category of the material profile, e.g. the role it has in the profile set it belongs to. + boost::optional< std::string > Category() const; + void setCategory(boost::optional< std::string > v); + aggregate_of< IfcMaterialProfileSet >::ptr ToMaterialProfileSet() const; // INVERSE IfcMaterialProfileSet::MaterialProfiles + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMaterialProfile (IfcEntityInstanceData* e); + IfcMaterialProfile (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcMaterial* v3_Material, ::Ifc4x3_add2::IfcProfileDef* v4_Profile, boost::optional< int > v5_Priority, boost::optional< std::string > v6_Category); + typedef aggregate_of< IfcMaterialProfile > list; +}; +/// IfcMaterialProfileSet is a designation by which individual material(s) of a prismatic element (for example, beam or column) constructed of a single or multiple material profiles is known. If only a single material profile is used (the most typical case) then no CompositeProfile is asserted. +/// +/// NOTE In case of multiple MaterialProfiles, the relative positioning of individual profiles in IfcMaterialProfileSet are defined using the concept of IfcCompositeProfileDef in IfcProfileResource schema; otherwise, only one MaterialProfile is given and defined by an individual IfcProfileDef (subtype). +/// +/// HISTORYNew Entity in IFC2x4. +class IFC_PARSE_API IfcMaterialProfileSet : public IfcMaterialDefinition { +public: + /// The name by which the material profile set is known. + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + /// Definition of the material profile set in descriptive terms. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + /// Identification of the profiles from which the material profile set is composed. + aggregate_of< ::Ifc4x3_add2::IfcMaterialProfile >::ptr MaterialProfiles() const; + void setMaterialProfiles(aggregate_of< ::Ifc4x3_add2::IfcMaterialProfile >::ptr v); + /// Reference to the composite profile definition for which this material profile set associates material to each of its individual profile. + /// + /// NOTE   + /// The referenced IfcCompositeProfileDef instance shall be composed of all of the IfcProfileDef instances which are used via the MaterialProfiles list in the current IfcMaterialProfileSet . + ::Ifc4x3_add2::IfcCompositeProfileDef* CompositeProfile() const; + void setCompositeProfile(::Ifc4x3_add2::IfcCompositeProfileDef* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMaterialProfileSet (IfcEntityInstanceData* e); + IfcMaterialProfileSet (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_add2::IfcMaterialProfile >::ptr v3_MaterialProfiles, ::Ifc4x3_add2::IfcCompositeProfileDef* v4_CompositeProfile); + typedef aggregate_of< IfcMaterialProfileSet > list; +}; +/// IfcMaterialProfileWithOffsets is a specialization of IfcMaterialProfile enabling definition offset values for profile start or end in its use in parent material profile set usage. +/// +/// Relative positions of IfcMaterialProfileWithOffsets in the longitudinal direction of an element can be defined giving offsets at the start and end. This shall not be used for relative positions of individual profiles in the plane of profile definition, which is given in composite profile definition itself. Also, care should be taken especially when used with IfcMaterialProfileSetUsageTapering for correct start and end offset assignement. +/// +/// HISTORY New Entity in IFC2x4. +class IFC_PARSE_API IfcMaterialProfileWithOffsets : public IfcMaterialProfile { +public: + /// The numerical value of profile offset, in the direction of the axis direction - always AXIS1 i.e. the axis along the extrusion path. The OffsetValues[1] identifies the offset from the lower position along the axis direction (normally the start of the standard extrusion), the OffsetValues[2] identifies the offset from the upper position along the axis direction (normally the end of the standard extrusion), + std::vector< double > /*[1:2]*/ OffsetValues() const; + void setOffsetValues(std::vector< double > /*[1:2]*/ v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMaterialProfileWithOffsets (IfcEntityInstanceData* e); + IfcMaterialProfileWithOffsets (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcMaterial* v3_Material, ::Ifc4x3_add2::IfcProfileDef* v4_Profile, boost::optional< int > v5_Priority, boost::optional< std::string > v6_Category, std::vector< double > /*[1:2]*/ v7_OffsetValues); + typedef aggregate_of< IfcMaterialProfileWithOffsets > list; +}; +/// IfcMaterialUsageDefinition is a general supertype for all +/// material related information items in IFC that have occurrence +/// specific assignment parameters to assign a set of materials with +/// shape parameters to a reference geometry item of that +/// component. +/// There are two ways of assigning a set of materials with shape +/// parameters: +/// +/// a layer set to a reference curve - assigning a material layer +/// set with material layers having a sequence and thickness +/// parameter to a reference curve of an element - represented by the +/// 'Axis' shape representation of that element +/// a profile set to a cardinal point - assigning a material +/// profile set with assigned profile geometry and insertion points +/// to a reference curve by an offset, called "cardinal point" - the +/// reference curve is represented by the 'Axis' shape representation +/// of that element +/// +/// Each instantiable subtype of IfcMaterialUsageDefinition +/// has to be assigned to a subtype of IfcElement by using the +/// objectified relationship IfcRelAssociatesMaterial; it is +/// only valid in conjunction with an element occurrence. +/// +/// HISTORY New entity in IFC2x4 +/// +/// Informal proposition +/// +/// It is illegal to assign a subtype of +/// IfcMaterialUsageDefinition to a subtype of +/// IfcElementType, it shall only be assigned to an element +/// occurrence. +class IFC_PARSE_API IfcMaterialUsageDefinition : public IfcUtil::IfcBaseEntity, public IfcMaterialSelect { +public: + aggregate_of< IfcRelAssociatesMaterial >::ptr AssociatedTo() const; // INVERSE IfcRelAssociatesMaterial::RelatingMaterial + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMaterialUsageDefinition (IfcEntityInstanceData* e); + IfcMaterialUsageDefinition (); + typedef aggregate_of< IfcMaterialUsageDefinition > list; +}; +/// Definition from ISO/CD 10303-41:1992: A measure with unit is the specification of a physical quantity as defined in ISO 31 (clause 2). +/// +/// IfcMeasureWithUnit has two usages: +/// 1. For representing measure value together with its unit on the entity type attribute level; thus +/// overriding the IFC model global unit assignments. +/// 2. For conversion based unit to give the conversion rate and its base. +/// +/// NOTE Corresponding ISO 10303 name: measure_with_unit, please refer to ISO/IS 10303-41 for the final definition of the formal standard. +/// +/// HISTORY New entity in IFC Release 1.5.1. +class IFC_PARSE_API IfcMeasureWithUnit : public IfcUtil::IfcBaseEntity, public IfcAppliedValueSelect, public IfcMetricValueSelect { +public: + /// The value of the physical quantity when expressed in the specified units. + ::Ifc4x3_add2::IfcValue* ValueComponent() const; + void setValueComponent(::Ifc4x3_add2::IfcValue* v); + /// The unit in which the physical quantity is expressed. + ::Ifc4x3_add2::IfcUnit* UnitComponent() const; + void setUnitComponent(::Ifc4x3_add2::IfcUnit* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMeasureWithUnit (IfcEntityInstanceData* e); + IfcMeasureWithUnit (::Ifc4x3_add2::IfcValue* v1_ValueComponent, ::Ifc4x3_add2::IfcUnit* v2_UnitComponent); + typedef aggregate_of< IfcMeasureWithUnit > list; +}; +/// An IfcMetric is used to capture quantitative resultant metrics that can be applied to objectives. +/// +/// HISTORY: New Entity in IFC Release 2.0 +/// +/// Use Definition +/// IfcMetric is a subtype of IfcConstraint and may be associated with any subtype of IfcRoot through the IfcRelAssociatesConstraint relationship in the IfcControlExtension schema, or may be associated with IfcProperty by IfcPropertyConstraintRelationship. +/// +/// The aim of IfcMetric is to capture the quantitative aspects of a constraint. +/// +/// For instance, when undertaking a move (instantiated through the IfcTask class), a constraint is instantiated as the class IfcMetric and may be named as a 'Move Start Constraint' or 'Move End Constraint' and described using one of a possible range of move constraints as shown in the table below. +/// +/// Constraint +/// Description +/// Benchmark +/// Grade +/// +/// ASSOONASPOSSIBLE +/// Action should commence at the earliest possible opportunity. +/// GREATERTHANOREQUALTO +/// SOFT +/// +/// MUSTSTARTON +/// Action must start at a prescribed date/time. +/// EQUALTO +/// HARD +/// +/// MUSTSTARTBEFORE +/// Action must start before a prescribed date/time. +/// LESSTHANOREQUALTO +/// HARD +/// +/// MUSTSTARTAFTER +/// Action must not start before a prescribed date/time. +/// GREATERTHANOREQUALTO +/// HARD +/// +/// MAYSTARTAFTER +/// Action may start at any time following a prescribed date/time. +/// GREATERTHANOREQUALTO +/// SOFT +/// +/// MUSTFINISHON +/// Action must be complete at or by a prescribed date/time. +/// EQUALTO +/// HARD +/// +/// MUSTFINISHBEFORE +/// Action must be complete before a prescribed date/time. +/// LESSTHANOREQUALTO +/// HARD +/// +/// This constraint (instantiated as IfcMetric) uses a Date/Time value in IfcMetric.DataValue through IfcMetricValueSelect. An appropriate benchmark is applied according to the requirement of the constraint (as indicated) by IfcMetric.Benchmark. The grade of the constraint (hard, soft, advisory) must be specified through IfcConstraint.ConstraintGrade whilst the time at which the constraint is created may be optionally asserted through IfcConstraint.CreationTime. +class IFC_PARSE_API IfcMetric : public IfcConstraint { +public: + /// Enumeration that identifies the type of benchmark data. + ::Ifc4x3_add2::IfcBenchmarkEnum::Value Benchmark() const; + void setBenchmark(::Ifc4x3_add2::IfcBenchmarkEnum::Value v); + /// Reference source for data values. + boost::optional< std::string > ValueSource() const; + void setValueSource(boost::optional< std::string > v); + /// The value with data type defined by the underlying type accesses via IfcMetricValueSelect. + ::Ifc4x3_add2::IfcMetricValueSelect* DataValue() const; + void setDataValue(::Ifc4x3_add2::IfcMetricValueSelect* v); + ::Ifc4x3_add2::IfcReference* ReferencePath() const; + void setReferencePath(::Ifc4x3_add2::IfcReference* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMetric (IfcEntityInstanceData* e); + IfcMetric (std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcConstraintEnum::Value v3_ConstraintGrade, boost::optional< std::string > v4_ConstraintSource, ::Ifc4x3_add2::IfcActorSelect* v5_CreatingActor, boost::optional< std::string > v6_CreationTime, boost::optional< std::string > v7_UserDefinedGrade, ::Ifc4x3_add2::IfcBenchmarkEnum::Value v8_Benchmark, boost::optional< std::string > v9_ValueSource, ::Ifc4x3_add2::IfcMetricValueSelect* v10_DataValue, ::Ifc4x3_add2::IfcReference* v11_ReferencePath); + typedef aggregate_of< IfcMetric > list; +}; +/// IfcMonetaryUnit is a unit to define currency for money. +/// +/// HISTORY: New entity in IFC Release 2x. +/// +/// IFC2x4 CHANGE: Type of the attribute Currency changed. +class IFC_PARSE_API IfcMonetaryUnit : public IfcUtil::IfcBaseEntity, public IfcUnit { +public: + /// Code or name of the currency. Permissible values are the three-letter alphabetic currency codes as per ISO 4217, for example CNY, EUR, GBP, JPY, USD. + std::string Currency() const; + void setCurrency(std::string v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMonetaryUnit (IfcEntityInstanceData* e); + IfcMonetaryUnit (std::string v1_Currency); + typedef aggregate_of< IfcMonetaryUnit > list; +}; +/// Definition from ISO/CD 10303-41:1992: A named unit is a unit quantity associated with the word, or group of words, by which the unit is identified. +/// +/// NOTE Corresponding ISO 10303 name: named_unit, please refer to ISO/IS 10303-41 for the final definition of the formal standard. +/// +/// HISTORY New type in IFC Release 1.5.1. +class IFC_PARSE_API IfcNamedUnit : public IfcUtil::IfcBaseEntity, public IfcUnit { +public: + /// The dimensional exponents of the SI base units by which the named unit is defined. + ::Ifc4x3_add2::IfcDimensionalExponents* Dimensions() const; + void setDimensions(::Ifc4x3_add2::IfcDimensionalExponents* v); + /// The type of the unit. + ::Ifc4x3_add2::IfcUnitEnum::Value UnitType() const; + void setUnitType(::Ifc4x3_add2::IfcUnitEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcNamedUnit (IfcEntityInstanceData* e); + IfcNamedUnit (::Ifc4x3_add2::IfcDimensionalExponents* v1_Dimensions, ::Ifc4x3_add2::IfcUnitEnum::Value v2_UnitType); + typedef aggregate_of< IfcNamedUnit > list; +}; +/// IfcObjectPlacement is an abstract supertype for the special types defining the object coordinate system. The +/// IfcObjectPlacement has to be provided for each product that has a shape representation. +/// The object placement can be given: +/// +/// absolute: by an axis2 placement, relative to the world coordinate system, +/// relative: by an axis2 placement, relative to the object placement of another product, +/// by grid reference: by the virtual intersection and reference direction given by two axes of a design grid. +/// +/// In any case the object placement has to unambiguously define the object coordinate system as either two-dimensional axis placement (IfcAxis2Placement2D) or three-dimensional axis placement (IfcAxis2Placement3D). The axis placement may have to be calculated. +/// +/// HISTORY New entity in IFC Release 2x. +class IFC_PARSE_API IfcObjectPlacement : public IfcUtil::IfcBaseEntity { +public: + ::Ifc4x3_add2::IfcObjectPlacement* PlacementRelTo() const; + void setPlacementRelTo(::Ifc4x3_add2::IfcObjectPlacement* v); + aggregate_of< IfcProduct >::ptr PlacesObject() const; // INVERSE IfcProduct::ObjectPlacement + aggregate_of< IfcObjectPlacement >::ptr ReferencedByPlacements() const; // INVERSE IfcObjectPlacement::PlacementRelTo + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcObjectPlacement (IfcEntityInstanceData* e); + IfcObjectPlacement (::Ifc4x3_add2::IfcObjectPlacement* v1_PlacementRelTo); + typedef aggregate_of< IfcObjectPlacement > list; +}; +/// An IfcObjective captures qualitative information for an objective-based constraint. +/// +/// HISTORY: New Entity in IFC Release 2.0 +/// +/// Use definition +/// +/// IfcObjective is a subtype of IfcConstraint and may be associated with any subtype of IfcRoot through the IfcRelAssociatesConstraint relationship in the IfcControlExtension schema, or may be associated with IfcProperty by IfcPropertyConstraintRelationship. +/// +/// The aim of IfcObjective is to specify the purpose for which the constraint is applied and to capture the values of the constraint. These may be both the benchmark values that are intended to indicate the constraint extent and the resulting values in use that enable performance comparisons to be applied. +class IFC_PARSE_API IfcObjective : public IfcConstraint { +public: + /// A list of any benchmark values used for comparison purposes. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcConstraint >::ptr > BenchmarkValues() const; + void setBenchmarkValues(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcConstraint >::ptr > v); + boost::optional< ::Ifc4x3_add2::IfcLogicalOperatorEnum::Value > LogicalAggregator() const; + void setLogicalAggregator(boost::optional< ::Ifc4x3_add2::IfcLogicalOperatorEnum::Value > v); + /// Enumeration that qualifies the type of objective constraint. + ::Ifc4x3_add2::IfcObjectiveEnum::Value ObjectiveQualifier() const; + void setObjectiveQualifier(::Ifc4x3_add2::IfcObjectiveEnum::Value v); + /// A user defined value that qualifies the type of objective constraint when ObjectiveQualifier attribute of type IfcObjectiveEnum has value USERDEFINED. + boost::optional< std::string > UserDefinedQualifier() const; + void setUserDefinedQualifier(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcObjective (IfcEntityInstanceData* e); + IfcObjective (std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcConstraintEnum::Value v3_ConstraintGrade, boost::optional< std::string > v4_ConstraintSource, ::Ifc4x3_add2::IfcActorSelect* v5_CreatingActor, boost::optional< std::string > v6_CreationTime, boost::optional< std::string > v7_UserDefinedGrade, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcConstraint >::ptr > v8_BenchmarkValues, boost::optional< ::Ifc4x3_add2::IfcLogicalOperatorEnum::Value > v9_LogicalAggregator, ::Ifc4x3_add2::IfcObjectiveEnum::Value v10_ObjectiveQualifier, boost::optional< std::string > v11_UserDefinedQualifier); + typedef aggregate_of< IfcObjective > list; +}; +/// A named and structured grouping with a corporate identity. +/// +/// NOTE: The relationships between IfcOrganizations, like a Department within a Company, can be expressed using IfcOrganizationRelationship. +/// +/// NOTE Corresponds to the following entity in ISO-10303-41: organization. +/// +/// HISTORY New entity in IFC Release 1.5.1. +/// IFC 2x4 change: attribute Id renamed to Identification. +class IFC_PARSE_API IfcOrganization : public IfcUtil::IfcBaseEntity, public IfcActorSelect, public IfcObjectReferenceSelect, public IfcResourceObjectSelect { +public: + /// Identification of the organization. + boost::optional< std::string > Identification() const; + void setIdentification(boost::optional< std::string > v); + /// The word, or group of words, by which the organization is referred to. + std::string Name() const; + void setName(std::string v); + /// Text that relates the nature of the organization. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + /// Roles played by the organization. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcActorRole >::ptr > Roles() const; + void setRoles(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcActorRole >::ptr > v); + /// Postal and telecom addresses of an organization. + /// NOTE: There may be several addresses related to an organization. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAddress >::ptr > Addresses() const; + void setAddresses(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAddress >::ptr > v); + aggregate_of< IfcOrganizationRelationship >::ptr IsRelatedBy() const; // INVERSE IfcOrganizationRelationship::RelatedOrganizations + aggregate_of< IfcOrganizationRelationship >::ptr Relates() const; // INVERSE IfcOrganizationRelationship::RelatingOrganization + aggregate_of< IfcPersonAndOrganization >::ptr Engages() const; // INVERSE IfcPersonAndOrganization::TheOrganization + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcOrganization (IfcEntityInstanceData* e); + IfcOrganization (boost::optional< std::string > v1_Identification, std::string v2_Name, boost::optional< std::string > v3_Description, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcActorRole >::ptr > v4_Roles, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAddress >::ptr > v5_Addresses); + typedef aggregate_of< IfcOrganization > list; +}; +/// IfcOwnerHistory defines all history and identification related information. In order to provide fast access it is directly attached to all independent objects, relationships and properties. +/// +/// IfcOwnerHistory is used to identify the creating and owning application and user for the associated object, as well as capture the last modifying application and user. +/// +/// HISTORY  New entity in IFC R1.0. Modified in IFC R2x4. +/// +/// Informal propositions +/// +/// If LastModifiedDate is defined but ChangeAction is not asserted, then the state of ChangeAction is assumed to be UNDEFINED. +/// If both LastModifiedDate and ChangeAction are asserted, then the state of ChangeAction applies to the value asserted in LastModifiedDate. +class IFC_PARSE_API IfcOwnerHistory : public IfcUtil::IfcBaseEntity { +public: + /// Direct reference to the end user who currently "owns" this object. Note that IFC includes the concept of ownership transfer from one user to another and therefore distinguishes between the Owning User and Creating User. + ::Ifc4x3_add2::IfcPersonAndOrganization* OwningUser() const; + void setOwningUser(::Ifc4x3_add2::IfcPersonAndOrganization* v); + /// Direct reference to the application which currently "Owns" this object on behalf of the owning user, who uses this application. Note that IFC includes the concept of ownership transfer from one application to another and therefore distinguishes between the Owning Application and Creating Application. + ::Ifc4x3_add2::IfcApplication* OwningApplication() const; + void setOwningApplication(::Ifc4x3_add2::IfcApplication* v); + /// Enumeration that defines the current access state of the object. + boost::optional< ::Ifc4x3_add2::IfcStateEnum::Value > State() const; + void setState(boost::optional< ::Ifc4x3_add2::IfcStateEnum::Value > v); + /// Enumeration that defines the actions associated with changes made to the object. + boost::optional< ::Ifc4x3_add2::IfcChangeActionEnum::Value > ChangeAction() const; + void setChangeAction(boost::optional< ::Ifc4x3_add2::IfcChangeActionEnum::Value > v); + /// Date and Time expressed in UTC (Universal Time Coordinated, formerly Greenwich Mean Time or GMT) at which the last modification was made by LastModifyingUser and LastModifyingApplication. + boost::optional< int > LastModifiedDate() const; + void setLastModifiedDate(boost::optional< int > v); + /// User who carried out the last modification using LastModifyingApplication. + ::Ifc4x3_add2::IfcPersonAndOrganization* LastModifyingUser() const; + void setLastModifyingUser(::Ifc4x3_add2::IfcPersonAndOrganization* v); + /// Application used to make the last modification. + ::Ifc4x3_add2::IfcApplication* LastModifyingApplication() const; + void setLastModifyingApplication(::Ifc4x3_add2::IfcApplication* v); + /// The date and time expressed in UTC (Universal Time Coordinated, formerly Greenwich Mean Time or GMT) when first created by the original OwningApplication. Once defined this value remains unchanged through the lifetime of the entity. + int CreationDate() const; + void setCreationDate(int v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcOwnerHistory (IfcEntityInstanceData* e); + IfcOwnerHistory (::Ifc4x3_add2::IfcPersonAndOrganization* v1_OwningUser, ::Ifc4x3_add2::IfcApplication* v2_OwningApplication, boost::optional< ::Ifc4x3_add2::IfcStateEnum::Value > v3_State, boost::optional< ::Ifc4x3_add2::IfcChangeActionEnum::Value > v4_ChangeAction, boost::optional< int > v5_LastModifiedDate, ::Ifc4x3_add2::IfcPersonAndOrganization* v6_LastModifyingUser, ::Ifc4x3_add2::IfcApplication* v7_LastModifyingApplication, int v8_CreationDate); + typedef aggregate_of< IfcOwnerHistory > list; +}; +/// Definition: an individual human being. +/// +/// NOTE Many countries have legislation concerning the identification of individual persons within databases. Although the intent of the IFC Model is to act as a specification for data exchange +/// and sharing, an IFC file might in some situations be considered to be a database that enables identification of a particular person under the terms of such legislation. Users should be aware of the constraints of legislation that might apply in the places where IFC files are used. +/// +/// NOTE Corresponds to the following entity in ISO-10303-41: person. +/// +/// HISTORY New entity in IFC Release 1.5.1. +/// IFC 2x4 change: attribute Id renamed to Identification. WHERE rule relaxed to allow omission of names if Identification is provided. +class IFC_PARSE_API IfcPerson : public IfcUtil::IfcBaseEntity, public IfcActorSelect, public IfcObjectReferenceSelect, public IfcResourceObjectSelect { +public: + /// Identification of the person. + boost::optional< std::string > Identification() const; + void setIdentification(boost::optional< std::string > v); + /// The name by which the family identity of the person may be recognized. + /// NOTE: Depending on geographical location and culture, family name may appear either as the first or last component of a name. + boost::optional< std::string > FamilyName() const; + void setFamilyName(boost::optional< std::string > v); + /// The name by which a person is known within a family and by which he or she may be familiarly recognized. + /// NOTE: Depending on geographical location and culture, given name may appear either as the first or last component of a name. + boost::optional< std::string > GivenName() const; + void setGivenName(boost::optional< std::string > v); + /// Additional names given to a person that enable their identification apart from others who may have the same or similar family and given names. + /// NOTE: Middle names are not normally used in familiar communication but may be asserted to provide additional + /// identification of a particular person if necessary. They may be particularly useful in situations where the person concerned has a + /// family name that occurs commonly in the geographical region. + boost::optional< std::vector< std::string > /*[1:?]*/ > MiddleNames() const; + void setMiddleNames(boost::optional< std::vector< std::string > /*[1:?]*/ > v); + /// The word, or group of words, which specify the person's social and/or professional standing and appear before his/her names. + boost::optional< std::vector< std::string > /*[1:?]*/ > PrefixTitles() const; + void setPrefixTitles(boost::optional< std::vector< std::string > /*[1:?]*/ > v); + /// The word, or group of words, which specify the person's social and/or professional standing and appear after his/her names. + boost::optional< std::vector< std::string > /*[1:?]*/ > SuffixTitles() const; + void setSuffixTitles(boost::optional< std::vector< std::string > /*[1:?]*/ > v); + /// Roles played by the person. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcActorRole >::ptr > Roles() const; + void setRoles(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcActorRole >::ptr > v); + /// Postal and telecommunication addresses of a person. + /// NOTE - A person may have several addresses. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAddress >::ptr > Addresses() const; + void setAddresses(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAddress >::ptr > v); + aggregate_of< IfcPersonAndOrganization >::ptr EngagedIn() const; // INVERSE IfcPersonAndOrganization::ThePerson + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPerson (IfcEntityInstanceData* e); + IfcPerson (boost::optional< std::string > v1_Identification, boost::optional< std::string > v2_FamilyName, boost::optional< std::string > v3_GivenName, boost::optional< std::vector< std::string > /*[1:?]*/ > v4_MiddleNames, boost::optional< std::vector< std::string > /*[1:?]*/ > v5_PrefixTitles, boost::optional< std::vector< std::string > /*[1:?]*/ > v6_SuffixTitles, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcActorRole >::ptr > v7_Roles, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAddress >::ptr > v8_Addresses); + typedef aggregate_of< IfcPerson > list; +}; +/// Definition: Identification of a person within an organization. +/// +/// NOTE Corresponds to the following entity in ISO-10303-41: person_and_organization. +/// +/// HISTORY New entity in IFC Release 1.5.1 +class IFC_PARSE_API IfcPersonAndOrganization : public IfcUtil::IfcBaseEntity, public IfcActorSelect, public IfcObjectReferenceSelect, public IfcResourceObjectSelect { +public: + /// The person who is related to the organization. + ::Ifc4x3_add2::IfcPerson* ThePerson() const; + void setThePerson(::Ifc4x3_add2::IfcPerson* v); + /// The organization to which the person is related. + ::Ifc4x3_add2::IfcOrganization* TheOrganization() const; + void setTheOrganization(::Ifc4x3_add2::IfcOrganization* v); + /// Roles played by the person within the context of an organization. These may differ from the roles in ThePerson.Roles which may be asserted without organizational context. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcActorRole >::ptr > Roles() const; + void setRoles(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcActorRole >::ptr > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPersonAndOrganization (IfcEntityInstanceData* e); + IfcPersonAndOrganization (::Ifc4x3_add2::IfcPerson* v1_ThePerson, ::Ifc4x3_add2::IfcOrganization* v2_TheOrganization, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcActorRole >::ptr > v3_Roles); + typedef aggregate_of< IfcPersonAndOrganization > list; +}; +/// The physical quantity, IfcPhysicalQuantity, is an abstract entity that holds a complex or simple quantity measure together with a semantic definition of the usage for the single or several measure value. +/// +/// The Name attribute defines the actual usage or kind of measure. The interpretation of the name label has to be established within the actual exchange context. In addition an informative text may be associated to each quantity by the Description attribute. +/// +/// HISTORY  New entity in IFC2x. It replaces the calcXxx attributes used in previous IFC Releases. +class IFC_PARSE_API IfcPhysicalQuantity : public IfcUtil::IfcBaseEntity, public IfcResourceObjectSelect { +public: + /// Name of the element quantity or measure. The name attribute has to be made recognizable by further agreements. + std::string Name() const; + void setName(std::string v); + /// Further explanation that might be given to the quantity. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + aggregate_of< IfcExternalReferenceRelationship >::ptr HasExternalReferences() const; // INVERSE IfcExternalReferenceRelationship::RelatedResourceObjects + aggregate_of< IfcPhysicalComplexQuantity >::ptr PartOfComplex() const; // INVERSE IfcPhysicalComplexQuantity::HasQuantities + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPhysicalQuantity (IfcEntityInstanceData* e); + IfcPhysicalQuantity (std::string v1_Name, boost::optional< std::string > v2_Description); + typedef aggregate_of< IfcPhysicalQuantity > list; +}; +/// The physical quantity, IfcPhysicalSimpleQuantity, is an entity that holds a single quantity measure value (as defined at the subtypes of IfcPhysicalSimpleQuantity) together with a semantic definition of the usage for the measure value. +/// +/// EXAMPLE  An element, like a wall, may have several area measures, like footprint area, left wall face area, right wall face area. These areas would be given by three instances of the area quantity subtype, with different Name string values. +/// +/// A section "Quantity Use Definition" at individual entities as subtypes of IfcBuildingElement gives guidance to the usage of the Name attribute to characterize the individual quantities. If the Unit attribute is given, the value attribute (introduced at the level of subtypes of IfcPhysicalSimpleQuantity) are given as quantities of this unit, otherwise the global unit definitions (given by IfcUnitAssignment) are used. +/// +/// HISTORY New entity in IFC2x2 Addendum 1. +/// +/// IFC2x2 ADDENDUM 1 CHANGE  The abstract entity IfcPhysicalSimpleQuantity has been added. Upward compatibility for file based exchange is guaranteed. +class IFC_PARSE_API IfcPhysicalSimpleQuantity : public IfcPhysicalQuantity { +public: + /// Optional assignment of a unit. If no unit is given, then the global unit assignment, as established at the IfcProject, applies to the quantity measures. + ::Ifc4x3_add2::IfcNamedUnit* Unit() const; + void setUnit(::Ifc4x3_add2::IfcNamedUnit* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPhysicalSimpleQuantity (IfcEntityInstanceData* e); + IfcPhysicalSimpleQuantity (std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcNamedUnit* v3_Unit); + typedef aggregate_of< IfcPhysicalSimpleQuantity > list; +}; +/// Definition: The address for delivery of paper based mail. +/// +/// HISTORY New entity in IFC Release 2x. +class IFC_PARSE_API IfcPostalAddress : public IfcAddress { +public: + /// An organization defined address for internal mail delivery. + boost::optional< std::string > InternalLocation() const; + void setInternalLocation(boost::optional< std::string > v); + /// The postal address. + /// NOTE: A postal address may occupy several lines (or elements) when recorded. + /// It is expected that normal usage will incorporate relevant elements of the following address concepts: + /// A location within a building (e.g. 3rd Floor) Building name (e.g. Interoperability House) Street number + /// (e.g. 6400) Street name (e.g. Alliance Boulevard). Typical content of address lines may vary in different + /// countries. + boost::optional< std::vector< std::string > /*[1:?]*/ > AddressLines() const; + void setAddressLines(boost::optional< std::vector< std::string > /*[1:?]*/ > v); + /// An address that is implied by an identifiable mail drop. + boost::optional< std::string > PostalBox() const; + void setPostalBox(boost::optional< std::string > v); + /// The name of a town. + boost::optional< std::string > Town() const; + void setTown(boost::optional< std::string > v); + /// The name of a region. + /// NOTE: The counties of the United Kingdom and the states of North America are examples of regions. + boost::optional< std::string > Region() const; + void setRegion(boost::optional< std::string > v); + /// The code that is used by the country's postal service. + boost::optional< std::string > PostalCode() const; + void setPostalCode(boost::optional< std::string > v); + /// The name of a country. + boost::optional< std::string > Country() const; + void setCountry(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPostalAddress (IfcEntityInstanceData* e); + IfcPostalAddress (boost::optional< ::Ifc4x3_add2::IfcAddressTypeEnum::Value > v1_Purpose, boost::optional< std::string > v2_Description, boost::optional< std::string > v3_UserDefinedPurpose, boost::optional< std::string > v4_InternalLocation, boost::optional< std::vector< std::string > /*[1:?]*/ > v5_AddressLines, boost::optional< std::string > v6_PostalBox, boost::optional< std::string > v7_Town, boost::optional< std::string > v8_Region, boost::optional< std::string > v9_PostalCode, boost::optional< std::string > v10_Country); + typedef aggregate_of< IfcPostalAddress > list; +}; + +class IFC_PARSE_API IfcPresentationItem : public IfcUtil::IfcBaseEntity { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPresentationItem (IfcEntityInstanceData* e); + IfcPresentationItem (); + typedef aggregate_of< IfcPresentationItem > list; +}; +/// The presentation layer assignment provides the layer name (and optionally a description and an identifier) for a collection of geometric representation items. The IfcPresentationLayerAssignment corresponds to the term "CAD Layer" and is used mainly for grouping and visibility control. +/// +/// NOTE  The use of presentation layer shall be restricted to simple grouping and displaying purposes. +/// +/// Visibility and access control and layer style assignment (colour, line style, line width) is handled by the subtype IfcPresentationLayerAssignmentWithStyle. +/// +/// NOTE  Corresponding ISO 10303 name: presentation layer assignment. Please refer to ISO/IS 10303-46:1994, p. 36 for the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC2x2. +/// +/// Attribute use definition +/// +/// Figure 305 illustrates assignment of items by shape representation or representation item. The set of AssignedItems can either include a whole shape representation, or individual geometric representation items. If both, the IfcShapeRepresentation has a layer assignment, and an individual geometric representation item in the set of IfcShapeRepresentation.Items, then the layer assignment of the IfcGeometricRepresentationItem overides the layer assignment of the IfcShapeRepresentation. +/// +/// Figure 305 — Presentation layer assignment +class IFC_PARSE_API IfcPresentationLayerAssignment : public IfcUtil::IfcBaseEntity { +public: + /// Name of the layer. + std::string Name() const; + void setName(std::string v); + /// Additional description of the layer. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + /// The set of layered items, which are assigned to this layer. + aggregate_of< ::Ifc4x3_add2::IfcLayeredItem >::ptr AssignedItems() const; + void setAssignedItems(aggregate_of< ::Ifc4x3_add2::IfcLayeredItem >::ptr v); + /// An (internal) identifier assigned to the layer. + boost::optional< std::string > Identifier() const; + void setIdentifier(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPresentationLayerAssignment (IfcEntityInstanceData* e); + IfcPresentationLayerAssignment (std::string v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_add2::IfcLayeredItem >::ptr v3_AssignedItems, boost::optional< std::string > v4_Identifier); + typedef aggregate_of< IfcPresentationLayerAssignment > list; +}; +/// An IfcPresentationLayerAssignmentWithStyle extends the presentation layer assignment with capabilities to define visibility control, access control and common style information. +/// +/// The visibility control allows to define a layer to be either 'on' or 'off', and/or 'frozen' or 'not frozen'. The access control allows to block graphical entities from manipulations by setting a layer to be either 'blocked' or 'not blocked'. Common style information can be given to the layer. +/// +/// NOTE  Style information assigned to layers is often restricted to 'layer colour', 'curve font', and/or 'curve width'. These styles are assigned by using the IfcCurveStyle within the LayerStyles. +/// +/// NOTE: If a styled item is assigned to a layer using the IfcPresentationLayerAssignmentWithStyle, it inherits the style information from the layer. In this case, it should omit its own style information. If the styled item has style information assigned (such as by IfcCurveStyle, IfcFillAreaStyle, IfcTextStyle, IfcSurfaceStyle, IfcSymbolStyle), then it overrides the style provided by the IfcPresentationLayerAssignmentWithStyle. +/// +/// NOTE  The IfcPresentationLayerAssignmentWithStyle extends the presentation_layer_assignment entity as defined in ISO/IS 10303-46:1994, p. 36. +/// +/// HISTORY  New entity in IFC2x2. +/// +/// IFC2x3 CHANGE  The attributes have been modified without upward compatibility. +class IFC_PARSE_API IfcPresentationLayerWithStyle : public IfcPresentationLayerAssignment { +public: + /// A logical setting, TRUE indicates that the layer is set to 'On', FALSE that the layer is set to 'Off', UNKNOWN that such information is not available. + boost::logic::tribool LayerOn() const; + void setLayerOn(boost::logic::tribool v); + /// A logical setting, TRUE indicates that the layer is set to 'Frozen', FALSE that the layer is set to 'Not frozen', UNKNOWN that such information is not available. + boost::logic::tribool LayerFrozen() const; + void setLayerFrozen(boost::logic::tribool v); + /// A logical setting, TRUE indicates that the layer is set to 'Blocked', FALSE that the layer is set to 'Not blocked', UNKNOWN that such information is not available. + boost::logic::tribool LayerBlocked() const; + void setLayerBlocked(boost::logic::tribool v); + /// Assignment of presentation styles to the layer to provide a default style for representation items. + /// + /// NOTE  In most cases the assignment of styles to a layer is restricted to an IfcCurveStyle representing the layer curve colour, layer curve thickness, and layer curve type. + /// + /// IFC2x4 CHANGE  The data type has been changed from IfcPresentationStyleSelect (now deprecated) to IfcPresentationStyle. + aggregate_of< ::Ifc4x3_add2::IfcPresentationStyle >::ptr LayerStyles() const; + void setLayerStyles(aggregate_of< ::Ifc4x3_add2::IfcPresentationStyle >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPresentationLayerWithStyle (IfcEntityInstanceData* e); + IfcPresentationLayerWithStyle (std::string v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_add2::IfcLayeredItem >::ptr v3_AssignedItems, boost::optional< std::string > v4_Identifier, boost::logic::tribool v5_LayerOn, boost::logic::tribool v6_LayerFrozen, boost::logic::tribool v7_LayerBlocked, aggregate_of< ::Ifc4x3_add2::IfcPresentationStyle >::ptr v8_LayerStyles); + typedef aggregate_of< IfcPresentationLayerWithStyle > list; +}; +/// IfcPresentationStyle is an abstract generalization of style table for presentation information assigned to geometric representation items. It includes styles for curves, areas, surfaces, text and symbols. Style information may include colour, hatching, rendering, and text fonts. +/// +/// Each subtype of  IfcPresentationStyle can be assigned to IfcGeometricRepresentationItem's via the IfcPresentationStyleAssignment through an intermediate IfcStyledItem or one of its subtypes. +/// +/// HISTORY  New entity in IFC2x3. +class IFC_PARSE_API IfcPresentationStyle : public IfcUtil::IfcBaseEntity { +public: + /// Name of the presentation style. + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPresentationStyle (IfcEntityInstanceData* e); + IfcPresentationStyle (boost::optional< std::string > v1_Name); + typedef aggregate_of< IfcPresentationStyle > list; +}; +/// IfcProductRepresentation defines a representation of a +/// product, including its (geometric or topological) representation. +/// A product can have zero, one or many geometric representations, +/// and a single geometric representation can be shared among various +/// products using mapped representations. +/// +/// NOTE: The definition +/// of this entity relates to the ISO 10303 entity property_definition. +/// The use of the term ‘property’ was avoided since it +/// conflicts with the property, property type, and property set +/// definitions elsewhere in the IFC model. +/// +/// HISTORY New entity in IFC Release 2.0 +/// +/// IFC2x3 NOTE Users should not instantiate the entity from IFC2x Edition 3 onwards. +/// +/// IFC2x4 CHANGE  Entity made abstract. +class IFC_PARSE_API IfcProductRepresentation : public IfcUtil::IfcBaseEntity { +public: + /// The word or group of words by which the product representation is known. + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + /// The word or group of words that characterize the product representation. It can be used to add additional meaning to the name of the product representation. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + /// Contained list of representations (including shape representations). Each member defines a valid representation of a particular type within a particular representation context. + aggregate_of< ::Ifc4x3_add2::IfcRepresentation >::ptr Representations() const; + void setRepresentations(aggregate_of< ::Ifc4x3_add2::IfcRepresentation >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcProductRepresentation (IfcEntityInstanceData* e); + IfcProductRepresentation (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_add2::IfcRepresentation >::ptr v3_Representations); + typedef aggregate_of< IfcProductRepresentation > list; +}; +/// IfcProfileDef +/// is the supertype of all definitions of standard and arbitrary profiles +/// within IFC. It is used to define a standard set of commonly used +/// section profiles by their parameters or by their explicit curve geometry. +/// +/// Parameterized profiles are 2D primitives, which are used within the industry to describe cross +/// sections by a description of its parameters. +/// Arbitrary profiles are cross +/// sections defined by an outer boundary as bounded curve, which may also +/// include holes, defined by inner boundaries. +/// Derived profiles, based on a +/// transformation of a parent profile, are also part of the profile +/// definitions available. +/// In addition composite +/// profiles can be defined, which include two or more profile definitions +/// to define the resulting profile. +/// +/// HISTORY  New class in IFC Release 1.5, the capabilities have been extended in IFC Release 2x. +/// Profiles can now support swept surfaces and swept area solids with +/// inner boundaries. It had been renamed from IfcAttDrivenProfileDef. +/// +/// IFC2x4 CHANGE  Changed from ABSTRACT to non-abstract for uses which do not +/// require an explicitly defined geometry. Added inverse attributes HasProperties and HasExternalReference. +/// +/// Use in material association +/// +/// Beams, columns, and similarly shaped building elements and their type objects may +/// be associated with a section profile definition, combined with material definition, +/// by means of IfcRelAssociatesMaterial together with IfcMaterialProfileSet +/// and IfcMaterialProfileSetUsage. This way, building elements and element types +/// with same section and material can share a common section profile definition and +/// association. +/// +/// The profile definition in material association is required to be consistent with +/// shape representations of the respective building elements. +/// +/// A higher-level description of spatial aligment of the section profile of a member +/// (such as centered, bottom-left, in the geometric centroid, and more) can be provided +/// within IfcMaterialProfileSetUsage by means of a cardinal point reference. +/// This can be used redundant to geometric data in order to convey design intent. +/// +/// Use in shape models +/// +/// Profile definitions are used within the geometry and geometric model +/// resource to create either swept surfaces, swept area solids, or +/// sectioned spines. +/// +/// The purpose of the profile +/// definition within the swept surfaces or swept area solids is to define +/// a uniform cross section being swept: +/// +/// along a line (extrusion) using IfcSurfaceOfLinearExtrusion or IfcExtrudedAreaSolid +/// along a circular arc (revolution) using IfcSurfaceOfRevolution or IfcRevolvedAreaSolid +/// along a directrix lying on a reference surface using IfcSurfaceCurveSweptAreaSolid +/// +/// The purpose fo the profile +/// definition within the sectioned spine is to define a varying cross +/// sections at several positions along a spine curve. The subtype IfcDerivedProfileDef +/// is particularly suited to provide the consecutive profiles to be based +/// on transformations of the start profile and thus maintaining the +/// identity of vertices and edges. +/// +/// NOTE  Subtypes of the IfcProfileDef +/// contain parameterized profiles (as subtypes of IfcParameterizedProfileDef) +/// which establish their own 2D position coordinate system, profiles given +/// by explicit curve geometry (either open or closed profiles) and two +/// special types for composite profiles and derived profiles, based on a +/// 2D Cartesian transformation. +/// +/// An IfcProfileDef +/// is treated as bounded area if it is used within swept area solids. In +/// this case, the inside of the profile is part of the profile. The +/// attribute ProfileType is set to AREA. An IfcProfileDef +/// is treated as a curve if it is used within swept surfaces. In this +/// case, the inside of the profile (if the curve is closed) is not part of +/// the profile. The attribute ProfileType +/// is set to CURVE. +/// +/// Figure 320 illustrates use of parameterized profiles within a swept area solid. +/// +/// Position +/// The IfcProfileDef is defined within the underlying +/// coordinate system which is defined by the swept surface or swept area solid +/// that uses the profile definition. It is the xy plane +/// +/// of IfcSweptSurface.Position or +/// of IfcSweptAreaSolid.Position or +/// of each list member of IfcSectionedSpine.CrossSectionPositions. +/// +/// In the figure to the left, the z axis of the position coordinate system points outwards of the drawing plane. +/// +/// Note: The subtype IfcParameterizedProfileDef optionally provides an additional 2D position coordinate system relative to the underlying coordinate system of the IfcProfileDef. +/// +/// Sweeping +/// +/// In the later use of the IfcProfileDef +/// within the swept surface or swept area solid,  e.g. the IfcExtrudedAreaSolid +/// (here used as an example), the profile boundaries (here based on the 2D +/// position coordinate system of IfcParameterizedProfileDef) +/// are placed within the xy plane of the 3D position coordinate system of +/// the swept surface or swept area solid. +/// +/// The profile is inserted into the underlying coordinate system either: +/// +/// directly in case of using IfcArbitraryClosedProfileDef +/// and IfcArbitraryOpenProfileDef, +/// +/// through an intermediate position coordinate system in case of +/// using IfcParameterizedProfileDef. +/// +/// through an 2D Cartesian transformation operator (applied directly +/// to the curve position when using arbitrary profile definitions, +/// or applied to the position coordinate system when using parameterized +/// profile definitions) in case of using IfcDerivedProfileDef. +/// +/// when using IfcCompositeProfileDef the insertion depends on +/// the subtype of the included sub-profiles. +/// +/// Figure 320 — Profile sweeping +/// +/// Profile types +/// +/// Results of the different usage of the ProfileType attribute are demonstrated here. The ProfileType defines whether the inside (the bounded area) is part of the profile definition (Area) or not (Curve). Figure 321 illustrates the resulting area or curve depending on ProfileType. +/// +/// ProfileType = AREA +/// +/// ProfileType = CURVE +/// +/// Figure 321 — Profile types +/// +/// Profile specification by external reference +/// +/// If the profile is standardized by a norm or a catalogue, a reference +/// to this norm or catalogue should be provided by means of HasExternalReference. +/// This inverse relationship is used to associate an IfcExternalReference (notably +/// IfcClassificationReference or IfcLibraryReference) with the +/// profile. +/// +/// IfcClassificationReference is used to refer to a profile norm (a common standard or +/// manufacturer's standard). In this case, +/// +/// IfcClassificationReference.ItemReference +/// contains the formal profile designation from the norm. +/// (On the other hand, IfcProfileDef.ProfileName contains a displayable name which may +/// not necessarily be the same as the formal designation.) +/// IfcClassificationReference.Name carries the short name of the profile norm. +/// Optionally, the norm can be further described by +/// IfcClassificationReference.ReferencedSource. +/// +/// IfcLibraryReference is used to refer to a library which contains profile +/// definitions. In this case, +/// +/// IfcLibraryReference.ItemReference contains the identifier of the +/// profile within the library and is meant to be machine-readable (in contrast to +/// IfcProfileDef.ProfileName which should be human-readable). +/// IfcLibraryReference.Location and .Name or .ReferencedLibrary +/// further describe the library. +/// +/// If an external reference is provided, sending systems shall ensure that +/// the shape of the profile definition object agrees with the definitions in the +/// referenced classification or library. +/// +/// Direct instances of IfcProfileDef +/// +/// Usually, only subtypes of IfcProfileDef should be instantiated. +/// In some special cases, e.g. if the profile object is used for purposes +/// other than geometric models (e.g. for structural analysis models), it may be +/// possible to directly instantiate IfcProfileDef and further specify +/// the profile only by external reference or by profile properties. The latter +/// are tracked by the inverse attribute HasProperties. +class IFC_PARSE_API IfcProfileDef : public IfcUtil::IfcBaseEntity, public IfcResourceObjectSelect { +public: + /// Defines the type of geometry into which this profile definition shall be resolved, either a curve or a surface area. In case of curve the profile should be referenced by a swept surface, in case of area the profile should be referenced by a swept area solid. + ::Ifc4x3_add2::IfcProfileTypeEnum::Value ProfileType() const; + void setProfileType(::Ifc4x3_add2::IfcProfileTypeEnum::Value v); + /// Human-readable name of the profile, for example according to a standard profile table. As noted above, machine-readable standardized profile designations should be provided in IfcExternalReference.ItemReference. + boost::optional< std::string > ProfileName() const; + void setProfileName(boost::optional< std::string > v); + aggregate_of< IfcExternalReferenceRelationship >::ptr HasExternalReference() const; // INVERSE IfcExternalReferenceRelationship::RelatedResourceObjects + aggregate_of< IfcProfileProperties >::ptr HasProperties() const; // INVERSE IfcProfileProperties::ProfileDefinition + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcProfileDef (IfcEntityInstanceData* e); + IfcProfileDef (::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName); + typedef aggregate_of< IfcProfileDef > list; +}; +/// Definition from OpenGIS® Abstract Specification, +/// Topic 2: A 2D (or with vertical coordinate axis 3D) +/// coordinate reference system used to approximate the shape +/// of the earth on a planar surface, but in such a way that +/// the distortion that is inherent to the approximation is +/// carefully controlled and known. Distortion correction is +/// commonly applied to calculated bearings and distances to +/// produce values that are a close match to actual field +/// values. +/// IfcProjectedCRS is a coordinate reference system of +/// the map to which the map translation of the local +/// engineering coordinate system of the construction or +/// facility engineering project relates. The +/// MapProjection and MapZone attributes uniquely +/// identify the projection to the underlying geographic +/// coordinate reference system, provided that they are +/// well-known in the receiving application. +/// The projected coordinate reference system is assumed to be +/// a 2D or 3D right-handed Cartesian coordinate system, the +/// optional MapUnit attribute can be used determine the +/// length unit used by the map. +/// +/// HISTORY  New entity in IFC2x4. +class IFC_PARSE_API IfcProjectedCRS : public IfcCoordinateReferenceSystem { +public: + boost::optional< std::string > VerticalDatum() const; + void setVerticalDatum(boost::optional< std::string > v); + /// Name by which the map projection is identified. + /// + /// UTM + /// Gaus-Krueger + boost::optional< std::string > MapProjection() const; + void setMapProjection(boost::optional< std::string > v); + /// Name by which the map zone, relating to the MapProjection, is identified. Examples are + /// + /// for UTM, the zone number, like 32 for UTM32 + /// for Gaus-Krueger, the zones of longitudinal width, like 3' + boost::optional< std::string > MapZone() const; + void setMapZone(boost::optional< std::string > v); + /// Unit of the coordinate axes composing the map coordinate system. + /// NOTE  Only length measures are in scope and all two or three axes of the map coordinate system shall have the same length unit. + ::Ifc4x3_add2::IfcNamedUnit* MapUnit() const; + void setMapUnit(::Ifc4x3_add2::IfcNamedUnit* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcProjectedCRS (IfcEntityInstanceData* e); + IfcProjectedCRS (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, boost::optional< std::string > v3_GeodeticDatum, boost::optional< std::string > v4_VerticalDatum, boost::optional< std::string > v5_MapProjection, boost::optional< std::string > v6_MapZone, ::Ifc4x3_add2::IfcNamedUnit* v7_MapUnit); + typedef aggregate_of< IfcProjectedCRS > list; +}; + +class IFC_PARSE_API IfcPropertyAbstraction : public IfcUtil::IfcBaseEntity, public IfcResourceObjectSelect { +public: + aggregate_of< IfcExternalReferenceRelationship >::ptr HasExternalReferences() const; // INVERSE IfcExternalReferenceRelationship::RelatedResourceObjects + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPropertyAbstraction (IfcEntityInstanceData* e); + IfcPropertyAbstraction (); + typedef aggregate_of< IfcPropertyAbstraction > list; +}; +/// IfcPropertyEnumeration is a collection of simple +/// or measure values that define a prescribed set of alternatives from +/// which 'enumeration values' are selected. This enables inclusion of +/// enumeration values in property sets. IfcPropertyEnumeration +/// provides a name for the enumeration as well as a list of unique +/// (numeric or descriptive) values (that may have a measure type +/// assigned). The entity defines the list of potential enumerators to be +/// exchanged together (or separately) with properties of type IfcPropertyEnumeratedValue +/// that selects their actual property values from this enumeration. +/// The unit is handled by the Unit attribute: +/// +/// If the Unit attribute is not given, +/// than the unit is already implied by the type of IfcMeasureValue +/// or IfcDerivedMeasureValue. The associated unit can +/// be found at the IfcUnitAssignment globally defined +/// at the project level (IfcProject.UnitsInContext). +/// If the Unit attribute is given, the +/// unit assigned by the unit attribute overrides the globally assigned +/// unit. +/// +/// Name +/// EnumerationValues +/// Type (through IfcValue) +/// Unit +/// +/// PEnum_DamperBladeAction +/// Parallel +/// IfcString +/// - +/// +///   +/// Opposed +/// IfcString +///   +/// +///   +/// Other +/// IfcString +///   +/// +///   +/// Unset +/// IfcString +///   +/// +/// HISTORY  New Entity in IFC Release 2.0, capabilities enhanced in IFC Release 2x. Entity has been renamed from IfcEnumeration in IFC Release 2x. +class IFC_PARSE_API IfcPropertyEnumeration : public IfcPropertyAbstraction { +public: + /// Name of this enumeration. + std::string Name() const; + void setName(std::string v); + /// List of values that form the enumeration. + aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr EnumerationValues() const; + void setEnumerationValues(aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr v); + /// Unit for the enumerator values, if not given, the default value for the measure type (given by the TYPE of nominal value) is used as defined by the global unit assignment at IfcProject. + ::Ifc4x3_add2::IfcUnit* Unit() const; + void setUnit(::Ifc4x3_add2::IfcUnit* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPropertyEnumeration (IfcEntityInstanceData* e); + IfcPropertyEnumeration (std::string v1_Name, aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr v2_EnumerationValues, ::Ifc4x3_add2::IfcUnit* v3_Unit); + typedef aggregate_of< IfcPropertyEnumeration > list; +}; +/// IfcQuantityArea is a physical quantity that defines a derived area measure to provide an element's physical property. It is normally derived from the physical properties of the element under the specific measure rules given by a method of measurement. +/// +/// EXAMPLE  An opening may have an opening area used to deduct it from the wall surface area. The actual size of the area depends on the method of measurement used. +/// +/// HISTORY  New entity in IFC2x. It replaces the calcXxx attributes used in previous IFC Releases. +class IFC_PARSE_API IfcQuantityArea : public IfcPhysicalSimpleQuantity { +public: + /// Area measure value of this quantity. + double AreaValue() const; + void setAreaValue(double v); + /// A formula by which the quantity has been calculated. It can be assigned in addition to the actual value of the quantity. Formulas could be mathematic calculations (like width x height), database links, or a combination. The formula is for informational purposes only. + /// + /// IFC2x4 CHANGE Attribute added to the end of the attribute list. + boost::optional< std::string > Formula() const; + void setFormula(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcQuantityArea (IfcEntityInstanceData* e); + IfcQuantityArea (std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcNamedUnit* v3_Unit, double v4_AreaValue, boost::optional< std::string > v5_Formula); + typedef aggregate_of< IfcQuantityArea > list; +}; +/// IfcQuantityCount is a physical quantity that defines a derived count measure to provide an element's physical property. It is normally derived from the physical properties of the element under the specific measure rules given by a method of measurement. +/// +/// EXAMPLE  An radiator may be measured according to its number of coils. The actual counting method depends on the method of measurement used. +/// +/// HISTORY  New entity in IFC2x. It replaces the calcXxx attributes used in previous IFC Releases. +class IFC_PARSE_API IfcQuantityCount : public IfcPhysicalSimpleQuantity { +public: + /// Count measure value of this quantity. + int CountValue() const; + void setCountValue(int v); + /// A formula by which the quantity has been calculated. It can be assigned in addition to the actual value of the quantity. Formulas could be mathematic calculations (like width x height), database links, or a combination. The formula is for informational purposes only. + /// + /// IFC2x4 CHANGE Attribute added to the end of the attribute list. + boost::optional< std::string > Formula() const; + void setFormula(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcQuantityCount (IfcEntityInstanceData* e); + IfcQuantityCount (std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcNamedUnit* v3_Unit, int v4_CountValue, boost::optional< std::string > v5_Formula); + typedef aggregate_of< IfcQuantityCount > list; +}; +/// IfcQuantityLength is a physical quantity that defines a derived length measure to provide an element's physical property. It is normally derived from the physical properties of the element under the specific measure rules given by a method of measurement. +/// +/// EXAMPLE  A rafter within a roof construction may be measured according to its length (taking a common cross section into account). The actual size of the length depends on the method of measurement used. +/// +/// HISTORY  New entity in IFC Release 2.x. It replaces the calcXxx attributes used in previous IFC Releases. +class IFC_PARSE_API IfcQuantityLength : public IfcPhysicalSimpleQuantity { +public: + /// Length measure value of this quantity. + double LengthValue() const; + void setLengthValue(double v); + /// A formula by which the quantity has been calculated. It can be assigned in addition to the actual value of the quantity. Formulas could be mathematic calculations (like width x height), database links, or a combination. The formula is for informational purposes only. + /// + /// IFC2x4 CHANGE Attribute added to the end of the attribute list. + boost::optional< std::string > Formula() const; + void setFormula(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcQuantityLength (IfcEntityInstanceData* e); + IfcQuantityLength (std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcNamedUnit* v3_Unit, double v4_LengthValue, boost::optional< std::string > v5_Formula); + typedef aggregate_of< IfcQuantityLength > list; +}; + +class IFC_PARSE_API IfcQuantityNumber : public IfcPhysicalSimpleQuantity { +public: + double NumberValue() const; + void setNumberValue(double v); + boost::optional< std::string > Formula() const; + void setFormula(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcQuantityNumber (IfcEntityInstanceData* e); + IfcQuantityNumber (std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcNamedUnit* v3_Unit, double v4_NumberValue, boost::optional< std::string > v5_Formula); + typedef aggregate_of< IfcQuantityNumber > list; +}; +/// IfcQuantityTime is an element quantity that defines a time measure to provide an property of time related to an element. It is normally given by the recipe information of the element under the specific measure rules given by a method of measurement. +/// +/// EXAMPLE  The amount of time needed to pour concrete for a wall is given as a time quantity for the labor part of the recipe information. +/// +/// HISTORY  New entity in IFC2x2. +class IFC_PARSE_API IfcQuantityTime : public IfcPhysicalSimpleQuantity { +public: + /// Time measure value of this quantity. + double TimeValue() const; + void setTimeValue(double v); + /// A formula by which the quantity has been calculated. It can be assigned in addition to the actual value of the quantity. Formulas could be mathematic calculations (like width x height), database links, or a combination. The formula is for informational purposes only. + /// + /// IFC2x4 CHANGE Attribute added to the end of the attribute list. + boost::optional< std::string > Formula() const; + void setFormula(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcQuantityTime (IfcEntityInstanceData* e); + IfcQuantityTime (std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcNamedUnit* v3_Unit, double v4_TimeValue, boost::optional< std::string > v5_Formula); + typedef aggregate_of< IfcQuantityTime > list; +}; +/// IfcQuantityVolume is a physical quantity that defines a derived volume measure to provide an element's physical property. It is normally derived from the physical properties of the element under the specific measure rules given by a method of measurement. +/// +/// EXAMPLE  A thick brick wall may be measured according to its volume. The actual size of the volume depends on the method of measurement used. +/// +/// HISTORY New entity in IFC2x. It replaces the calcXxx attributes used in previous IFC Releases. +class IFC_PARSE_API IfcQuantityVolume : public IfcPhysicalSimpleQuantity { +public: + /// Volume measure value of this quantity. + double VolumeValue() const; + void setVolumeValue(double v); + /// A formula by which the quantity has been calculated. It can be assigned in addition to the actual value of the quantity. Formulas could be mathematic calculations (like width x height), database links, or a combination. The formula is for informational purposes only. + /// + /// IFC2x4 CHANGE Attribute added to the end of the attribute list. + boost::optional< std::string > Formula() const; + void setFormula(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcQuantityVolume (IfcEntityInstanceData* e); + IfcQuantityVolume (std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcNamedUnit* v3_Unit, double v4_VolumeValue, boost::optional< std::string > v5_Formula); + typedef aggregate_of< IfcQuantityVolume > list; +}; +/// IfcQuantityWeight is a physical element quantity that defines a derived weight measure to provide an element's physical property. It is normally derived from the physical properties of the element under the specific measure rules given by a method of measurement. +/// +/// EXAMPLE  The amount of reinforcement used within a building element may be measured according to its weight. The actual size of the weight depends on the method of measurement used. +/// +/// HISTORY  New entity in IFC2x. It replaces the calcXxx attributes used in previous IFC Releases. +class IFC_PARSE_API IfcQuantityWeight : public IfcPhysicalSimpleQuantity { +public: + /// Mass measure value of this quantity. + double WeightValue() const; + void setWeightValue(double v); + /// A formula by which the quantity has been calculated. It can be assigned in addition to the actual value of the quantity. Formulas could be mathematic calculations (like width x height), database links, or a combination. The formula is for informational purposes only. + /// + /// IFC2x4 CHANGE Attribute added to the end of the attribute list. + boost::optional< std::string > Formula() const; + void setFormula(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcQuantityWeight (IfcEntityInstanceData* e); + IfcQuantityWeight (std::string v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcNamedUnit* v3_Unit, double v4_WeightValue, boost::optional< std::string > v5_Formula); + typedef aggregate_of< IfcQuantityWeight > list; +}; +/// IfcRecurrencePattern defines repetitive time periods on the basis of regular recurrences such as each Monday in a week, or every third Tuesday in a month. The population of the remaining attributes such as DayComponent, Position, and Interval depend on the specified recurrence type. +/// +/// HISTORY: New entity in IFC2x4. +/// +/// Use definitions +/// IfcRecurrencePattern supports various recurrence patterns that are differentiated by a type definition (IfcRecurrencePattern.RecurrenceType), which is required to provide the meaning of the given values. It can be further constrained by applicable times through specified IfcTimePeriod instances, thus enabling time periods such as between 7:00 and 12:00 and between 13:00 and 17:00 for each of the applicable days, weeks or months. +class IFC_PARSE_API IfcRecurrencePattern : public IfcUtil::IfcBaseEntity { +public: + /// Defines the recurrence type that gives meaning to the used + /// attributes and decides about possible attribute + /// combinations, i.e. what attributes are needed to fully + /// describe the pattern type. + ::Ifc4x3_add2::IfcRecurrenceTypeEnum::Value RecurrenceType() const; + void setRecurrenceType(::Ifc4x3_add2::IfcRecurrenceTypeEnum::Value v); + /// The position of the specified day in a month. + boost::optional< std::vector< int > /*[1:?]*/ > DayComponent() const; + void setDayComponent(boost::optional< std::vector< int > /*[1:?]*/ > v); + /// The weekday name of the specified day in a week. + boost::optional< std::vector< int > /*[1:?]*/ > WeekdayComponent() const; + void setWeekdayComponent(boost::optional< std::vector< int > /*[1:?]*/ > v); + /// The position of the specified month in a year. + boost::optional< std::vector< int > /*[1:?]*/ > MonthComponent() const; + void setMonthComponent(boost::optional< std::vector< int > /*[1:?]*/ > v); + /// The position of the specified component, e.g. the 3rd + /// (position=3) Tuesday (weekday component) in a month. A + /// negative position value is used to define the last position + /// of the component (-1), the next to last position (-2) etc. + boost::optional< int > Position() const; + void setPosition(boost::optional< int > v); + /// An interval can be given according to the pattern type. An + /// interval value of 2 can for instance every two days, weeks, + /// months, years. An empty interval value is regarded as 1. The + /// used interval values should be in a reasonable range, e.g. + /// not 0 or <0. + boost::optional< int > Interval() const; + void setInterval(boost::optional< int > v); + /// Defines the number of occurrences of this pattern, e.g. a weekly + /// event might be defined to occur 5 times before it stops. + boost::optional< int > Occurrences() const; + void setOccurrences(boost::optional< int > v); + /// List of time periods that are defined by a start and end time + /// of the recurring element (day). The order of the list should + /// reflect the sequence of the time periods. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcTimePeriod >::ptr > TimePeriods() const; + void setTimePeriods(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcTimePeriod >::ptr > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRecurrencePattern (IfcEntityInstanceData* e); + IfcRecurrencePattern (::Ifc4x3_add2::IfcRecurrenceTypeEnum::Value v1_RecurrenceType, boost::optional< std::vector< int > /*[1:?]*/ > v2_DayComponent, boost::optional< std::vector< int > /*[1:?]*/ > v3_WeekdayComponent, boost::optional< std::vector< int > /*[1:?]*/ > v4_MonthComponent, boost::optional< int > v5_Position, boost::optional< int > v6_Interval, boost::optional< int > v7_Occurrences, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcTimePeriod >::ptr > v8_TimePeriods); + typedef aggregate_of< IfcRecurrencePattern > list; +}; + +class IFC_PARSE_API IfcReference : public IfcUtil::IfcBaseEntity, public IfcAppliedValueSelect, public IfcMetricValueSelect { +public: + boost::optional< std::string > TypeIdentifier() const; + void setTypeIdentifier(boost::optional< std::string > v); + boost::optional< std::string > AttributeIdentifier() const; + void setAttributeIdentifier(boost::optional< std::string > v); + boost::optional< std::string > InstanceName() const; + void setInstanceName(boost::optional< std::string > v); + boost::optional< std::vector< int > /*[1:?]*/ > ListPositions() const; + void setListPositions(boost::optional< std::vector< int > /*[1:?]*/ > v); + ::Ifc4x3_add2::IfcReference* InnerReference() const; + void setInnerReference(::Ifc4x3_add2::IfcReference* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcReference (IfcEntityInstanceData* e); + IfcReference (boost::optional< std::string > v1_TypeIdentifier, boost::optional< std::string > v2_AttributeIdentifier, boost::optional< std::string > v3_InstanceName, boost::optional< std::vector< int > /*[1:?]*/ > v4_ListPositions, ::Ifc4x3_add2::IfcReference* v5_InnerReference); + typedef aggregate_of< IfcReference > list; +}; +/// Definition from ISO/CD 10303-43:1992: A +/// representation is one or more representation items that are +/// related in a specified representation context as the +/// representation of some concept. +/// +/// IfcRepresentation +/// defines the general concept of representing product +/// properties. +/// +/// Representation Use Definition +/// +/// Each representation, either IfcShapeRepresentation, or +/// IfcTopologyRepresentation shall have a well defined: +/// +/// ContextOfItems: Reference to an +/// IfcGeometricRepresentationContext as agreed for +/// this representation. +/// +/// RepresentationIdentifier: Name of the +/// representation, for example, 'Body' for 3D shape, 'FootPrint' for +/// 2D ground view, 'Axis' for reference axis. +/// +/// RepresentationType: Name for the geometric, or +/// topological representation type, for example, 'SweptSolid' for 3D +/// swept solids, 'Brep' for boundary representation. +/// +/// Values and guidelines for these three items are provided in +/// the geometry use definition section at each subtype of +/// IfcElement, or in view definitions / implementer +/// agreements. +/// +/// NOTE The definition of this +/// entity relates to the ISO 10303 entity representation. Please +/// refer to ISO/IS 10303-43:1994 for the final definition of +/// the formal standard. +/// +/// HISTORY  New entity in IFC Release 2.0 +/// +/// IFC2x3 CHANGE  The +/// inverse attributes LayerAssignments +/// andRepresentationMap have been added with upward +/// compatibility. +/// +/// IFC2x4 CHANGE  Entity +/// IfcRepresentation has been changed into an ABSTRACT +/// supertype. +class IFC_PARSE_API IfcRepresentation : public IfcUtil::IfcBaseEntity, public IfcLayeredItem { +public: + /// Definition of the representation context for which the different subtypes of representation are valid. + ::Ifc4x3_add2::IfcRepresentationContext* ContextOfItems() const; + void setContextOfItems(::Ifc4x3_add2::IfcRepresentationContext* v); + /// The optional identifier of the representation as used within a project. + boost::optional< std::string > RepresentationIdentifier() const; + void setRepresentationIdentifier(boost::optional< std::string > v); + /// The description of the type of a representation context. The representation type defines the type of geometry or topology used for representing the product representation. More information is given at the subtypes IfcShapeRepresentation and IfcTopologyRepresentation. + /// The supported values for context type are to be specified by implementers agreements. + boost::optional< std::string > RepresentationType() const; + void setRepresentationType(boost::optional< std::string > v); + /// Set of geometric representation items that are defined for this representation. + aggregate_of< ::Ifc4x3_add2::IfcRepresentationItem >::ptr Items() const; + void setItems(aggregate_of< ::Ifc4x3_add2::IfcRepresentationItem >::ptr v); + aggregate_of< IfcRepresentationMap >::ptr RepresentationMap() const; // INVERSE IfcRepresentationMap::MappedRepresentation + aggregate_of< IfcPresentationLayerAssignment >::ptr LayerAssignments() const; // INVERSE IfcPresentationLayerAssignment::AssignedItems + aggregate_of< IfcProductRepresentation >::ptr OfProductRepresentation() const; // INVERSE IfcProductRepresentation::Representations + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRepresentation (IfcEntityInstanceData* e); + IfcRepresentation (::Ifc4x3_add2::IfcRepresentationContext* v1_ContextOfItems, boost::optional< std::string > v2_RepresentationIdentifier, boost::optional< std::string > v3_RepresentationType, aggregate_of< ::Ifc4x3_add2::IfcRepresentationItem >::ptr v4_Items); + typedef aggregate_of< IfcRepresentation > list; +}; +/// Definition from ISO/CD 10303-42:1992: A representation context is a context in which a set of representation items are related. +/// +/// The IfcRepresentationContext defines the context to which the IfcRepresentation of a product is related. +/// +/// NOTE  The definition of this class relates to the ISO 10303 entity representation_context. Please refer to ISO/IS 10303-43:1994 for the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC Release 1.5. +/// +/// IFC2x4 CHANGE Entity made abstract, had been deprecated from instantiation since +/// IFC2x2. +class IFC_PARSE_API IfcRepresentationContext : public IfcUtil::IfcBaseEntity { +public: + /// The optional identifier of the representation context as used within a project. + boost::optional< std::string > ContextIdentifier() const; + void setContextIdentifier(boost::optional< std::string > v); + /// The description of the type of a representation context. The supported values for context type are to be specified by implementers agreements. + boost::optional< std::string > ContextType() const; + void setContextType(boost::optional< std::string > v); + aggregate_of< IfcRepresentation >::ptr RepresentationsInContext() const; // INVERSE IfcRepresentation::ContextOfItems + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRepresentationContext (IfcEntityInstanceData* e); + IfcRepresentationContext (boost::optional< std::string > v1_ContextIdentifier, boost::optional< std::string > v2_ContextType); + typedef aggregate_of< IfcRepresentationContext > list; +}; +/// Definition from ISO/CD +/// 10303-43:1992: A representation item is an element of +/// product data that participates in one or more representations or +/// contributes to the definition of another representation item. A +/// representation item contributes to the definition of another +/// representation item when it is referenced by that representation +/// item. +/// +/// NOTE  Corresponding entity in ISO 10303-43:1994: representation_item. Please refer to ISO/IS 10303-43:1994, for the final definition of the formal standard. The following changes have been made: The attribute 'name' and the WR1 have not been incorporated. +/// +/// The IfcRepresentationItem is used within an IfcRepresentation (directly or indirectly through other IfcRepresentationItem's) to represent an IfcProductRepresentation. Most commonly these IfcRepresentationItem's are geometric or topological representation items, that can (but not need to) have presentation style infomation assigned. +/// +/// NOTE  The assignment of a style is only applicable +/// to the subtypes IfcGeometricRepresentationItem, IfcMappedItem and some selected subtypes of IfcTopologicalRepresentationItem (IfcVertexPoint, IfcEdgeCurve, IfcFaceSurface). +/// +/// In case that presentation style information is applied, it can be either applied by an IfcStyledItem, or by an assignment to an IfcPresentationLayerWithStyle. If both are present, and both style assignments include the same subtype of IfcPresentationStyle, then the style assigned by IfcStyledItem takes priority. +/// +/// Figure 281 shows an instance diagram explaining the use of IfcStyledItem and IfcPresentationLayerWithStyle to apply presentation styles. +/// +/// EXAMPLE  The assignment of style information by a styled item and a presentation layer with style. Since the presentation styles are different, IfcCurveStyle and IfcSurfaceStyle, both are applied to the geometric representation item. +/// +/// Figure 281 — Representation item style +/// +/// Figure 282 shows in instance diagram explaining the override of IfcPresentationLayerWithStyle by IfcStyledItem to apply presentation styles. +/// +/// EXAMPLE  The assignment of style information by a styled item and a presentation layer with style. Since the presentation styles for curve style are aprovided by both, the IfcCurveStyle provided by the IfcStyledItem overrides the IfcCurveStyle provided by the IfcPresentationLayerWithStyle +/// +/// Figure 282 — Representation item style override +/// +/// HISTORY  New entity in IFC Release 2x. +/// +/// IFC2x3 CHANGE  The inverse attributes StyledByItem and LayerAssignments have been added. Upward compatibility for file based exchange is guaranteed. +class IFC_PARSE_API IfcRepresentationItem : public IfcUtil::IfcBaseEntity, public IfcLayeredItem { +public: + aggregate_of< IfcPresentationLayerAssignment >::ptr LayerAssignment() const; // INVERSE IfcPresentationLayerAssignment::AssignedItems + aggregate_of< IfcStyledItem >::ptr StyledByItem() const; // INVERSE IfcStyledItem::Item + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRepresentationItem (IfcEntityInstanceData* e); + IfcRepresentationItem (); + typedef aggregate_of< IfcRepresentationItem > list; +}; +/// Definition from ISO/CD 10303-43:1992: A representation map is the identification of a representation and a representation item in that representation for the purpose of mapping. The representation item defines the origin of the mapping. The representation map is used as the source of a mapping by a mapped item. +/// +/// NOTE  Corresponding ISO 10303 entity: representation_map. Please refer to ISO/IS 10303-43:1994, for the final definition of the formal standard. The following changes have been made: The mapping_origin (MappingOrigin) is constrained to be of type axis2_placement (IfcAxis2Placement). +/// +/// An IfcRepresentationMap defines the base definition (also referred to as block, cell or macro) called MappedRepresentation within the MappingOrigin. The MappingOrigin defines the coordinate system in which the MappedRepresentation is defined. +/// +/// The RepresentationMap is used through an IfcMappeditem in one or several IfcShapeRepresentation's. An Cartesian transformation operator can be applied to transform the MappedRepresentation into the placement coordinate system of the shape representation. The transformation of the representation map is restricted to be a Cartesian transformation mapping (translation, rotation, mirroring and scaling). +/// +/// NOTE  The definition of a mapping which is used to specify a new representation item comprises a representation map and a mapped item entity. Without both entities, the mapping is not fully defined. Two entities are specified to allow the same source representation to be mapped into multiple new representations. +/// +/// HISTORY  New entity in IFC Release 2x. +class IFC_PARSE_API IfcRepresentationMap : public IfcUtil::IfcBaseEntity, public IfcProductRepresentationSelect { +public: + /// An axis2 placement that defines the position about which the mapped + /// representation is mapped. + ::Ifc4x3_add2::IfcAxis2Placement* MappingOrigin() const; + void setMappingOrigin(::Ifc4x3_add2::IfcAxis2Placement* v); + /// A representation that is mapped to at least one mapped item. + ::Ifc4x3_add2::IfcRepresentation* MappedRepresentation() const; + void setMappedRepresentation(::Ifc4x3_add2::IfcRepresentation* v); + aggregate_of< IfcShapeAspect >::ptr HasShapeAspects() const; // INVERSE IfcShapeAspect::PartOfProductDefinitionShape + aggregate_of< IfcMappedItem >::ptr MapUsage() const; // INVERSE IfcMappedItem::MappingSource + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRepresentationMap (IfcEntityInstanceData* e); + IfcRepresentationMap (::Ifc4x3_add2::IfcAxis2Placement* v1_MappingOrigin, ::Ifc4x3_add2::IfcRepresentation* v2_MappedRepresentation); + typedef aggregate_of< IfcRepresentationMap > list; +}; +/// IfcResourceLevelRelationship is an abstract base class for relationships between resource-level entities. +/// +/// HISTORY New Entity in IFC 2x4 +class IFC_PARSE_API IfcResourceLevelRelationship : public IfcUtil::IfcBaseEntity { +public: + /// A name used to identify or qualify the relationship. + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + /// A description that may apply additional information about the relationship. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcResourceLevelRelationship (IfcEntityInstanceData* e); + IfcResourceLevelRelationship (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description); + typedef aggregate_of< IfcResourceLevelRelationship > list; +}; + +class IFC_PARSE_API IfcRigidOperation : public IfcCoordinateOperation { +public: + ::Ifc4x3_add2::IfcMeasureValue* FirstCoordinate() const; + void setFirstCoordinate(::Ifc4x3_add2::IfcMeasureValue* v); + ::Ifc4x3_add2::IfcMeasureValue* SecondCoordinate() const; + void setSecondCoordinate(::Ifc4x3_add2::IfcMeasureValue* v); + boost::optional< double > Height() const; + void setHeight(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRigidOperation (IfcEntityInstanceData* e); + IfcRigidOperation (::Ifc4x3_add2::IfcCoordinateReferenceSystemSelect* v1_SourceCRS, ::Ifc4x3_add2::IfcCoordinateReferenceSystem* v2_TargetCRS, ::Ifc4x3_add2::IfcMeasureValue* v3_FirstCoordinate, ::Ifc4x3_add2::IfcMeasureValue* v4_SecondCoordinate, boost::optional< double > v5_Height); + typedef aggregate_of< IfcRigidOperation > list; +}; +/// IfcRoot is the most abstract and root class for all IFC entity definitions that roots in the kernel or in subsequent layers of the IFC object model. It is therefore the common supertype of all IFC entities, beside those defined in an IFC resource schema. All entities that are subtypes of IfcRoot can be used independently, whereas resource schema entities, that are not subtypes of IfcRoot, are not supposed to be independent entities. +/// +/// IfcRoot assigns the globally unique ID, and the ownership and history information to the entity. In addition it may provide for a name and a description about the concept. +/// +/// NOTE View definitions and implementation agreement may impose additional restrictions on the use of the OwnerHistory to handle object versioning. +/// +/// HISTORY New entity in IFC Release 1.0 +/// +/// IFC2x4 CHANGE The attribute OwnerHistory has been made OPTIONAL. +class IFC_PARSE_API IfcRoot : public IfcUtil::IfcBaseEntity { +public: + /// Assignment of a globally unique identifier within the entire software world. + std::string GlobalId() const; + void setGlobalId(std::string v); + /// Assignment of the information about the current ownership of that object, including owning actor, application, local identification and information captured about the recent changes of the object, + /// + /// NOTE only the last modification in stored - either as addition, deletion or modification. + /// + /// IFC2x4 CHANGE  The attribute has been changed to be OPTIONAL. + ::Ifc4x3_add2::IfcOwnerHistory* OwnerHistory() const; + void setOwnerHistory(::Ifc4x3_add2::IfcOwnerHistory* v); + /// Optional name for use by the participating software systems or users. For some subtypes of IfcRoot the insertion of the Name attribute may be required. This would be enforced by a where rule. + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + /// Optional description, provided for exchanging informative comments. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRoot (IfcEntityInstanceData* e); + IfcRoot (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description); + typedef aggregate_of< IfcRoot > list; +}; +/// Definition from ISO/CD 10303-41:1992: An SI unit is the fixed quantity used as a standard in terms of which items are measured as defined by ISO 1000 (clause 2). +/// +/// IfcSIUnit covers both standard base SI units such as meter and second, and derived SI units such as Pascal, square meter and cubic meter. +/// +/// NOTE Corresponding ISO 10303 name: si_unit, please refer to ISO/IS 10303-41 for the final definition of the formal standard. +/// +/// HISTORY New entity in IFC Release 1.5.1. +class IFC_PARSE_API IfcSIUnit : public IfcNamedUnit { +public: + /// The SI Prefix for defining decimal multiples and submultiples of the unit. + boost::optional< ::Ifc4x3_add2::IfcSIPrefix::Value > Prefix() const; + void setPrefix(boost::optional< ::Ifc4x3_add2::IfcSIPrefix::Value > v); + /// The word, or group of words, by which the SI unit is referred to. + /// + /// NOTE  Even though the SI system's base unit for mass is kilogram, the IfcSIUnit for mass is gram if no Prefix is asserted. + ::Ifc4x3_add2::IfcSIUnitName::Value Name() const; + void setName(::Ifc4x3_add2::IfcSIUnitName::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSIUnit (IfcEntityInstanceData* e); + IfcSIUnit (::Ifc4x3_add2::IfcUnitEnum::Value v2_UnitType, boost::optional< ::Ifc4x3_add2::IfcSIPrefix::Value > v3_Prefix, ::Ifc4x3_add2::IfcSIUnitName::Value v4_Name); + typedef aggregate_of< IfcSIUnit > list; +}; +/// IfcSchedulingTime is the abstract supertype of entities that capture time-related information of processes. +/// +/// HISTORY: New entity in IFC2x4. +class IFC_PARSE_API IfcSchedulingTime : public IfcUtil::IfcBaseEntity { +public: + /// Optional name for the time definition. + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + /// Specifies the origin of the scheduling time entity. It currently + /// differentiates between predicted, simulated, measured, and user defined values. + boost::optional< ::Ifc4x3_add2::IfcDataOriginEnum::Value > DataOrigin() const; + void setDataOrigin(boost::optional< ::Ifc4x3_add2::IfcDataOriginEnum::Value > v); + /// Value of the data origin if DataOrigin attribute is USERDEFINED. + boost::optional< std::string > UserDefinedDataOrigin() const; + void setUserDefinedDataOrigin(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSchedulingTime (IfcEntityInstanceData* e); + IfcSchedulingTime (boost::optional< std::string > v1_Name, boost::optional< ::Ifc4x3_add2::IfcDataOriginEnum::Value > v2_DataOrigin, boost::optional< std::string > v3_UserDefinedDataOrigin); + typedef aggregate_of< IfcSchedulingTime > list; +}; +/// Definition from ISO/CD 10303-41:1992: The shape +/// aspect is an identifiable element of the shape of a +/// product. +/// +/// IfcShapeAspect +/// allows for grouping of shape representation items that +/// represent aspects (or components) of the shape of a +/// product. Thereby shape representations of components of the +/// product shape represent a distinctive part to a product +/// that can be explicitly addressed. +/// +/// NOTE The definition of +/// this class relates to the ISO 10303 entity shape_aspect. Please +/// refer to ISO/IS 10303-41:1994 for the final definition of +/// the formal standard. +/// +/// HISTORY  New Entity in IFC Release 2.0 +/// +/// IFC 2x4 CHANGE  Attribute +/// PartOfProductDefinitionShape declared OPTIONAL with +/// upward compatibility for file based exchange. +/// +/// Informal propositions: +/// +/// If ShapeRepresentations points to shape +/// representations that are part of an +/// IfcProductDefinitionShape, +/// PartOfProductDefinitionShape must refer to this +/// instance of IfcProductDefinitionShape. +/// +/// NOTE PartOfProductDefinitionShape is +/// only to be omitted if the shape representations are +/// attached to an IfcRepresentationMap. This +/// enables the use of IfcShapeAspect with +/// IfcRepresentationMap's that are used by an +/// IfcTypeProduct through the +/// RepresentationMaps attribute. +class IFC_PARSE_API IfcShapeAspect : public IfcUtil::IfcBaseEntity, public IfcResourceObjectSelect { +public: + /// List of shape representations. Each member defines a valid representation of a particular type within a particular representation context as being an aspect (or part) of a product definition. + /// IFC2x Edition 3 CHANGE  The data type has been changed from IfcShapeRepresentation to IfcShapeModel with upward compatibility + aggregate_of< ::Ifc4x3_add2::IfcShapeModel >::ptr ShapeRepresentations() const; + void setShapeRepresentations(aggregate_of< ::Ifc4x3_add2::IfcShapeModel >::ptr v); + /// The word or group of words by which the shape aspect is known. It is a tag to indicate the particular semantic of a component within the product definition shape, used to provide meaning. Example: use the tag "Glazing" to define which component of a window shape defines the glazing area. + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + /// The word or group of words that characterize the shape aspect. It can be used to add additional meaning to the name of the aspect. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + /// An indication that the shape aspect is on the physical boundary of the product definition shape. If the value of this attribute is TRUE, it shall be asserted that the shape aspect being identified is on such a boundary. If the value is FALSE, it shall be asserted that the shape aspect being identified is not on such a boundary. If the value is UNKNOWN, it shall be asserted that it is not known whether or not the shape aspect being identified is on such a boundary. + /// --- + /// EXAMPLE: Would be FALSE for a center line, identified as shape aspect; would be TRUE for a cantilever. + /// --- + boost::logic::tribool ProductDefinitional() const; + void setProductDefinitional(boost::logic::tribool v); + /// Reference to the product definition shape of which this class is an aspect. + ::Ifc4x3_add2::IfcProductRepresentationSelect* PartOfProductDefinitionShape() const; + void setPartOfProductDefinitionShape(::Ifc4x3_add2::IfcProductRepresentationSelect* v); + aggregate_of< IfcExternalReferenceRelationship >::ptr HasExternalReferences() const; // INVERSE IfcExternalReferenceRelationship::RelatedResourceObjects + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcShapeAspect (IfcEntityInstanceData* e); + IfcShapeAspect (aggregate_of< ::Ifc4x3_add2::IfcShapeModel >::ptr v1_ShapeRepresentations, boost::optional< std::string > v2_Name, boost::optional< std::string > v3_Description, boost::logic::tribool v4_ProductDefinitional, ::Ifc4x3_add2::IfcProductRepresentationSelect* v5_PartOfProductDefinitionShape); + typedef aggregate_of< IfcShapeAspect > list; +}; +/// IfcShapeModel represents +/// the concept of a particular geometric and/or topological +/// representation of a product's shape or a product component's shape +/// within a representation context. This representation context has to +/// be a geometric representation context (with the exception of +/// topology representations without associated geometry). The two +/// subtypes are IfcShapeRepresentation to cover geometric +/// models that represent a shape, and IfcTopologyRepresentation +/// to cover the conectivity of a product or product component. The +/// topology may or may not have geometry associated. +/// +/// The IfcShapeModel can be a shape representation +/// (geometric and/or topologogical) of a product (via +/// IfcProductDefinitionShape), or a shape representation +/// (geometric and/or topologogical)  of a component of a product +/// shape (via IfcShapeAspect). +/// +/// HISTORY  New entity in IFC2x3. +class IFC_PARSE_API IfcShapeModel : public IfcRepresentation { +public: + aggregate_of< IfcShapeAspect >::ptr OfShapeAspect() const; // INVERSE IfcShapeAspect::ShapeRepresentations + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcShapeModel (IfcEntityInstanceData* e); + IfcShapeModel (::Ifc4x3_add2::IfcRepresentationContext* v1_ContextOfItems, boost::optional< std::string > v2_RepresentationIdentifier, boost::optional< std::string > v3_RepresentationType, aggregate_of< ::Ifc4x3_add2::IfcRepresentationItem >::ptr v4_Items); + typedef aggregate_of< IfcShapeModel > list; +}; +/// The IfcShapeRepresentation represents the concept of a +/// particular geometric representation of a product or a product +/// component within a specific geometric representation context. The +/// inherited attribute RepresentationType is used to define +/// the geometric model used for the shape representation (for example, +/// 'SweptSolid', or 'Brep'), the inherited attribute +/// RepresentationIdentifier is used to denote the part of the +/// representation captured by the IfcShapeRepresentation +/// (for example, 'Axis', 'Body'). +/// +/// Several representation identifiers for shape representation are +/// included as predefined values for RepresentationIdentifier: +/// +/// Box +/// Bounding box as simplified 3D box +/// geometry of an element +/// +/// Annotation +/// 2D annotations not representing +/// elements +/// +/// Axis +/// 2D or 3D Axis, or single line, +/// representation of an element +/// +/// FootPrint +/// 2D Foot print, or double line, +/// representation of an element, projected to ground view +/// +/// Surface +/// 3D Surface representation, e.g. of an +/// analytical surface, of an elementplane) +/// +/// Body +/// 3D Body representation, e.g. as +/// wireframe, surface, or solid model, of an element +/// +/// Lighting +/// Representation of emitting light as a +/// light source within a shape representation +/// +/// Several representation types for shape representation are +/// included as predefined values for RepresentationType: +/// +/// Curve2D +/// 2 dimensional curve +/// +/// Curve3D +/// 3 dimensional curve +/// +/// Surface2D +/// 2 dimensional surface (a region on +/// ground view) +/// +/// Surface3D +/// 3 dimensional surface +/// +/// GeometricSet +/// points, curves, surfaces (2 or 3 +/// dimensional) +/// +/// GeometricCurveSet +/// points, curves (2 or 3 +/// dimensional) +/// +/// Annotation2D +/// points, curves (2 or 3 dimensional), hatches and text (2 +/// dimensional) +/// +/// SurfaceModel +/// face based and shell based surface +/// model +/// +/// SolidModel +/// including swept solid, Boolean +/// results and Brep bodies +/// more specific types are: +/// +/// SweptSolid +/// swept area solids, by extrusion and +/// revolution, excluding tapered sweeps +/// +/// AdvancedSweptSolid +/// swept area solids created by sweeping +/// a profile along a directrix, and tapered sweeps +/// +/// Brep +/// faceted Brep's with and without +/// voids +/// +/// AdvancedBrep +/// Brep's based on advanced faces, with +/// b-spline surface geometry, with and without voids +/// +/// CSG +/// Boolean results of operations between +/// solid models, half spaces and Boolean results +/// +/// Clipping +/// Boolean differences between swept +/// area solids, half spaces and Boolean results +/// +/// additional types +/// +/// some additional representation types are provided: +/// +/// BoundingBox +/// simplistic 3D representation by a +/// bounding box +/// +/// SectionedSpine +/// cross section based representation of +/// a spine curve and planar cross sections. It can represent a surface +/// or a solid and the interpolations of the between the cross sections +/// is not defined +/// +/// LightSource +/// light source with (depending on type) +/// position, orientation, light colour, intensity and attenuation +/// +/// MappedRepresentation +/// representation based on mapped +/// item(s), referring to a representation map. Note: it can be seen as +/// an inserted block reference. The shape representation of the mapped +/// item has a representation type declaring the type of its +/// representation items. +/// +/// Table 1: string values for the inherited attribute +/// 'RepresentationType'. +/// +/// NOTE  The definition of this entity relates to the ISO 10303 entity shape_representation. Please refer to ISO/IS 10303-41:1994 for the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC Release 1.5. +/// +/// IFC2x4 CHANGE  The RepresentationType's 'Curve3D', 'Surface2D', 'Surface3D', 'AdvancedBrep', 'LightSource', and the RepresentationIdentifier 'Lighting' have been added. +class IFC_PARSE_API IfcShapeRepresentation : public IfcShapeModel { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcShapeRepresentation (IfcEntityInstanceData* e); + IfcShapeRepresentation (::Ifc4x3_add2::IfcRepresentationContext* v1_ContextOfItems, boost::optional< std::string > v2_RepresentationIdentifier, boost::optional< std::string > v3_RepresentationType, aggregate_of< ::Ifc4x3_add2::IfcRepresentationItem >::ptr v4_Items); + typedef aggregate_of< IfcShapeRepresentation > list; +}; +/// Definition from IAI: Describe more rarely needed connection properties. +/// +/// HISTORY: New entity in IFC 2x2. +class IFC_PARSE_API IfcStructuralConnectionCondition : public IfcUtil::IfcBaseEntity { +public: + /// Optionally defines a name for this connection condition. + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralConnectionCondition (IfcEntityInstanceData* e); + IfcStructuralConnectionCondition (boost::optional< std::string > v1_Name); + typedef aggregate_of< IfcStructuralConnectionCondition > list; +}; +/// Definition from IAI: The abstract entity IfcStructuralLoadOrResult is the supertype of all loads (actions or reactions) or of certain requirements resulting from structural analysis, or certain provisions which influence structural analysis. +/// +/// HISTORY: New entity in IFC 2x2. +class IFC_PARSE_API IfcStructuralLoad : public IfcUtil::IfcBaseEntity { +public: + /// Optionally defines a name for this load. + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralLoad (IfcEntityInstanceData* e); + IfcStructuralLoad (boost::optional< std::string > v1_Name); + typedef aggregate_of< IfcStructuralLoad > list; +}; +/// Definition from IAI: This class combines one or more load or result values in a 1- or 2-dimensional configuration. +/// +/// HISTORY: New entity in IFC 2x4. +/// +/// Informal propositions: +/// +/// All items in Values shall be of the same type. +/// If the loads or results comprise a curve activity, 1-dimensional locations shall be given, measured locally along the curve. The location shall not exceed the bounds of the curve actvity. The load samples and corresponding locations shall be given in ascending order of locations. +/// If the loads or results comprise a surface activity, 2-dimensional locations shall be given, measured in the surface activity's local x and y directions. The location shall not exceed the bounds of the surface activity. +/// +/// NOTE  There are no ordering requirements in the 2-dimensional case, but the 1-dimensional case shall be spatially ordered for simplicity. +class IFC_PARSE_API IfcStructuralLoadConfiguration : public IfcStructuralLoad { +public: + /// List of load or result values. + aggregate_of< ::Ifc4x3_add2::IfcStructuralLoadOrResult >::ptr Values() const; + void setValues(aggregate_of< ::Ifc4x3_add2::IfcStructuralLoadOrResult >::ptr v); + /// Locations of the load samples or result samples, given within the local coordinate system defined by the instance which uses this resource object. Each item in the list of locations pertains to the values list item at the same list index. This attribute is optional for configurations in which the locations are implicitly known from higher-level definitions. + boost::optional< std::vector< std::vector< double > > > Locations() const; + void setLocations(boost::optional< std::vector< std::vector< double > > > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralLoadConfiguration (IfcEntityInstanceData* e); + IfcStructuralLoadConfiguration (boost::optional< std::string > v1_Name, aggregate_of< ::Ifc4x3_add2::IfcStructuralLoadOrResult >::ptr v2_Values, boost::optional< std::vector< std::vector< double > > > v3_Locations); + typedef aggregate_of< IfcStructuralLoadConfiguration > list; +}; +/// Definition from IAI: Abstract superclass of simple load or result classes. +/// +/// HISTORY: New abstract superclass in IFC 2x4, upwards compatibility of all subtypes is preserved. +class IFC_PARSE_API IfcStructuralLoadOrResult : public IfcStructuralLoad { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralLoadOrResult (IfcEntityInstanceData* e); + IfcStructuralLoadOrResult (boost::optional< std::string > v1_Name); + typedef aggregate_of< IfcStructuralLoadOrResult > list; +}; +/// Definition from IAI: The abstract entity IfcStructuralLoadStatic is the supertype of all static loads (actions or reactions) which can be defined. Within scope are single i.e. concentrated forces and moments, linear i.e. one-dimensionally distributed forces and moments, planar i.e. two-dimensionally distributed forces, furthermore displacements and temperature loads. +/// +/// HISTORY: New entity in IFC 2x2. +class IFC_PARSE_API IfcStructuralLoadStatic : public IfcStructuralLoadOrResult { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralLoadStatic (IfcEntityInstanceData* e); + IfcStructuralLoadStatic (boost::optional< std::string > v1_Name); + typedef aggregate_of< IfcStructuralLoadStatic > list; +}; +/// An instance of the entity IfcStructuralLoadTemperature shall be used to define actions which are caused by a temperature change. As shown in Figure 332, the change of temperature is given with a constant value which is applied to the complete section and values for temperature differences between outer fibres of the section. +/// +/// HISTORY  New entity in IFC2x2. +/// +/// Figure 332 — Structural load temperature +class IFC_PARSE_API IfcStructuralLoadTemperature : public IfcStructuralLoadStatic { +public: + /// Temperature change which affects the complete section of the structural member, or the uniform portion of a non-uniform temperature change. + /// + /// A positive value describes an increase in temperature. I.e. a positive constant temperature change causes elongation of a member, or compression in the member if there are respective restraints. + boost::optional< double > DeltaTConstant() const; + void setDeltaTConstant(boost::optional< double > v); + /// Non-uniform temperature change, specified as the difference of the temperature change at the outer fibre of the positive y direction minus the temperature change at the outer fibre of the negative y direction of the analysis member. + /// + /// I.e. a positive non-uniform temperature change in y induces a negative curvature of the member about z, or a positive bending moment about z if there are respective restraints. y and z are local member axes. + boost::optional< double > DeltaTY() const; + void setDeltaTY(boost::optional< double > v); + /// Non-uniform temperature change, specified as the difference of the temperature change at the outer fibre of the positive z direction minus the temperature change at the outer fibre of the negative z direction of the analysis member. + /// + /// I.e. a positive non-uniform temperature change in z induces a positive curvature of the member about y, or a negative bending moment about y if there are respective restraints. y and z are local member axes. + boost::optional< double > DeltaTZ() const; + void setDeltaTZ(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralLoadTemperature (IfcEntityInstanceData* e); + IfcStructuralLoadTemperature (boost::optional< std::string > v1_Name, boost::optional< double > v2_DeltaTConstant, boost::optional< double > v3_DeltaTY, boost::optional< double > v4_DeltaTZ); + typedef aggregate_of< IfcStructuralLoadTemperature > list; +}; +/// IfcStyleModel represents the concept of a particular presentation style defined for a material (or other characteristic) of a product or a product component within a representation context. This representation context may (but has not to be) a geometric representation context. +/// +/// IfcStyleModel can be a style representation (presentation style) of a material (via IfcMaterialDefinitionRepresentation), potentially differentiated for different representation contexts (for example, different material hatching depending on the scale of the target representation context). +/// +/// HISTORY  New entity in IFC2x3. +class IFC_PARSE_API IfcStyleModel : public IfcRepresentation { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStyleModel (IfcEntityInstanceData* e); + IfcStyleModel (::Ifc4x3_add2::IfcRepresentationContext* v1_ContextOfItems, boost::optional< std::string > v2_RepresentationIdentifier, boost::optional< std::string > v3_RepresentationType, aggregate_of< ::Ifc4x3_add2::IfcRepresentationItem >::ptr v4_Items); + typedef aggregate_of< IfcStyleModel > list; +}; +/// Definition from ISO/CD 10303-46:1992: The styled item is an assignment of style for presentation to a geometric representation item as it is used in a representation. +/// +/// NOTE  Corresponding ISO 10303 name: styled_item. Please refer to ISO/IS 10303-46:1994 for the final definition of the formal standard. +/// +/// The IfcStyledItem holds presentation style information for products, either explicitly for an IfcGeometricRepresentationItem being part of an IfcShapeRepresentation assigned to a product, or by assigning presentation information to IfcMaterial being assigned as other representation for a product. +/// +/// If the IfcStyledItem is used within a reference from an IfcProductDefinitionShape then one Item shall be provided. +/// If the IfcStyledItem is used within a reference from an IfcMaterialDefinitionRepresentation then no Item shall be provided. +/// +/// HISTORY  New entity in IFC2x2. +/// +/// IFC2x2 Addendum 1 CHANGE  The entity IfcStyledItem has been made non abstract and the attribute Name added. +/// +/// IFC2x3 CHANGE The attribute Item has been made optional, upward compatibility for file +/// based exchange is guaranteed. +/// +/// IFC2x4 CHANGE The subtype IfcAnnotationOccurrence and its subtypes are deleted. Use IfcStyledItem for all instantiations. The data type of Styles has been changed to IfcStyleAssignmentSelect +/// +/// Use Definition +/// +/// Figure 293 illustrates use of IfcStyledItem for the two usage examples: +/// +/// As a presentation for a geometric representation item +/// As a presentation for a material definition +/// +/// NOTE  The new IfcStyleAssignmentSelect allows the direct assignment styles, such as IfcCurveStyle, IfcSurfaceStyle without using the intermediate IfcPresentationStyleAssignment +/// +/// Figure 293 — Styled item +class IFC_PARSE_API IfcStyledItem : public IfcRepresentationItem { +public: + /// A geometric representation item to which the style is assigned. + /// + /// IFC2x Edition 2 Addendum 2 CHANGE The attribute Item has been made optional. Upward compatibility for file based exchange is guaranteed. + ::Ifc4x3_add2::IfcRepresentationItem* Item() const; + void setItem(::Ifc4x3_add2::IfcRepresentationItem* v); + /// Representation styles which are assigned, either to an geometric representation item, or to a material definition. + /// + /// IFC2x4 CHANGE The data type has been changed to IfcStyleAssignmentSelect with upward compatibility + /// for file based exchange. + /// + /// NOTE Only the select item IfcPresentationStyle shall be used from IFC2x4 onwards, the IfcPresentationStyleAssignment has been deprecated. + aggregate_of< ::Ifc4x3_add2::IfcPresentationStyle >::ptr Styles() const; + void setStyles(aggregate_of< ::Ifc4x3_add2::IfcPresentationStyle >::ptr v); + /// The word, or group of words, by which the styled item is referred to. + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStyledItem (IfcEntityInstanceData* e); + IfcStyledItem (::Ifc4x3_add2::IfcRepresentationItem* v1_Item, aggregate_of< ::Ifc4x3_add2::IfcPresentationStyle >::ptr v2_Styles, boost::optional< std::string > v3_Name); + typedef aggregate_of< IfcStyledItem > list; +}; +/// The IfcStyledRepresentation represents the concept of a styled presentation being a representation of a product or a product component, like material. within a representation context. This representation context does not need to be (but may be) a geometric representation context. +/// +/// NOTE  Current usage of IfcStyledRepresentation is restricted to the assignment of presentation information to an material. The IfcStyledRepresentation includes only presentation styles (IfcCurveStyle, FillAreaStyle, IfcSurfaceStyle) that define how a material should be presented within a particular (eventually view and scale dependent) representation context. All instances of IfcStyledRepresentation are referenced by IfcMaterialDefinitionRepresentation, and assigned to IfcMaterial by IfcMaterialDefinitionRepresentation.RepresentedMaterial. +/// +/// A styled representation has to include one or several styled items with the associated style information (curve, symbol, text, fill area, or surface styles). It shall not contain the geometric representation items that are styled. +/// +/// HISTORY  New entity in IFC2x2. +class IFC_PARSE_API IfcStyledRepresentation : public IfcStyleModel { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStyledRepresentation (IfcEntityInstanceData* e); + IfcStyledRepresentation (::Ifc4x3_add2::IfcRepresentationContext* v1_ContextOfItems, boost::optional< std::string > v2_RepresentationIdentifier, boost::optional< std::string > v3_RepresentationType, aggregate_of< ::Ifc4x3_add2::IfcRepresentationItem >::ptr v4_Items); + typedef aggregate_of< IfcStyledRepresentation > list; +}; +/// Definition from IAI: Describes required or provided reinforcement area of surface members. +/// +/// NOTE  Member design parameters like concrete cover, effective depth, orientation of meshes or rebars (two, optionally three directions) etc. are not specified in IfcStructuralLoadResource schema. They shall be specified at the level of structural members. +/// +/// HISTORY: New entity in IFC 2x4. +class IFC_PARSE_API IfcSurfaceReinforcementArea : public IfcStructuralLoadOrResult { +public: + /// Reinforcement at the face of the member which is located at the side of the positive local z direction of the surface member. Specified as area per length, e.g. square metre per metre (hence length measure, e.g. metre). The reinforcement area may be specified for two or three directions of reinforcement bars. + boost::optional< std::vector< double > /*[2:3]*/ > SurfaceReinforcement1() const; + void setSurfaceReinforcement1(boost::optional< std::vector< double > /*[2:3]*/ > v); + /// Reinforcement at the face of the member which is located at the side of the negative local z direction of the surface member. Specified as area per length, e.g. square metre per metre (hence length measure, e.g. metre). The reinforcement area may be specified for two or three directions of reinforcement bars. + boost::optional< std::vector< double > /*[2:3]*/ > SurfaceReinforcement2() const; + void setSurfaceReinforcement2(boost::optional< std::vector< double > /*[2:3]*/ > v); + /// Shear reinforcement. Specified as area per area, e.g. square metre per square metre (hence ratio measure, i.e. unitless). + boost::optional< double > ShearReinforcement() const; + void setShearReinforcement(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSurfaceReinforcementArea (IfcEntityInstanceData* e); + IfcSurfaceReinforcementArea (boost::optional< std::string > v1_Name, boost::optional< std::vector< double > /*[2:3]*/ > v2_SurfaceReinforcement1, boost::optional< std::vector< double > /*[2:3]*/ > v3_SurfaceReinforcement2, boost::optional< double > v4_ShearReinforcement); + typedef aggregate_of< IfcSurfaceReinforcementArea > list; +}; +/// IfcSurfaceStyle is an assignment of one or many surface style elements to a surface, defined by subtypes of IfcSurface, IfcFaceBasedSurfaceModel, IfcShellBasedSurfaceModel, or by subtypes of IfcSolidModel. The positive direction of the surface normal relates to the positive side. In case of solids the outside of the solid is to be taken as positive side. +/// +/// NOTE: The surface style is often referred to as material definition in rendering applications. +/// +/// NOTE Corresponding ISO 10303 entity: surface_style_usage and surface_side_style. Please refer to ISO/IS 10303-46:1994 for the final definition of the formal standard. The surface style definition in regard to support of rendering has been greatly expanded beyond the scope of ISO/IS 10303-46. +/// +/// HISTORY New Entity in IFC 2.x. +class IFC_PARSE_API IfcSurfaceStyle : public IfcPresentationStyle { +public: + /// An indication of which side of the surface to apply the style. + ::Ifc4x3_add2::IfcSurfaceSide::Value Side() const; + void setSide(::Ifc4x3_add2::IfcSurfaceSide::Value v); + /// A collection of different surface styles. + aggregate_of< ::Ifc4x3_add2::IfcSurfaceStyleElementSelect >::ptr Styles() const; + void setStyles(aggregate_of< ::Ifc4x3_add2::IfcSurfaceStyleElementSelect >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSurfaceStyle (IfcEntityInstanceData* e); + IfcSurfaceStyle (boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcSurfaceSide::Value v2_Side, aggregate_of< ::Ifc4x3_add2::IfcSurfaceStyleElementSelect >::ptr v3_Styles); + typedef aggregate_of< IfcSurfaceStyle > list; +}; +/// IfcSurfaceStyleLighting is a container class for properties for calculation of physically exact illuminance related to a particular surface style. +/// +/// Figure 294 shows the reflection and transmission components from an incident ray. The sum of the components for reflection and transmission is a value of 1.0 denoting that the incident ray is completely decomposed into reflection and transmission components. Each value of reflection and transmission is therefore within the range 0.0 to 1.0. +/// +/// Figure 294 — Surface style lighting +/// +/// All these factors can be measured physically and are ratios for the red, green and blue part of the light. These properties are defined in the model as Type IfcColorRGB with a factor for each colour. +/// +/// EXAMPLE  A green glass transmits only green light, so its transmission factor is 0.0 for red, between 0.0 and 1.0 for green and 0.0 for blue. A green surface reflects only green light, so the reflectance factor is 0.0 for red, between 0.0 and 1.0 for green and 0.0 for blue. +/// +/// HISTORY  New entity in IFC 2x2. +class IFC_PARSE_API IfcSurfaceStyleLighting : public IfcPresentationItem, public IfcSurfaceStyleElementSelect { +public: + /// The degree of diffusion of the transmitted light. In the case of completely transparent materials there is no diffusion. The greater the diffusing power, the smaller the direct component of the transmitted light, up to the point where only diffuse light is produced.A value of 1 means totally diffuse for that colour part of the light. + /// The factor can be measured physically and has three ratios for the red, green and blue part of the light. + ::Ifc4x3_add2::IfcColourRgb* DiffuseTransmissionColour() const; + void setDiffuseTransmissionColour(::Ifc4x3_add2::IfcColourRgb* v); + /// The degree of diffusion of the reflected light. In the case of specular surfaces there is no diffusion. The greater the diffusing power of the reflecting surface, the smaller the specular component of the reflected light, up to the point where only diffuse light is produced. A value of 1 means totally diffuse for that colour part of the light. + /// The factor can be measured physically and has three ratios for the red, green and blue part of the light. + ::Ifc4x3_add2::IfcColourRgb* DiffuseReflectionColour() const; + void setDiffuseReflectionColour(::Ifc4x3_add2::IfcColourRgb* v); + /// Describes how the light falling on a body is totally or partially transmitted. + /// The factor can be measured physically and has three ratios for the red, green and blue part of the light. + ::Ifc4x3_add2::IfcColourRgb* TransmissionColour() const; + void setTransmissionColour(::Ifc4x3_add2::IfcColourRgb* v); + /// A coefficient that determines the extent that the light falling onto a surface is fully or partially reflected. + /// The factor can be measured physically and has three ratios for the red, green and blue part of the light. + ::Ifc4x3_add2::IfcColourRgb* ReflectanceColour() const; + void setReflectanceColour(::Ifc4x3_add2::IfcColourRgb* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSurfaceStyleLighting (IfcEntityInstanceData* e); + IfcSurfaceStyleLighting (::Ifc4x3_add2::IfcColourRgb* v1_DiffuseTransmissionColour, ::Ifc4x3_add2::IfcColourRgb* v2_DiffuseReflectionColour, ::Ifc4x3_add2::IfcColourRgb* v3_TransmissionColour, ::Ifc4x3_add2::IfcColourRgb* v4_ReflectanceColour); + typedef aggregate_of< IfcSurfaceStyleLighting > list; +}; +/// IfcSurfaceStyleRefraction extends the surface style lighting, or the surface style rendering definition for properties for calculation of physically exact illuminance by adding seldomly used properties. Currently this includes the refraction index (by which the light ray refracts when passing through a prism) and the dispersion factor (or Abbe constant) which takes into account the wavelength dependency of the refraction. +/// +/// NOTE: If such refraction properties are used, the IfcSurfaceStyle should include within its set of Styles (depending on whether rendering or lighting is used) an instance of IfcSurfaceStyleLighting and IfcSurfaceStyleRefraction, or an instance of IfcSurfaceStyleRendering and IfcSurfaceStyleRefraction. +/// +/// HISTORY: New entity in IFC 2x2. +class IFC_PARSE_API IfcSurfaceStyleRefraction : public IfcPresentationItem, public IfcSurfaceStyleElementSelect { +public: + /// The index of refraction for all wave lengths of light. The refraction index is the ratio between the speed of light in a vacuum and the speed of light in the medium. E.g. glass has a refraction index of 1.5, whereas water has an index of 1.33 + boost::optional< double > RefractionIndex() const; + void setRefractionIndex(boost::optional< double > v); + /// The Abbe constant given as a fixed ratio between the refractive indices of the material at different wavelengths. A low Abbe number means a high dispersive power. In general this translates to a greater angular spread of the emergent spectrum. + boost::optional< double > DispersionFactor() const; + void setDispersionFactor(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSurfaceStyleRefraction (IfcEntityInstanceData* e); + IfcSurfaceStyleRefraction (boost::optional< double > v1_RefractionIndex, boost::optional< double > v2_DispersionFactor); + typedef aggregate_of< IfcSurfaceStyleRefraction > list; +}; +/// Definition from ISO/CD 10303-46:1992: The surface style rendering allows the realistic visualization of surfaces referring to rendering techniques based on the laws of physics and mathematics. +/// +/// The entity IfcSurfaceStyleShading allows for colour information used for shading, whereas subtypes provide data for more sophisticated rendering techniques. The surface colour is used for colouring or simple shading of the assigned surfaces. +/// +/// NOTE Corresponding ISO 10303 entity: surface_style_rendering. Please refer to ISO/IS 10303-46:1994 for the final definition of the formal standard. No rendering method is defined for each surface style (such as constant, colour, dot or normal shading), therefore the attribute rendering_method has been omitted. +/// +/// HISTORY: New entity in IFC 2x. +class IFC_PARSE_API IfcSurfaceStyleShading : public IfcPresentationItem, public IfcSurfaceStyleElementSelect { +public: + /// The colour used to render the surface. The surface colour for visualisation is defined by specifying the intensity of red, green and blue. + ::Ifc4x3_add2::IfcColourRgb* SurfaceColour() const; + void setSurfaceColour(::Ifc4x3_add2::IfcColourRgb* v); + boost::optional< double > Transparency() const; + void setTransparency(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSurfaceStyleShading (IfcEntityInstanceData* e); + IfcSurfaceStyleShading (::Ifc4x3_add2::IfcColourRgb* v1_SurfaceColour, boost::optional< double > v2_Transparency); + typedef aggregate_of< IfcSurfaceStyleShading > list; +}; +/// The entity IfcSurfaceStyleWithTextures allows to include image textures in surface styles. These image textures can be applied repeating across the surface or mapped with a particular scale upon the surface. +/// +/// The entity IfcSurfaceStyleWithTextures is part of the surface style table for presentation information assigned to surfaces for shading, rendering and lighting with textures. The mapping of the texture onto the surface or the solid is determined by the texture coordinates, in absense of an IfcTextureCoordinate assigned to each surface texture, a default mapping of the texture to the geometric face or surface applies. +/// +/// Surface textures included in the IfcSurfaceStyleWithTextures are two dimensional map formats. They define 2D images that contain an array of colour values describing the texture. Depending on the number of IfcSurfaceTextures being included in the list of Textures the IfcSurfaceStyleWithTextures either describes a single texture, or a multi texture. +/// +/// single texture: a single surface texture is applied to the styled geometric item (entirely or partly) with optional repetition and texture transformation +/// multi texture: two or more surface textures are applied to the styled geometric item (entirely or partly) with optional repetition, texture transformation or texture coordinate mapping being specific for each texture. +/// +/// Informal proposition +/// +/// Only one instance of IfcSurfaceStyleWithTextures shall be referenced by an IfcStyledItem and be assigned to an IfcGeometricRepresentationItem +/// +/// NOTE  The definitions of texturing within this standard have been developed in dependence on the texture component of X3D. See ISO/IEC 19775-1.2:2008 X3D Architecture and base components Edition 2, Part 1, 18 Texturing component for the definitions in the international standard. +/// +/// HISTORY  New entity in IFC2x2. +/// +/// IFC2x3 CHANGE  inverse attribute HasTextureCoordinates deleted. +class IFC_PARSE_API IfcSurfaceStyleWithTextures : public IfcPresentationItem, public IfcSurfaceStyleElementSelect { +public: + /// The textures applied to the surface. In case of more than one surface texture is included, the IfcSurfaceStyleWithTexture defines a multi texture. + aggregate_of< ::Ifc4x3_add2::IfcSurfaceTexture >::ptr Textures() const; + void setTextures(aggregate_of< ::Ifc4x3_add2::IfcSurfaceTexture >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSurfaceStyleWithTextures (IfcEntityInstanceData* e); + IfcSurfaceStyleWithTextures (aggregate_of< ::Ifc4x3_add2::IfcSurfaceTexture >::ptr v1_Textures); + typedef aggregate_of< IfcSurfaceStyleWithTextures > list; +}; +/// An IfcSurfaceTexture provides a 2-dimensional +/// image-based texture map. It can either be given by referencing an +/// external image file through an URL reference +/// (IfcImageTexture), including the image file as a blob +/// (long binary) into the data set (IfcBlobTexture), or by +/// explicitly including an array of pixels +/// (IfcPixelTexture). +/// The following definitions from ISO/IEC 19775-1 X3D Architecture +/// and base components (X3D Specification) +/// apply: +/// +/// Texture: An image +/// used in a texture map to create visual appearance effects when +/// applied to geometry nodes. +/// Texture map: A +/// texture plus the general parameters necessary for mapping the +/// texture to geometry. +/// +/// Texture are defined by 2D images that contain an array of colour +/// values describing the texture. The texture values are interpreted +/// differently depending on the number of components in the texture +/// and the specifics of the image format. In general, texture may be +/// described using one of the following forms: +/// +/// Intensity textures (one-component) +/// Intensity plus alpha opacity textures (two-component) +/// Full RGB textures (three-component) +/// Full RGB plus alpha opacity textures (four-component) +/// +/// NOTE  Image formats specify an alpha opacity, not transparency (where alpha = 1 - transparency). +/// +/// Figure 295 illustrates the texture coordinate system. +/// +/// Figure 295 — Surface texture coordinates +/// +/// The following definitions from ISO/IEC 19775-1 X3D Architecture and base components (X3D Specification) on texture coordinates apply: +/// +/// Texture maps are defined in a 2D coordinate system (s, t) that ranges from [0.0, 1.0] in both directions. The bottom edge of the image corresponds to the S-axis of the texture map, and left edge of the image corresponds to the T-axis of the texture map. The lower-left pixel of the image corresponds to s=0, t=0, and the top-right pixel of the image corresponds to s=1, t=1. Texture maps may be viewed as two dimensional colour functions that, given an (s, t) coordinate, return a colour value colour(s, t). +/// +/// If multiple surface textures are included in the +/// IfcSurfaceStyleWithTextures applying them to a geometric +/// item, a mode and optional parameters can be included that blending +/// operations. +/// The RepeatS and RepeatT Boolean flags control +/// whether the texture map is repeated outside the [0.0, 1.0] texture +/// coordinate range, when applied to a geometric surface, or clamped +/// to lie within the [0.0, 1.0] range. The TextureTransform +/// applies a 2D non-uniform transformation to the texture before it is +/// applied to a geometric surface. +/// The following definitions from ISO/IEC 19775-1 X3D Architecture +/// and base components (X3D Specification) +/// apply: +/// +/// These parameters +/// support changes to the size, orientation, and position of textures +/// on shapes. Note that these operations appear reversed when viewed +/// on the surface of geometry. For example, a scale value of (2 +/// 2) will scale the texture coordinates and have the net effect of +/// shrinking the texture size by a factor of 2 (texture coordinates +/// are twice as large and thus cause the texture to repeat). A +/// translation of (0.5 0.0) translates the texture coordinates +.5 +/// units along the S-axis and has the net effect of translating the +/// texture −0.5 along the S-axis on the geometry's surface. A +/// rotation of π/2 of the texture coordinates results in a +/// −π/2 rotation of the texture on the geometry. +/// The center +/// field specifies a translation offset in texture coordinate space +/// about which the rotation and scale fields are +/// applied. The scale field specifies a scaling factor in S and +/// T of the texture coordinates about the center point. +/// scale values shall be in the range (−∞,∞). +/// The rotation field specifies a rotation in radians of the +/// texture coordinates about the center point after the scale +/// has been applied. A positive rotation value makes the texture +/// coordinates rotate counterclockwise about the centre, thereby +/// rotating the appearance of the texture itself clockwise. The +/// translation field specifies a translation of the texture +/// coordinates. +/// The following conventions +/// apply: +/// +/// center = +/// TextureTransform.LocalOrigin; +/// rotation = TextureTransform.Axis1 +/// scale S = TextureTransform.Scale +/// scale T = TextureTransform.Scale2 +/// +/// NOTE  The definitions of texturing within this standard have been developed in dependence on the texture component of X3D. See ISO/IEC 19775-1.2:2008 X3D Architecture and base components Edition 2, Part 1, 18 Texturing component for the definitions in the international standard. +/// +/// HISTORY  New entity in IFC 2x2. +/// +/// IFC2x4 CHANGE  Attribute TextureType replaces by Mode, attributes Parameter and MapsTo aded, new inverse attribute UsedInStyle. +class IFC_PARSE_API IfcSurfaceTexture : public IfcPresentationItem { +public: + /// The RepeatS field specifies how the texture wraps in the S direction. If RepeatS is TRUE (the default), the texture map is repeated outside the [0.0, 1.0] texture coordinate range in the S direction so that it fills the shape. If RepeatS is FALSE, the texture coordinates are clamped in the S direction to lie within the [0.0, 1.0] range. + bool RepeatS() const; + void setRepeatS(bool v); + /// The RepeatT field specifies how the texture wraps in the T direction. If RepeatT is TRUE (the default), the texture map is repeated outside the [0.0, 1.0] texture coordinate range in the T direction so that it fills the shape. If RepeatT is FALSE, the texture coordinates are clamped in the T direction to lie within the [0.0, 1.0] range. + bool RepeatT() const; + void setRepeatT(bool v); + /// The Mode attribute is provided to control the appearance of a multi textures. The mode then controls the type of blending operation. The mode includes a MODULATE for a lit appearance, a REPLACE for a unlit appearance, and variations of the two. + /// + /// NOTE  The applicable values for the Mode attribute are determined by view definitions or implementer agreements. It is recommended to use the modes described in ISO/IES 19775-1.2:2008 X3D Architecture and base components Edition 2, Part 1. See 18.4.3 MultiTexture for recommended values. + /// + /// IFC2x4 CHANGE  New attribute replacing previous TextureType. + boost::optional< std::string > Mode() const; + void setMode(boost::optional< std::string > v); + /// The TextureTransform defines a 2D transformation that is applied to the texture coordinates. It affects the way texture coordinates are applied to the surfaces of geometric representation itesm. The 2D transformation supports changes to the size, orientation, and position of textures on shapes. + /// + /// Mirroring is not allowed to be used in the IfcCarteesianTransformationOperator + ::Ifc4x3_add2::IfcCartesianTransformationOperator2D* TextureTransform() const; + void setTextureTransform(::Ifc4x3_add2::IfcCartesianTransformationOperator2D* v); + /// The Parameter attribute is provided to control the appearance of a multi textures. The applicable parameters depend on the value of the Mode attribute. + /// + /// NOTE  The applicable values for the list of Parameter attributes are determined by view definitions or implementer agreements. It is recommended to use the source and the function fields described in ISO/IES 19775-1.2:2008 X3D Architecture and base components Edition 2, Part 1. See 18.4.3 MultiTexture for recommended values. + /// By convention, Parameter[1] shall then hold the source value, Parameter[2] the function value, Parameter[3] the base RGB color for select operations, and Parameter[4] the alpha value for select operations. + /// + /// IFC2x4 CHANGE  New attribute added at the end of the attribute list. + boost::optional< std::vector< std::string > /*[1:?]*/ > Parameter() const; + void setParameter(boost::optional< std::vector< std::string > /*[1:?]*/ > v); + aggregate_of< IfcTextureCoordinate >::ptr IsMappedBy() const; // INVERSE IfcTextureCoordinate::Maps + aggregate_of< IfcSurfaceStyleWithTextures >::ptr UsedInStyles() const; // INVERSE IfcSurfaceStyleWithTextures::Textures + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSurfaceTexture (IfcEntityInstanceData* e); + IfcSurfaceTexture (bool v1_RepeatS, bool v2_RepeatT, boost::optional< std::string > v3_Mode, ::Ifc4x3_add2::IfcCartesianTransformationOperator2D* v4_TextureTransform, boost::optional< std::vector< std::string > /*[1:?]*/ > v5_Parameter); + typedef aggregate_of< IfcSurfaceTexture > list; +}; +/// An IfcTable is a data structure for the provision of information in the form of rows and columns. Each instance may have IfcTableColumn instances that define the name, description and units for each column. The rows of information are stored as a list of IfcTableRow objects. +/// +/// Limitation: For backwards compatibility, the rows of an IfcTable object are constrained to have the same number of cells. The first Row of the table provides the number of cells. All other rows are forced to include the same number of cells. This is enforced by the WR2. +/// +/// Figure 335 illustrates table use. +/// +/// Figure 335 — Table use +/// +/// Figure 336 depicts how tables were structured prior to IFC2x4. +/// +/// Figure 336 — Table use alternative +/// +/// HISTORY  New entity in IFC R1.5. +/// +/// IFC2x4 CHANGE  Columns attribute added. +class IFC_PARSE_API IfcTable : public IfcUtil::IfcBaseEntity, public IfcMetricValueSelect, public IfcObjectReferenceSelect { +public: + /// A unique name which is intended to describe the usage of the Table. + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + /// Reference to information content of rows. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcTableRow >::ptr > Rows() const; + void setRows(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcTableRow >::ptr > v); + /// The column information associated with this table. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcTableColumn >::ptr > Columns() const; + void setColumns(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcTableColumn >::ptr > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTable (IfcEntityInstanceData* e); + IfcTable (boost::optional< std::string > v1_Name, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcTableRow >::ptr > v2_Rows, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcTableColumn >::ptr > v3_Columns); + typedef aggregate_of< IfcTable > list; +}; +/// An IfcTableColumn is a data structure that captures column information for use in an IfcTable. Each instance defines the name, description, identifier, and units of measure that are applicable to the columnar data associated with the IfcTableRow objects. +/// +/// The use of IfcTableColumn supercedes the IsHeading flag associated with IfcTableRow. +/// +/// HISTORY  New entity in IFC2x4. +class IFC_PARSE_API IfcTableColumn : public IfcUtil::IfcBaseEntity { +public: + /// Table column identifier. + boost::optional< std::string > Identifier() const; + void setIdentifier(boost::optional< std::string > v); + /// The table column display name. + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + /// Descriptive text for the table column. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + /// The unit of measure to be used for this column's data. + ::Ifc4x3_add2::IfcUnit* Unit() const; + void setUnit(::Ifc4x3_add2::IfcUnit* v); + ::Ifc4x3_add2::IfcReference* ReferencePath() const; + void setReferencePath(::Ifc4x3_add2::IfcReference* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTableColumn (IfcEntityInstanceData* e); + IfcTableColumn (boost::optional< std::string > v1_Identifier, boost::optional< std::string > v2_Name, boost::optional< std::string > v3_Description, ::Ifc4x3_add2::IfcUnit* v4_Unit, ::Ifc4x3_add2::IfcReference* v5_ReferencePath); + typedef aggregate_of< IfcTableColumn > list; +}; +/// IfcTableRow contains data for a single row within an IfcTable. +/// +/// Limitation: For backward compatibility, all IfcTableRow objects referenced by an IfcTable shall have the same number of Row Cells. The actual number of Cells shall be taken from the number of cells of the first IfcTableRow for that table. The number of Cells is calculated by the derived attribute NumberOfCellsInRow in the associated IfcTable. +/// +/// Figure 337 illustrates table row use. +/// +/// Figure 337 — Table row use +/// +/// Figure 338 depicts how table rows were structured prior to IFC2x4 with the use of the IsHeading flag. Note that the use of the IfcTableColumn constructs should be used instead of the IsHeading flag (which remains for backward compatibility only): +/// +/// Figure 338 — Table row use alternative +/// +/// HISTORY  New entity in IFC R1.5. +class IFC_PARSE_API IfcTableRow : public IfcUtil::IfcBaseEntity { +public: + /// The data value of the table cell.. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > RowCells() const; + void setRowCells(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > v); + /// Flag which identifies if the row is a heading row or a row which contains row values. NOTE - If the row is a heading, the flag takes the value = TRUE. + boost::optional< bool > IsHeading() const; + void setIsHeading(boost::optional< bool > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTableRow (IfcEntityInstanceData* e); + IfcTableRow (boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > v1_RowCells, boost::optional< bool > v2_IsHeading); + typedef aggregate_of< IfcTableRow > list; +}; +/// IfcTaskTime captures the time-related information about a task including the different types (actual or scheduled) of starting and ending times. +/// +/// HISTORY: New entity in IFC2x4, adapted from IfcScheduleTimeControl. Differently to IfcScheduleTimeControl it is also possible to differentiate duration time measures between the two possible types; (1) work time and (2) elapsed time. +/// +/// Use definitions +/// All given values should be provided by the application; the IFC schema does not deal with dependencies between task time values. There is also no consistency check through where rules that guarantee a meaningful population of time values. Thus, an application is responsible to provide reasonable values and, if an application receives task times, has to make consistency checks by their own. +/// +/// IfcTaskTime furthermore provides a generic mechanism to differentiate between user given time values and time values derived from user given time values and other constraints such as work calendars and assigned resources. +class IFC_PARSE_API IfcTaskTime : public IfcSchedulingTime { +public: + /// Enables to specify the type of duration values for ScheduleDuration, ActualDuration and RemainingTime. The duration type is either + /// work time or elapsed time. + boost::optional< ::Ifc4x3_add2::IfcTaskDurationEnum::Value > DurationType() const; + void setDurationType(boost::optional< ::Ifc4x3_add2::IfcTaskDurationEnum::Value > v); + /// The amount of time which is scheduled for completion of a + /// task. + /// The value might be measured or somehow calculated, which is defined by + /// ScheduleDataOrigin. + /// The value is either given as elapsed time or work time, which is defined by + /// DurationType. + /// + /// NOTE: Scheduled Duration may be calculated as the + /// time from scheduled start date to scheduled finish date. + boost::optional< std::string > ScheduleDuration() const; + void setScheduleDuration(boost::optional< std::string > v); + /// The date on which a task is scheduled to be started. + /// The value might be measured or somehow calculated, which is defined by + /// ScheduleDataOrigin. + /// + /// NOTE: The scheduled start date must be greater than + /// or equal to the earliest start date. + boost::optional< std::string > ScheduleStart() const; + void setScheduleStart(boost::optional< std::string > v); + /// The date on which a task is scheduled to be finished. + /// The value might be measured or somehow calculated, which is defined by + /// ScheduleDataOrigin. + /// + /// NOTE: The scheduled finish date must be greater than + /// or equal to the earliest finish date. + boost::optional< std::string > ScheduleFinish() const; + void setScheduleFinish(boost::optional< std::string > v); + /// The earliest date on which a task can be started. It is a calculated value. + boost::optional< std::string > EarlyStart() const; + void setEarlyStart(boost::optional< std::string > v); + /// The earliest date on which a task can be finished. It is a calculated value. + boost::optional< std::string > EarlyFinish() const; + void setEarlyFinish(boost::optional< std::string > v); + /// The latest date on which a task can be started. It is a calculated value. + boost::optional< std::string > LateStart() const; + void setLateStart(boost::optional< std::string > v); + /// The latest date on which a task can be finished. It is a calculated value. + boost::optional< std::string > LateFinish() const; + void setLateFinish(boost::optional< std::string > v); + /// The amount of time during which the start or finish of a + /// task may be varied without any effect on the overall + /// programme of work. It is a calculated elapsed time value. + boost::optional< std::string > FreeFloat() const; + void setFreeFloat(boost::optional< std::string > v); + /// The difference between the duration available to carry out + /// a task and the scheduled duration of the task. It is a calculated + /// elapsed time value. + /// + /// NOTE: Total Float time may be calculated as being + /// the difference between the scheduled duration of a task and + /// the available duration from earliest start to latest + /// finish. Float time may be either positive, zero or + /// negative. Where it is zero or negative, the task becomes + /// critical. + boost::optional< std::string > TotalFloat() const; + void setTotalFloat(boost::optional< std::string > v); + /// A flag which identifies whether a scheduled task is a + /// critical item within the programme. + /// + /// NOTE: A task becomes critical when the float time + /// becomes zero or negative. + boost::optional< bool > IsCritical() const; + void setIsCritical(boost::optional< bool > v); + /// The date or time at which the status of the tasks within + /// the schedule is analyzed. + boost::optional< std::string > StatusTime() const; + void setStatusTime(boost::optional< std::string > v); + /// The actual duration of the task. It is a measured value. + /// The value is either given as elapsed time or work time, which is defined by + /// DurationType. + boost::optional< std::string > ActualDuration() const; + void setActualDuration(boost::optional< std::string > v); + /// The date on which a task is actually started. It is a measured value. + /// + /// NOTE: The scheduled start date must be greater than + /// or equal to the earliest start date. No constraint is + /// applied to the actual start date with respect to the + /// scheduled start date since a task may be started earlier + /// than had originally been scheduled if circumstances allow. + boost::optional< std::string > ActualStart() const; + void setActualStart(boost::optional< std::string > v); + /// The date on which a task is actually finished. + boost::optional< std::string > ActualFinish() const; + void setActualFinish(boost::optional< std::string > v); + /// The amount of time remaining to complete a task. It is a predicted value. + /// The value is either given as elapsed time or work time, which is defined by + /// DurationType. + /// + /// NOTE: The time remaining in which to complete a task + /// may be determined both for tasks which have not yet started + /// and those which have. Remaining time for a task not yet + /// started has the same value as the scheduled duration. For a + /// task already started, remaining time is calculated as the + /// difference between the scheduled finish and the point of + /// analysis. + boost::optional< std::string > RemainingTime() const; + void setRemainingTime(boost::optional< std::string > v); + /// The extent of completion expressed as a ratio or percentage. + /// It is a measured value. + boost::optional< double > Completion() const; + void setCompletion(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTaskTime (IfcEntityInstanceData* e); + IfcTaskTime (boost::optional< std::string > v1_Name, boost::optional< ::Ifc4x3_add2::IfcDataOriginEnum::Value > v2_DataOrigin, boost::optional< std::string > v3_UserDefinedDataOrigin, boost::optional< ::Ifc4x3_add2::IfcTaskDurationEnum::Value > v4_DurationType, boost::optional< std::string > v5_ScheduleDuration, boost::optional< std::string > v6_ScheduleStart, boost::optional< std::string > v7_ScheduleFinish, boost::optional< std::string > v8_EarlyStart, boost::optional< std::string > v9_EarlyFinish, boost::optional< std::string > v10_LateStart, boost::optional< std::string > v11_LateFinish, boost::optional< std::string > v12_FreeFloat, boost::optional< std::string > v13_TotalFloat, boost::optional< bool > v14_IsCritical, boost::optional< std::string > v15_StatusTime, boost::optional< std::string > v16_ActualDuration, boost::optional< std::string > v17_ActualStart, boost::optional< std::string > v18_ActualFinish, boost::optional< std::string > v19_RemainingTime, boost::optional< double > v20_Completion); + typedef aggregate_of< IfcTaskTime > list; +}; +/// IfcTaskTimeRecurring is a recurring instance of IfcTaskTime for handling regularly scheduled or repetitive tasks. +/// +/// HISTORY: New entity in IFC2x4. +class IFC_PARSE_API IfcTaskTimeRecurring : public IfcTaskTime { +public: + ::Ifc4x3_add2::IfcRecurrencePattern* Recurrence() const; + void setRecurrence(::Ifc4x3_add2::IfcRecurrencePattern* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTaskTimeRecurring (IfcEntityInstanceData* e); + IfcTaskTimeRecurring (boost::optional< std::string > v1_Name, boost::optional< ::Ifc4x3_add2::IfcDataOriginEnum::Value > v2_DataOrigin, boost::optional< std::string > v3_UserDefinedDataOrigin, boost::optional< ::Ifc4x3_add2::IfcTaskDurationEnum::Value > v4_DurationType, boost::optional< std::string > v5_ScheduleDuration, boost::optional< std::string > v6_ScheduleStart, boost::optional< std::string > v7_ScheduleFinish, boost::optional< std::string > v8_EarlyStart, boost::optional< std::string > v9_EarlyFinish, boost::optional< std::string > v10_LateStart, boost::optional< std::string > v11_LateFinish, boost::optional< std::string > v12_FreeFloat, boost::optional< std::string > v13_TotalFloat, boost::optional< bool > v14_IsCritical, boost::optional< std::string > v15_StatusTime, boost::optional< std::string > v16_ActualDuration, boost::optional< std::string > v17_ActualStart, boost::optional< std::string > v18_ActualFinish, boost::optional< std::string > v19_RemainingTime, boost::optional< double > v20_Completion, ::Ifc4x3_add2::IfcRecurrencePattern* v21_Recurrence); + typedef aggregate_of< IfcTaskTimeRecurring > list; +}; +/// Definition: Address to which telephone, electronic mail and other forms of telecommunications should be addressed. +/// +/// HISTORY New entity in IFC Release 2x. +/// +/// IFC 2x4 change: Added attribute MessagingIDs. +/// Type of attribute WWWHomePageURL compatibly changed from IfcLabel to IfcURIReference. +class IFC_PARSE_API IfcTelecomAddress : public IfcAddress { +public: + /// The list of telephone numbers at which telephone messages may be received. + boost::optional< std::vector< std::string > /*[1:?]*/ > TelephoneNumbers() const; + void setTelephoneNumbers(boost::optional< std::vector< std::string > /*[1:?]*/ > v); + /// The list of fax numbers at which fax messages may be received. + boost::optional< std::vector< std::string > /*[1:?]*/ > FacsimileNumbers() const; + void setFacsimileNumbers(boost::optional< std::vector< std::string > /*[1:?]*/ > v); + /// The pager number at which paging messages may be received. + boost::optional< std::string > PagerNumber() const; + void setPagerNumber(boost::optional< std::string > v); + /// The list of Email addresses at which Email messages may be received. + boost::optional< std::vector< std::string > /*[1:?]*/ > ElectronicMailAddresses() const; + void setElectronicMailAddresses(boost::optional< std::vector< std::string > /*[1:?]*/ > v); + /// The world wide web address at which the preliminary page of information for the person or organization can be located. + /// NOTE: Information on the world wide web for a person or organization may be separated + /// into a number of pages and across a number of host sites, all of which may be linked together. It is assumed that + /// all such information may be referenced from a single page that is termed the home page for that person or organization. + boost::optional< std::string > WWWHomePageURL() const; + void setWWWHomePageURL(boost::optional< std::string > v); + /// IDs or addresses for any other means of telecommunication, for example instant messaging, voice-over-IP, or file transfer protocols. The communication protocol is indicated by the URI value with scheme designations such as irc:, sip:, or ftp:. + boost::optional< std::vector< std::string > /*[1:?]*/ > MessagingIDs() const; + void setMessagingIDs(boost::optional< std::vector< std::string > /*[1:?]*/ > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTelecomAddress (IfcEntityInstanceData* e); + IfcTelecomAddress (boost::optional< ::Ifc4x3_add2::IfcAddressTypeEnum::Value > v1_Purpose, boost::optional< std::string > v2_Description, boost::optional< std::string > v3_UserDefinedPurpose, boost::optional< std::vector< std::string > /*[1:?]*/ > v4_TelephoneNumbers, boost::optional< std::vector< std::string > /*[1:?]*/ > v5_FacsimileNumbers, boost::optional< std::string > v6_PagerNumber, boost::optional< std::vector< std::string > /*[1:?]*/ > v7_ElectronicMailAddresses, boost::optional< std::string > v8_WWWHomePageURL, boost::optional< std::vector< std::string > /*[1:?]*/ > v9_MessagingIDs); + typedef aggregate_of< IfcTelecomAddress > list; +}; +/// Definition from ISO/CD 10303-46:1992: The text style is a presentation style for annotation text. +/// +/// The IfcTextStyle provides the text style table for presentation information assigned to text literals. The style is defined by color, text font characteristics, and text box characteristics. The definitions are based upon: +/// +/// definitions from ISO/IS 10303-46:1994 for (old) vector based and monospace text. +/// definitions from Cascading Style Sheets, level 1, W3C Recommendation 17 Dec 1996, revised 11 Jan 1999, CSS1, for all true type text. The use of the CSS1 definitions is the preferred way to represent text styles. +/// +/// An IfcTextStyle, when representing (old) vector based and monospace text, is instantiated with: +/// +/// TextCharacterAppearance:: IfcTextStyleForDefinedFont (with BackgroundColour = NIL) +/// TextStyle:: IfcTextStyleWithBoxCharacteristics +/// TextFontStyle:: IfcDraughtingPreDefinedTextFont or IfcExternallyDefinedTextFont +/// +/// An IfcTextStyle, when representing (new) true type text, based on CSS1 definitions, is instantiated with: +/// +/// TextCharacterAppearance:: IfcTextStyleForDefinedFont +/// TextStyle:: IfcTextStyleTextModel +/// TextFontStyle:: IfcTextStyleFontModel +/// +/// An IfcTextStyle can be assigned to IfcTextLiteral via the IfcPresentationStyleAssignment through an intermediate IfcAnnotationTextOccurrence. +/// +/// NOTE  Corresponding ISO 10303 name: text_style. Please refer to ISO/IS 10303-46:1994 for the final definition of the formal standard. In order to avoid ANDOR subtype relationships, the IfcTextBlockStyleSelect has been introduced that allows the combination of a text style as having box characteristic, and/or having spacing, or having none of those additional properties. +/// +/// NOTE  Corresponding CSS1 definitions are: Font properties (font-family, font-style, font-variant, font-weight, font-size), Color and background properties (color, background-color) and Text properties (word-spacing, letter-spacing, text-decoration, text-transform, text-align, text-indent, line-height). +/// +/// HISTORY  New entity in IFC2x2. +/// +/// IFC2x3 CHANGE  The IfcTextStyle has been changed by adding TextFontStyle and different data types for TextStyle and IfcCharacterStyleSelect. +class IFC_PARSE_API IfcTextStyle : public IfcPresentationStyle { +public: + /// A character style to be used for presented text. + ::Ifc4x3_add2::IfcTextStyleForDefinedFont* TextCharacterAppearance() const; + void setTextCharacterAppearance(::Ifc4x3_add2::IfcTextStyleForDefinedFont* v); + /// The style applied to the text block for its visual appearance. + /// It defines the text block characteristics, either for vector based or monospace text fonts (see select item IfcTextStyleWithBoxCharacteristics), or for true type text fonts (see select item IfcTextStyleTextModel. + /// + /// IFC2x Edition 3 CHANGE  The attribute TextBlockStyle has been changed from SET[1:?] to a non-aggregated optional, it has been renamed from TextStyles. + ::Ifc4x3_add2::IfcTextStyleTextModel* TextStyle() const; + void setTextStyle(::Ifc4x3_add2::IfcTextStyleTextModel* v); + /// The style applied to the text font for its visual appearance. + /// It defines the font family, font style, weight and size. + /// + /// IFC2x Edition 2 Addendum 2 CHANGE The attribute TextFontStyle is a new attribute attached to IfcTextStyle. + ::Ifc4x3_add2::IfcTextFontSelect* TextFontStyle() const; + void setTextFontStyle(::Ifc4x3_add2::IfcTextFontSelect* v); + boost::optional< bool > ModelOrDraughting() const; + void setModelOrDraughting(boost::optional< bool > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTextStyle (IfcEntityInstanceData* e); + IfcTextStyle (boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcTextStyleForDefinedFont* v2_TextCharacterAppearance, ::Ifc4x3_add2::IfcTextStyleTextModel* v3_TextStyle, ::Ifc4x3_add2::IfcTextFontSelect* v4_TextFontStyle, boost::optional< bool > v5_ModelOrDraughting); + typedef aggregate_of< IfcTextStyle > list; +}; +/// Definition from ISO/CD 10303-46:1992: A text style for defined font is a character glyph style for pre-defined or externally defined text fonts. +/// +/// Definition from CSS1 (W3C Recommendation): These properties describe the color (often called foreground color) and background of an element (i.e. the surface onto which the content is rendered). One can set a background color. +/// +/// NOTE  The CSS1 definition allows also for a background image. This has not been incorporated into IFC. +/// +/// The IfcTextStyleForDefinedFont combines the text font color with an optional background color, that fills the text box, defined by the planar extent given to the text literal. +/// +/// NOTE  Corresponding ISO 10303 name: text_style_for_defined_font. Please refer to ISO/IS +/// 10303-46:1994, p.122 for the final definition of the formal standard. The attribute BackgroundColour +/// has been added. +/// +/// NOTE  Corresponding CSS1 definitions are Color and background properties (color, background-color). +/// +/// HISTORY  New entity in IFC2x3. +/// +/// IFC2x3 CHANGE  The IfcTextStyleForDefinedFont has been added and replaces IfcColour at the IfcCharacterStyleSelect. +class IFC_PARSE_API IfcTextStyleForDefinedFont : public IfcPresentationItem { +public: + /// This property describes the text color of an element (often referred to as the foreground color). + ::Ifc4x3_add2::IfcColour* Colour() const; + void setColour(::Ifc4x3_add2::IfcColour* v); + /// This property sets the background color of an element. + ::Ifc4x3_add2::IfcColour* BackgroundColour() const; + void setBackgroundColour(::Ifc4x3_add2::IfcColour* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTextStyleForDefinedFont (IfcEntityInstanceData* e); + IfcTextStyleForDefinedFont (::Ifc4x3_add2::IfcColour* v1_Colour, ::Ifc4x3_add2::IfcColour* v2_BackgroundColour); + typedef aggregate_of< IfcTextStyleForDefinedFont > list; +}; +/// Definition from CSS1 (W3C Recommendation): The properties defined in the text model affect the visual presentation of characters, spaces, words, and paragraphs. +/// +/// The IfcTextStyleTextModel combines all text style properties, that affect the presentation of a text literal within a given extent. It includes the spacing between characters and words, the horizontal and vertical alignment of the text within the planar box of the extent, decorations (like underline), transformations of the literal (like uppercase), and the height of each text line within a multi-line text block. +/// +/// NOTE  Corresponding CSS1 definitions are Text properties (word-spacing, letter-spacing, text-decoration, vertical-align, text-transform, text-align, text-indent, line-height). +/// +/// HISTORY  New entity in IFC2x3. +class IFC_PARSE_API IfcTextStyleTextModel : public IfcPresentationItem { +public: + /// The property specifies the indentation that appears before the first formatted line. + /// NOTE  It has been introduced for later compliance to full CSS1 support. + ::Ifc4x3_add2::IfcSizeSelect* TextIndent() const; + void setTextIndent(::Ifc4x3_add2::IfcSizeSelect* v); + /// This property describes how text is aligned horizontally within the element. The actual justification algorithm used is dependent on the rendering algorithm. + boost::optional< std::string > TextAlign() const; + void setTextAlign(boost::optional< std::string > v); + /// This property describes decorations that are added to the text of an element. + boost::optional< std::string > TextDecoration() const; + void setTextDecoration(boost::optional< std::string > v); + /// The length unit indicates an addition to the default space between characters. Values can be negative, but there may be implementation-specific limits. The user agent is free to select the exact spacing algorithm. The letter spacing may also be influenced by justification (which is a value of the 'align' property). + /// NOTE  The following values are allowed, IfcDescriptiveMeasure with value='normal', or IfcLengthMeasure, the length unit is globally defined at IfcUnitAssignment. + ::Ifc4x3_add2::IfcSizeSelect* LetterSpacing() const; + void setLetterSpacing(::Ifc4x3_add2::IfcSizeSelect* v); + /// The length unit indicates an addition to the default space between words. Values can be negative, but there may be implementation-specific limits. The user agent is free to select the exact spacing algorithm. The word spacing may also be influenced by justification (which is a value of the 'text-align' property). + /// NOTE  It has been introduced for later compliance to full CSS1 support. + ::Ifc4x3_add2::IfcSizeSelect* WordSpacing() const; + void setWordSpacing(::Ifc4x3_add2::IfcSizeSelect* v); + /// This property describes how text characters may transform to upper case, lower case, or capitalized case, independent of the character case used in the text literal. + /// NOTE  It has been introduced for later compliance to full CSS1 support. + boost::optional< std::string > TextTransform() const; + void setTextTransform(boost::optional< std::string > v); + /// The property sets the distance between two adjacent lines' baselines. + /// When a ratio value is specified, the line height is given by the font size of the current element multiplied with the numerical value. A value of 'normal' sets the line height to a reasonable value for the element's font. It is suggested that user agents set the 'normal' value to be a ratio number in the range of 1.0 to 1.2. + /// NOTE  The following values are allowed: IfcDescriptiveMeasure with value='normal', or + /// IfcLengthMeasure, with non-negative values, the length unit is globally defined at IfcUnitAssignment, or IfcRatioMeasure. + ::Ifc4x3_add2::IfcSizeSelect* LineHeight() const; + void setLineHeight(::Ifc4x3_add2::IfcSizeSelect* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTextStyleTextModel (IfcEntityInstanceData* e); + IfcTextStyleTextModel (::Ifc4x3_add2::IfcSizeSelect* v1_TextIndent, boost::optional< std::string > v2_TextAlign, boost::optional< std::string > v3_TextDecoration, ::Ifc4x3_add2::IfcSizeSelect* v4_LetterSpacing, ::Ifc4x3_add2::IfcSizeSelect* v5_WordSpacing, boost::optional< std::string > v6_TextTransform, ::Ifc4x3_add2::IfcSizeSelect* v7_LineHeight); + typedef aggregate_of< IfcTextStyleTextModel > list; +}; +/// The IfcTextureCoordinate a an abstract supertype of the different kinds to apply texture coordinates to geometries. For vertex based geometries an explicit assignment of 2D texture vertices to the 3D geometry points is supported by the subtype IfcTextureMap, in addition there can be a procedural description of how texture coordinates shall be applied to geometric items. If no IfcTextureCoordinate is provided for the IfcSurfaceTexture, the default mapping shall be used. +/// +/// See relevant subtypes of IfcGeometricRepresentationItem for default texture mapping description. +/// +/// NOTE  The definitions of texturing within this standard have been developed in dependence on the texture component of X3D. See ISO/IEC 19775-1.2:2008 X3D Architecture and base components Edition 2, Part 1, 18 Texturing component for the definitions in the international standard. +/// +/// HISTORY  New entity in IFC2x2. +/// +/// IFC2x3 CHANGE  The attribute Texture is deleted. +/// +/// IFC2x4 CHANGE  The inverse attribute AnnotatedSurface is deleted, and the inverse AppliesTextures is added. +class IFC_PARSE_API IfcTextureCoordinate : public IfcPresentationItem { +public: + aggregate_of< ::Ifc4x3_add2::IfcSurfaceTexture >::ptr Maps() const; + void setMaps(aggregate_of< ::Ifc4x3_add2::IfcSurfaceTexture >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTextureCoordinate (IfcEntityInstanceData* e); + IfcTextureCoordinate (aggregate_of< ::Ifc4x3_add2::IfcSurfaceTexture >::ptr v1_Maps); + typedef aggregate_of< IfcTextureCoordinate > list; +}; +/// The IfcTextureCoordinateGenerator describes a procedurally defined mapping function with input parameter to map 2D texture coordinates to 3D geometry vertices. The allowable Mode values and input Parameter need to be agreed upon in view definitions and implementer agreements. +/// +/// It is recommended to use the texture coordinate generation modes as defined in X3D. +/// +/// The following definitions from ISO/IEC 19775-1 X3D Architecture and base components (X3D Specification) apply: +/// +/// The TextureCoordinateGenerator supports the automatic generation of texture coordinates for geometric shapes. +/// The mode field describes the algorithm used to compute texture coordinates. +/// +/// SPHERE, +/// CAMERASPACENORMAL, +/// CAMERASPACEPOSITION, +/// CAMERASPACEREFLECTIONVECTOR, +/// SPHERE-LOCAL, +/// COORD, +/// COORD-EYE, +/// NOISE, +/// NOISE-EYE, +/// SPHERE-REFLECT, +/// SPHERE-REFLECT-LOCAL +/// +/// NOTE  The definitions of texturing within this standard have been developed in dependence on the texture component of X3D. See ISO/IEC 19775-1.2:2008 X3D Architecture and base components Edition 2, Part 1, 18 Texturing component for the definitions in the international standard. +/// +/// HISTORY New entity in IFC2x2. +/// +/// IFC2x2 Addendum 2 CHANGE  The attribute Texturehas been deleted. +class IFC_PARSE_API IfcTextureCoordinateGenerator : public IfcTextureCoordinate { +public: + /// The Mode attribute describes the algorithm used to compute texture coordinates. + /// + /// NOTE  The applicable values for the Mode attribute are determined by view definitions or implementer agreements. It is recommended to use the modes described in ISO/IES 19775-1.2:2008 X3D Architecture and base components Edition 2, Part 1. See 18.4.8 TextureCoordinateGenerator for recommended values. + std::string Mode() const; + void setMode(std::string v); + /// The parameters used as arguments by the function as specified by Mode. + /// + /// IFC2x4 CHANGE  Made optional data type restricted to REAL. + boost::optional< std::vector< double > /*[1:?]*/ > Parameter() const; + void setParameter(boost::optional< std::vector< double > /*[1:?]*/ > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTextureCoordinateGenerator (IfcEntityInstanceData* e); + IfcTextureCoordinateGenerator (aggregate_of< ::Ifc4x3_add2::IfcSurfaceTexture >::ptr v1_Maps, std::string v2_Mode, boost::optional< std::vector< double > /*[1:?]*/ > v3_Parameter); + typedef aggregate_of< IfcTextureCoordinateGenerator > list; +}; + +class IFC_PARSE_API IfcTextureCoordinateIndices : public IfcUtil::IfcBaseEntity { +public: + std::vector< int > /*[3:?]*/ TexCoordIndex() const; + void setTexCoordIndex(std::vector< int > /*[3:?]*/ v); + ::Ifc4x3_add2::IfcIndexedPolygonalFace* TexCoordsOf() const; + void setTexCoordsOf(::Ifc4x3_add2::IfcIndexedPolygonalFace* v); + aggregate_of< IfcIndexedPolygonalTextureMap >::ptr ToTexMap() const; // INVERSE IfcIndexedPolygonalTextureMap::TexCoordIndices + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTextureCoordinateIndices (IfcEntityInstanceData* e); + IfcTextureCoordinateIndices (std::vector< int > /*[3:?]*/ v1_TexCoordIndex, ::Ifc4x3_add2::IfcIndexedPolygonalFace* v2_TexCoordsOf); + typedef aggregate_of< IfcTextureCoordinateIndices > list; +}; + +class IFC_PARSE_API IfcTextureCoordinateIndicesWithVoids : public IfcTextureCoordinateIndices { +public: + std::vector< std::vector< int > > InnerTexCoordIndices() const; + void setInnerTexCoordIndices(std::vector< std::vector< int > > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTextureCoordinateIndicesWithVoids (IfcEntityInstanceData* e); + IfcTextureCoordinateIndicesWithVoids (std::vector< int > /*[3:?]*/ v1_TexCoordIndex, ::Ifc4x3_add2::IfcIndexedPolygonalFace* v2_TexCoordsOf, std::vector< std::vector< int > > v3_InnerTexCoordIndices); + typedef aggregate_of< IfcTextureCoordinateIndicesWithVoids > list; +}; +/// An IfcTextureMap provides the mapping of the +/// 2-dimensional texture coordinates to the surface onto which it is +/// mapped. It is used for mapping the texture to surfaces of vertex +/// based geometry models, such as +/// +/// IfcFacetedBrep +/// IfcFacetedBrepWithVoids +/// IfcFaceBasedSurfaceModel +/// IfcShellBasedSurfaceModel +/// +/// The IfcTextureMap has a list of TextureVertex, +/// that corresponds to the points of the face bound of the vertex +/// based geometry item. The corresponding pair of lists is: +/// +/// the list of Polygon of type IfcCartesianPoint, +/// and +/// the list of Vertices of type +/// IfcTextureVertex. +/// +/// Each IfcTextureVertex (given as S, T coordinates of the +/// 2-dimension texture coordinate system) corresponds to the geometric +/// coordinates of the IfcCartesianPoint (given as 3-dimension +/// X, Y, and Z coordinates within the object coordinate system of the +/// geometric item). +/// The following definitions from ISO/IEC 19775-1 X3D Architecture +/// and base components (X3D Specification) +/// apply: +/// +/// The TextureCoordinate node is a geometry property node that +/// specifies a set of 2D texture coordinates used by vertex-based +/// geometry nodes to map textures to vertices. +/// +/// NOTE  In contrary to the +/// X3D vertext based geometry, for example IndexedFaceSet and +/// ElevationGrid, the vertext based geometry in IFC may include inner +/// loops. The areas of inner loops have to be cut-out from the texture +/// applied to the outer loop. +/// +/// Figure 301 illustrates applying a texture map to a vertex based geometry. +/// +/// Figure 301 — Texture map +/// +/// HISTORY  New entity in IFC2x2. +/// +/// IFC2x3 CHANGE  The attribute Texture is deleted, and the attribute TextureMaps is added. +/// +/// IFC2x4 CHANGE  The attribute TextureMap is replaced by Vertices, and the attribute AppliedTo is added. +/// +/// Informal propositions: +/// +/// The FaceBound referenced in AppliedTo shall be used by the vertex based geometry, to which this texture map is assigned to by through the IfcStyledItem. +class IFC_PARSE_API IfcTextureMap : public IfcTextureCoordinate { +public: + /// List of texture coordinate vertices that are applied to the corresponding points of the polyloop defining a face bound. + /// + /// NOTE  The corresponding face bound may be an inner loop. + aggregate_of< ::Ifc4x3_add2::IfcTextureVertex >::ptr Vertices() const; + void setVertices(aggregate_of< ::Ifc4x3_add2::IfcTextureVertex >::ptr v); + ::Ifc4x3_add2::IfcFace* MappedTo() const; + void setMappedTo(::Ifc4x3_add2::IfcFace* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTextureMap (IfcEntityInstanceData* e); + IfcTextureMap (aggregate_of< ::Ifc4x3_add2::IfcSurfaceTexture >::ptr v1_Maps, aggregate_of< ::Ifc4x3_add2::IfcTextureVertex >::ptr v2_Vertices, ::Ifc4x3_add2::IfcFace* v3_MappedTo); + typedef aggregate_of< IfcTextureMap > list; +}; +/// An IfcTextureVertex is a list of 2 (S, T) texture coordinates. +/// +/// The following additional definitions from ISO 19775 apply: +/// +/// Each vertex-based geometry node uses a set of 2D texture +/// coordinates that map textures to vertices. Texture map values ( +/// ImageTexture, PixelTexture) range from [0.0, 1.0] along the S-axis and +/// T-axis. However, texture coordinate values may be in the range +/// (-∞,∞). Texture coordinates identify a location +/// (and thus a +/// colour value) in the texture map. The horizontal coordinate S is +/// specified first, followed by the vertical coordinate T. If the texture +/// map is repeated in a given direction (S-axis or T-axis), a texture +/// coordinate C (s or t) is mapped into a texture map that has N pixels in +/// the given direction as follows: +/// +/// Texture map location = (C - floor(C)) × N +/// +/// If the texture map is not +/// repeated, the texture coordinates are +/// clamped to the 0.0 to 1.0 range as follows: +/// +/// Texture map location = N, if C > 1.0, = 0.0, if C < 0.0, = C × N, if 0.0 ≤ C ≤ 1.0. +/// +/// Texture coordinates may be transformed (scaled, rotated, translated) by supplying a TextureTransform as a component of the texture's definition. +/// +/// HISTORY: New entity in IFC 2x2. +class IFC_PARSE_API IfcTextureVertex : public IfcPresentationItem { +public: + /// The first coordinate[1] is the S, the second coordinate[2] is the T parameter value. + std::vector< double > /*[2:2]*/ Coordinates() const; + void setCoordinates(std::vector< double > /*[2:2]*/ v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTextureVertex (IfcEntityInstanceData* e); + IfcTextureVertex (std::vector< double > /*[2:2]*/ v1_Coordinates); + typedef aggregate_of< IfcTextureVertex > list; +}; + +class IFC_PARSE_API IfcTextureVertexList : public IfcPresentationItem { +public: + std::vector< std::vector< double > > TexCoordsList() const; + void setTexCoordsList(std::vector< std::vector< double > > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTextureVertexList (IfcEntityInstanceData* e); + IfcTextureVertexList (std::vector< std::vector< double > > v1_TexCoordsList); + typedef aggregate_of< IfcTextureVertexList > list; +}; +/// IfcTimePeriod defines a time period given by a start and end time. Both time definitions consider the time zone and allow for the daylight savings offset. +/// +/// HISTORY: New entity in IFC R2x4. +/// +/// Use definitions +/// A time period is defined by a start and an end time, which is defined by IfcTime. The given time period should be within reasonable values (for example, the start time must be before the end time). It is furthermore expected that both time definitions use the same time zone and, if given, the same daylight saving offset. +class IFC_PARSE_API IfcTimePeriod : public IfcUtil::IfcBaseEntity { +public: + /// Start time of the time period. + std::string StartTime() const; + void setStartTime(std::string v); + /// End time of the time period. + std::string EndTime() const; + void setEndTime(std::string v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTimePeriod (IfcEntityInstanceData* e); + IfcTimePeriod (std::string v1_StartTime, std::string v2_EndTime); + typedef aggregate_of< IfcTimePeriod > list; +}; +/// A time series is a set of a time-stamped data entries. It allows a natural association of data collected over intervals of time. Time series can be regular or irregular. In regular time series data arrive predictably at predefined intervals. In irregular time series some or all time stamps do not follow a repetitive pattern and unpredictable bursts of data may arrive at unspecified points in time. +/// +/// The modeling of buildings and their performance involves data that are generated and recorded over a period of time. Such data cover a large spectrum, from weather data to schedules of all kinds to status measurements to reporting to everything else that has a time related aspect. Their correct placement in time is essential for their proper understanding and use, and the IfcTimeSeries subtypes provide the appropriate data structures to accommodate these types of data. +/// +/// HISTORY: New entity in IFC 2x2. +class IFC_PARSE_API IfcTimeSeries : public IfcUtil::IfcBaseEntity, public IfcMetricValueSelect, public IfcObjectReferenceSelect, public IfcResourceObjectSelect { +public: + /// An unique name for the time series. + std::string Name() const; + void setName(std::string v); + /// A text description of the data that the series represents. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + /// The start time of a time series. + std::string StartTime() const; + void setStartTime(std::string v); + /// The end time of a time series. + std::string EndTime() const; + void setEndTime(std::string v); + /// The time series data type. + ::Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::Value TimeSeriesDataType() const; + void setTimeSeriesDataType(::Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::Value v); + /// The orgin of a time series data. + ::Ifc4x3_add2::IfcDataOriginEnum::Value DataOrigin() const; + void setDataOrigin(::Ifc4x3_add2::IfcDataOriginEnum::Value v); + /// Value of the data origin if DataOrigin attribute is USERDEFINED. + boost::optional< std::string > UserDefinedDataOrigin() const; + void setUserDefinedDataOrigin(boost::optional< std::string > v); + /// The unit to be assigned to all values within the time series. Note that mixing units is not allowed. If the value is not given, the global unit for the type of IfcValue, as defined at IfcProject.UnitsInContext is used. + ::Ifc4x3_add2::IfcUnit* Unit() const; + void setUnit(::Ifc4x3_add2::IfcUnit* v); + aggregate_of< IfcExternalReferenceRelationship >::ptr HasExternalReference() const; // INVERSE IfcExternalReferenceRelationship::RelatedResourceObjects + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTimeSeries (IfcEntityInstanceData* e); + IfcTimeSeries (std::string v1_Name, boost::optional< std::string > v2_Description, std::string v3_StartTime, std::string v4_EndTime, ::Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::Value v5_TimeSeriesDataType, ::Ifc4x3_add2::IfcDataOriginEnum::Value v6_DataOrigin, boost::optional< std::string > v7_UserDefinedDataOrigin, ::Ifc4x3_add2::IfcUnit* v8_Unit); + typedef aggregate_of< IfcTimeSeries > list; +}; +/// A time series value is a list of values that comprise the time series. At least one value must be supplied. Applications are expected to normalize values by applying the following three rules: +/// +/// All time (universal, local, daylight savings, and solar) is normalized against the ISO 8601 standard GMT/UTC (Universal Coordinated Time). +/// Any rollover is handled by the application providing the data. Rollover occurs, for example, when the measurement device resets itself while measuring and the recording data do not include the data measured before the reset. +/// The normalized data refer to the preceding time unit. The time series example shown in Figure 241 below contains four time points: Time "a" indicates the beginning of the time series and the associated datum has no relevance. Data at time points "b," "c" and "d" are associated with values 1, 2 and 3, respectively. +/// +/// Figure 241 — Time series value +/// +/// HISTORY  New entity in IFC2x2. +class IFC_PARSE_API IfcTimeSeriesValue : public IfcUtil::IfcBaseEntity { +public: + /// A list of time-series values. At least one value is required. + aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr ListValues() const; + void setListValues(aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTimeSeriesValue (IfcEntityInstanceData* e); + IfcTimeSeriesValue (aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr v1_ListValues); + typedef aggregate_of< IfcTimeSeriesValue > list; +}; +/// Definition from ISO/CD 10303-42:1992: The topological representation item is the supertype for all the topological representation items in the geometry resource. +/// +/// NOTE  Corresponding ISO 10303 entity: topological_representation_item. Please refer to ISO/IS 10303-42:1994, p.129 for the final definition of the formal standard. +/// +/// HISTORY: New entity in IFC Release 1.5 +class IFC_PARSE_API IfcTopologicalRepresentationItem : public IfcRepresentationItem { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTopologicalRepresentationItem (IfcEntityInstanceData* e); + IfcTopologicalRepresentationItem (); + typedef aggregate_of< IfcTopologicalRepresentationItem > list; +}; +/// IfcTopologyRepresentation +/// represents the concept of a particular topological representation of a +/// product or a product component within a representation context. This +/// representation context does not need to be (but may be) a geometric +/// representation context. Several representation types for shape +/// representation are included as predefined types: +/// +/// Vertex +/// topological vertex +/// representation (with or without assigned geometry) +/// +/// Edge +/// topological edge +/// representation (with or without assigned geometry) +/// +/// Path +/// topological path +/// representation (with or without assigned geometry) +/// +/// Face +/// topological face +/// representation (with or without assigned geometry) +/// +/// Shell +/// topological shell +/// representation (with or without assigned geometry) +/// +/// Undefined +/// no constraints imposed +/// +/// The representation type is +/// given as a string value at the inherited attribute 'RepresentationType'. +/// +/// HISTORY: New entity in IFC 2x2. +class IFC_PARSE_API IfcTopologyRepresentation : public IfcShapeModel { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTopologyRepresentation (IfcEntityInstanceData* e); + IfcTopologyRepresentation (::Ifc4x3_add2::IfcRepresentationContext* v1_ContextOfItems, boost::optional< std::string > v2_RepresentationIdentifier, boost::optional< std::string > v3_RepresentationType, aggregate_of< ::Ifc4x3_add2::IfcRepresentationItem >::ptr v4_Items); + typedef aggregate_of< IfcTopologyRepresentation > list; +}; +/// IfcUnitAssignment indicates a set of units which may be assigned. Within an IfcUnitAssigment each unit definition shall be unique; that is, there shall be no redundant unit definitions for the same unit type such as length unit or area unit. For currencies, there shall be only a single IfcMonetaryUnit within an IfcUnitAssignment. +/// +/// NOTE  A project (IfcProject) has a unit assignment which establishes a set of units which will be used globally within the project, if not otherwise defined. Other objects may have local unit assignments if there is a requirement for them to make use of units which do not fall within the project unit assignment. +/// +/// HISTORY  New entity in IFC Release 1.5.1. +class IFC_PARSE_API IfcUnitAssignment : public IfcUtil::IfcBaseEntity { +public: + /// Units to be included within a unit assignment. + aggregate_of< ::Ifc4x3_add2::IfcUnit >::ptr Units() const; + void setUnits(aggregate_of< ::Ifc4x3_add2::IfcUnit >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcUnitAssignment (IfcEntityInstanceData* e); + IfcUnitAssignment (aggregate_of< ::Ifc4x3_add2::IfcUnit >::ptr v1_Units); + typedef aggregate_of< IfcUnitAssignment > list; +}; +/// Definition from ISO/CD 10303-42:1992: A vertex is the topological construct corresponding to a point. It has dimensionality 0 and extent 0. The domain of a vertex, if present, is a point in m dimensional real space RM; this is represented by the vertex point subtype. +/// +/// NOTE  Corresponding ISO 10303 entity: vertex. Please refer to ISO/IS 10303-42:1994, p. 129 for the final definition of the formal standard. +/// +/// HISTORY  New Entity in IFC Release 2.0 +/// +/// Informal proposition: +/// +/// The vertex has dimensionality 0. This is a fundamental property of the vertex. +/// The extent of a vertex is defined to be zero. +class IFC_PARSE_API IfcVertex : public IfcTopologicalRepresentationItem { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcVertex (IfcEntityInstanceData* e); + IfcVertex (); + typedef aggregate_of< IfcVertex > list; +}; +/// Definition from ISO/CD 10303-42:1992: A vertex point is a vertex which has its geometry defined as a point. +/// +/// NOTE  Corresponding ISO 10303 entity: vertex_point. Please refer to ISO/IS 10303-42:1994, p. 130 for the final definition of the formal standard. Due to the general IFC model specification rule not to use multiple inheritance, the subtype relationship to geometric_representation_item is not included. +/// +/// HISTORY  New Entity in IFC2x. +/// +/// Informal proposition: +/// +/// The domain of the vertex is formally defined to be the domain of its vertex point. +class IFC_PARSE_API IfcVertexPoint : public IfcVertex, public IfcPointOrVertexPoint { +public: + /// The geometric point, which defines the position in geometric space of the vertex. + ::Ifc4x3_add2::IfcPoint* VertexGeometry() const; + void setVertexGeometry(::Ifc4x3_add2::IfcPoint* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcVertexPoint (IfcEntityInstanceData* e); + IfcVertexPoint (::Ifc4x3_add2::IfcPoint* v1_VertexGeometry); + typedef aggregate_of< IfcVertexPoint > list; +}; +/// IfcVirtualGridIntersection defines the derived location of the intersection between two grid axes. Offset values may be given to set an offset distance to the grid axis for the calculation of the virtual grid intersection. +/// +/// The two intersecting axes (IntersectingAxes) define the intersection point, which exact location (in terms of the Cartesian point representing the intersection) has to be calculated from the geometric representation of the two participating curves. +/// +/// NOTE The IfcGrid local placement, that can be provided relative to the local placement of another spatial structure element, has to be taken into account for calculating the absolute placement of the IfcVirtualGridIntersection. Where rules and informal rules ensure, that the IntersectingAxes belong to the same IfcGrid +/// +/// Offset values may be given (OffsetDistances). If given, the position within the list of OffsetDistances +/// corresponds with the position within the list of IntersectingAxes. Therefore: +/// +/// OffsetDistances[1] sets the offset to IntersectingAxes[1], +/// OffsetDistances[2] sets the offset to IntersectingAxes[2], and +/// OffsetDistances[3] sets the offset to the virtual intersection in direction of the orientation of the cross product +/// of IntersectingAxes[1] and the orthogonal complement of the IntersectingAxes[1] (which is the positive or negative +/// direction of the z axis of the design grid position). +/// +/// HISTORY  New entity in IFC Release 1.5. The entity name was changed from IfcConstraintRelIntersection in IFC Release 2x. +/// +/// Informal Propositions: +/// +/// Both, IntersectingAxes[1] and +/// IntersectingAxes[2] shall be two IfcGridAxis +/// defined by the same IfcGrid. +/// IntersectingAxes[1] and IntersectingAxes[2] +/// shall not be part of the same row of grid axes, i.e. both shall +/// not be within the same set of IfcGrid.UAxes or +/// IfcGrid.VAxes of the corresponding IfcGrid. +/// +/// Geometry use definitions: +/// The following figures explain the usage of the OffsetDistances and IntersectingAxes attributes. +/// +/// Figure 246 illustrates two offset distances given where the virtual intersection is defined in the xy plane of the grid axis placement. +/// +/// Figure 246 — Virtual grid intersection with two offsets +/// +/// Figure 247 illustrates three offset distances given where the virtual intersection is defined by an offset (in direction of the +/// z-axis of the design grid placement) to the virtual intersection in the xy plane of the grid axis placement. +/// +/// Figure 247 — Virtual grid intersection with three offsets +/// +/// The distance of the offset curve (OffsetDistances[n]) +/// is measured from the basis curve. The distance may be positive, +/// negative or zero. A positive value of distance defines an offset +/// in the direction which is normal to the curve in the sense of an +/// anti-clockwise rotation through 90 degrees from the tangent +/// vector T at the given point. (This is in the direction of +/// orthogonal complement(T).) This can be reverted by the +/// SameSense attribute at IfcGridAxis which may switch +/// the sense of the AxisCurve. +/// Illustration +/// +/// Figure 248 illustrates an example of a negative offset where the figure shows the side of the offset. +/// +/// IntersectingAxes[1].AxisCurve is an +/// IfcTrimmedCurve with an IfcCircle as +/// BasisCurve and SenseAgreement = TRUE. +/// IntersectingAxes[1].SameSense = TRUE. +/// OffsetDistances[1] is a negative length measure +/// +/// Figure 248 — Virtual grid intersection negative offset +class IFC_PARSE_API IfcVirtualGridIntersection : public IfcUtil::IfcBaseEntity, public IfcGridPlacementDirectionSelect { +public: + /// Two grid axes which intersects at exactly one intersection (see also informal proposition at IfcGrid). If attribute OffsetDistances is omitted, the intersection defines the placement or ref direction of a grid placement directly. If OffsetDistances are given, the intersection is defined by the offset curves to the grid axes. + aggregate_of< ::Ifc4x3_add2::IfcGridAxis >::ptr IntersectingAxes() const; + void setIntersectingAxes(aggregate_of< ::Ifc4x3_add2::IfcGridAxis >::ptr v); + /// Offset distances to the grid axes. If given, it defines virtual offset curves to the grid axes. The intersection of the offset curves specify the virtual grid intersection. + std::vector< double > /*[2:3]*/ OffsetDistances() const; + void setOffsetDistances(std::vector< double > /*[2:3]*/ v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcVirtualGridIntersection (IfcEntityInstanceData* e); + IfcVirtualGridIntersection (aggregate_of< ::Ifc4x3_add2::IfcGridAxis >::ptr v1_IntersectingAxes, std::vector< double > /*[2:3]*/ v2_OffsetDistances); + typedef aggregate_of< IfcVirtualGridIntersection > list; +}; + +class IFC_PARSE_API IfcWellKnownText : public IfcUtil::IfcBaseEntity { +public: + std::string WellKnownText() const; + void setWellKnownText(std::string v); + ::Ifc4x3_add2::IfcCoordinateReferenceSystem* CoordinateReferenceSystem() const; + void setCoordinateReferenceSystem(::Ifc4x3_add2::IfcCoordinateReferenceSystem* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcWellKnownText (IfcEntityInstanceData* e); + IfcWellKnownText (std::string v1_WellKnownText, ::Ifc4x3_add2::IfcCoordinateReferenceSystem* v2_CoordinateReferenceSystem); + typedef aggregate_of< IfcWellKnownText > list; +}; +/// IfcWorkTime defines time periods that are used by IfcWorkCalendar for either describing working times or non-working exception times. Besides start and finish dates, a set of time periods can be given by various types of recurrence patterns. +/// +/// HISTORY: New entity in IFC2x4. +/// +/// Use definitions +/// A work time should have a meaningful name that describes the time periods (for example, working week, holiday name). Non-recurring time periods should have a start date (IfcWorkTime.Start) and a finish date (IfcWorkTime.Finish). In that case it is assumed that the time period begins at 0:00 on the start date and ends at 24:00 on the finish date. +/// +/// The start and finish date is optional if a recurrence pattern is given (IfcWorkTime.RecurrencePattern). They then restrict never-ending recurrence patterns. +class IFC_PARSE_API IfcWorkTime : public IfcSchedulingTime { +public: + /// Recurrence pattern that defines a time period, which, if given, is + /// valid within the time period defined by + /// IfcWorkTime.Start and IfcWorkTime.Finish. + ::Ifc4x3_add2::IfcRecurrencePattern* RecurrencePattern() const; + void setRecurrencePattern(::Ifc4x3_add2::IfcRecurrencePattern* v); + boost::optional< std::string > StartDate() const; + void setStartDate(boost::optional< std::string > v); + boost::optional< std::string > FinishDate() const; + void setFinishDate(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcWorkTime (IfcEntityInstanceData* e); + IfcWorkTime (boost::optional< std::string > v1_Name, boost::optional< ::Ifc4x3_add2::IfcDataOriginEnum::Value > v2_DataOrigin, boost::optional< std::string > v3_UserDefinedDataOrigin, ::Ifc4x3_add2::IfcRecurrencePattern* v4_RecurrencePattern, boost::optional< std::string > v5_StartDate, boost::optional< std::string > v6_FinishDate); + typedef aggregate_of< IfcWorkTime > list; +}; + +class IFC_PARSE_API IfcAlignmentCantSegment : public IfcAlignmentParameterSegment { +public: + double StartDistAlong() const; + void setStartDistAlong(double v); + double HorizontalLength() const; + void setHorizontalLength(double v); + double StartCantLeft() const; + void setStartCantLeft(double v); + boost::optional< double > EndCantLeft() const; + void setEndCantLeft(boost::optional< double > v); + double StartCantRight() const; + void setStartCantRight(double v); + boost::optional< double > EndCantRight() const; + void setEndCantRight(boost::optional< double > v); + ::Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAlignmentCantSegment (IfcEntityInstanceData* e); + IfcAlignmentCantSegment (boost::optional< std::string > v1_StartTag, boost::optional< std::string > v2_EndTag, double v3_StartDistAlong, double v4_HorizontalLength, double v5_StartCantLeft, boost::optional< double > v6_EndCantLeft, double v7_StartCantRight, boost::optional< double > v8_EndCantRight, ::Ifc4x3_add2::IfcAlignmentCantSegmentTypeEnum::Value v9_PredefinedType); + typedef aggregate_of< IfcAlignmentCantSegment > list; +}; + +class IFC_PARSE_API IfcAlignmentHorizontalSegment : public IfcAlignmentParameterSegment { +public: + ::Ifc4x3_add2::IfcCartesianPoint* StartPoint() const; + void setStartPoint(::Ifc4x3_add2::IfcCartesianPoint* v); + double StartDirection() const; + void setStartDirection(double v); + double StartRadiusOfCurvature() const; + void setStartRadiusOfCurvature(double v); + double EndRadiusOfCurvature() const; + void setEndRadiusOfCurvature(double v); + double SegmentLength() const; + void setSegmentLength(double v); + boost::optional< double > GravityCenterLineHeight() const; + void setGravityCenterLineHeight(boost::optional< double > v); + ::Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAlignmentHorizontalSegment (IfcEntityInstanceData* e); + IfcAlignmentHorizontalSegment (boost::optional< std::string > v1_StartTag, boost::optional< std::string > v2_EndTag, ::Ifc4x3_add2::IfcCartesianPoint* v3_StartPoint, double v4_StartDirection, double v5_StartRadiusOfCurvature, double v6_EndRadiusOfCurvature, double v7_SegmentLength, boost::optional< double > v8_GravityCenterLineHeight, ::Ifc4x3_add2::IfcAlignmentHorizontalSegmentTypeEnum::Value v9_PredefinedType); + typedef aggregate_of< IfcAlignmentHorizontalSegment > list; +}; +/// An IfcApprovalRelationship associates approvals (one +/// relating approval and one or more related approvals), each having different status or level as the approval process or the approved +/// objects evolve. +/// +/// HISTORY: New entity in Release IFC2x2. +/// +/// IFC2x4 CHANGE  Subtyped from IfcResourceLevelRelationship, order of attributes changed. +class IFC_PARSE_API IfcApprovalRelationship : public IfcResourceLevelRelationship { +public: + /// The approval that other approval is related to. + ::Ifc4x3_add2::IfcApproval* RelatingApproval() const; + void setRelatingApproval(::Ifc4x3_add2::IfcApproval* v); + /// The approvals that are related to another (relating) approval.IFC2x Edition 4 CHANGE The cardinality of this attribute has been changed to SET. + aggregate_of< ::Ifc4x3_add2::IfcApproval >::ptr RelatedApprovals() const; + void setRelatedApprovals(aggregate_of< ::Ifc4x3_add2::IfcApproval >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcApprovalRelationship (IfcEntityInstanceData* e); + IfcApprovalRelationship (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcApproval* v3_RelatingApproval, aggregate_of< ::Ifc4x3_add2::IfcApproval >::ptr v4_RelatedApprovals); + typedef aggregate_of< IfcApprovalRelationship > list; +}; +/// The closed profile IfcArbitraryClosedProfileDef defines an arbitrary two-dimensional profile for the use within the swept surface geometry, the swept area solid or a sectioned spine. It is given by an outer boundary from which the surface or solid can be constructed. +/// +/// HISTORY: New entity in IFC 1.5. Entity has been renamed from IfcArbitraryProfileDef in IFC Release 2x. +/// +/// Informal proposition: +/// +/// The OuterCurve has to be a closed curve. +/// The OuterCurve shall not intersect. +/// +/// Figure 307 illustrates the arbitrary closed profile definition. The OuterCurve is defined in the underlying coordinate system. The underlying coordinate system is defined by the swept surface or swept area solid that uses the profile definition. It is the xy plane of either: +/// +/// IfcSweptSurface.Position +/// IfcSweptAreaSolid.Position +/// +/// or in case of sectioned spines the xy plane of each list member of IfcSectionedSpine.CrossSectionPositions. The OuterCurve +/// attribute defines a two dimensional closed bounded curve. +/// +/// Figure 307 — Arbitrary closed profile +class IFC_PARSE_API IfcArbitraryClosedProfileDef : public IfcProfileDef { +public: + /// Bounded curve, defining the outer boundaries of the arbitrary profile. + ::Ifc4x3_add2::IfcCurve* OuterCurve() const; + void setOuterCurve(::Ifc4x3_add2::IfcCurve* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcArbitraryClosedProfileDef (IfcEntityInstanceData* e); + IfcArbitraryClosedProfileDef (::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcCurve* v3_OuterCurve); + typedef aggregate_of< IfcArbitraryClosedProfileDef > list; +}; +/// The open profile IfcArbitraryOpenProfileDef defines an arbitrary two-dimensional open profile for the use within the swept surface geometry. It is given by an open boundary from with the surface can be constructed. +/// +/// HISTORY  New entity in IFC2x. +/// +/// Informal proposition: +/// +/// The Curve has to be an open curve. +/// +/// Figure 308 illustrates the arbitrary open profile definition. The Curve is defined in the underlying coordinate system. The underlying coordinate system is defined by the swept surface that uses the profile definition. It is the xy plane of: +/// +/// IfcSweptSurface.Position +/// +/// The Curve attribute defines a two dimensional open bounded curve. +/// +/// Figure 308 — Arbitrary open profile +class IFC_PARSE_API IfcArbitraryOpenProfileDef : public IfcProfileDef { +public: + /// Open bounded curve defining the profile. + ::Ifc4x3_add2::IfcBoundedCurve* Curve() const; + void setCurve(::Ifc4x3_add2::IfcBoundedCurve* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcArbitraryOpenProfileDef (IfcEntityInstanceData* e); + IfcArbitraryOpenProfileDef (::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcBoundedCurve* v3_Curve); + typedef aggregate_of< IfcArbitraryOpenProfileDef > list; +}; +/// The IfcArbitraryProfileDefWithVoids defines an arbitrary closed two-dimensional profile with holes defined for the use for the swept area solid or a sectioned spine. It is given by an outer boundary and inner boundaries from with the solid the can be constructed. +/// +/// HISTORY  New entity in IFC2x. +/// +/// Informal propositions: +/// +/// The outer curve and all inner curves shall be closed curves. +/// The outer curve shall enclose all inner curves. +/// No inner curve shall intersect with the outer curve or any other inner curve. +/// No inner curve may enclose another inner curve. +/// +/// Figure 309 illustrates the arbitrary closed profile definition with voids. The OuterCurve, defined at the supertype IfcArbitraryClosedProfileDef +/// and the inner curves are defined in the same underlying coordinate system. The common underlying coordinate system is defined by the swept area solid that uses the profile definition. It is the xy plane of: +/// +/// IfcSweptAreaSolid.Position +/// +/// or in case of sectioned spines the xy plane of each list member of IfcSectionedSpine.CrossSectionPositions. The OuterCurve attribute defines a two dimensional closed bounded curve, the InnerCurves define a set of two dimensional closed bounded curves. +/// +/// Figure 309 — Arbitrary profile with voids +class IFC_PARSE_API IfcArbitraryProfileDefWithVoids : public IfcArbitraryClosedProfileDef { +public: + /// Set of bounded curves, defining the inner boundaries of the arbitrary profile. + aggregate_of< ::Ifc4x3_add2::IfcCurve >::ptr InnerCurves() const; + void setInnerCurves(aggregate_of< ::Ifc4x3_add2::IfcCurve >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcArbitraryProfileDefWithVoids (IfcEntityInstanceData* e); + IfcArbitraryProfileDefWithVoids (::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcCurve* v3_OuterCurve, aggregate_of< ::Ifc4x3_add2::IfcCurve >::ptr v4_InnerCurves); + typedef aggregate_of< IfcArbitraryProfileDefWithVoids > list; +}; +/// An IfcBlobTexture provides a 2-dimensional distribution of the lighting parameters of a surface onto which it is mapped. The texture itself is given as a single binary blob, representing the content of a pixel format file. The file format of the pixel file is given by the RasterFormat attribute and allowable formats are guided by where rule SupportedRasterFormat. +/// +/// NOTE  Toolbox specific implementations of the binary datatype may restrict the maximum length of the binary blob to capture the raster file content. +/// +/// For interpretation of the texture nodes see IfcImageTexture definition. +/// +/// HISTORY  New class in IFC2x3. +/// +/// IFC2x4 CHANGE  Data type of RasterCode has been corrected to BINARY. +class IFC_PARSE_API IfcBlobTexture : public IfcSurfaceTexture { +public: + /// The format of the RasterCode often using a compression. + std::string RasterFormat() const; + void setRasterFormat(std::string v); + /// Blob, given as a single binary, to capture the texture within one popular file (compression) format. The file format is provided by the RasterFormat attribute. + boost::dynamic_bitset<> RasterCode() const; + void setRasterCode(boost::dynamic_bitset<> v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBlobTexture (IfcEntityInstanceData* e); + IfcBlobTexture (bool v1_RepeatS, bool v2_RepeatT, boost::optional< std::string > v3_Mode, ::Ifc4x3_add2::IfcCartesianTransformationOperator2D* v4_TextureTransform, boost::optional< std::vector< std::string > /*[1:?]*/ > v5_Parameter, std::string v6_RasterFormat, boost::dynamic_bitset<> v7_RasterCode); + typedef aggregate_of< IfcBlobTexture > list; +}; +/// The profile IfcCenterLineProfileDef defines an arbitrary two-dimensional open, not self intersecting profile for the use within the swept solid geometry. It is given by an area defined by applying a constant thickness to a centerline, generating an area from which the solid can be constructed. +/// +/// Among else, IfcCenterLineProfileDef is used to model cold-formed +/// steel or aluminium sections (Sigma, Zeta, Omega, and similar sections +/// which are not covered by subtypes of IfcParameterizedProfileDef). +/// However, since IfcCenterLineProfileDef does not provide shape parameters +/// except for the thickness, there is generally a need to further specify the +/// profile definition by means of +/// +/// the name, +/// external reference to a document or library, +/// profile properties, +/// +/// or a combination of them. See IfcProfileDef for guidance on external references for profiles. +/// +/// HISTORY  New entity in IFC2x3. +/// +/// Informal proposition: +/// +/// The Curve has to be an open curve. +/// The Curve has to be a non-intersecting curve. +/// +/// Figure 311 illustrates the center line profile definition. The Curve is defined in the underlying coordinate system. The underlying coordinate system is defined by the swept surface that uses the profile definition. It is the xy plane of: +/// +/// IfcSweptSurface.Position +/// +/// The Curve attribute defines a two dimensional open bounded curve. The Thickness attribute defines a constant thickness along the curve. +/// +/// Figure 311 — Centerline profile +class IFC_PARSE_API IfcCenterLineProfileDef : public IfcArbitraryOpenProfileDef { +public: + /// Constant thickness applied along the center line. + double Thickness() const; + void setThickness(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCenterLineProfileDef (IfcEntityInstanceData* e); + IfcCenterLineProfileDef (::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcBoundedCurve* v3_Curve, double v4_Thickness); + typedef aggregate_of< IfcCenterLineProfileDef > list; +}; +/// An IfcClassification is used for the arrangement of objects into a class or category according to a common purpose or their possession of common +/// characteristics. A classification in the sense of IfcClassification is taxonomy, or taxonomic scheme, arranged in a hierarchical structure. A category of objects relates to other categories in a generalization-specialization relationship. Therefore the classification items in an +/// classification are organized in a tree structure. +/// +/// HISTORY New class in IFC Release 1.5. Modified in IFC 2x. +/// +/// IFC 2x4 CHANGE Attribute Edition made optional. Attributes: PublicationLocation, Description and ReferenceTokens added. Inverse attribute HasClassificationReferences added. +/// +/// Classification use definitions +/// IfcClassification identifies the classification system or source from which a classification notation is derived. Each classification reference or classification item, belonging to a single classification system, shall reference a single instance of IfcClassification. Therefore, each particular classification system or source used should have only one IfcClassification instance. However, because multiple classification is allowed, there may be many IfcClassification objects used, each identifying a different classification system or source. +/// +/// A classification system declared may be either formally published (such as Omniclass, Uniclass, Masterformat, or DIN) or it may be a locally defined method of classifiying information. There are two methods to define a classification system within an IFC dataset: +/// +/// Including the classification system structure within the dataset: Here a hierarchical tree of IfcClassificationItem's is included that defines the classification system including the relationship between the classification items. An IfcClassificationNotation is used to classify an object. +/// Referencing the classification system by a classification key or id: Here the IfcClassificationReference is used to assign a classification id or key to each classified object. +class IFC_PARSE_API IfcClassification : public IfcExternalInformation, public IfcClassificationReferenceSelect, public IfcClassificationSelect { +public: + /// Source (or publisher) for this classification. + /// + /// NOTE that the source of the classification means the person or organization that was the original author or the person or organization currently acting as the publisher. + boost::optional< std::string > Source() const; + void setSource(boost::optional< std::string > v); + /// The edition or version of the classification system from which the classification notation is derived. + /// + /// NOTE the version labeling system is specific to the classification system. + /// + /// IFC2x4 CHANGE The attribute has been changed to be optional. + boost::optional< std::string > Edition() const; + void setEdition(boost::optional< std::string > v); + /// The date on which the edition of the classification used became valid. + /// + /// NOTE The indication of edition may be sufficient to identify the classification source uniquely but the edition date is provided as an optional attribute to enable more precise identification where required. + /// + /// IFC2x4 CHANGE The data type has been changed to IfcDate, the date string according to ISO8601. + boost::optional< std::string > EditionDate() const; + void setEditionDate(boost::optional< std::string > v); + /// The name or label by which the classification used is normally known. + /// + /// NOTE Examples of names include CI/SfB, Masterformat, BSAB, Uniclass, STABU, DIN276, DIN277 etc. + std::string Name() const; + void setName(std::string v); + /// Additional description provided for the classification. + /// + /// IFC2x4 CHANGE  New attribute added at the end of the attribute list. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + boost::optional< std::string > Specification() const; + void setSpecification(boost::optional< std::string > v); + /// The delimiter tokens that are used to mark the boundaries of individual facets (substrings) in a classification reference. + /// + /// This typically applies then the IfcClassification is used in + /// conjuction with IfcClassificationReference's. If only one ReferenceToken is provided, it applies to all boundaries of individual facets, if more than one ReferenceToken are provided, the first token applies to the first boundary, the second token to the second boundary, and the nth token to the nth and any additional boundary. + /// + /// NOTE  Tokens are typically recommended within the classification itself and each token will have a particular role. + /// + /// EXAMPLE 1  To indicate that the facet delimiter used for DIN277-2 reference key "2.1" ("Office rooms") is ".", a single ReferenceToken ['.'] is provided. To indicate that the facet delimiter used for Omniclass Table 13 (space by function) reference key "13-15 11 34 11" ("Office") are "-" and " ", two ReferenceToken's ['-', ' '] are provided. + /// + /// EXAMPLE 2  The use of ReferenceTokens can also be extended to include masks. The use need to be agreed in view definitions or implementer agreements that stipulates a "mask syntax" that should be used. + /// + /// IFC2x4 CHANGE  New attribute added at the end of the attribute list. + boost::optional< std::vector< std::string > /*[1:?]*/ > ReferenceTokens() const; + void setReferenceTokens(boost::optional< std::vector< std::string > /*[1:?]*/ > v); + aggregate_of< IfcRelAssociatesClassification >::ptr ClassificationForObjects() const; // INVERSE IfcRelAssociatesClassification::RelatingClassification + aggregate_of< IfcClassificationReference >::ptr HasReferences() const; // INVERSE IfcClassificationReference::ReferencedSource + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcClassification (IfcEntityInstanceData* e); + IfcClassification (boost::optional< std::string > v1_Source, boost::optional< std::string > v2_Edition, boost::optional< std::string > v3_EditionDate, std::string v4_Name, boost::optional< std::string > v5_Description, boost::optional< std::string > v6_Specification, boost::optional< std::vector< std::string > /*[1:?]*/ > v7_ReferenceTokens); + typedef aggregate_of< IfcClassification > list; +}; +/// An IfcClassificationReference is a reference into a classification system or source (see IfcClassification) for a specific classification key (or notation). +/// +/// The inherited attributes have the following meaning: +/// +/// Identification: holds the key provided for a specific references to classification items (or tables). +/// Name: allows for a human interpretable designation of a classification notation. +/// Location: optionally holds a direct URI link into the classification system (or source) to hyperlink the classification key. +/// +/// The IfcClassificationReference can either be assigned directly to the IfcClassification, such as if no classification hierarchy has to be included, or it references the parent classification notation, if the fully classification hierarchy is included in the data set. The attribute ReferencedSource then holds the following information (choice by IfcClassificationReferenceSelect): +/// +/// being of type IfcClassification: direct reference to the classification system (with meta information provided), used for highest level of classification notations, or if the classification notation hierarchy is not relevant, +/// being of type IfcClassificationReference: reference to the parent classification notation within the classification hierarchy. +/// +/// HISTORY New entity in IFC 2x. +/// +/// IFC2x4 CHANGE The attribute Description and inverse attribute HasReferences are added. The attribute Identification has been renamed from ItemReference. +/// +/// Use definitions +/// The IfcClassificationReference can be used to only assign classification keys to objects, or to hold a fully classification hierarchy. The first is refered to as "lightweight classification", and the second as "full classification" +/// +/// The IfcClassificationReference can be used as a form of 'lightweight' classification through the 'Identification' attribute inherited from the abstract IfcExternalReference class. In this case, the 'Identification' could take (for instance) the Uniclass notation "L6814" which, if the classification was well understood by all parties and was known to be taken from a particular classification source, would be sufficient. The Name attribute could be the title "Tanking". This would remove the need for the overhead of the more complete classification structure of the model. +class IFC_PARSE_API IfcClassificationReference : public IfcExternalReference, public IfcClassificationReferenceSelect, public IfcClassificationSelect { +public: + /// The classification system or source that is referenced. + ::Ifc4x3_add2::IfcClassificationReferenceSelect* ReferencedSource() const; + void setReferencedSource(::Ifc4x3_add2::IfcClassificationReferenceSelect* v); + /// Description of the classification reference for informational purposes. + /// + /// IFC2x4 CHANGE  New attribute added at the end of the attribute list. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + boost::optional< std::string > Sort() const; + void setSort(boost::optional< std::string > v); + aggregate_of< IfcRelAssociatesClassification >::ptr ClassificationRefForObjects() const; // INVERSE IfcRelAssociatesClassification::RelatingClassification + aggregate_of< IfcClassificationReference >::ptr HasReferences() const; // INVERSE IfcClassificationReference::ReferencedSource + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcClassificationReference (IfcEntityInstanceData* e); + IfcClassificationReference (boost::optional< std::string > v1_Location, boost::optional< std::string > v2_Identification, boost::optional< std::string > v3_Name, ::Ifc4x3_add2::IfcClassificationReferenceSelect* v4_ReferencedSource, boost::optional< std::string > v5_Description, boost::optional< std::string > v6_Sort); + typedef aggregate_of< IfcClassificationReference > list; +}; + +class IFC_PARSE_API IfcColourRgbList : public IfcPresentationItem { +public: + std::vector< std::vector< double > > ColourList() const; + void setColourList(std::vector< std::vector< double > > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcColourRgbList (IfcEntityInstanceData* e); + IfcColourRgbList (std::vector< std::vector< double > > v1_ColourList); + typedef aggregate_of< IfcColourRgbList > list; +}; +/// Definition from ISO/CD 10303-46:1992: The colour specification entity contains a direct colour definition. Colour component values refer directly to a specific colour space. +/// +/// NOTE  Corresponding ISO 10303 name: colour_specification. It has been made into an abstract entity in IFC. Please refer to ISO/IS 10303-46:1994, p. 138 for the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC2x2. +class IFC_PARSE_API IfcColourSpecification : public IfcPresentationItem, public IfcColour, public IfcFillStyleSelect { +public: + /// Optional name given to a particular colour specification in addition to the colour components (like the RGB values). + /// + /// NOTE  Examples are the names of a industry colour classification, such as RAL. + /// IFC2x Edition 3 CHANGE  Attribute added. + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcColourSpecification (IfcEntityInstanceData* e); + IfcColourSpecification (boost::optional< std::string > v1_Name); + typedef aggregate_of< IfcColourSpecification > list; +}; +/// The IfcCompositeProfileDef +/// defines the profile by composition of other profiles. The composition +/// is given by a set of at least two other profile definitions. Any +/// profile definition (except for another composite profile) can be used +/// to construct the composite. +/// +/// HISTORY  New entity in IFC2x. +/// +/// Figure 314 illustrates the composite profile definition. The IfcCompositeProfileDef does not define an own position coordinate system, it is directly defined in the underlying coordinate system. The underlying coordinate system is defined by the swept surface or swept area solid that uses the profile definition. It is the xy plane of either: +/// +/// IfcSweptSurface.Position +/// IfcSweptAreaSolid.Position +/// +/// Or in case of sectioned spines it is the xy plane of each list member of IfcSectionedSpine.CrossSectionPositions. The IfcCompositeProfileDef is defined using other profile definitions. Those other profile definitions are directly inserted into the underlying coordinate system. +/// +/// In case of parameterized profile definitions, the Position attribute of those standard profiles is used to place the profiles relatively to each other. +/// In case of arbitrary profile definitions, each Cartesian coordinate is given directly within the underlying coordinate system. +/// +/// NOTE  The black coordinate axes show the underlying coordinate system of the swept surface or swept area solid. +/// +/// Figure 314 +/// +/// Twin profiles special case +/// +/// If twin profiles are modeled by profile composition, the base profile should +/// only be specified once. It is then included into the composite profile directly +/// and additionally indirectly via IfcMirroredProfileDef. For example, a +/// double angle made of two L100x10 with 10mm air gap between them, i.e. a +/// _| |_ shape, can be modeled as +/// +/// single_L : IfcLShapeProfileDef := IfcLShapeProfileDef(AREA, 'L100X100X10', +///     IfcAxis2Placement2D(IfcCartesianPoint(((.100+.010)/2., .0)), ?), +///     .100, .100, .010, .012, ?, 0., ?, ?); +///   +/// double_L : IfcCompositeProfileDef := IfcCompositeProfileDef(AREA, 'double angle', +///     (single_L, IfcMirroredProfileDef(AREA, ?, single_L, ?)), 'twin profile'); +class IFC_PARSE_API IfcCompositeProfileDef : public IfcProfileDef { +public: + /// The profiles which are used to define the composite profile. + aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr Profiles() const; + void setProfiles(aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr v); + /// The name by which the composition may be referred to. The actual meaning of the name has to be defined in the context of applications. + boost::optional< std::string > Label() const; + void setLabel(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCompositeProfileDef (IfcEntityInstanceData* e); + IfcCompositeProfileDef (::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr v3_Profiles, boost::optional< std::string > v4_Label); + typedef aggregate_of< IfcCompositeProfileDef > list; +}; +/// Definition from ISO/CD 10303-42:1992: A connected_face_set is a set of faces such that the domain of faces together with their bounding edges and vertices is connected. +/// +/// NOTE  Corresponding ISO 10303 entity: connected_face_set, the subtype closed_shell is included as IfcClosedShell and the subtype open_shell is included as IfcOpenShell. Please refer to ISO/IS 10303-42:1994, p. 144 for the final definition of the formal standard. +/// +/// HISTORY  New class in IFC Release 1.0 +/// +/// Informal proposition: +/// +/// The union of the domains of the faces and their bounding loops shall be arcwise connected. +class IFC_PARSE_API IfcConnectedFaceSet : public IfcTopologicalRepresentationItem { +public: + /// The set of faces arcwise connected along common edges or vertices. + aggregate_of< ::Ifc4x3_add2::IfcFace >::ptr CfsFaces() const; + void setCfsFaces(aggregate_of< ::Ifc4x3_add2::IfcFace >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcConnectedFaceSet (IfcEntityInstanceData* e); + IfcConnectedFaceSet (aggregate_of< ::Ifc4x3_add2::IfcFace >::ptr v1_CfsFaces); + typedef aggregate_of< IfcConnectedFaceSet > list; +}; +/// IfcConnectionCurveGeometry is used to describe the geometric constraints that facilitate the physical connection of two objects at a curve or at an edge with curve geometry associated. It is envisioned as a control that applies to the element connection relationships. +/// +/// EXAMPLE  The connection relationship between two walls has a geometric constraint which describes the end caps (or cut-off of the wall ends) by a CurveOnRelatingElement for the first wall and a CurveOnRelatedElement for the second wall. The exact usage of the IfcConnectionCurveGeometry is further defined in the geometry use sections of the elements that use it. +/// +/// The available geometry for the connection constraint may be further restricted to only allow straight segments by applying IfcPolyline +/// only. Such an usage constraint is provided at the object definition of the IfcElement subtype, utilizing the element connection by referring to the subtype of IfcRelConnects with the associated IfcConnectionCurveGeometry. +/// +/// HISTORY  New entity in IFC Release 1.5, has been renamed from IfcLineConnectionGeometry in IFC Release 2x. +/// +/// IFC2x Edition 3 CHANGE  The provision of topology with associated geometry, IfcEdgeCurve, is enabled by using the IfcCurveOrEdgeCurve. +/// +/// Geometry use definitions +/// The IfcCurve (or the IfcEdgeCurve with an associated IfcCurve) at the CurveOnRelatingElement attribute defines the curve where the basic geometry items of the connected elements connects. The curve geometry and coordinates are provided within the local coordinate system of the RelatingElement, as specified at the IfcRelConnects Subtype that utilizes the IfcConnectionCurveGeometry. Optionally, the same curve geometry and coordinates can also be provided within the local coordinate system of the RelatedElement by using the CurveOnRelatedElement attribute. +class IFC_PARSE_API IfcConnectionCurveGeometry : public IfcConnectionGeometry { +public: + /// The bounded curve at which the connected objects are aligned at the relating element, given in the LCS of the relating element. + ::Ifc4x3_add2::IfcCurveOrEdgeCurve* CurveOnRelatingElement() const; + void setCurveOnRelatingElement(::Ifc4x3_add2::IfcCurveOrEdgeCurve* v); + /// The bounded curve at which the connected objects are aligned at the related element, given in the LCS of the related element. If the information is omitted, then the origin of the related element is used. + ::Ifc4x3_add2::IfcCurveOrEdgeCurve* CurveOnRelatedElement() const; + void setCurveOnRelatedElement(::Ifc4x3_add2::IfcCurveOrEdgeCurve* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcConnectionCurveGeometry (IfcEntityInstanceData* e); + IfcConnectionCurveGeometry (::Ifc4x3_add2::IfcCurveOrEdgeCurve* v1_CurveOnRelatingElement, ::Ifc4x3_add2::IfcCurveOrEdgeCurve* v2_CurveOnRelatedElement); + typedef aggregate_of< IfcConnectionCurveGeometry > list; +}; +/// IfcConnectionPointEccentricity is used to describe the geometric constraints that facilitate the physical connection of two objects at a point or vertex point with associated point coordinates. There is a physical distance, or eccentricity, etween the connection points of both object. The eccentricity can be either given by: +/// +/// providing the PointOnRelatingElement and the PointOnRelatedElement, where bothpoint coordinates are not identical within a common parent coordinate system (latestly within the world coordinate system), +/// providing the PointOnRelatingElement and the three distance measures, EccentricityInX, EccentricityInY, and EccentricityInZ (or only EccentricityInX, and EccentricityInY if the +/// underlying coordinate system is two-dimensional), or +/// providing both. +/// +/// NOTE If both, PointOnRelatedElement, and EccentricityInX, EccentricityInY, (EccentricityInZ) are provided, the values should be consistent. In case of any non-consistency, the calculated distance between PointOnRelatingElement and PointOnRelatedElement takes precedence. +/// +/// The explicit values for EccentricityInX, EccentricityInY, and EccentricityInZ are always +/// measured in the following direction and coordinate system (defining when the value is positive or negative): +/// +/// from the PointOnRelatedElement to PointOnRelatingElement within the coordinate system of the RelatingElement. +/// in addition: when used to specify connections in structural analysis models, the IfcStructuralMember is to be used as the RelatingElement of the relationship object utilizing IfcConnectionPointEccentricity, and the IfcStructuralConnection is the RelatedElement. +/// +/// HISTORY New entity in IFC 2x Edition 3. +/// +/// Geometry use definitions +/// The IfcPoint (or the IfcVertexPoint with an associated IfcPoint) at the PointOnRelatingElement attribute defines the point where the basic geometry items of the connected elements connects. The point coordinates are provided within the local coordinate system of the RelatingElement, as specified at the IfcRelConnects subtype that utilizes the IfcConnectionPointGeometry. Optionally, the same point coordinates can also be provided within the local coordinate system of the RelatedElement by using the PointOnRelatedElement attribute, otherwise the distance to the point at the RelatedElement has to be given by the three eccentricity values. +class IFC_PARSE_API IfcConnectionPointEccentricity : public IfcConnectionPointGeometry { +public: + /// Distance in x direction between the two points (or vertex points) engaged in the point connection. + boost::optional< double > EccentricityInX() const; + void setEccentricityInX(boost::optional< double > v); + /// Distance in y direction between the two points (or vertex points) engaged in the point connection. + boost::optional< double > EccentricityInY() const; + void setEccentricityInY(boost::optional< double > v); + /// Distance in z direction between the two points (or vertex points) engaged in the point connection. + boost::optional< double > EccentricityInZ() const; + void setEccentricityInZ(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcConnectionPointEccentricity (IfcEntityInstanceData* e); + IfcConnectionPointEccentricity (::Ifc4x3_add2::IfcPointOrVertexPoint* v1_PointOnRelatingElement, ::Ifc4x3_add2::IfcPointOrVertexPoint* v2_PointOnRelatedElement, boost::optional< double > v3_EccentricityInX, boost::optional< double > v4_EccentricityInY, boost::optional< double > v5_EccentricityInZ); + typedef aggregate_of< IfcConnectionPointEccentricity > list; +}; +/// Definition from ISO/CD 10303-41:1992: A context dependent unit is a unit which is not related to the SI system. +/// +/// NOTE The number of parts in an assembly is a physical quantity measured in units that may be called "parts" but which cannot be related to an SI unit. +/// +/// NOTE Corresponding ISO 10303 name: context_dependent_unit, please refer to ISO/IS 10303-41 for the final definition of the formal standard. +/// +/// HISTORY New entity in IFC Release 1.5.1. +class IFC_PARSE_API IfcContextDependentUnit : public IfcNamedUnit, public IfcResourceObjectSelect { +public: + /// The word, or group of words, by which the context dependent unit is referred to. + std::string Name() const; + void setName(std::string v); + aggregate_of< IfcExternalReferenceRelationship >::ptr HasExternalReference() const; // INVERSE IfcExternalReferenceRelationship::RelatedResourceObjects + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcContextDependentUnit (IfcEntityInstanceData* e); + IfcContextDependentUnit (::Ifc4x3_add2::IfcDimensionalExponents* v1_Dimensions, ::Ifc4x3_add2::IfcUnitEnum::Value v2_UnitType, std::string v3_Name); + typedef aggregate_of< IfcContextDependentUnit > list; +}; +/// Definition from ISO/CD 10303-41:1992: A conversion based unit is a unit that is defined based on a measure with unit. +/// +/// NOTE Corresponding ISO 10303 name: conversion_based_unit, please refer to ISO/IS 10303-41 for the final definition of the formal standard. +/// +/// HISTORY New entity in IFC Release 1.5.1. +/// +/// IFC 2x3 change: standard names of typical units added. +/// +/// IFC 2x4 change: further names added: square inch, square foot, square mile, square yard, cubic inch, cubic foot, cubic yard, fluid ounce UK/US, ton UK/US, degree. +/// +/// Example: An inch is a converted unit. It is from the Imperial system, its name is "inch" and it can be related to the si unit, millimetre, through a measure with unit whose value is 25.4 millimetre. A foot is also a converted unit. It is from the Imperial system, its name is "foot" and it can be related to an IfcSIUnit, millimetre, either directly or through the unit called "inch". Note that several US customary units differ from Imperial units (nonmetric English units) of the same name. +/// +/// To identify some commonly used conversion based units, the standard designations (case insensitive) for the Name attribute include the following: +/// +/// Name Description +/// 'inch' Length measure equal to 25.4 mm +/// 'foot' Length measure equal to 304.8 mm +/// 'yard' Length measure equal to 914 mm +/// 'mile' Length measure equal to 1609 m +/// 'square inch' Area measure equal to 0.0006452 square meters +/// 'square foot' Area measure equal to 0.09290 square meters +/// 'square yard' Area measure equal to 0.83612736 square meters +/// 'acre' Area measure equal to 4046.86 square meters +/// 'square mile' Area measure equal to 2 588 881 square meters +/// 'cubic inch' Volume measure equal to 0.00001639 cubic meters +/// 'cubic foot' Volume measure equal to 0.02832 cubic meters +/// 'cubic yard' Volume measure equal to 0.7636 cubic meters +/// 'litre' Volume measure equal to 0.001 cubic meters +/// 'fluid ounce UK' Volume measure equal to 0.0000284130625 cubic meters +/// 'fluid ounce US' Volume measure equal to 0.00002957353 cubic meters +/// 'pint UK' Volume measure equal to 0.000568 cubic meters +/// 'pint US' Volume measure equal to 0.000473 cubic meters +/// 'gallon UK' Volume measure equal to 0.004546 cubic meters +/// 'gallon US' Volume measure equal to 0.003785 cubic meters +/// 'degree' Angle measure equal to π/180 rad +/// 'ounce' Mass measure equal to 28.35 g +/// 'pound' Mass measure equal to 0.454 kg +/// 'ton UK' Mass measure equal to 1016.0469088 kg, also known as long ton, gross ton, shipper's ton +/// 'ton US' Mass measure equal to 907.18474 kg, also known as short ton, net ton +/// 'lbf' Force measure equal to 4.4482216153 N, pound-force +/// 'kip' Force measure equal to 4448.2216153 N, kilopound-force +/// 'psi' Pressure measure equal to 6894.7572932 Pa, pound-force per square inch +/// 'ksi' Pressure measure equal to 6894757.2932 Pa, kilopound-force per square inch +/// 'minute' Time measure equal to 60 s +/// 'hour' Time measure equal to 3600 s +/// 'day' Time measure equal to 86400 s +/// 'btu' Energy measure equal to 1055.056 J, British Thermal Unit +class IFC_PARSE_API IfcConversionBasedUnit : public IfcNamedUnit, public IfcResourceObjectSelect { +public: + /// The word, or group of words, by which the conversion based unit is referred to. + std::string Name() const; + void setName(std::string v); + /// The physical quantity from which the converted unit is derived. + ::Ifc4x3_add2::IfcMeasureWithUnit* ConversionFactor() const; + void setConversionFactor(::Ifc4x3_add2::IfcMeasureWithUnit* v); + aggregate_of< IfcExternalReferenceRelationship >::ptr HasExternalReference() const; // INVERSE IfcExternalReferenceRelationship::RelatedResourceObjects + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcConversionBasedUnit (IfcEntityInstanceData* e); + IfcConversionBasedUnit (::Ifc4x3_add2::IfcDimensionalExponents* v1_Dimensions, ::Ifc4x3_add2::IfcUnitEnum::Value v2_UnitType, std::string v3_Name, ::Ifc4x3_add2::IfcMeasureWithUnit* v4_ConversionFactor); + typedef aggregate_of< IfcConversionBasedUnit > list; +}; +/// IfcConversionBasedUnitWithOffset is a unit which is converted from another unit by applying a conversion factor and an offset. +/// +/// HISTORY New entity in IFC 2x4. +/// +/// Example: The temperature unit Fahrenheit is based on the temperature unit Kelvin as follows: +/// +/// f = k · 1.8 – 459.67 +/// +/// wherein k is an absolute temperature expressed in Kelvin and f is the same temperature in Fahrenheit. The following entity instances provide Fahrenheit as a unit: +/// +/// IfcConversionBasedUnitWithOffset( +///     IfcDimensionalExponents(0, 0, 0, 0, 1, 0, 0), +///     THERMODYNAMICTEMPERATUREUNIT, +///     'Fahrenheit', +///     IfcMeasureWithUnit( +///         IfcThermodynamicTemperatureMeasure(1.8), +///         IfcSiUnit(THERMODYNAMICTEMPERATUREUNIT, ?, KELVIN)), +///     -459.67); +class IFC_PARSE_API IfcConversionBasedUnitWithOffset : public IfcConversionBasedUnit { +public: + /// A positive or negative offset to add after the inherited ConversionFactor was applied. + double ConversionOffset() const; + void setConversionOffset(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcConversionBasedUnitWithOffset (IfcEntityInstanceData* e); + IfcConversionBasedUnitWithOffset (::Ifc4x3_add2::IfcDimensionalExponents* v1_Dimensions, ::Ifc4x3_add2::IfcUnitEnum::Value v2_UnitType, std::string v3_Name, ::Ifc4x3_add2::IfcMeasureWithUnit* v4_ConversionFactor, double v5_ConversionOffset); + typedef aggregate_of< IfcConversionBasedUnitWithOffset > list; +}; +/// IfcCurrencyRelationship defines the rate of exchange +/// that applies between two designated currencies at a particular time +/// and as published by a particular source. +/// +/// HISTORY  New Entity in IFC2x2. +/// +/// IFC2x4 CHANGE  Subtyped from IfcResourceLevelRelationship, attribute order changed. +/// +/// Use definitions +/// An IfcCurrencyRelationship is used where there may be a need to reference an IfcCostValue in one currency to an IfcCostValue in another currency. It takes account of fact that currency exchange rates may vary by requiring the recording the date and time of the currency exchange rate used and the source that publishes the rate. There may be many sources and there are different strategies for currency conversion (spot rate, forward buying of currency at a fixed rate). +/// The source for the currency exchange is defined as an instance of IfcLibraryInformation that includes a name and a URL. +class IFC_PARSE_API IfcCurrencyRelationship : public IfcResourceLevelRelationship { +public: + /// The monetary unit from which an exchange is derived. For instance, in the case of a conversion from GBP to USD, the relating monetary unit is GBP. + ::Ifc4x3_add2::IfcMonetaryUnit* RelatingMonetaryUnit() const; + void setRelatingMonetaryUnit(::Ifc4x3_add2::IfcMonetaryUnit* v); + /// The monetary unit to which an exchange results. For instance, in the case of a conversion from GBP to USD, the related monetary unit is USD. + ::Ifc4x3_add2::IfcMonetaryUnit* RelatedMonetaryUnit() const; + void setRelatedMonetaryUnit(::Ifc4x3_add2::IfcMonetaryUnit* v); + /// The currently agreed ratio of the amount of a related monetary unit that is equivalent to a unit amount of the relating monetary unit in a currency relationship. For instance, in the case of a conversion from GBP to USD, the value of the exchange rate may be 1.486 (USD) : 1 (GBP). + double ExchangeRate() const; + void setExchangeRate(double v); + /// The date and time at which an exchange rate applies. + /// + /// IFC2x4 CHANGE Type changed from IfcDateTimeSelect. Attribute made optional. + boost::optional< std::string > RateDateTime() const; + void setRateDateTime(boost::optional< std::string > v); + /// The source from which an exchange rate is obtained. + ::Ifc4x3_add2::IfcLibraryInformation* RateSource() const; + void setRateSource(::Ifc4x3_add2::IfcLibraryInformation* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCurrencyRelationship (IfcEntityInstanceData* e); + IfcCurrencyRelationship (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcMonetaryUnit* v3_RelatingMonetaryUnit, ::Ifc4x3_add2::IfcMonetaryUnit* v4_RelatedMonetaryUnit, double v5_ExchangeRate, boost::optional< std::string > v6_RateDateTime, ::Ifc4x3_add2::IfcLibraryInformation* v7_RateSource); + typedef aggregate_of< IfcCurrencyRelationship > list; +}; +/// Definition from ISO/CD 10303-46:1992: A curve style specifies the visual appearance of curves. +/// +/// An IfcCurveStyle provides the style table for presentation information assigned to geometric curves. The style is defined by a color, a font and a width. The IfcCurveStyle defines curve patterns as model patterns, that is, the distance between visible and invisible segments of curve patterns are given in model space dimensions (that have to be scaled using the target plot scale). +/// +/// Styles are intended to be shared by multiple IfcStyledItem's, assigning the style to occurrences of (subtypes of) IfcGeometricRepresentationItem's. Measures given to a font pattern or a curve width are given in global drawing length units. +/// +/// NOTE  global units are defined at the single IfcProject instance, given by UnitsInContext:IfcUnitAssignment, the same units are used for the geometric representation items and for the style definitions. +/// +/// The measure values for font pattern and curve width apply to the model space with a target plot scale provided for the correct appearance in the default plot scale.. For different scale and projection dependent curve styles a different instance of IfcCurveStyle needs to be used by IfcPresentationStyleAssignment for different IfcGeometricRepresentationSubContext dependent representations. +/// +/// NOTE  the target plot scale is given by IfcGeometricRepresentationSubContext.TargetScale. +/// +/// An IfcCurveStyle can be assigned to IfcGeometricRepresentationItem's via the IfcPresentationStyleAssignment through an intermediate IfcStyledItem or IfcAnnotationCurveOccurrence. +/// +/// NOTE  Corresponding ISO 10303 name: curve_style. Please refer to ISO/IS 10303-46:1994 for the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC2x2. +class IFC_PARSE_API IfcCurveStyle : public IfcPresentationStyle { +public: + /// A curve style font which is used to present a curve. It can either be a predefined curve font, or an explicitly defined curve font. Both may be scaled. If not given, then the curve font should be taken from the layer assignment with style, if that is not given either, then the default curve font applies. + ::Ifc4x3_add2::IfcCurveFontOrScaledCurveFontSelect* CurveFont() const; + void setCurveFont(::Ifc4x3_add2::IfcCurveFontOrScaledCurveFontSelect* v); + /// A positive length measure in units of the presentation area for the width of a presented curve. If not given, then the style should be taken from the layer assignment with style, if that is not given either, then the default style applies. + ::Ifc4x3_add2::IfcSizeSelect* CurveWidth() const; + void setCurveWidth(::Ifc4x3_add2::IfcSizeSelect* v); + /// The colour of the visible part of the curve. If not given, then the colour should be taken from the layer assignment with style, if that is not given either, then the default colour applies. + ::Ifc4x3_add2::IfcColour* CurveColour() const; + void setCurveColour(::Ifc4x3_add2::IfcColour* v); + boost::optional< bool > ModelOrDraughting() const; + void setModelOrDraughting(boost::optional< bool > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCurveStyle (IfcEntityInstanceData* e); + IfcCurveStyle (boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcCurveFontOrScaledCurveFontSelect* v2_CurveFont, ::Ifc4x3_add2::IfcSizeSelect* v3_CurveWidth, ::Ifc4x3_add2::IfcColour* v4_CurveColour, boost::optional< bool > v5_ModelOrDraughting); + typedef aggregate_of< IfcCurveStyle > list; +}; +/// Definition from ISO/CD 10303-46:1992: A curve style font combines several curve style font pattern entities into a more complex pattern. The resulting pattern is repeated along the curve. +/// +/// NOTE: Corresponding ISO 10303 name: curve_style_font. Please refer to ISO/IS 10303-46:1994 for the final definition of the formal standard. +/// +/// HISTORY: New entity in IFC2x2. +class IFC_PARSE_API IfcCurveStyleFont : public IfcPresentationItem, public IfcCurveFontOrScaledCurveFontSelect, public IfcCurveStyleFontSelect { +public: + /// Name that may be assigned with the curve font. + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + /// A list of curve font pattern entities, that contains the simple patterns used for drawing curves. The patterns are applied in the order they occur in the list. + aggregate_of< ::Ifc4x3_add2::IfcCurveStyleFontPattern >::ptr PatternList() const; + void setPatternList(aggregate_of< ::Ifc4x3_add2::IfcCurveStyleFontPattern >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCurveStyleFont (IfcEntityInstanceData* e); + IfcCurveStyleFont (boost::optional< std::string > v1_Name, aggregate_of< ::Ifc4x3_add2::IfcCurveStyleFontPattern >::ptr v2_PatternList); + typedef aggregate_of< IfcCurveStyleFont > list; +}; +/// Definition from ISO/CD 10303-46:1992: A curve style font and scaling is a curve style font and a scalar factor for that font, so that a given curve style font may be applied at various scales. +/// +/// The IfcCurveStyleFontAndScaling allows for the reuse of the same curve style definition in several sizes. The definition of the CurveFontScale is the scaling of a base curve style pattern to be used as a new or derived curve style pattern. +/// +/// NOTE  The CurveFontScale should not be mixed up with the target plot scale. +/// +/// An example for IfcCurveStyleFontAndScaling is the sizing of a basic curve style dash pattern 'dash' (visible 0.01m, invisible 0.005m) into 'dash large' with CurveFontScale = 2 (resulting in visible 0.02m, invisible 0.01m), and into 'dash small' with CurveFontScale = 0.5 (resulting in visible 0.005m, invisible 0.0025m). +/// +/// NOTE  Corresponding ISO 10303 name: curve_style_font_and_scaling. Please refer to ISO/IS 10303-46:1994 for the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC2x2. +class IFC_PARSE_API IfcCurveStyleFontAndScaling : public IfcPresentationItem, public IfcCurveFontOrScaledCurveFontSelect { +public: + /// Name that may be assigned with the scaling of a curve font. + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + ::Ifc4x3_add2::IfcCurveStyleFontSelect* CurveStyleFont() const; + void setCurveStyleFont(::Ifc4x3_add2::IfcCurveStyleFontSelect* v); + /// The scale factor. + double CurveFontScaling() const; + void setCurveFontScaling(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCurveStyleFontAndScaling (IfcEntityInstanceData* e); + IfcCurveStyleFontAndScaling (boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcCurveStyleFontSelect* v2_CurveStyleFont, double v3_CurveFontScaling); + typedef aggregate_of< IfcCurveStyleFontAndScaling > list; +}; +/// Definition from ISO/CD 10303-46:1992: A curve style font pattern is a pair of visible and invisible curve segment length measures in presentation area units. +/// +/// NOTE Corresponding ISO 10303 name: curve_style_font_pattern. Please refer to ISO/IS 10303-46:1994 for the final definition of the formal standard. +/// +/// HISTORY New entity in IFC2x2. +class IFC_PARSE_API IfcCurveStyleFontPattern : public IfcPresentationItem { +public: + /// The length of the visible segment in the pattern definition. + /// + /// NOTE  For a visible segment representing a point, the value 0. should be assigned. + /// + /// IFC2x Edition 3 CHANGE  The datatype has been changed to IfcLengthMeasure with upward compatibility for file-based exchange. + double VisibleSegmentLength() const; + void setVisibleSegmentLength(double v); + /// The length of the invisible segment in the pattern definition. + double InvisibleSegmentLength() const; + void setInvisibleSegmentLength(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCurveStyleFontPattern (IfcEntityInstanceData* e); + IfcCurveStyleFontPattern (double v1_VisibleSegmentLength, double v2_InvisibleSegmentLength); + typedef aggregate_of< IfcCurveStyleFontPattern > list; +}; +/// IfcDerivedProfileDef defines the profile by transformation from the parent profile. The transformation is given by a two dimensional transformation operator. Transformation includes translation, rotation, mirror and scaling. The latter can be uniform or non uniform. The derived profiles may be used to define swept surfaces, swept area solids or sectioned spines. +/// +/// The transformation effects the position, rotation, mirroring or scale of the profile at the underlying coordinate system, i.e. the coordinate system defined by the swept surface or swept area solid that uses the profile definition. It is the xy plane of either: +/// +/// IfcSweptSurface.Position +/// IfcSweptAreaSolid.Position +/// +/// or in case of sectioned spines the xy plane of each list member of IfcSectionedSpine.CrossSectionPositions. The position and potential rotation of the ParentProfile within the underlying coordinate system is taken into consideration before applying the Cartesian transformation operator. +/// +/// Note, if only mirroring is required, IfcMirroredProfileDef should be used instead. +/// +/// HISTORY: New entity in IFC Release 2x. +/// +/// Figure 316 illustrates examples of derived profiles. +/// +/// Parameter +/// The IfcDerivedProfileDef +/// is defined using the IfcCartesianTransformationOperator2D +/// (CTO), which is applied to the parent profile definition. +/// +/// Example +/// The example shows an uniform scaling and a transformation +/// of an IfcRectangleProfileDef +/// to match the lower-left cardinal point. The attributes of the CTO are: +/// +/// Axis1 = NIL (defaults to 1.,0.) +/// Axis2 = NIL (defaults to 0.,1.) +/// LocalOrigin = IfcCartesianPoint(,) +/// Scale = 2. +/// +/// Note: The ParentProfile has a Position +/// = IfcCartesianPoint(,) already. +/// +/// Parameter +/// The IfcDerivedProfileDef is defined using +/// non uniform transformationsby applying the IfcCartesianTransformationOperator2DnonUniform +/// as a subtype of the 2D CTO. +/// +/// Example +/// The example shows a non-uniform scaling and a translation of an IfcRectangleProfileDef +/// to match the lower-left cardinal point. The attributes of the CTO are: +/// +/// Axis1 = NIL (defaults to 1.,0.) +/// Axis2 = NIL (defaults to 0.,1.) +/// LocalOrigin = IfcCartesianPoint(0.,<1/2 YDim) +/// Scale  = 1. +/// Scale2 = 2. +/// +/// Note: The ParentProfile has a Position +/// = IfcCartesianPoint(,) already. +/// +/// Parameter +/// The IfcDerivedProfileDef +/// is defined using mirroring by applying the IfcCartesianTransformationOperator2D +/// (CTO) to the parent profile. +/// +/// Example +/// The example shows a mirroring of an IfcLShapeProfileDef +/// to match the centre cardinal point. The attributes of the CTO are: +/// +/// Axis1 = (-1.,0.) +/// Axis2 = NIL (defaults to 0.,1.) +/// LocalOrigin = IfcCartesianPoint(0.,0.) +/// Scale = NIL (defaults to 1.) +/// +/// Note: The ParentProfile has a Position = IfcCartesianPoint(0.,0.). +/// +/// This example is for illustration only. +/// If the transformation results only in mirroring like shown in the example, then +/// IfcMirroredProfileDef should be used instead of IfcDerivedProfileDef. +/// +/// Note: The following color map applies: +/// +/// black coordinate axes show the +/// underlying coordinate system of the swept surface, swept area solid, or +/// sectioned spine +/// +/// red coordinate axes +/// show the position coordinate system of the parent profile +/// +/// brown coordinate axes +/// show the position coordinate system of the derived profile +/// +/// Figure 316 — Derived profile +class IFC_PARSE_API IfcDerivedProfileDef : public IfcProfileDef { +public: + /// The parent profile provides the origin of the transformation. + ::Ifc4x3_add2::IfcProfileDef* ParentProfile() const; + void setParentProfile(::Ifc4x3_add2::IfcProfileDef* v); + /// Transformation operator applied to the parent profile. + ::Ifc4x3_add2::IfcCartesianTransformationOperator2D* Operator() const; + void setOperator(::Ifc4x3_add2::IfcCartesianTransformationOperator2D* v); + /// The name by which the transformation may be referred to. The actual meaning of the name has to be defined in the context of applications. + boost::optional< std::string > Label() const; + void setLabel(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDerivedProfileDef (IfcEntityInstanceData* e); + IfcDerivedProfileDef (::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcProfileDef* v3_ParentProfile, ::Ifc4x3_add2::IfcCartesianTransformationOperator2D* v4_Operator, boost::optional< std::string > v5_Label); + typedef aggregate_of< IfcDerivedProfileDef > list; +}; +/// IfcDocumentInformation captures "metadata" of an external document. The actual content of the document is not defined in IFC; instead, it can be found following the reference given to IfcDocumentReference. +/// +/// HISTORY: New entity in IFC 2x. +class IFC_PARSE_API IfcDocumentInformation : public IfcExternalInformation, public IfcDocumentSelect { +public: + std::string Identification() const; + void setIdentification(std::string v); + /// File name or document name assigned by owner. + std::string Name() const; + void setName(std::string v); + /// Description of document and its content. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + /// Resource identifier or locator, provided as URI, URN or URL, of the document information for online references. + /// + /// IFC2x4 CHANGE  New attribute added at end of attribute list. + boost::optional< std::string > Location() const; + void setLocation(boost::optional< std::string > v); + /// Purpose for this document. + boost::optional< std::string > Purpose() const; + void setPurpose(boost::optional< std::string > v); + /// Intended use for this document. + boost::optional< std::string > IntendedUse() const; + void setIntendedUse(boost::optional< std::string > v); + /// Scope for this document. + boost::optional< std::string > Scope() const; + void setScope(boost::optional< std::string > v); + /// Document revision designation. + boost::optional< std::string > Revision() const; + void setRevision(boost::optional< std::string > v); + /// Information about the person and/or organization acknowledged as the 'owner' of this document. In some contexts, the document owner determines who has access to or editing right to the document. + ::Ifc4x3_add2::IfcActorSelect* DocumentOwner() const; + void setDocumentOwner(::Ifc4x3_add2::IfcActorSelect* v); + /// The persons and/or organizations who have created this document or contributed to it. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcActorSelect >::ptr > Editors() const; + void setEditors(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcActorSelect >::ptr > v); + /// Date and time stamp when the document was originally created. + /// + /// IFC2x4 CHANGE The data type has been changed to IfcDateTime, the date time string according to ISO8601. + boost::optional< std::string > CreationTime() const; + void setCreationTime(boost::optional< std::string > v); + /// Date and time stamp when this document version was created. + /// + /// IFC2x4 CHANGE The data type has been changed to IfcDateTime, the date time string according to ISO8601. + boost::optional< std::string > LastRevisionTime() const; + void setLastRevisionTime(boost::optional< std::string > v); + /// Describes the electronic format of the document being referenced, providing the file extension and the manner in which the content is provided. + boost::optional< std::string > ElectronicFormat() const; + void setElectronicFormat(boost::optional< std::string > v); + /// Date when the document becomes valid. + /// + /// IFC2x4 CHANGE The data type has been changed to IfcDate, the date string according to ISO8601. + boost::optional< std::string > ValidFrom() const; + void setValidFrom(boost::optional< std::string > v); + /// Date until which the document remains valid. + /// + /// IFC2x4 CHANGE The data type has been changed to IfcDate, the date string according to ISO8601. + boost::optional< std::string > ValidUntil() const; + void setValidUntil(boost::optional< std::string > v); + /// The level of confidentiality of the document. + boost::optional< ::Ifc4x3_add2::IfcDocumentConfidentialityEnum::Value > Confidentiality() const; + void setConfidentiality(boost::optional< ::Ifc4x3_add2::IfcDocumentConfidentialityEnum::Value > v); + /// The current status of the document. Examples of status values that might be used for a document information status include: + /// - DRAFT + /// - FINAL DRAFT + /// - FINAL + /// - REVISION + boost::optional< ::Ifc4x3_add2::IfcDocumentStatusEnum::Value > Status() const; + void setStatus(boost::optional< ::Ifc4x3_add2::IfcDocumentStatusEnum::Value > v); + aggregate_of< IfcRelAssociatesDocument >::ptr DocumentInfoForObjects() const; // INVERSE IfcRelAssociatesDocument::RelatingDocument + aggregate_of< IfcDocumentReference >::ptr HasDocumentReferences() const; // INVERSE IfcDocumentReference::ReferencedDocument + aggregate_of< IfcDocumentInformationRelationship >::ptr IsPointedTo() const; // INVERSE IfcDocumentInformationRelationship::RelatedDocuments + aggregate_of< IfcDocumentInformationRelationship >::ptr IsPointer() const; // INVERSE IfcDocumentInformationRelationship::RelatingDocument + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDocumentInformation (IfcEntityInstanceData* e); + IfcDocumentInformation (std::string v1_Identification, std::string v2_Name, boost::optional< std::string > v3_Description, boost::optional< std::string > v4_Location, boost::optional< std::string > v5_Purpose, boost::optional< std::string > v6_IntendedUse, boost::optional< std::string > v7_Scope, boost::optional< std::string > v8_Revision, ::Ifc4x3_add2::IfcActorSelect* v9_DocumentOwner, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcActorSelect >::ptr > v10_Editors, boost::optional< std::string > v11_CreationTime, boost::optional< std::string > v12_LastRevisionTime, boost::optional< std::string > v13_ElectronicFormat, boost::optional< std::string > v14_ValidFrom, boost::optional< std::string > v15_ValidUntil, boost::optional< ::Ifc4x3_add2::IfcDocumentConfidentialityEnum::Value > v16_Confidentiality, boost::optional< ::Ifc4x3_add2::IfcDocumentStatusEnum::Value > v17_Status); + typedef aggregate_of< IfcDocumentInformation > list; +}; +/// An IfcDocumentInformationRelationship is a relationship class that enables a document to have the ability to reference other documents. +/// +/// HISTORY  New entity in Release IFC2x. +/// +/// IFC2x4 CHANGE  Subtyped from IfcResourceLevelRelationship, order of attributes changed. +/// +/// Use definitions +/// This class can be used to describe relationships in which one document may reference one or more other sub documents or where a document is used as a replacement for another document (but where both the original and the replacing document need to be retained). +class IFC_PARSE_API IfcDocumentInformationRelationship : public IfcResourceLevelRelationship { +public: + /// The document that acts as the parent, referencing or original document in a relationship. + ::Ifc4x3_add2::IfcDocumentInformation* RelatingDocument() const; + void setRelatingDocument(::Ifc4x3_add2::IfcDocumentInformation* v); + /// The document that acts as the child, referenced or replacing document in a relationship. + aggregate_of< ::Ifc4x3_add2::IfcDocumentInformation >::ptr RelatedDocuments() const; + void setRelatedDocuments(aggregate_of< ::Ifc4x3_add2::IfcDocumentInformation >::ptr v); + /// Describes the type of relationship between documents. This could be sub-document, replacement etc. The interpretation has to be established in an application context. + boost::optional< std::string > RelationshipType() const; + void setRelationshipType(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDocumentInformationRelationship (IfcEntityInstanceData* e); + IfcDocumentInformationRelationship (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcDocumentInformation* v3_RelatingDocument, aggregate_of< ::Ifc4x3_add2::IfcDocumentInformation >::ptr v4_RelatedDocuments, boost::optional< std::string > v5_RelationshipType); + typedef aggregate_of< IfcDocumentInformationRelationship > list; +}; +/// An IfcDocumentReference is a reference +/// to the location of a document. The reference is given by a system +/// interpretable Location attribute (a URL string) where the document can be found, and an optional inherited +/// internal reference Identification, which refers to a system +/// interpretable position within the document. The optional inherited +/// Name attribute is meant to have meaning for human readers. Optional +/// document metadata can also be captured through reference to +/// IfcDocumentInformation. +/// +/// HISTORY: New Entity in IFC Release 2.0. +/// Modified in IFC 2x. +class IFC_PARSE_API IfcDocumentReference : public IfcExternalReference, public IfcDocumentSelect { +public: + /// Description of the document reference for informational purposes. + /// + /// IFC2x4 CHANGE  New attribute added at the end of the attribute list. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + /// The document that is referenced. + ::Ifc4x3_add2::IfcDocumentInformation* ReferencedDocument() const; + void setReferencedDocument(::Ifc4x3_add2::IfcDocumentInformation* v); + aggregate_of< IfcRelAssociatesDocument >::ptr DocumentRefForObjects() const; // INVERSE IfcRelAssociatesDocument::RelatingDocument + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDocumentReference (IfcEntityInstanceData* e); + IfcDocumentReference (boost::optional< std::string > v1_Location, boost::optional< std::string > v2_Identification, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcDocumentInformation* v5_ReferencedDocument); + typedef aggregate_of< IfcDocumentReference > list; +}; +/// Definition from ISO/CD 10303-42:1992: An edge is the +/// topological construct corresponding to the connection of two +/// vertices. More abstractly, it may stand for a logical +/// relationship between two vertices. The domain of an edge, if +/// present, is a finite, non-self-intersecting open curve in +/// RM, that is, a connected 1-dimensional +/// manifold. The bounds of an edge are two vertices, which need not +/// be distinct. The edge is oriented by choosing its traversal +/// direction to run from the first to the second vertex. If the two +/// vertices are the same, the edge is a self loop. The domain of the +/// edge does not include its bounds, and 0 ≤ Ξ ≤ ∞. +/// Associated with an edge may be a geometric curve to locate the +/// edge in a coordinate space; this is represented by the edge curve +/// (IfcEdgeCurve) subtype. The curve shall be finite and +/// non-self-intersecting within the domain of the edge. An edge is a +/// graph, so its multiplicity M and graph genus Ge +/// may be determined by the graph traversal algorithm. Since +/// M = E = 1, the Euler equation (1) reduces in the +/// case to +/// +/// where V = 1 or 2, and Ge = 1 or 0. +/// Specifically, the topological edge defining data shall +/// satisfy: +/// +/// - an edge has two vertices +/// +/// - the vertices need not be distinct +/// +/// - Equation (2) shall hold. +/// +/// The geometry between the two +/// vertices defaults to a straight line if no curve geometry is +/// assigned using the subtype IfcEdgeCurve. The +/// IfcEdge can therefore be used to exchange straight edges +/// without an associated geometry provided by IfcLine or +/// IfcPolyline thought IfcEdgeCurve.EdgeGeometry. +/// +/// Figure 333 illustrates an example where the bounds of the IfcEdge are given by the EdgeStart and EdgeEnd; this also determines the direction of the edge. The location within a coordinate space is determined by the IfcVertexPoint type for EdgeStart and EdgeEnd. Since no edge geometry is assigned, it defaults to a straight line agreeing to the direction sense. +/// +/// Figure 333 — Edge representation +/// +/// NOTE  Corresponding ISO 10303 entity: edge. Please refer to ISO/IS 10303-42:1994, p. 130 for the final definition of the formal standard. +/// +/// HISTORY  New Entity in IFC Release 2.0 +/// +/// Informal propositions: +/// +/// The edge has dimensionality 1. +/// The extend of an edge shall be finite and nonzero. +class IFC_PARSE_API IfcEdge : public IfcTopologicalRepresentationItem { +public: + /// Start point (vertex) of the edge. + ::Ifc4x3_add2::IfcVertex* EdgeStart() const; + void setEdgeStart(::Ifc4x3_add2::IfcVertex* v); + /// End point (vertex) of the edge. The same vertex can be used for both EdgeStart and EdgeEnd. + ::Ifc4x3_add2::IfcVertex* EdgeEnd() const; + void setEdgeEnd(::Ifc4x3_add2::IfcVertex* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcEdge (IfcEntityInstanceData* e); + IfcEdge (::Ifc4x3_add2::IfcVertex* v1_EdgeStart, ::Ifc4x3_add2::IfcVertex* v2_EdgeEnd); + typedef aggregate_of< IfcEdge > list; +}; +/// Definition from ISO/CD 10303-42:1992: An edge curve is +/// a special subtype of edge which has its geometry fully defined. +/// The geometry is defined by associating the edge with a curve +/// which may be unbounded. As the topological and geometric +/// directions may be opposed, an indicator (same sense) is used to +/// identify whether the edge and curve directions agree or are +/// opposed. The Boolean value indicates whether the curve direction +/// agrees with (TRUE) or is in the opposite direction (FALSE) to the +/// edge direction. Any geometry associated with the vertices of the +/// edge shall be consistent with the edge geometry. Multiple edges +/// can reference the same curve. +/// +/// Figure 334 illustrates an example where the edge geometry is given by an unbounded curve, here IfcCircle. The bounds are provided by the EdgeStart and EdgeEnd, the topological direction of the IfcEdgeCurve opposes the direction of the IfcCircle by SameSense = FALSE. +/// +/// Figure 334 — Edge curve +/// +/// NOTE  Corresponding ISO 10303 entity: edge_curve. Please refer to ISO/IS 10303-42:1994, p. 132 +/// for the final definition of the formal standard. Due to the general IFC model specification rule not to use multiple inheritance, the subtype relationship to geometric_representation_item is not included. +/// +///

list; +}; +/// IfcEventTime captures the time-related information about an event +/// including the different types of event dates (i.e. actual, +/// scheduled, early, and late). +/// +/// HISTORY: New entity in IFC2x4. +/// Use definitions +/// +/// All given values should be provided by the application, +/// i.e. the IFC schema does not deal with dependencies between +/// process time values. At this stage there is also no +/// consistency check through where rules that guarantee a +/// meaningful population of date values. Thus, an application +/// is responsible to provide reasonable values and, if an +/// application receives event dates, has to make consistency +/// checks by their own. +/// +/// IfcEventTime furthermore provides a generic +/// mechanism to differentiate between user given time values +/// and time values derived from user given time values and +/// other constraints such as work calendars and assigned +/// resources (derived from the process graph). The data origin flag +/// is provided as a single attribute applying to all date time related attributes +/// of IfcEventTime. +class IFC_PARSE_API IfcEventTime : public IfcSchedulingTime { +public: + /// The date on which an event actually occurs. It is a measured value. + boost::optional< std::string > ActualDate() const; + void setActualDate(boost::optional< std::string > v); + /// The earliest date on which an event can occur. It is a calculated value. + boost::optional< std::string > EarlyDate() const; + void setEarlyDate(boost::optional< std::string > v); + /// The latest date on which an event can occur. It is a calculated value. + boost::optional< std::string > LateDate() const; + void setLateDate(boost::optional< std::string > v); + /// The date on which an event is scheduled to occur. + /// The value might be measured or somehow calculated, which is defined by + /// ScheduleDataOrigin. + boost::optional< std::string > ScheduleDate() const; + void setScheduleDate(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcEventTime (IfcEntityInstanceData* e); + IfcEventTime (boost::optional< std::string > v1_Name, boost::optional< ::Ifc4x3_add2::IfcDataOriginEnum::Value > v2_DataOrigin, boost::optional< std::string > v3_UserDefinedDataOrigin, boost::optional< std::string > v4_ActualDate, boost::optional< std::string > v5_EarlyDate, boost::optional< std::string > v6_LateDate, boost::optional< std::string > v7_ScheduleDate); + typedef aggregate_of< IfcEventTime > list; +}; + +class IFC_PARSE_API IfcExtendedProperties : public IfcPropertyAbstraction { +public: + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + aggregate_of< ::Ifc4x3_add2::IfcProperty >::ptr Properties() const; + void setProperties(aggregate_of< ::Ifc4x3_add2::IfcProperty >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcExtendedProperties (IfcEntityInstanceData* e); + IfcExtendedProperties (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_add2::IfcProperty >::ptr v3_Properties); + typedef aggregate_of< IfcExtendedProperties > list; +}; +/// IfcExternalReferenceRelationship is a relationship entity that enables objects from the +/// IfcResourceObjectSelect to have the ability to be tagged by external references. +/// +/// NOTE This relationship is used to assign classification, library or document information to entities that +/// do not inherit from IfcRoot. It has a similar functionality as the subtypes of IfcRelAssociates. +/// +/// HISTORY New Entity in IFC 2x4 +class IFC_PARSE_API IfcExternalReferenceRelationship : public IfcResourceLevelRelationship { +public: + /// An external reference that can be used to tag an object within the range of IfcResourceObjectSelect. + /// + /// NOTE  External references can be a library reference (for example a dictionary or a catalogue reference), a classification reference, or a documentation reference. + ::Ifc4x3_add2::IfcExternalReference* RelatingReference() const; + void setRelatingReference(::Ifc4x3_add2::IfcExternalReference* v); + /// Objects within the list of IfcResourceObjectSelect that can be tagged by an external reference to a dictionary, library, catalogue, classification or documentation. + aggregate_of< ::Ifc4x3_add2::IfcResourceObjectSelect >::ptr RelatedResourceObjects() const; + void setRelatedResourceObjects(aggregate_of< ::Ifc4x3_add2::IfcResourceObjectSelect >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcExternalReferenceRelationship (IfcEntityInstanceData* e); + IfcExternalReferenceRelationship (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcExternalReference* v3_RelatingReference, aggregate_of< ::Ifc4x3_add2::IfcResourceObjectSelect >::ptr v4_RelatedResourceObjects); + typedef aggregate_of< IfcExternalReferenceRelationship > list; +}; +/// Definition from ISO/CD 10303-42:1992: A face is a topological +/// entity of dimensionality 2 corresponding to the intuitive notion of a piece of +/// surface bounded by loops. Its domain, if present, is an oriented, connected, +/// finite 2-manifold in Rm. A face domain shall not have handles +/// but it may have holes, each hole bounded by a loop. The domain of the +/// underlying geometry of the face, if present, does not contain its bounds, and 0 +/// < Ξ < ∞. +/// A face is represented by its bounding loops, which are defined as face +/// bounds. A face has a topological normal n and the tangent to a loop is t. For a +/// loop bounding a face with defined geometry, the cross product n x t points +/// toward the interior of the face. That is, each loop runs counter-clockwise +/// around the face when viewed from above, if we consider the normal n to point +/// up. With each loop is associated a BOOLEAN flag to signify whether the loop +/// direction is oriented with respect to the face normal (TRUE) or should be +/// reversed (FALSE). +/// A face shall have at least one bound, and the loops shall not intersect. +/// One loop is optionally distinguished as the outer loop of the face. If so, it +/// establishes a preferred way of embedding the face domain in the plane, in which +/// the other bounding loops of the face are inside the outer bound. Because the +/// face domain is arcwise connected, no inner loop will contain any other loop. +/// This is true regardless of which embedding in the plane is chosen. +/// The edges and vertices referenced by the loops of a face form a graph, +/// of which the individual loops are the connected components. The Euler equation +/// (1) for this graph becomes: +/// +/// where Gli is the graph genus of the +/// i th loop. +/// +/// NOTE  Corresponding ISO 10303 entity: face. No subtypes of face have been incorporated +/// into this IFC Release. Please refer to ISO/IS 10303-42:1994, p. 140 for the +/// final definition of the formal standard. The WR1 has not been incorporated, +/// since it is always satisfied, due to the fact that only poly loops exist for +/// face bounds. +/// +/// HISTORY  New class in IFC Release 1.0 +/// +/// Informal propositions: +/// +/// No edge shall be referenced by the face more than twice. +/// Distinct face bounds of the face shall have no common vertices. +/// If geometry is present, distinct loops of the same face shall not +/// intersect. +/// The face shall satisfy the Euler Equation: (number of vertices) - +/// (number of edges) - (number of loops) + (sum of genus for loops) = 0. +class IFC_PARSE_API IfcFace : public IfcTopologicalRepresentationItem { +public: + /// Boundaries of the face. + aggregate_of< ::Ifc4x3_add2::IfcFaceBound >::ptr Bounds() const; + void setBounds(aggregate_of< ::Ifc4x3_add2::IfcFaceBound >::ptr v); + aggregate_of< IfcTextureMap >::ptr HasTextureMaps() const; // INVERSE IfcTextureMap::MappedTo + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFace (IfcEntityInstanceData* e); + IfcFace (aggregate_of< ::Ifc4x3_add2::IfcFaceBound >::ptr v1_Bounds); + typedef aggregate_of< IfcFace > list; +}; +/// Definition from ISO/CD 10303-42:1992: A face bound is a loop which is intended to be used for bounding a face. +/// +/// NOTE  Corresponding ISO 10303 entity: face_bound. Please refer to ISO/IS 10303-42:1994, p. 139 for the final definition of the formal standard. +/// +/// HISTORY  New class in IFC Release 1.0 +class IFC_PARSE_API IfcFaceBound : public IfcTopologicalRepresentationItem { +public: + /// The loop which will be used as a face boundary. + ::Ifc4x3_add2::IfcLoop* Bound() const; + void setBound(::Ifc4x3_add2::IfcLoop* v); + /// This indicated whether (TRUE) or not (FALSE) the loop has the same sense when used to bound the face as when first defined. If sense is FALSE the senses of all its component oriented edges are implicitly reversed when used in the face. + bool Orientation() const; + void setOrientation(bool v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFaceBound (IfcEntityInstanceData* e); + IfcFaceBound (::Ifc4x3_add2::IfcLoop* v1_Bound, bool v2_Orientation); + typedef aggregate_of< IfcFaceBound > list; +}; +/// Definition from ISO/CD 10303-42:1992: A face outer bound is a special subtype of face bound which carries the additional semantics of defining an outer boundary on the face. No more than one boundary of a face shall be of this type. +/// +/// NOTE Corresponding ISO 10303 entity: face_outer_bound. Please refer to ISO/IS 10303-42:1994, p. 139 for the final definition of the formal standard. +/// +/// HISTORY New class in IFC Release 1.0 +class IFC_PARSE_API IfcFaceOuterBound : public IfcFaceBound { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFaceOuterBound (IfcEntityInstanceData* e); + IfcFaceOuterBound (::Ifc4x3_add2::IfcLoop* v1_Bound, bool v2_Orientation); + typedef aggregate_of< IfcFaceOuterBound > list; +}; +/// Definition from ISO/CD 10303-42:1992: A face surface +/// (IfcFaceSurface) is a subtype of face in which the geometry is defined by an +/// associated surface. The portion of the surface used by the face shall be +/// embeddable in the plane as an open disk, possibly with holes. However, the +/// union of the face with the edges and vertices of its bounding loops need not be +/// embeddable in the plane. It may, for example, cover an entire sphere or torus. +/// As both a face and a geometric surface have defined normal directions, a +/// BOOLEAN flag (the orientation attribute) is used to indicate whether the +/// surface normal agrees with (TRUE) or is opposed to (FALSE) the face normal +/// direction. The geometry associated with any component of the loops of the face +/// shall be consistent with the surface geometry, in the sense that the domains of +/// all the vertex points and edge curves are contained in the face geometry +/// surface. A surface may be referenced by more than one face surface. +/// +/// NOTE  Corresponding ISO 10303 entity: +/// face_surface. Please refer to ISO/IS 10303-42:1994, p. 204 for the final +/// definition of the formal standard. Due to the general IFC model specification +/// rule not to use multiple inheritance, the subtype relationship to +/// geometric_representation_item is not included. +/// +/// HISTORY  New class in IFC2x +/// +/// Informal propositions: +/// +/// The domain of the face surface is formally defined to be the domain +/// of its face geometry as trimmed by the loops, this domain does not include the +/// bounding loops. +/// A face surface has non zero finite extent. +/// A face surface is a manifold. +/// A face surface is arcwise connected. +/// A face surface has surface genus 0. +/// The loops are not part of the face domain. +/// Loop geometry shall be consistent with face geometry. This implies +/// that any edge - curves or vertex points used in defining the loops bounding the +/// face surface shall lie on the face geometry. +/// The loops of the face shall not intersect. +class IFC_PARSE_API IfcFaceSurface : public IfcFace, public IfcSurfaceOrFaceSurface { +public: + /// The surface which defines the internal shape of the face. This surface may be unbounded. The domain of the face is defined by this surface and the bounding loops in the inherited attribute SELF\FaceBounds. + ::Ifc4x3_add2::IfcSurface* FaceSurface() const; + void setFaceSurface(::Ifc4x3_add2::IfcSurface* v); + /// This flag indicates whether the sense of the surface normal agrees with (TRUE), or opposes (FALSE), the sense of the topological normal to the face. + bool SameSense() const; + void setSameSense(bool v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFaceSurface (IfcEntityInstanceData* e); + IfcFaceSurface (aggregate_of< ::Ifc4x3_add2::IfcFaceBound >::ptr v1_Bounds, ::Ifc4x3_add2::IfcSurface* v2_FaceSurface, bool v3_SameSense); + typedef aggregate_of< IfcFaceSurface > list; +}; +/// Definition from IAI: Defines forces at which a support or connection fails. +/// +/// Applicability: +/// +/// Point supports and connections. +/// +/// HISTORY: New entity in IFC 2x2. +class IFC_PARSE_API IfcFailureConnectionCondition : public IfcStructuralConnectionCondition { +public: + /// Tension force in x-direction leading to failure of the connection. + boost::optional< double > TensionFailureX() const; + void setTensionFailureX(boost::optional< double > v); + /// Tension force in y-direction leading to failure of the connection. + boost::optional< double > TensionFailureY() const; + void setTensionFailureY(boost::optional< double > v); + /// Tension force in z-direction leading to failure of the connection. + boost::optional< double > TensionFailureZ() const; + void setTensionFailureZ(boost::optional< double > v); + /// Compression force in x-direction leading to failure of the connection. + boost::optional< double > CompressionFailureX() const; + void setCompressionFailureX(boost::optional< double > v); + /// Compression force in y-direction leading to failure of the connection. + boost::optional< double > CompressionFailureY() const; + void setCompressionFailureY(boost::optional< double > v); + /// Compression force in z-direction leading to failure of the connection. + boost::optional< double > CompressionFailureZ() const; + void setCompressionFailureZ(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFailureConnectionCondition (IfcEntityInstanceData* e); + IfcFailureConnectionCondition (boost::optional< std::string > v1_Name, boost::optional< double > v2_TensionFailureX, boost::optional< double > v3_TensionFailureY, boost::optional< double > v4_TensionFailureZ, boost::optional< double > v5_CompressionFailureX, boost::optional< double > v6_CompressionFailureY, boost::optional< double > v7_CompressionFailureZ); + typedef aggregate_of< IfcFailureConnectionCondition > list; +}; +/// Definition from ISO/CD 10303-46:1992: The style for filling visible curve segments, annotation fill areas or surfaces with tiles or hatches. +/// +/// An IfcFillAreaStyle provides the style table for presentation information assigned to annotation fill areas or surfaces for hatching and tiling. The IfcFillAreaStyle defines hatches as model hatches, that is, the distance between hatch lines, or the curve patterns of hatch lines are given in model space dimensions (that have to be scaled using the target plot scale). The IfcFillAreaStyle allows for the following combinations of defining the style of hatching and tiling: +/// +/// Solid fill for areas and surfaces by only assigning IfcColour to the set of FillStyles. It then provides the background colour for the filled area or surface. +/// +/// NOTE  Color information of surfaces for rendering is assigned by using IfcSurfaceStyle, not by using IfcFillAreaStyle. +/// +/// Vector based hatching for areas and surfaces based on a single row of hatch lines by assigning a single instance of IfcFillAreaStyleHatching to the set of FillStyles. If an instance of IfcColour is assigned in addition to the set of FillStyles, it provides the background colour for the hatching. Vector based hatching for areas and surfaces based on two (potentially crossing) rows of hatch lines by assigning two instances of IfcFillAreaStyleHatching to the set of FillStyles. +/// +/// If an instance of IfcColour is assigned in addition to the set of FillStyles, it provides the background colour for the hatching. +/// +/// NOTE  Assigning more then two instances of IfcFillAreaStyleHatching to define three or more rows of hatch lines is not encouraged. +/// +/// Tiling for areas and surfaces by assigning a single instance of IfcFillAreaStyleTiles to the set of FillStyles. If an instance of IfcColour is assigned in addition to the set of FillStyles, it provides the background colour for the tiling. +/// +/// IFC2x3 NOTE  The use of IfcFillAreaStyleTiles is discouraged., as its definition might change is future releases. +/// +/// Externally defined hatch style by assigning a single instance of IfcExternallyDefinedHatchStyle to the set of FillStyles. +/// If an instance of IfcColour is assigned in addition to the set of FillStyles, it provides the background colour for the hatching. +/// +/// Measures given to a hatch or tile pattern are given in global drawing length units. +/// +/// NOTE  Global units are defined at the single IfcProject instance, given by UnitsInContext:IfcUnitAssignment, the same units are used for the geometric representation items and for the style definitions. +/// +/// The measure values for hatch or tile pattern apply to the model space with a target plot scale provided for the correct appearance in the default plot scale. For different scale and projection dependent fill area styles a different instance of IfcFillAreaStyle needs to be used by IfcPresentationStyleAssignment for different IfcGeometricRepresentationSubContext dependent representations. +/// +/// NOTE  the target plot scale is given by IfcGeometricRepresentationSubContext.TargetScale. +/// +/// An IfcFillAreaStyle can be assigned to IfcFillArea via the IfcPresentationStyleAssignment through an intermediate IfcStyledItem or subtype IfcAnnotationFillAreaOccurrence. +/// +/// NOTE  Corresponding ISO 10303 name: fill_area_style. Please refer to ISO/IS 10303-46:1994 for the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC2x2. +class IFC_PARSE_API IfcFillAreaStyle : public IfcPresentationStyle { +public: + /// The set of fill area styles to use in presenting visible curve segments, annotation fill areas or surfaces. + aggregate_of< ::Ifc4x3_add2::IfcFillStyleSelect >::ptr FillStyles() const; + void setFillStyles(aggregate_of< ::Ifc4x3_add2::IfcFillStyleSelect >::ptr v); + boost::optional< bool > ModelOrDraughting() const; + void setModelOrDraughting(boost::optional< bool > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFillAreaStyle (IfcEntityInstanceData* e); + IfcFillAreaStyle (boost::optional< std::string > v1_Name, aggregate_of< ::Ifc4x3_add2::IfcFillStyleSelect >::ptr v2_FillStyles, boost::optional< bool > v3_ModelOrDraughting); + typedef aggregate_of< IfcFillAreaStyle > list; +}; +/// Definition from ISO/CD 10303-42:1992: A geometric +/// representation context is a representation context in which the +/// geometric representation items are geometrically founded. A +/// geometric representation context is a distinct coordinate space, +/// spatially unrelated to other coordinate spaces. +/// +/// IfcGeometricRepresentationContext defines the context that +/// applies to several shape representations of products within a +/// project. It defines the type of the context in which the shape +/// representation is defined, and the numeric precision applicable +/// to the geometric representation items defined in this context. In +/// addition it can be used to offset the project coordinate system +/// from a global point of origin, using the +/// WorldCoordinateSystem attribute. +/// +/// As shown in Figure 329, the TrueNorth attribute should be provided if the y axis of the WorldCoordinateSystem does not point to the global northing. Direction of the true north, or geographic northing direction, relative to the underlying project coordinate +/// system as established by the attribute WorldCoordinateSystem. It is given by a 2 dimensional direction within the xy-plane of the project coordinate system. If not resent, it defaults to [0.,1.] - i.e. the positive Y axis of the project coordinate system equals the geographic northing direction. The direction is provided within project coordinate system and identifies the true north direction (see +/// figure). +/// +/// Figure 329 — Geometric representation context true north +/// +/// NOTE The inherited attribute +/// ContextType shall have one of the following recognized +/// values: 'Sketch', 'Outline', 'Design', 'Detail', +/// 'Model', 'Plan', +/// 'NotDefined'. +/// +/// The use of one instance of +/// IfcGeometricRepresentationContext to represent the model +/// (3D) view is mandatory, the use of a second instance of +/// IfcGeometricRepresentationContext to represent the plan +/// (2D) view is optional (but needs to be given, if there are scale +/// dependent plan views), the additional scale or view dependent +/// contexts need to be handled by using the subtype +/// IfcGeometricRepresentationSubContext pointing to the model +/// view (or the plan view) as the ParentContext. +/// +/// Figure 330 illustrates use of representation contexts defined at IfcProject for 3D model and 2D plan context, including sub +/// context definitions for different target scales. +/// +/// Figure 330 — Geometric representation context use +/// +/// NOTE  The definition of this class relates to the ISO 10303 entity geometric_representation_context. Please refer to ISO/IS 10303-42:1994 for the final definition of the formal standard. +/// +/// HISTORY New Entity in IFC Release 2.0 +/// +/// IFC2x3 CHANGE Applicable values for ContextType are only 'Model', 'Plan', and'NotDefined'. All other sub contexts are now handled by the new subtype in IFC2x Edition 2 IfcGeometricRepresentationSubContext. Upward compatibility for file based exchange is guaranteed. +class IFC_PARSE_API IfcGeometricRepresentationContext : public IfcRepresentationContext, public IfcCoordinateReferenceSystemSelect { +public: + /// The integer dimension count of the coordinate space modeled in a geometric representation context. + int CoordinateSpaceDimension() const; + void setCoordinateSpaceDimension(int v); + /// Value of the model precision for geometric models. It is a double value (REAL), typically in 1E-5 to 1E-8 range, that indicates the tolerance under which two given points are still assumed to be identical. The value can be used e.g. to sets the maximum distance from an edge curve to the underlying face surface in brep models. + boost::optional< double > Precision() const; + void setPrecision(boost::optional< double > v); + /// Establishment of the engineering coordinate system (often referred to as the world coordinate system in CAD) for all representation contexts used by the project. + /// + /// Note  it can be used to provide better numeric stability if the placement of the building(s) is far away from the origin. In most cases however it would be set to origin: (0.,0.,0.) and directions x(1.,0.,0.), y(0.,1.,0.), z(0.,0.,1.). + ::Ifc4x3_add2::IfcAxis2Placement* WorldCoordinateSystem() const; + void setWorldCoordinateSystem(::Ifc4x3_add2::IfcAxis2Placement* v); + /// Direction of the true north, or geographic northing direction, relative to the underlying project coordinate system. It is given by a 2 dimensional direction within the xy-plane of the project coordinate system. If not resent, it defaults to 0. 1. - i.e. the positive Y axis of the project coordinate system equals the geographic northing direction. + ::Ifc4x3_add2::IfcDirection* TrueNorth() const; + void setTrueNorth(::Ifc4x3_add2::IfcDirection* v); + aggregate_of< IfcGeometricRepresentationSubContext >::ptr HasSubContexts() const; // INVERSE IfcGeometricRepresentationSubContext::ParentContext + aggregate_of< IfcCoordinateOperation >::ptr HasCoordinateOperation() const; // INVERSE IfcCoordinateOperation::SourceCRS + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcGeometricRepresentationContext (IfcEntityInstanceData* e); + IfcGeometricRepresentationContext (boost::optional< std::string > v1_ContextIdentifier, boost::optional< std::string > v2_ContextType, int v3_CoordinateSpaceDimension, boost::optional< double > v4_Precision, ::Ifc4x3_add2::IfcAxis2Placement* v5_WorldCoordinateSystem, ::Ifc4x3_add2::IfcDirection* v6_TrueNorth); + typedef aggregate_of< IfcGeometricRepresentationContext > list; +}; +/// Definition from ISO/CD 10303-43:1992: An geometric representation item is a representation item that has the additional meaning of having geometric position or orientation or both. This meaning is present by virtue of: +/// +/// being a Cartesian point or a direction +/// referencing directly a Cartesian point or direction +/// referencing indirectly a Cartesian point or direction +/// +/// An indirect reference to a Cartesian point or direction means that a given geometric item references the Cartesian point or direction through one or more intervening geometry or topology items. +/// +/// EXAMPLE: Consider a circle. It gains its geometric position and orientation by virtue of a reference to axis2_placement (IfcAxis2Placement) that is turn references a cartesian_point (IfcCartesianPoint) and several directions (IfcDirection). +/// +/// EXAMPLE: Consider a manifold brep. A manifold_solid_brep (IfcManifoldSolidBrep) is a geometric_representation_item (IfcGeometricRepresentationItem) that through several layers of topological_representation_item's (IfcTopologicalRepresentationItem) references poly loops (IfcPolyLoop). Through additional intervening entities poly loops reference cartesian_point's (IfcCartesianPoint). +/// +/// The derivation of the dimensionality of the IfcGeometricRepresentationItem is different to ISO 10303; there is a specific derived attribute at each class that defines the dimensionality, whereas ISO 10303 does it for the representation_context and requires all geometric_representation_item's to have the same dimensionality therein. +/// +/// The definition of swept area solids as geometric representation items is different to ISO 10303; it is based on a set of predefined profiles (or cross sections), that is, a set of parameterized geometric primitives widely supported in the industry. Those profiles are used to create volumes through extrusion, revolution and cross section based sweep operations. +/// +/// NOTE: Corresponding ISO 10303 entity: geometric_representation_item. Please refer to ISO/IS 10303-42:1994, p. 22 for the final definition of the formal standard. The following changes have been made: It does not inherit from ISO/IS 10303-43:1994 entity representation_item. The derived attribute Dim is demoted to the appropriate subtypes. The WR1 has not been incorporated. Not all subtypes that are in ISO/IS 10303-42:1994 have been added to the current IFC Release. +/// +/// HISTORY: New entity in IFC Release 1.5 +class IFC_PARSE_API IfcGeometricRepresentationItem : public IfcRepresentationItem { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcGeometricRepresentationItem (IfcEntityInstanceData* e); + IfcGeometricRepresentationItem (); + typedef aggregate_of< IfcGeometricRepresentationItem > list; +}; +/// IfcGeometricRepresentationSubContext defines the context that applies to several shape representations of a product being a sub context, sharing the WorldCoordinateSystem, CoordinateSpaceDimension, Precision and TrueNorth attributes with the parent IfcGeometricRepresentationContext. +/// +/// The IfcGeometricRepresentationSubContext is used to define semantically distinguished representation types for different information content, dependent on the representation view and the target scale. It can be used to control the level of detail of the shape representation that is most applicable to this geometric representation context. addition the sub context is used to control the later appearance of the IfcShapeRepresentation within a plot view. +/// +/// NOTE  If the IfcShapeRepresentation using this sub context has IfcStyledItem's assigned to the Items, the presentation style information (e.g. IfcCurveStyle, IfcTextStyle) associated with the IfcStyledItem is given in target plot dimensions. For example, a line thickness (IfcCurveStyle.CurveWidth) is given by a thickness measure relating to the thickness for a plot within the (range of) target scale. +/// +/// Each IfcProduct can then have several instances of subtypes of IfcRepresentation, each being assigned to a different geometric representation context (IfcGeometricRepresentationContext or IfcGeometricRepresentationSubContext). The application can then choose the most appropriate representation for showing the geometric shape of the product, depending on the target view and scale. +/// +/// NOTE  The provision of a model view (IfcGeometricRepresentationContext.ContextType = 'Model') is mandatory. Instances of IfcGeometricRepresentationSubContext relate to it as its ParentContext. +/// +/// EXAMPLE  Instances of IfcGeometricRepresentationSubContext can be used to handle the multi-view blocks or macros, which are used in CAD programs to store several scale and/or view dependent geometric representations of the same object. +/// +/// HISTORY  New entity in Release IFC 2x2. +class IFC_PARSE_API IfcGeometricRepresentationSubContext : public IfcGeometricRepresentationContext { +public: + /// Parent context from which the sub context derives its world coordinate system, precision, space coordinate dimension and true north. + ::Ifc4x3_add2::IfcGeometricRepresentationContext* ParentContext() const; + void setParentContext(::Ifc4x3_add2::IfcGeometricRepresentationContext* v); + /// The target plot scale of the representation + /// to which this representation context applies. + /// Scale indicates the target plot scale for + /// the representation sub context, all annotation styles are given in plot + /// dimensions according to this target plot scale. + /// If multiple instances of IfcGeometricRepresentationSubContext + /// are given having the same TargetView value, the target plot scale + /// applies up to the next smaller scale, or up to unlimited small scale. + /// + /// Note: Scale 1:100 (given as 0.01 within TargetScale) + /// is bigger then 1:200 (given as 0.005 within TargetScale). + boost::optional< double > TargetScale() const; + void setTargetScale(boost::optional< double > v); + /// Target view of the representation to which this representation context applies. + ::Ifc4x3_add2::IfcGeometricProjectionEnum::Value TargetView() const; + void setTargetView(::Ifc4x3_add2::IfcGeometricProjectionEnum::Value v); + /// User defined target view, this attribute value shall be given, if the TargetView attribute is set to USERDEFINED. + boost::optional< std::string > UserDefinedTargetView() const; + void setUserDefinedTargetView(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcGeometricRepresentationSubContext (IfcEntityInstanceData* e); + IfcGeometricRepresentationSubContext (boost::optional< std::string > v1_ContextIdentifier, boost::optional< std::string > v2_ContextType, ::Ifc4x3_add2::IfcGeometricRepresentationContext* v7_ParentContext, boost::optional< double > v8_TargetScale, ::Ifc4x3_add2::IfcGeometricProjectionEnum::Value v9_TargetView, boost::optional< std::string > v10_UserDefinedTargetView); + typedef aggregate_of< IfcGeometricRepresentationSubContext > list; +}; +/// Definition from ISO/CD 10303-42:1992: This entity is intended for the transfer of models when a topological structure is not available. +/// +/// The IfcGeometricSet is used for the exchange of shape representations consisting of (2D or 3D) points, curves, and/or surfaces, which do not have a topological structure (such as connected face sets or shells) and are not solid models (such as swept solids, CSG or Brep) +/// +/// NOTE: Corresponding ISO 10303-42 entity: geometric_set. The derived attribute Dim has been added at this level and was therefore demoted from the geometric_representation_item. Please refer to ISO/IS 10303-42:1994, p. 190 for the final definition of the formal standard. +/// +/// HISTORY: New entity in IFC Release 2x. +class IFC_PARSE_API IfcGeometricSet : public IfcGeometricRepresentationItem { +public: + /// The geometric elements which make up the geometric set, these may be points, curves or surfaces; but are required to be of the same coordinate space dimensionality. + aggregate_of< ::Ifc4x3_add2::IfcGeometricSetSelect >::ptr Elements() const; + void setElements(aggregate_of< ::Ifc4x3_add2::IfcGeometricSetSelect >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcGeometricSet (IfcEntityInstanceData* e); + IfcGeometricSet (aggregate_of< ::Ifc4x3_add2::IfcGeometricSetSelect >::ptr v1_Elements); + typedef aggregate_of< IfcGeometricSet > list; +}; +/// IfcGridPlacement provides a specialization of IfcObjectPlacement in which +/// the placement and axis direction of the object coordinate system is defined by a reference to the design grid as defined in IfcGrid. +/// The location of the object coordinate system is given by the attribute PlacementLocation. It is defined as an +/// IfcVirtualGridIntersection, that is, an intersection between two grid axes with optional offsets. +/// The axis direction of the x-axis of the object coordinate +/// system is given either: +/// +/// PlacementRefDirection = NIL: by the tangent of the first grid axis (PlacementLocation.IntersectingAxes[1]) at the virtual intersection (maybe using the offset curve, if PlacementLocation.OffsetDistances is given); +/// PlacementRefDirection = IfcDirection: by the explicitly provided direction information; +/// PlacementRefDirection = IfcVirtualGridIntersection: by the tangent between the virtual grid intersection of PlacementLocation and the virtual grid intersection of PlacementRefDirection. Offsets as potentially provided in the IfcVirtualGridIntersection's of PlacementLocation and PlacementRefDirection have to be taken into account. +/// +/// The direction of the y-axis of the IfcGridPlacement is the orthogonal complement to the x-axis. The plane defined by the x and y axis shall be co-planar to the xy plane of the local placement of the IfcGrid. +/// The direction of the z-axis is the orientation of the cross product of the x-axis and the y-axis, i.e. the z-axis of the IfcGridPlacement shall be co-linear to the z-axis of the local placement of the IfcGrid. +/// +/// NOTE The IfcGrid local placement, that can be provided relative to the local placement of another spatial structure element, has to be taken into account for calculating the absolute placement of the virtual grid intersection. +/// +/// NOTE The PlacementLocation.OffsetDistances[3] and the PlacementRefDirection.OffsetDistances[3] shall either not be assigned or should have the same z offset value. +/// +/// HISTORY New entity in IFC Release 1.5. The entity name was changed from IfcConstrainedPlacement in IFC Release 2x. +/// +/// IFC2x4 CHANGE Attribute data type of PlacementRefDirection has been changed to IfcGridPlacementDirectionSelect. +/// +/// Geometry use definitions +/// The following examples show the usage of placement location and direction for an IfcGridPlacement. +/// +/// Figure 243 illustrates the case where PlacementRefDirection is not given - the object coordinate system is defined by: +/// +/// its location: given by the virtual grid intersection of PlacementLocation +/// its x-axis direction: given by the tangent of the first intersecting axis in the offset location of the virtual grid intersection +/// +/// Figure 243 — Grid placement +/// +/// Figure 244 illustrates the case where PlacementRefDirection is given as an IfcDirection- the object coordinate system is defined by: +/// +/// its location: given by the virtual grid intersection of PlacementLocation +/// its x-axis direction: given by the DirectionRatios of the IfcDirection, only the ratios for x and y are taken into account, +/// +/// Figure 244 — Grid placement with direction +/// +/// Figure 245 illustrates the case where PlacementRefDirection is given as an IfcVirtualGridIntersection- the object coordinate system is defined by: +/// +/// its location: given by the virtual grid intersection of PlacementLocation +/// its x-axis direction: given by the tangent of the line between the virtual grid intersection of the PlacementLocation and the virtual grid intersection of the PlacementRefDirection. +/// +/// Figure 245 — Grid placement with intersection +class IFC_PARSE_API IfcGridPlacement : public IfcObjectPlacement { +public: + /// Placement of the object coordinate system defined by the intersection of two grid axes. + ::Ifc4x3_add2::IfcVirtualGridIntersection* PlacementLocation() const; + void setPlacementLocation(::Ifc4x3_add2::IfcVirtualGridIntersection* v); + /// Reference to either an explicit direction, or a second grid axis intersection, which defines the orientation of the grid placement. + /// + /// IFC2x4 CHANGE The select of an explict direction has been added. + ::Ifc4x3_add2::IfcGridPlacementDirectionSelect* PlacementRefDirection() const; + void setPlacementRefDirection(::Ifc4x3_add2::IfcGridPlacementDirectionSelect* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcGridPlacement (IfcEntityInstanceData* e); + IfcGridPlacement (::Ifc4x3_add2::IfcObjectPlacement* v1_PlacementRelTo, ::Ifc4x3_add2::IfcVirtualGridIntersection* v2_PlacementLocation, ::Ifc4x3_add2::IfcGridPlacementDirectionSelect* v3_PlacementRefDirection); + typedef aggregate_of< IfcGridPlacement > list; +}; +/// Definition from ISO/CD 10303-42:1992: A half space solid is defined by the half space which is the regular subset of the domain which lies on one side of an unbounded surface. The side of the surface which is in the half space is determined by the surface normal and the agreement flag. If the agreement flag is TRUE, then the subset is the one the normal points away from. If the agreement flag is FALSE, then the subset is the one the normal points into. For a valid half space solid the surface shall divide the domain into exactly two subsets. Also, within the domain the surface shall be manifold and all surface normals shall point into the same subset. +/// +/// NOTE A half space is not a subtype of solid model (IfcSolidModel), half space solids are only useful as operands in Boolean expressions. +/// +/// NOTE Corresponding STEP entity: half_space_solid. Please refer to ISO/IS 10303-42:1994, p. 185 for the final definition of the formal standard. The derived attribute Dim has been added at this level and was therefore demoted from the geometric_representation_item. +/// +/// HISTORY New class in IFC Release 1.5 +/// +/// Informal propositions: +/// +/// The base surface shall divide the domain into exactly two subsets. If the half space solid is of subtype boxed half space (IfcBoxedHalfSpace), the domain in question is that of the attribute enclosure. In all other cases the domain is all of space and the base surface shall be unbounded. The base surface shall be an unbounded surface (subtype of IfcElementarySurface). +/// +/// Figure 258 illustrates the definition of the IfcHalfSpaceSolid within a given coordinate system. The base surface is given by an unbounded plane, the red boundary is shown for visualization purposes only. +/// +/// Figure 258 — Half space solid geometry +class IFC_PARSE_API IfcHalfSpaceSolid : public IfcGeometricRepresentationItem, public IfcBooleanOperand { +public: + /// Surface defining side of half space. + ::Ifc4x3_add2::IfcSurface* BaseSurface() const; + void setBaseSurface(::Ifc4x3_add2::IfcSurface* v); + /// The agreement flag is TRUE if the normal to the BaseSurface points away from the material of the IfcHalfSpaceSolid. Otherwise it is FALSE. + bool AgreementFlag() const; + void setAgreementFlag(bool v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcHalfSpaceSolid (IfcEntityInstanceData* e); + IfcHalfSpaceSolid (::Ifc4x3_add2::IfcSurface* v1_BaseSurface, bool v2_AgreementFlag); + typedef aggregate_of< IfcHalfSpaceSolid > list; +}; +/// An IfcImageTexture provides a 2-dimensional texture that can be applied to a surface of an geometric item and that provides lighting parameters of a surface onto which it is mapped. The texture is provided as an image file at an external location for which an URL is provided. +/// +/// The following definitions from ISO/IEC 19775-1 X3D Architecture and base components (X3D Specification) apply: +/// +/// The ImageTexture node defines a texture map by specifying an image file and general parameters for mapping to geometry. +/// The texture is read from the URL specified by the url field. When the url field contains no [resolvable] values, texturing is disabled. Browsers shall support the JPEG and PNG (see ISO/IEC 15948) image file formats. +/// Texture nodes that require support for the PNG image format shall interpret the PNG pixel formats in the following way: +/// +/// Greyscale pixels without alpha or simple transparency are treated as intensity textures. +/// >Greyscale pixels with alpha or simple transparency are treated as intensity plus alpha textures. +/// RGB pixels without alpha channel or simple transparency are treated as full RGB textures. +/// RGB pixels with alpha channel or simple transparency are treated as full RGB plus alpha textures. +/// +/// If the image specifies colours as indexed-colour (that is, palettes or colourmaps), the following semantics should be used (note that `greyscale' refers to a palette entry with equal red, green, and blue values): +/// +/// If all the colours in the palette are greyscale and there is no transparency chunk, it is treated as an intensity texture. +/// If all the colours in the palette are greyscale and there is a transparency chunk, it is treated as an intensity plus opacity texture. +/// >If any colour in the palette is not grey and there is no transparency chunk, it is treated as a full RGB texture. +/// If any colour in the palette is not grey and there is a transparency chunk, it is treated as a full RGB plus alpha texture. +/// +/// Texture nodes that require support for JPEG files shall interpret JPEG files as follows: +/// +/// Greyscale files (number of components equals 1) are treated as intensity textures. +/// YCbCr files are treated as full RGB textures. +/// No other JPEG file types are required. It is recommended that other JPEG files are treated as a full RGB textures. +/// +/// Texture nodes that recommend support for GIF files shall follow the applicable semantics described above for the PNG format. +/// +/// The Uniform Resource Locator (URL) is a form of an URI and specified in RFC1738 by IETF. It supports resources located on a particular server being accessed by a particular protocol (usually http), and resources located at a local machine. +/// +/// NOTE  Exchange files following the ifcZIP convention may include a sub directory structure for image resources to be stored together with the product data set. +/// +/// NOTE  The definitions of texturing within this standard have been developed in dependence on the texture component of X3D. See ISO/IEC 19775-1.2:2008 X3D Architecture and base components Edition 2, Part 1, 18 Texturing component for the definitions in the international standard. +/// +/// HISTORY  New entity in Release IFC2x2. +class IFC_PARSE_API IfcImageTexture : public IfcSurfaceTexture { +public: + /// Location, provided as an URI, at which the image texture is electronically published. + std::string URLReference() const; + void setURLReference(std::string v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcImageTexture (IfcEntityInstanceData* e); + IfcImageTexture (bool v1_RepeatS, bool v2_RepeatT, boost::optional< std::string > v3_Mode, ::Ifc4x3_add2::IfcCartesianTransformationOperator2D* v4_TextureTransform, boost::optional< std::vector< std::string > /*[1:?]*/ > v5_Parameter, std::string v6_URLReference); + typedef aggregate_of< IfcImageTexture > list; +}; + +class IFC_PARSE_API IfcIndexedColourMap : public IfcPresentationItem { +public: + ::Ifc4x3_add2::IfcTessellatedFaceSet* MappedTo() const; + void setMappedTo(::Ifc4x3_add2::IfcTessellatedFaceSet* v); + boost::optional< double > Opacity() const; + void setOpacity(boost::optional< double > v); + ::Ifc4x3_add2::IfcColourRgbList* Colours() const; + void setColours(::Ifc4x3_add2::IfcColourRgbList* v); + std::vector< int > /*[1:?]*/ ColourIndex() const; + void setColourIndex(std::vector< int > /*[1:?]*/ v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcIndexedColourMap (IfcEntityInstanceData* e); + IfcIndexedColourMap (::Ifc4x3_add2::IfcTessellatedFaceSet* v1_MappedTo, boost::optional< double > v2_Opacity, ::Ifc4x3_add2::IfcColourRgbList* v3_Colours, std::vector< int > /*[1:?]*/ v4_ColourIndex); + typedef aggregate_of< IfcIndexedColourMap > list; +}; + +class IFC_PARSE_API IfcIndexedTextureMap : public IfcTextureCoordinate { +public: + ::Ifc4x3_add2::IfcTessellatedFaceSet* MappedTo() const; + void setMappedTo(::Ifc4x3_add2::IfcTessellatedFaceSet* v); + ::Ifc4x3_add2::IfcTextureVertexList* TexCoords() const; + void setTexCoords(::Ifc4x3_add2::IfcTextureVertexList* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcIndexedTextureMap (IfcEntityInstanceData* e); + IfcIndexedTextureMap (aggregate_of< ::Ifc4x3_add2::IfcSurfaceTexture >::ptr v1_Maps, ::Ifc4x3_add2::IfcTessellatedFaceSet* v2_MappedTo, ::Ifc4x3_add2::IfcTextureVertexList* v3_TexCoords); + typedef aggregate_of< IfcIndexedTextureMap > list; +}; + +class IFC_PARSE_API IfcIndexedTriangleTextureMap : public IfcIndexedTextureMap { +public: + boost::optional< std::vector< std::vector< int > > > TexCoordIndex() const; + void setTexCoordIndex(boost::optional< std::vector< std::vector< int > > > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcIndexedTriangleTextureMap (IfcEntityInstanceData* e); + IfcIndexedTriangleTextureMap (aggregate_of< ::Ifc4x3_add2::IfcSurfaceTexture >::ptr v1_Maps, ::Ifc4x3_add2::IfcTessellatedFaceSet* v2_MappedTo, ::Ifc4x3_add2::IfcTextureVertexList* v3_TexCoords, boost::optional< std::vector< std::vector< int > > > v4_TexCoordIndex); + typedef aggregate_of< IfcIndexedTriangleTextureMap > list; +}; +/// In an irregular time series, unpredictable bursts of data arrive at unspecified points in time, or most time stamps cannot be characterized by a repeating pattern. +/// +/// EXAMPLE: A circulating pump cycles on and off at unpredictable times as dictated by the demands on the piping system; the amount of light in a classroom varies depending on when the lights are manually switched on and off and and how many lamps are controlled by each switch. +/// +/// HISTORY: New entity in IFC 2x2. +class IFC_PARSE_API IfcIrregularTimeSeries : public IfcTimeSeries { +public: + /// The collection of time series values. + aggregate_of< ::Ifc4x3_add2::IfcIrregularTimeSeriesValue >::ptr Values() const; + void setValues(aggregate_of< ::Ifc4x3_add2::IfcIrregularTimeSeriesValue >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcIrregularTimeSeries (IfcEntityInstanceData* e); + IfcIrregularTimeSeries (std::string v1_Name, boost::optional< std::string > v2_Description, std::string v3_StartTime, std::string v4_EndTime, ::Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::Value v5_TimeSeriesDataType, ::Ifc4x3_add2::IfcDataOriginEnum::Value v6_DataOrigin, boost::optional< std::string > v7_UserDefinedDataOrigin, ::Ifc4x3_add2::IfcUnit* v8_Unit, aggregate_of< ::Ifc4x3_add2::IfcIrregularTimeSeriesValue >::ptr v9_Values); + typedef aggregate_of< IfcIrregularTimeSeries > list; +}; +/// IfcLagTime describes the time parameters that may exist within a sequence relationship between two processes. +/// +/// HISTORY: New entity in IFC Release 2x4. +/// +/// Use Definitions +/// +/// An IfcLagTime provides information about the +/// time lag that exists between the predecessor and successor +/// process in a sequence. The assertion of the time lag is +/// optional for a sequence but for work schedules that +/// specifically deal with processes occurring at particular +/// times, it should be asserted. +/// +/// A lag time has a duration type. This allows the +/// identification of whether elapsed time or work time is +/// being measured (where work time is the estimate of the time +/// required to complete the process and elapsed time being the +/// amount of time actually allocated to the process) +/// +/// The form of measurement of the duration can be captured. +/// Allowed values for this are MEASURED, PREDICTED or +/// SIMULATED. The selection of this value depends on the use +/// of the schedule. A NOTDEFINED value is also allowed. +/// +/// The value of the time lag may be selected as being either a +/// percentage ratio or an actual time measure. If selected as +/// a ratio, the percentage should apply to the duration of the +/// predecessor process (relating process) such that e.g. a +/// value of 0.5 (50%) would indicate that the successor task +/// should start when the predecessor task is 50% complete (if +/// a START-START sequence type is used) or should wait for 50% +/// of the duration of the predecessor process to have elapsed +/// after the finish of the predecessor process in case of a +/// FINISH-START sequence type. +/// +/// The time unit for the task duration may also be set and +/// this may be set to any allowed unit of time measure. +class IFC_PARSE_API IfcLagTime : public IfcSchedulingTime { +public: + /// Value of the time lag selected as being either a ratio or a + /// time measure. + ::Ifc4x3_add2::IfcTimeOrRatioSelect* LagValue() const; + void setLagValue(::Ifc4x3_add2::IfcTimeOrRatioSelect* v); + /// The allowed types of task duration that specify the lag time + /// measurement (work time or elapsed time). + ::Ifc4x3_add2::IfcTaskDurationEnum::Value DurationType() const; + void setDurationType(::Ifc4x3_add2::IfcTaskDurationEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLagTime (IfcEntityInstanceData* e); + IfcLagTime (boost::optional< std::string > v1_Name, boost::optional< ::Ifc4x3_add2::IfcDataOriginEnum::Value > v2_DataOrigin, boost::optional< std::string > v3_UserDefinedDataOrigin, ::Ifc4x3_add2::IfcTimeOrRatioSelect* v4_LagValue, ::Ifc4x3_add2::IfcTaskDurationEnum::Value v5_DurationType); + typedef aggregate_of< IfcLagTime > list; +}; +/// Definition from ISO/CD 10303-46:1992: The light source entity is determined by the reflectance specified in the surface style rendering. Lighting is applied on a surface by surface basis: no interactions between surfaces such as shadows or reflections are defined. +/// +/// NOTE: Corresponding STEP entity: light_source. Please refer to ISO/IS 10303-46:1994, p. 31 for the final definition of the formal standard. +/// +/// NOTE: In addition to the attributes as defined in ISO10303-46 the following additional properties from ISO/IEC 14772-1:1997 (VRML) are added: ambientIntensity and Intensity. The attribute Name has been added as well (as it is not inherited via representation_item). +/// +/// HISTORY: This is a new Entity in IFC 2x, renamed and enhanced in IFC2x2. +class IFC_PARSE_API IfcLightSource : public IfcGeometricRepresentationItem { +public: + /// The name given to the light source in presentation. + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + /// Definition from ISO/CD 10303-46:1992: Based on the current lighting model, the colour of the light to be used for shading. + /// Definition from VRML97 - ISO/IEC 14772-1:1997: The color field specifies the spectral color properties of both the direct and ambient light emission as an RGB value. + ::Ifc4x3_add2::IfcColourRgb* LightColour() const; + void setLightColour(::Ifc4x3_add2::IfcColourRgb* v); + /// Definition from VRML97 - ISO/IEC 14772-1:1997: The ambientIntensity specifies the intensity of the ambient emission from the light. Light intensity may range from 0.0 (no light emission) to 1.0 (full intensity). + boost::optional< double > AmbientIntensity() const; + void setAmbientIntensity(boost::optional< double > v); + /// Definition from VRML97 - ISO/IEC 14772-1:1997: The intensity field specifies the brightness of the direct emission from the ligth. Light intensity may range from 0.0 (no light emission) to 1.0 (full intensity). + boost::optional< double > Intensity() const; + void setIntensity(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLightSource (IfcEntityInstanceData* e); + IfcLightSource (boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcColourRgb* v2_LightColour, boost::optional< double > v3_AmbientIntensity, boost::optional< double > v4_Intensity); + typedef aggregate_of< IfcLightSource > list; +}; +/// Definition from ISO/CD 10303-46:1992: The light source ambient entity is a subtype of light source. It lights a surface independent of the surface's orientation and position. +/// +/// NOTE: Corresponding ISO 10303 entity: light_source_ambient. Please refer to ISO/IS 10303-46:1994, p. 31 for the final definition of the formal standard. +/// +/// NOTE: In addition to the attributes as defined in ISO 10303-46 the additional property from ISO/IEC 14772-1:1997 (VRML) AmbientIntensity is inherited from the supertype. +/// +/// HISTORY: This is a new entity in IFC 2x, renamed and enhanced in IFC2x2. +class IFC_PARSE_API IfcLightSourceAmbient : public IfcLightSource { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLightSourceAmbient (IfcEntityInstanceData* e); + IfcLightSourceAmbient (boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcColourRgb* v2_LightColour, boost::optional< double > v3_AmbientIntensity, boost::optional< double > v4_Intensity); + typedef aggregate_of< IfcLightSourceAmbient > list; +}; +/// Definition from ISO/CD 10303-46:1992: The light source directional is a subtype of light source. This entity has a light source direction. With a conceptual origin at infinity, all the rays of the light are parallel to this direction. This kind of light source lights a surface based on the surface's orientation, but not position. +/// +/// Definition from ISO/IEC 14772-1:1997: The directional light node defines a directional light source that illuminates along rays parallel to a given 3-dimensional vector. Directional light nodes do not attenuate with distance. Directional light nodes are specified in the local coordinate system and are affected by ancestor transformations. +/// +/// NOTE: Corresponding ISO 10303 entity: light_source_directional. Please refer to ISO/IS 10303-46:1994, p. 32 for the final definition of the formal standard. +/// +/// NOTE: In addition to the attributes as defined in ISO 10303-46 the additional property from ISO/IEC 14772-1:1997 (VRML) AmbientIntensity and Intensity are inherited from the supertype. +/// +/// HISTORY: This is a new entity in IFC 2x, renamed and enhanced in IFC2x2. +class IFC_PARSE_API IfcLightSourceDirectional : public IfcLightSource { +public: + /// Definition from ISO/CD 10303-46:1992: This direction is the direction of the light source. + /// Definition from VRML97 - ISO/IEC 14772-1:1997: The direction field specifies the direction vector of the illumination emanating from the light source in the local coordinate system. Light is emitted along parallel rays from an infinite distance away. + ::Ifc4x3_add2::IfcDirection* Orientation() const; + void setOrientation(::Ifc4x3_add2::IfcDirection* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLightSourceDirectional (IfcEntityInstanceData* e); + IfcLightSourceDirectional (boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcColourRgb* v2_LightColour, boost::optional< double > v3_AmbientIntensity, boost::optional< double > v4_Intensity, ::Ifc4x3_add2::IfcDirection* v5_Orientation); + typedef aggregate_of< IfcLightSourceDirectional > list; +}; +/// IfcLightSourceGoniometric defines a light source for which exact lighting data is available. It specifies the type of a light emitter, defines the position and orientation of a light distribution curve and the data concerning lamp and photometric information. +/// +/// Figure 303 shows an example of a light emitter having two light sources (of type IfcLightSourceGoniometric). +/// +/// Figure 303 — Light source goniometric +/// +/// HISTORY: New entity in IFC2x2. +class IFC_PARSE_API IfcLightSourceGoniometric : public IfcLightSource { +public: + /// The position of the light source. It is used to orientate the light distribution curves. + ::Ifc4x3_add2::IfcAxis2Placement3D* Position() const; + void setPosition(::Ifc4x3_add2::IfcAxis2Placement3D* v); + /// 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. + ::Ifc4x3_add2::IfcColourRgb* ColourAppearance() const; + void setColourAppearance(::Ifc4x3_add2::IfcColourRgb* v); + /// 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). + double ColourTemperature() const; + void setColourTemperature(double v); + /// 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. + double LuminousFlux() const; + void setLuminousFlux(double v); + /// Identifies the types of light emitter from which the type required may be set. + ::Ifc4x3_add2::IfcLightEmissionSourceEnum::Value LightEmissionSource() const; + void setLightEmissionSource(::Ifc4x3_add2::IfcLightEmissionSourceEnum::Value v); + /// The data source from which light distribution data is obtained. + ::Ifc4x3_add2::IfcLightDistributionDataSourceSelect* LightDistributionDataSource() const; + void setLightDistributionDataSource(::Ifc4x3_add2::IfcLightDistributionDataSourceSelect* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLightSourceGoniometric (IfcEntityInstanceData* e); + IfcLightSourceGoniometric (boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcColourRgb* v2_LightColour, boost::optional< double > v3_AmbientIntensity, boost::optional< double > v4_Intensity, ::Ifc4x3_add2::IfcAxis2Placement3D* v5_Position, ::Ifc4x3_add2::IfcColourRgb* v6_ColourAppearance, double v7_ColourTemperature, double v8_LuminousFlux, ::Ifc4x3_add2::IfcLightEmissionSourceEnum::Value v9_LightEmissionSource, ::Ifc4x3_add2::IfcLightDistributionDataSourceSelect* v10_LightDistributionDataSource); + typedef aggregate_of< IfcLightSourceGoniometric > list; +}; +/// Definition from ISO/CD 10303-46:1992: The light source positional entity is a subtype of light source. This entity has a light source position and attenuation coefficients. A positional light source affects a surface based on the surface's orientation and position. +/// +/// Definition from ISO/IEC 14772-1:1997: The Point light node specifies a point light source at a 3D location in the local coordinate system. A point light source emits light equally in all directions; that is, it is omnidirectional. Point light nodes are specified in the local coordinate system and are affected by ancestor transformations. +/// +/// Point light node's illumination falls off with distance as specified by three attenuation coefficients. The attenuation factor is +/// +/// 1/max(attenuation[0] + attenuation[1] × r + attenuation[2] × r 2 , 1), +/// +/// where r is the distance from the light to the surface being illuminated. The default is no attenuation. An attenuation value of (0, 0, 0) is identical to (1, 0, 0). Attenuation values shall be greater than or equal to zero. +/// +/// NOTE: Corresponding ISO 10303 entity: light_source_positional. Please refer to ISO/IS 10303-46:1994, p. 32 for the final definition of the formal standard. +/// +/// NOTE: In addition to the attributes as defined in ISO10303-46 the additional property from ISO/IEC 14772-1:1997 (VRML) Radius and QuadricAttenuation are added to this subtype and the AmbientIntensity and Intensity are inherited from the supertype. +/// +/// HISTORY: This is a new entity in IFC 2x, renamed and enhanced in IFC2x2. +class IFC_PARSE_API IfcLightSourcePositional : public IfcLightSource { +public: + /// Definition from ISO/CD 10303-46:1992: The Cartesian point indicates the position of the light source. + /// Definition from VRML97 - ISO/IEC 14772-1:1997: A Point light node illuminates geometry within radius of its location. + ::Ifc4x3_add2::IfcCartesianPoint* Position() const; + void setPosition(::Ifc4x3_add2::IfcCartesianPoint* v); + /// Definition from IAI: The maximum distance from the light source for a surface still to be illuminated. + /// Definition from VRML97 - ISO/IEC 14772-1:1997: A Point light node illuminates geometry within radius of its location. + double Radius() const; + void setRadius(double v); + /// Definition from ISO/CD 10303-46:1992: This real indicates the value of the attenuation in the lighting equation that is constant. + double ConstantAttenuation() const; + void setConstantAttenuation(double v); + /// Definition from ISO/CD 10303-46:1992: This real indicates the value of the attenuation in the lighting equation that proportional to the distance from the light source. + double DistanceAttenuation() const; + void setDistanceAttenuation(double v); + /// Definition from the IAI: This real indicates the value of the attenuation in the lighting equation that proportional to the square value of the distance from the light source. + double QuadricAttenuation() const; + void setQuadricAttenuation(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLightSourcePositional (IfcEntityInstanceData* e); + IfcLightSourcePositional (boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcColourRgb* v2_LightColour, boost::optional< double > v3_AmbientIntensity, boost::optional< double > v4_Intensity, ::Ifc4x3_add2::IfcCartesianPoint* v5_Position, double v6_Radius, double v7_ConstantAttenuation, double v8_DistanceAttenuation, double v9_QuadricAttenuation); + typedef aggregate_of< IfcLightSourcePositional > list; +}; +/// Definition from ISO/CD 10303-46:1992: The light source spot entity is a subtype of light source. Spot light source entities have a light source colour, position, direction, attenuation coefficients, concentration exponent, and spread angle. If a point lies outside the cone of influence of a light source of this type as determined by the light source position, direction and spread angle its colour is not affected by that light source. +/// +/// NOTE  The IfcLightSourceSpot adds the BeamWidthAngle which defines the inner cone in which the light source emits light at uniform full intensity. The light source's emission intensity drops off from the inner solid angle (BeamWidthAngle) to the outer solid angle (SpreadAngle). +/// +/// Definition from ISO/IEC 14772-1:1997: The Spot light node defines a light source that emits light from a specific point along a specific direction vector and constrained within a solid angle. Spot lights may illuminate geometry nodes that respond to light sources and intersect the solid angle defined by the Spot light. Spot light nodes are specified in the local coordinate system and are affected by ancestors' transformations. +/// +/// Figure 304 (from VRML97) shows the definition of spot light. +/// +/// Figure 304 — Light source spot +/// +/// NOTE  Corresponding ISO 10303 entity: light_source_spot. Please refer to ISO/IS 10303-46:1994, p. 33 for the final definition of the formal standard. +/// +/// NOTE  In addition to the attributes as defined in ISO10303-46 the additional property from ISO/IEC 14772-1:1997 (VRML) Radius, BeamWidth, and QuadricAttenuation are added to this subtype and the AmbientIntensity and Intensity are inherited from the supertype. +/// +/// HISTORY  This is a new entity in IFC 2x, renamed and enhanced in IFC2x2. +class IFC_PARSE_API IfcLightSourceSpot : public IfcLightSourcePositional { +public: + /// Definition from ISO/CD 10303-46:1992: This is the direction of the axis of the cone of the light source specified in the coordinate space of the representation being projected.. + /// Definition from VRML97 - ISO/IEC 14772-1:1997: The direction field specifies the direction vector of the light's central axis defined in the local coordinate system. + ::Ifc4x3_add2::IfcDirection* Orientation() const; + void setOrientation(::Ifc4x3_add2::IfcDirection* v); + /// Definition from ISO/CD 10303-46:1992: This real is the exponent on the cosine of the angle between the line that starts at the position of the spot light source and is in the direction of the orientation of the spot light source and a line that starts at the position of the spot light source and goes through a point on the surface being shaded. + /// NOTE: This attribute does not exists in ISO/IEC 14772-1:1997. + boost::optional< double > ConcentrationExponent() const; + void setConcentrationExponent(boost::optional< double > v); + /// Definition from ISO/CD 10303-46:1992: This planar angle measure is the angle between the line that starts at the position of the spot light source and is in the direction of the spot light source and any line on the boundary of the cone of influence. + /// Definition from VRML97 - ISO/IEC 14772-1:1997: The cutOffAngle (name of spread angle in VRML) field specifies the outer bound of the solid angle. The light source does not emit light outside of this solid angle. + double SpreadAngle() const; + void setSpreadAngle(double v); + /// Definition from VRML97 - ISO/IEC 14772-1:1997: The beamWidth field specifies an inner solid angle in which the light source emits light at uniform full intensity. The light source's emission intensity drops off from the inner solid angle (beamWidthAngle) to the outer solid angle (spreadAngle). + double BeamWidthAngle() const; + void setBeamWidthAngle(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLightSourceSpot (IfcEntityInstanceData* e); + IfcLightSourceSpot (boost::optional< std::string > v1_Name, ::Ifc4x3_add2::IfcColourRgb* v2_LightColour, boost::optional< double > v3_AmbientIntensity, boost::optional< double > v4_Intensity, ::Ifc4x3_add2::IfcCartesianPoint* v5_Position, double v6_Radius, double v7_ConstantAttenuation, double v8_DistanceAttenuation, double v9_QuadricAttenuation, ::Ifc4x3_add2::IfcDirection* v10_Orientation, boost::optional< double > v11_ConcentrationExponent, double v12_SpreadAngle, double v13_BeamWidthAngle); + typedef aggregate_of< IfcLightSourceSpot > list; +}; + +class IFC_PARSE_API IfcLinearPlacement : public IfcObjectPlacement { +public: + ::Ifc4x3_add2::IfcAxis2PlacementLinear* RelativePlacement() const; + void setRelativePlacement(::Ifc4x3_add2::IfcAxis2PlacementLinear* v); + ::Ifc4x3_add2::IfcAxis2Placement3D* CartesianPosition() const; + void setCartesianPosition(::Ifc4x3_add2::IfcAxis2Placement3D* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLinearPlacement (IfcEntityInstanceData* e); + IfcLinearPlacement (::Ifc4x3_add2::IfcObjectPlacement* v1_PlacementRelTo, ::Ifc4x3_add2::IfcAxis2PlacementLinear* v2_RelativePlacement, ::Ifc4x3_add2::IfcAxis2Placement3D* v3_CartesianPosition); + typedef aggregate_of< IfcLinearPlacement > list; +}; +/// IfcLocalPlacement defines the relative placement of a product in relation to the +/// placement of another product or the absolute placement of a product within the geometric representation context of the project. +/// IfcLocalPlacement allows that an IfcProduct can be placed by this IfcLocalPlacement (through +/// the attributeObjectPlacement) within the local coordinate system of the object placement of another IfcProduct, +/// which is referenced by the PlacementRelTo. Rules to prevent cyclic relative placements have to be introduced on the +/// application level. +/// If the PlacementRelTo is not given, then +/// the IfcProduct is placed absolutely within the +/// world coordinate system. +/// +/// HISTORY: New entity in IFC Release 1.0. +/// +/// Geometry use definitions +/// The following conventions shall apply as default relative positions if the relative placement is used. The conventions are given for all five direct subtypes of IfcProduct, the IfcSpatialStructureElement, IfcElement, IfcAnnotation, IfcGrid, IfcPort. More detailed placement information is given at the level of subtypes of those five types mentioned. +/// +/// For the subtypes of IfcSpatialStructureElement the following conventions apply +/// +/// IfcSite shall be placed absolutely within the world coordinate system established by the geometric +/// representation context of the IfcProject +/// IfcBuilding shall be placed relative to the local placement of IfcSite +/// IfcBuildingStorey shall be placed relative to the local placement of IfcBuilding +/// +/// For IfcGrid and IfcAnnotation the convention applies that it shall be placed relative +/// +/// to the local placement of its container (IfcSite, IfcBuilding, IfcBuildingStorey) +/// +/// it should be the same container element that is referenced by the IfcRelContainedInSpatialStructure +/// containment relationship, +/// +/// For IfcPort the convention applies that it shall be placed relative +/// +/// to the local placement of the element it belongs to (IfcElement) +/// +/// it should be the same element that is referenced by the IfcRelConnectsPortToElement connection +/// relationship, +/// +/// For IfcElement the convention applies that it shall be placed relative: +/// +/// to the local placement of its container (IfcSite, IfcBuilding, IfcBuildingStorey) +/// +/// it should be the same container element that is referenced by the IfcRelContainedInSpatialStructure +/// containment relationship, +/// +/// to the local placement of the IfcElement to which it is tied by an element composition relationship +/// +/// for features that are located relative to the main component (such as openings), as expressed by IfcRelVoidsElement and IfcRelProjectsElement, +/// for elements that fill an opening (such as doors or windows), as expressed byIfcRelFillsElement, +/// for coverings that cover the element, as expressed byIfcRelCoversBldgElements, +/// for sub components that are aggregated to the main component, as expressed by IIfcRelAggregates and IfcRelNests) +/// +/// If the PlacementRelTo relationship is not given, then it defaults to an absolute placement within the world +/// coordinate system established by the referenced geometric representation context within the project. +class IFC_PARSE_API IfcLocalPlacement : public IfcObjectPlacement { +public: + /// Geometric placement that defines the transformation from the related coordinate system into the relating. The placement can be either 2D or 3D, depending on the dimension count of the coordinate system. + ::Ifc4x3_add2::IfcAxis2Placement* RelativePlacement() const; + void setRelativePlacement(::Ifc4x3_add2::IfcAxis2Placement* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLocalPlacement (IfcEntityInstanceData* e); + IfcLocalPlacement (::Ifc4x3_add2::IfcObjectPlacement* v1_PlacementRelTo, ::Ifc4x3_add2::IfcAxis2Placement* v2_RelativePlacement); + typedef aggregate_of< IfcLocalPlacement > list; +}; +/// Definition from ISO/CD 10303-42:1992: A loop is a topological +/// entity constructed from a single vertex, or by stringing together connected +/// (oriented) edges, or linear segments beginning and ending at the same vertex. +/// It is typically used to bound a face lying on a surface. A loop has +/// dimensionality of 0 or 1. The domain of a 0-dimensional loop is a single point. +/// The domain of a 1-dimensional loop is a connected, oriented curve, but need not +/// to be manifold. As the loop is a circle, the location of its beginning/ending +/// point is arbitrary. The domain of the loop includes its bounds, an 0 ≤ Ξ +/// < ∞. +/// A loop is represented by a single vertex, or by an ordered collection of +/// oriented edges, or by an ordered collection of points. A loop is a graph, so +/// M and the graph genus Gl may be determined by the +/// graph traversal algorithm. Since M = 1, the Euler equation (1) reduces +/// in this case to +/// +/// where V and El are the number of unique +/// vertices and oriented edges in the loop and Gl is the genus +/// of the loop. +/// NOTE  Corresponding ISO 10303 entity: loop, the following subtypes have been incorporated into IFC: poly_loop as IfcPolyLoop, vertex_loop as IfcVertexLoop, edge_loop as IfcEdgeLoop. Please refer to ISO/IS 10303-42:1994, p. 136 for the final definition of the formal standard. +/// +/// HISTORY  New Entity in IFC2x. +/// Informal propositions: +/// +/// A loop has a finite extent. +/// A loop describes a closed (topological) curve with coincident start +/// and end vertices. +class IFC_PARSE_API IfcLoop : public IfcTopologicalRepresentationItem { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLoop (IfcEntityInstanceData* e); + IfcLoop (); + typedef aggregate_of< IfcLoop > list; +}; +/// Definition from ISO/CD 10303-43:1992: A mapped item is the use of an existing representation (the mapping source - mapped representation) as a representation item in a second representation. +/// +/// NOTE: A mapped item is a subtype of representation item. It enables a representation to be used as a representation item in one or more other representations. The mapped item allows for the definition of a representation using other representations. +/// +/// The IfcMappedItem is the inserted instance of a source definition (to be compared with a +/// block / shared cell / macro definition). The instance is inserted by applying a Cartesian transformation operator as the MappingTarget. +/// +/// EXAMPLE  An IfcMappedItem can reuse other mapped items (ako nested blocks), doing so the IfcRepresentationMap is based on an IfcShapeRepresentation including one or more IfcMappedItem's. +/// +/// NOTE   Corresponding ISO 10303 entity: mapped_item. Please refer to ISO/IS +/// 10303-43:1994, for the final definition of the formal standard. The definition of mapping_target (MappingTarget) has been restricted to be of the type cartesian_transformation_operator +/// (IfcCartesianTransformationOperator). +/// +/// HISTORY  New entity in IFC Release 2x. +/// +/// Informal Propositions +/// +/// A mapped item shall not be self-defining by participating in the definition of the representation being mapped. +/// The dimensionality of the mapping source and the mapping target has to be the same, if the mapping source is a geometric representation item. +class IFC_PARSE_API IfcMappedItem : public IfcRepresentationItem { +public: + /// A representation map that is the source of the mapped item. It can be seen as a block (or cell or marco) definition. + ::Ifc4x3_add2::IfcRepresentationMap* MappingSource() const; + void setMappingSource(::Ifc4x3_add2::IfcRepresentationMap* v); + /// A representation item that is the target onto which the mapping source is mapped. It is constraint to be a Cartesian transformation operator. + ::Ifc4x3_add2::IfcCartesianTransformationOperator* MappingTarget() const; + void setMappingTarget(::Ifc4x3_add2::IfcCartesianTransformationOperator* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMappedItem (IfcEntityInstanceData* e); + IfcMappedItem (::Ifc4x3_add2::IfcRepresentationMap* v1_MappingSource, ::Ifc4x3_add2::IfcCartesianTransformationOperator* v2_MappingTarget); + typedef aggregate_of< IfcMappedItem > list; +}; +/// IfcMaterial is a homogeneous or inhomogeneous +/// substance that can be used to form elements (physical products or +/// their components). +/// IfcMaterial is the basic entity for material +/// designation and definition; this includes identification by name +/// and classification (via reference to an external classification), +/// as well as association of material properties (isotropic or +/// anisotropic) defined by (subtypes of) +/// IfcMaterialProperties. An instance of IfcMaterial +/// may be associated to an element or element type using the +/// IfcRelAssociatesMaterial relationship. The assignment +/// might either be direct as a single material information, or +/// via +/// +/// a material layer set +/// a material profile set +/// a material constituent set +/// +/// An IfcMaterial may also have presentation information +/// associated. Such presentation information is provided by +/// IfcMaterialDefinitionRepresentation, associating line +/// styles, hatching definitions or surface coloring/rendering +/// information to a material. +/// +/// HISTORYNew entity in IFC2x4 +/// +/// IFC2x4 CHANGE The attributes Description and Category have been added. +class IFC_PARSE_API IfcMaterial : public IfcMaterialDefinition { +public: + /// Name of the material. + /// + /// EXAMPLE A view definition may require Material.Name to uniquely specify e.g. concrete or steel grade, in which case the attribute Material.Category could take the value 'Concrete' or 'Steel'. + /// + /// NOTE Material grade may have diffenrent meaning in different view definitions, e.g. strength grade for structural design and analysis, or visible appearance grade in architectural application. Also, more elaborate material grade definition may be associated as classification via inverse attribute HasExternalReferences. + std::string Name() const; + void setName(std::string v); + /// Definition of the material in more descriptive terms than given by attributes Name or Category. + /// + /// IFC2x4 CHANGE  The attribute has been added at the end of attribute list. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + /// Definition of the category (group or type) of material, in more general terms than given by attribute Name. + /// + /// EXAMPLE A view definition may require each Material.Name to be unique, e.g. for each concrete or steel grade used in a project, in which case Material.Category could take the values 'Concrete' or 'Steel'. + /// + /// IFC2x4 CHANGE  The attribute has been added at the end of attribute list. + boost::optional< std::string > Category() const; + void setCategory(boost::optional< std::string > v); + aggregate_of< IfcMaterialDefinitionRepresentation >::ptr HasRepresentation() const; // INVERSE IfcMaterialDefinitionRepresentation::RepresentedMaterial + aggregate_of< IfcMaterialRelationship >::ptr IsRelatedWith() const; // INVERSE IfcMaterialRelationship::RelatedMaterials + aggregate_of< IfcMaterialRelationship >::ptr RelatesTo() const; // INVERSE IfcMaterialRelationship::RelatingMaterial + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMaterial (IfcEntityInstanceData* e); + IfcMaterial (std::string v1_Name, boost::optional< std::string > v2_Description, boost::optional< std::string > v3_Category); + typedef aggregate_of< IfcMaterial > list; +}; +/// IfcMaterialConstituent is a single and identifiable part of an element which is constructed of a number of part (one or more) each having an individual material. The association of the material constituent to the part is provided by a keyword as value of the Name attribute. +/// +/// NOTE See the "Material Use Definition" at the individual element to which an IfcMaterialConstituentSet may apply for a required or recommended definition of such keywords as value for IfcMaterialConstituent.Name. +/// +/// HISTORYNew Entity in IFC2x4 +class IFC_PARSE_API IfcMaterialConstituent : public IfcMaterialDefinition { +public: + /// The name by which the material constituent is known. + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + /// Definition of the material constituent in descriptive terms. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + /// Reference to the material from which the constituent is constructed. + ::Ifc4x3_add2::IfcMaterial* Material() const; + void setMaterial(::Ifc4x3_add2::IfcMaterial* v); + /// Optional provision of a fraction of the total amount (volume or weight) that applies to the IfcMaterialConstituentSet that is contributed by this IfcMaterialConstituent. + boost::optional< double > Fraction() const; + void setFraction(boost::optional< double > v); + /// Category of the material constituent, e.g. the role it has in the constituent set it belongs to. + boost::optional< std::string > Category() const; + void setCategory(boost::optional< std::string > v); + aggregate_of< IfcMaterialConstituentSet >::ptr ToMaterialConstituentSet() const; // INVERSE IfcMaterialConstituentSet::MaterialConstituents + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMaterialConstituent (IfcEntityInstanceData* e); + IfcMaterialConstituent (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcMaterial* v3_Material, boost::optional< double > v4_Fraction, boost::optional< std::string > v5_Category); + typedef aggregate_of< IfcMaterialConstituent > list; +}; +/// IfcMaterialConstituentSet is a collection of individual material constituents, each assigning a material to a part of an element. The parts are only identified by a keyword (as opposed to an IfcMaterialLayerSet or IfcMaterialProfileSet where each part has an individual shape parameter (layer thickness or layer profile). +/// +/// EXAMPLE The different materials of a window +/// construction shall be provided for the window lining and the +/// window glazing. An IfcMaterialConstituentSet is assigned +/// to the window with two IfcMaterialConstituent's, one with +/// the Name = 'Lining', one with the Name = +/// 'Glazing'. +/// NOTE See the "Material Use Definition" at the individual +/// element to which an IfcMaterialConstituentSet may apply +/// for a required or recommended definition of such +/// keywords. +/// +/// HISTORYNew Entity in IFC2x4. +class IFC_PARSE_API IfcMaterialConstituentSet : public IfcMaterialDefinition { +public: + /// The name by which the constituent set is known. + boost::optional< std::string > Name() const; + void setName(boost::optional< std::string > v); + /// Definition of the material constituent set in descriptive terms. + boost::optional< std::string > Description() const; + void setDescription(boost::optional< std::string > v); + /// Identification of the constituents from which the material constituent set is composed. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcMaterialConstituent >::ptr > MaterialConstituents() const; + void setMaterialConstituents(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcMaterialConstituent >::ptr > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMaterialConstituentSet (IfcEntityInstanceData* e); + IfcMaterialConstituentSet (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcMaterialConstituent >::ptr > v3_MaterialConstituents); + typedef aggregate_of< IfcMaterialConstituentSet > list; +}; +/// IfcMaterialDefinitionRepresentation defines presentation information relating to IfcMaterial. It allows for multiple presentations of the same material for different geometric representation contexts. +/// +/// NOTE  The IfcMaterialDefinitionRepresentation is currently only used +/// to define presentation information to material used at element +/// occurrences, defined as subtypes of IfcElement, or at +/// element types, defined as subtypes of IfcElementType. The +/// IfcMaterial is assigned to the subtype of +/// IfcElement, or IfcElementType using the +/// IfcRelAssociatesMaterial relationship (eventually via +/// other material related entities IfcMaterialLayerSetUsage, +/// IfcMaterialLayerSet, IfcMaterialLayer, or +/// IfcMaterialProfileSetUsage, IfcMaterialProfileSet, +/// IfcMaterialProfile). +/// +/// The IfcMaterialDefinitionRepresentation can apply +/// +/// different presentation styles for different representation contexts, for example, a different style for sketch view, model view or plan view, or for different target scales, +/// for each representation context is can apply curve style, fill area style (hatching), symbol, text and surface style. +/// +/// HISTORY  New entity in IFC2x3. +/// +/// IFC2x3 CHANGE  The entity IfcMaterialDefinitionRepresentation has been added. Upward compatibility for file based exchange is guaranteed. +/// +/// IFC2x4 CHANGE  The assignment of curve, surface and other styles to an IfcStyledItem has been simplified by IfcStyleAssignmentSelect. The use of intermediate IfcPresentationStyleAssignment is deprecated. +/// +/// Use definition +/// +/// As shown in Figure 331, the presentation assignment can be specific to a representation context by adding one and more IfcStyledRepresentation's. Each of them includes a single IfcStyledItem with exactly zero or one style for either curve, fill area, surface, text or symbol style that is applicable. +/// +/// Figure 331 — Material definition representation +class IFC_PARSE_API IfcMaterialDefinitionRepresentation : public IfcProductRepresentation { +public: + /// Reference to the material to which the representation applies. + ::Ifc4x3_add2::IfcMaterial* RepresentedMaterial() const; + void setRepresentedMaterial(::Ifc4x3_add2::IfcMaterial* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMaterialDefinitionRepresentation (IfcEntityInstanceData* e); + IfcMaterialDefinitionRepresentation (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_add2::IfcRepresentation >::ptr v3_Representations, ::Ifc4x3_add2::IfcMaterial* v4_RepresentedMaterial); + typedef aggregate_of< IfcMaterialDefinitionRepresentation > list; +}; +/// IfcMaterialLayerSetUsage determines the usage of +/// IfcMaterialLayerSet in terms of its location and +/// orientation relative to the associated element geometry. The +/// location of material layer set shall be compatible with the +/// building element geometry (that is, material layers shall fit inside +/// the element geometry). The rules to ensure the compatibility +/// depend on the type of the building element. +/// +/// EXAMPLE For a cavity brick wall with shape +/// representation SweptSolid, the +/// IfcMaterialLayerSet.TotalThickness shall be equal to the +/// wall thickness. Also the OffsetFromReferenceLine shall +/// match the exact positions between the two shape representations +/// of IfcWallStandardCase, i.e. the +/// IfcShapeRepresentation's with +/// RepresentationIdentifier="Axis" and +/// RepresentationIdentifier="Body". +/// +/// NOTE Refer to the implementation guide and agreements for +/// more information on matching between building element geometry +/// and material layer set usage. +/// +/// The IfcMaterialLayerSetUsage is always assigned to an +/// individual occurrence object only (i.e. to relevant subtypes of +/// IfcElement). The IfcMaterialLayerSet, referenced by +/// ForLayerSet can however be shared among several occurrence +/// objects. If the element type is available (i.e. the relevant +/// subtype of IfcElementType, then the +/// IfcMaterialLayerSet can be assigned to the type object. +/// The assignment between asubtype of IfcElement and the +/// IfcMaterialLayerSetUsage is handled by +/// IfcRelAssociatesMaterial. +/// +/// Use definition +/// The IfcMaterialLayerSetUsage is primarily intended to +/// be associated with planar building elements having a constant +/// thickness. With further agreements on the interpretation of +/// LayerSetDirection, the usage can be extended also to other +/// cases, e.g. to curved building elements, provided that the +/// material layer thicknesses are constant. +/// Generally, an element may be layered in any of its primary +/// directions, denoted by its x, y or z axis. The geometry use +/// definitions at eachspecific types of building element will +/// determine the applicableLayerSetDirection. +/// +/// The following examples illustrate how the IfcMaterialLayerSetUsage attributes (LayerSetDirection, DirectionSense, OffsetFromReferenceLine) can +/// be used in different cases. The normative material use definitions are documented at each element (how these shall be used). +/// +/// Figure 286 shows an example of the use of IfcMaterialLayerSetUsage aligned to the axis of a wall. +/// +/// EXAMPLE  For a standard wall with extruded +/// geometric representation (vertical extrusion), the layer set +/// direction will be perpendicular to extrusion direction, +/// andcan be derived from the direction of the wall +/// axis. With the DirectionSense(positive in +/// this example) the individual IfcMaterialLayers are +/// assigned consecutively right-to-left or left-to-right. For a +/// curved wall, "direction denoting the wall thickness" can be +/// derived from the direction of the wall axis, and it will remain +/// perpendicular to the wall path. The +/// DirectionSenseapplies as well. +/// +/// NOTE  According to the IfcWallStandardCase material use +/// definition the LayerSetDirection for +/// IfcWallStandardCase is always AXIS2 (i.e. along the +/// y-axis), as shown in this example. +/// +/// Figure 286 — Material layer set usage for wall +/// +/// Figure 287 shows an example of the use of IfcMaterialLayerSetUsage aligned to a slab. +/// +/// EXAMPLE For a slab with perpendicular +/// extruded geometric representation, the LayerSetDirection +/// will coincide with the extrusion direction (in positive or +/// negative sense). In this example, the material layer set base is +/// the extruded profile and consistent with the +/// IfcExtrudedAreaSolid.Position,with the +/// DirectionSensebeing positive, the +/// individual IfcMaterialLayers are built up from the base +/// towards positive z direction in this case. +/// +/// NOTE According to the IfcSlabStandardCase +/// material use definition the LayerSetDirection for +/// IfcSlabStandardCase is always AXIS3 (i.e. along the +/// z-axis). +/// +/// Figure 287 — Material layer set usage for slab +/// +/// Figure 288 shows an example of the use of IfcMaterialLayerSetUsage aligned to a roof slab with non-perpendicular extrusion. +/// +/// EXAMPLE For a slab with non-perpendicular +/// extruded geometric representation, the guidelines above apply as +/// well. The material layer thickness and the +/// OffsetFromReferenceLine is always measured +/// perpendicularly, even if the extrusion direction is not +/// perpendicular. Therefore the total material layer thickness is +/// not equal to the extrusion depth of the +/// geometry. +/// +/// Figure 288 — Material layer set usage for roof slab +class IFC_PARSE_API IfcMaterialLayerSetUsage : public IfcMaterialUsageDefinition { +public: + /// The IfcMaterialLayerSet set to which the usage is applied. + ::Ifc4x3_add2::IfcMaterialLayerSet* ForLayerSet() const; + void setForLayerSet(::Ifc4x3_add2::IfcMaterialLayerSet* v); + /// Orientation of the material layer set relative to element reference geometry. The meaning of the value of this attribute shall be specified in the geometry use section for each element. For extruded shape representation, direction can be given along the extrusion path (e.g. for slabs) or perpendicular to it (e.g. for walls). + /// + /// NOTE  the LayerSetDirection for IfcWallStandardCase shall be AXIS2 (i.e. the y-axis) and for IfcSlabStandardCase and IfcPlateStandardCase it shall be AXIS3 (i.e. the z-axis). + /// + /// Whether the material layers of the set being used shall 'grow' into the positive or negative direction of the given axis, shall be deifned by DirectionSense attribute. + ::Ifc4x3_add2::IfcLayerSetDirectionEnum::Value LayerSetDirection() const; + void setLayerSetDirection(::Ifc4x3_add2::IfcLayerSetDirectionEnum::Value v); + /// Denotion whether the material layer set is oriented in positive or negative sense along the specified axis (defined by LayerSetDirection). "Positive" means that the consecutive layers (the IfcMaterialLayer instances in the list of IfcMaterialLayerSet.MaterialLayers) are placed face-by-face in the direction of the positive axis as established by LayerSetDirection: for AXIS2 it would be in +y, for AXIS3 it would be +z. "Negative" means that the layers are placed face-by-face in the direction of the negative LayerSetDirection. In both cases, starting at the material layer set base line. + /// NOTE  the material layer set base line (MlsBase) is located by OffsetFromReferenceLine, and may be on the positive or negative side of the element reference line (or plane); positive or negative for MlsBase placement does not depend on the DirectionSense attribute, but on the relevant element axis. + ::Ifc4x3_add2::IfcDirectionSenseEnum::Value DirectionSense() const; + void setDirectionSense(::Ifc4x3_add2::IfcDirectionSenseEnum::Value v); + /// Offset of the material layer set base line (MlsBase) from reference geometry (line or plane) of element. The offset can be positive or negative, unless restricted for a particular building element type in its use definition or by implementer agreement. A positive value means, that the MlsBase is placed on the positive side of the reference line or plane, on the axis established by LayerSetDirection (in case of AXIS2 into the direction of +y, or in case of AXIS2 into the direction of +z). A negative value means that the MlsBase is placed on the negative side, as established by LayerSetDirection (in case of AXIS2 into the direction of -y). NOTE  the positive or negative sign in the offset only affects the MlsBase placement, it does not have any effect on the application of DirectionSense for orientation of the material layers; also DirectionSense does not change the MlsBase placement. + double OffsetFromReferenceLine() const; + void setOffsetFromReferenceLine(double v); + /// EPM-HTML> + /// Extent of the extrusion of the elements body shape representation to which the IfcMaterialLayerSetUsage applies. It is used as the reference value for the upper OffsetValues[2] provided by the IfcMaterialLayerSetWithOffsets subtype for included material layers. + /// + /// IFC2x4 CHANGE  New attribute added to the end of attribute list. + /// + /// NOTE 1  The attribute ReferenceExtent shall be asserted, if an IfcMaterialLayerSetWithOffsets is included in the ForLayerSet.MaterialLayers list of maerial layers. + /// + /// NOTE 2  The ReferenceExtent for IfcWallStandardCase is the reference height starting at z=0 being the XY plane of the object coordinate system. + boost::optional< double > ReferenceExtent() const; + void setReferenceExtent(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMaterialLayerSetUsage (IfcEntityInstanceData* e); + IfcMaterialLayerSetUsage (::Ifc4x3_add2::IfcMaterialLayerSet* v1_ForLayerSet, ::Ifc4x3_add2::IfcLayerSetDirectionEnum::Value v2_LayerSetDirection, ::Ifc4x3_add2::IfcDirectionSenseEnum::Value v3_DirectionSense, double v4_OffsetFromReferenceLine, boost::optional< double > v5_ReferenceExtent); + typedef aggregate_of< IfcMaterialLayerSetUsage > list; +}; +/// IfcMaterialProfileSetUsage determines the usage of IfcMaterialProfileSet in terms of its location relative to the associated element geometry. The location of a material profile set shall be compatible with the building element geometry (that is, material profiles shall fit inside the element geometry). The rules to ensure the compatibility depend on the type of the building element. For building elements with shape representations which are based on extruded solids, this is accomplished by referring to the identical profile definition in the shape model as in the material profile set. +/// +/// NOTE Refer to the implementation guide and agreements for more information on matching between building element geometry and material profile set usage. +/// NOTE The referenced IfcMaterialProfileSet may represent a single material +/// profile, or a composite profile with two or more material profiles. +/// +/// HISTORYNew Entity in IFC2x4. +class IFC_PARSE_API IfcMaterialProfileSetUsage : public IfcMaterialUsageDefinition { +public: + /// The IfcMaterialProfileSet set to which the usage is applied. + ::Ifc4x3_add2::IfcMaterialProfileSet* ForProfileSet() const; + void setForProfileSet(::Ifc4x3_add2::IfcMaterialProfileSet* v); + /// Index reference to a significant point in the section profile. Describes how the section is aligned relative to the (longitudinal) axis of the member it is associated with. This parametric specification of profile alignment can be provided redundantly to the explicit alignment defined by ForProfileSet.MaterialProfiles[*].Profile. + boost::optional< int > CardinalPoint() const; + void setCardinalPoint(boost::optional< int > v); + /// EPM-HTML> + /// Extent of the extrusion of the elements body shape representation to which the IfcMaterialProfileSetUsage applies. It is used as the reference value for the upper OffsetValues[2] provided by the IfcMaterialProfileSetWithOffsets subtype for included material profiles. + /// + /// NOTE 1  The attribute ReferenceExtent shall be asserted, if an IfcMaterialProfileSetWithOffsets is included in the ForProfileSet.MaterialProfiles list of maerial layers. + /// + /// NOTE 2  The ReferenceExtent for IfcBeamStandardCase, IfcColumnStandardCase, and IfcMemberStandardCase is the reference length starting at z=0 being the XY plane of the object coordinate system. + boost::optional< double > ReferenceExtent() const; + void setReferenceExtent(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMaterialProfileSetUsage (IfcEntityInstanceData* e); + IfcMaterialProfileSetUsage (::Ifc4x3_add2::IfcMaterialProfileSet* v1_ForProfileSet, boost::optional< int > v2_CardinalPoint, boost::optional< double > v3_ReferenceExtent); + typedef aggregate_of< IfcMaterialProfileSetUsage > list; +}; +/// IfcMaterialProfileSetUsageTapering specifies dual material profile sets in association with tapered prismatic (beam- or column-like) elements. +/// +/// HISTORY New entity in IFC 2x4 +/// +/// Usage with tapered building elements +/// The inherited attribute ForProfileSet specifies the +/// profile and material at the start of the member, +/// ForProfileEndSet at its end. Start and end correspond to +/// the extrusion direction in the shape model of the shape +/// representation of the element or element type. +/// Both material profile sets should refer to the same material, +/// that is, only differ with respect to their profiles. +/// +/// Usage with structural analysis curve members +/// IfcMaterialProfileSetUsageTapering may be used with the +/// structural analysis idealization +/// (IfcStructuralCurveMember) of uniform members as well as +/// of tapered members. +/// In case of uniform members, ForProfileSet and +/// ForProfileEndSet refer to the same material profile set. +/// In case of tapered members, ForProfileSet specifies the +/// profile and material at the start of the member, +/// ForProfileEndSet at its end. Start and end correspond to +/// the edge direction in the topological representation of the curve +/// member. +class IFC_PARSE_API IfcMaterialProfileSetUsageTapering : public IfcMaterialProfileSetUsage { +public: + /// The second IfcMaterialProfileSet set to which the usage is applied. + ::Ifc4x3_add2::IfcMaterialProfileSet* ForProfileEndSet() const; + void setForProfileEndSet(::Ifc4x3_add2::IfcMaterialProfileSet* v); + /// Index reference to a significant point in the second section profile. Describes how this section is aligned relative to the axis of the member it is associated with. This parametric specification of profile alignment can be provided redundantly to the explicit alignment defined by ForProfileSet.MaterialProfiles[*].Profile. + boost::optional< int > CardinalEndPoint() const; + void setCardinalEndPoint(boost::optional< int > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMaterialProfileSetUsageTapering (IfcEntityInstanceData* e); + IfcMaterialProfileSetUsageTapering (::Ifc4x3_add2::IfcMaterialProfileSet* v1_ForProfileSet, boost::optional< int > v2_CardinalPoint, boost::optional< double > v3_ReferenceExtent, ::Ifc4x3_add2::IfcMaterialProfileSet* v4_ForProfileEndSet, boost::optional< int > v5_CardinalEndPoint); + typedef aggregate_of< IfcMaterialProfileSetUsageTapering > list; +}; +/// IfcMaterialProperties is defined as an abstract +/// supertype for entities that apply material properties to material +/// definitions. A set of material properties that are assigned to an +/// individual material definiton may be identified by a Name +/// and a Description. +/// +/// NOTE  The set of material properties can be assigned +/// to an individual IfcMaterial, a set or composite of +/// materials (IfcMaterialConstituent, +/// IfcMaterialConstituentSet), or set or individual material +/// layer (IfcMaterialLayer, IfcMaterialLayerSet), or +/// a set or individual material profile (IfcMaterialProfile, +/// IfcMaterialProfileSet) +/// +/// The applicable set of material properties is defined at the +/// subtype IfcExtendedMaterialProperties. It includes +/// material properties defined in this IFC specification and those +/// defined as user-defined extended material properties. +/// +/// HISTORY  New Entity in IFC 2x. +/// +/// IFC2x4 CHANGE  The subtypes that represented a fixed list of statically defined material properties, IfcMechanicalMaterialProperties, IfcThermalMaterialProperties, IfcHygroscopicMaterialProperties, IfcGeneralMaterialProperties, IfcOpticalMaterialProperties, IfcWaterProperties, IfcFuelProperties, IfcProductsOfCombustionProperties have been deleted, use the generic IfcExtendedMaterialProperties instead. +class IFC_PARSE_API IfcMaterialProperties : public IfcExtendedProperties { +public: + /// Reference to the material definition to which the set of properties is assigned. + /// + /// IFC2x4 CHANGE The datatype has been changed to supertype IfcMaterialDefinition. + ::Ifc4x3_add2::IfcMaterialDefinition* Material() const; + void setMaterial(::Ifc4x3_add2::IfcMaterialDefinition* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMaterialProperties (IfcEntityInstanceData* e); + IfcMaterialProperties (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_add2::IfcProperty >::ptr v3_Properties, ::Ifc4x3_add2::IfcMaterialDefinition* v4_Material); + typedef aggregate_of< IfcMaterialProperties > list; +}; +/// IfcMaterialRelationship defines a relationship between part and whole in material definitions (as in composite materials). The parts, expressed by the set of RelatedMaterials, are material constituents of which a single material aggregate is composed. +/// +/// HISTORYNew Entity in IFC2x4 +class IFC_PARSE_API IfcMaterialRelationship : public IfcResourceLevelRelationship { +public: + /// Reference to the relating material (the composite). + ::Ifc4x3_add2::IfcMaterial* RelatingMaterial() const; + void setRelatingMaterial(::Ifc4x3_add2::IfcMaterial* v); + /// Reference to related materials (as constituents of composite material). + aggregate_of< ::Ifc4x3_add2::IfcMaterial >::ptr RelatedMaterials() const; + void setRelatedMaterials(aggregate_of< ::Ifc4x3_add2::IfcMaterial >::ptr v); + boost::optional< std::string > MaterialExpression() const; + void setMaterialExpression(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMaterialRelationship (IfcEntityInstanceData* e); + IfcMaterialRelationship (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcMaterial* v3_RelatingMaterial, aggregate_of< ::Ifc4x3_add2::IfcMaterial >::ptr v4_RelatedMaterials, boost::optional< std::string > v5_MaterialExpression); + typedef aggregate_of< IfcMaterialRelationship > list; +}; +/// The IfcMirroredProfileDef defines the profile by mirroring the parent profile about the y axis of the parent profile coordinate system. That is, left and right of the parent profile are swapped. +/// +/// Notes: +/// +/// IfcMirroredProfileDef is primarily useful together with +/// IfcCShapeProfileDef, IfcLShapeProfileDef, +/// IfcUShapeProfileDef, or IfcZShapeProfileDef as +/// parent profile but can be used with other parent profile types as well. +/// +/// Mirroring of an IfcParameterizedProfileDef is performed after +/// translation and rotation according to its Position attribute. +/// For example, if the parent profile's Position offsets it by half +/// of its width to the right, then the mirrored profile will be offset by +/// half of its width to the left. +/// +/// Mirroring about the x axis, i.e. swapping top and bottom, can be +/// achieved by mirroring about the y axis coupled with 180 degree rotation +/// about the z axis. +/// In general, rotation happens in a containing object such as +/// IfcSweptAreaSolid, i.e. after mirroring by IfcMirroredProfileDef +/// was performed. +/// If the parent profile is an IfcParameterizedProfileDef, rotation +/// can alternatively happen already in the parent profile by means of its +/// Position attribute, i.e. before mirroring by IfcMirroredProfileDef +/// was performed. +/// +/// HISTORY  New entity in IFC2x4. +class IFC_PARSE_API IfcMirroredProfileDef : public IfcDerivedProfileDef { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMirroredProfileDef (IfcEntityInstanceData* e); + IfcMirroredProfileDef (::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcProfileDef* v3_ParentProfile, boost::optional< std::string > v5_Label); + typedef aggregate_of< IfcMirroredProfileDef > list; +}; +/// An IfcObjectDefinition is the generalization of any +/// semantically treated thing or process, either being a type or an +/// occurrences. Object defintions can be named, using the inherited +/// Name attribute, which should be a user recognizable label +/// for the object occurrance. Further explanations to the object can +/// be given using the inherited Description attribute. A +/// context is a specific kind of object definition as it provides the +/// project or library context in which object types and object +/// occurrences are defined. +/// Objects are independent pieces of information that might contain +/// or reference other pieces of information. There are four essential +/// kinds of relationships in which object definitons (by their +/// instantiable subtypes) can be involved: +/// +/// Assignment of other objects - an assignment relationship +/// (IfcRelAssigns) that refers to other types of objects and +/// creates a bi-directional association. The semantic of the +/// assignment is established at the level of the subtypes of the +/// general IfcRelAssigns relationship. There is no dependency +/// implied a priori by the assignment. +/// Association to external resources - an association +/// relationship (IfcRelAssociates) that refers to external +/// sources of information (most notably a classification or document) +/// and creates a uni-directional association. There is no dependency +/// implied by the association. +/// Aggregation of other objects - an aggregation +/// relationship (IfcRelAggregates) that establishes an +/// unordered, spatial whole/part relation and creates a bi-directional +/// relation. There is an implied dependency established. +/// Nesting of other objects - a nesting relationship +/// (IfcRelNests) that establishes an ordered, non-spatial +/// whole/part relation and creates a bi-directional relation. There is +/// an implied dependency established. +/// Declaration within a context - a relationship +/// (IfcRelDeclares) of the uppermost object definition within +/// the object definition tree (e.g. the summary object within an +/// object nesting tree) to the context (a project or project library). +/// It applies the units, representation context and other context +/// information to this object definition and all dependent ones. +/// +/// EXCEPTION  The link +/// between the uppermost object in the spatial structure tree, that is +/// IfcSite or ifcBuilding, and the context provided +/// by IfcProject is created using the +/// IfcRelAggregates relationship. See IfcProject for +/// more information. +/// +/// HISTORY New abstract entity in IFC2x3. +/// +/// IFC2x4 CHANGE The new subtype IfcContext and the relationship to context HasContext has been added . The decomposition relationship is split into ordered nesting (Nests, IsNestedBy) and un-ordered aggregating (Decomposes, IsDecomposedBy). +class IFC_PARSE_API IfcObjectDefinition : public IfcRoot, public IfcDefinitionSelect { +public: + aggregate_of< IfcRelAssigns >::ptr HasAssignments() const; // INVERSE IfcRelAssigns::RelatedObjects + aggregate_of< IfcRelNests >::ptr Nests() const; // INVERSE IfcRelNests::RelatedObjects + aggregate_of< IfcRelNests >::ptr IsNestedBy() const; // INVERSE IfcRelNests::RelatingObject + aggregate_of< IfcRelDeclares >::ptr HasContext() const; // INVERSE IfcRelDeclares::RelatedDefinitions + aggregate_of< IfcRelAggregates >::ptr IsDecomposedBy() const; // INVERSE IfcRelAggregates::RelatingObject + aggregate_of< IfcRelAggregates >::ptr Decomposes() const; // INVERSE IfcRelAggregates::RelatedObjects + aggregate_of< IfcRelAssociates >::ptr HasAssociations() const; // INVERSE IfcRelAssociates::RelatedObjects + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcObjectDefinition (IfcEntityInstanceData* e); + IfcObjectDefinition (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description); + typedef aggregate_of< IfcObjectDefinition > list; +}; + +class IFC_PARSE_API IfcOpenCrossProfileDef : public IfcProfileDef { +public: + bool HorizontalWidths() const; + void setHorizontalWidths(bool v); + std::vector< double > /*[1:?]*/ Widths() const; + void setWidths(std::vector< double > /*[1:?]*/ v); + std::vector< double > /*[1:?]*/ Slopes() const; + void setSlopes(std::vector< double > /*[1:?]*/ v); + boost::optional< std::vector< std::string > /*[2:?]*/ > Tags() const; + void setTags(boost::optional< std::vector< std::string > /*[2:?]*/ > v); + ::Ifc4x3_add2::IfcCartesianPoint* OffsetPoint() const; + void setOffsetPoint(::Ifc4x3_add2::IfcCartesianPoint* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcOpenCrossProfileDef (IfcEntityInstanceData* e); + IfcOpenCrossProfileDef (::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, bool v3_HorizontalWidths, std::vector< double > /*[1:?]*/ v4_Widths, std::vector< double > /*[1:?]*/ v5_Slopes, boost::optional< std::vector< std::string > /*[2:?]*/ > v6_Tags, ::Ifc4x3_add2::IfcCartesianPoint* v7_OffsetPoint); + typedef aggregate_of< IfcOpenCrossProfileDef > list; +}; +/// Definition from ISO/CD 10303-42:1992: An open shell is a shell of +/// the dimensionality 2. Its domain, if present, is a finite, connected, oriented, +/// 2-manifold with boundary, but is not a closed surface. It can be thought of as +/// a closed shell with one or more holes punched in it. The domain of an open +/// shell satisfies 0 +/// < Ξ < 1. An open shell is +/// functionally more general than a face because its domain can have handles. +/// The shell is defined by a collection of faces, which may be oriented +/// faces. The sense of each face, after taking account of the orientation, shall +/// agree with the shell normal as defined below. The orientation can be supplied +/// directly as a BOOLEAN attribute of an oriented face, or be defaulted to TRUE if +/// the shell member is a face without the orientation attribute. +/// The following combinatorial restrictions on open shells and geometrical +/// restrictions on their domains are designed, together with the informal +/// propositions, to ensure that any domain associated with an open shell is an +/// orientable manifold. +/// +/// Each face reference shall be unique. +/// An open shell shall have at least one face. +/// A given face may exist in more than one open shell. +/// +/// The boundary of an open shell consists of the edges that are referenced +/// only once by the face - bounds (loops) of its faces, together with all of their +/// vertices. The domain of an open shell, if present, contains all edges and +/// vertices of its faces. +/// +/// NOTE  Note that this is slightly different from the +/// definition of a face domain, which includes none of its bounds. For example, a +/// face domain may exclude an isolated point or line segment. An open shell domain +/// may not. (See the algorithm for computing below.) +/// In the current IFC Release only poly loops +/// (IfcPolyLoop) are defined for bounds of face bound +/// (IfcFaceBound.Bound). This will allow for faceted B-rep only. For +/// further specification, including the Euler formulas to be satisfied, please +/// refer to ISO 10303-42:1994. +/// +/// NOTE  Corresponding ISO 10303 entity: +/// open_shell, please refer to ISO/IS 10303-42:1994, p.148 for the final +/// definition of the formal standard. +/// +/// HISTORY  New class in IFC2x. +/// +/// Informal propositions: +/// +/// Every edge shall be referenced exactly twice by the face bounds of +/// the face. +/// Each oriented edge shall be unique. +/// No edge shall be referenced by more than two faces. +/// Distinct faces of the shell do not intersect, but may share edges or +/// vertices. +/// Distinct edges do not intersect but may share vertices. +/// Each face reference shall be unique. +/// The loops of the shell shall not be a mixture of poly loop and other +/// loop types. Note: this is given, since only poly loop is defined as face bound +/// definition. +/// The closed shell shall be an oriented arcwise connected 2-manifold. +/// +/// The Euler equation shall be satisfied. Note: Please refer to ISO/IS +/// 10303-42:1994, p.148 for the equation. +class IFC_PARSE_API IfcOpenShell : public IfcConnectedFaceSet, public IfcShell { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcOpenShell (IfcEntityInstanceData* e); + IfcOpenShell (aggregate_of< ::Ifc4x3_add2::IfcFace >::ptr v1_CfsFaces); + typedef aggregate_of< IfcOpenShell > list; +}; +/// Definition: establishes an association between one relating organization and one or more related organizations. +/// +/// NOTE Corresponds to the following entity in ISO-10303-41: organization_relationship. +/// +/// HISTORY New entity in IFC Release 2x. +/// IFC 2x4 change: attribute Name made optional. +class IFC_PARSE_API IfcOrganizationRelationship : public IfcResourceLevelRelationship { +public: + /// Organization which is the relating part of the relationship between organizations. + ::Ifc4x3_add2::IfcOrganization* RelatingOrganization() const; + void setRelatingOrganization(::Ifc4x3_add2::IfcOrganization* v); + /// The other, possibly dependent, organizations which are the related parts of the relationship between organizations. + aggregate_of< ::Ifc4x3_add2::IfcOrganization >::ptr RelatedOrganizations() const; + void setRelatedOrganizations(aggregate_of< ::Ifc4x3_add2::IfcOrganization >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcOrganizationRelationship (IfcEntityInstanceData* e); + IfcOrganizationRelationship (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcOrganization* v3_RelatingOrganization, aggregate_of< ::Ifc4x3_add2::IfcOrganization >::ptr v4_RelatedOrganizations); + typedef aggregate_of< IfcOrganizationRelationship > list; +}; +/// Definition from ISO/CD 10303-42:1992: An oriented edge is an edge constructed from another edge and contains a BOOLEAN direction flag to indicate whether or not the orientation of the constructed edge agrees with the orientation of the original edge. Except for perhaps orientation, the oriented edge is equivalent to the original edge. +/// +/// NOTE  A common practice is solid modelling systems is to have an entity that represents the "use" or "traversal" of an edge. This "use" entity explicitly represents the requirement in a manifold solid that each edge must be traversed exactly twice, once in each direction. The "use" functionality is provided by the edge subtype oriented edge. +/// +/// NOTE  Corresponding ISO 10303 entity: oriented_edge. Please refer to ISO/IS 10303-42:1994, p. 133 for the final definition of the formal standard. +/// +/// HISTORY  New Entity in IFC Release 2.0. +class IFC_PARSE_API IfcOrientedEdge : public IfcEdge { +public: + /// Edge entity used to construct this oriented edge. + ::Ifc4x3_add2::IfcEdge* EdgeElement() const; + void setEdgeElement(::Ifc4x3_add2::IfcEdge* v); + /// BOOLEAN, If TRUE the topological orientation as used coincides with the orientation from start vertex to end vertex of the edge element. If FALSE otherwise. + bool Orientation() const; + void setOrientation(bool v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcOrientedEdge (IfcEntityInstanceData* e); + IfcOrientedEdge (::Ifc4x3_add2::IfcEdge* v3_EdgeElement, bool v4_Orientation); + typedef aggregate_of< IfcOrientedEdge > list; +}; +/// The parameterized profile definition +/// defines a 2D position coordinate system to which the parameters of the +/// different profiles relate to. All profiles are defined centric to the +/// origin of the position coordinate system, or more specific, the origin +/// [0.,0.] shall be in the center of the bounding box of the profile. +/// +/// The Position attribute of IfcParameterizedProfileDef +/// is used to position the profile within the XY plane of the underlying +/// coordinate system of the swept surface geometry, the swept area +/// solid or the sectioned spine. It can be used to position the profile at +/// any point which becomes the origin [0.,0.,0.] of the extruded +/// or rotated surface or solid. +/// +/// The Position attribute should not be used if the transformation +/// can be specified in a containing object instead. In particular, this +/// applies if the IfcParameterizedProfileDef is referenced as +/// SweptArea in subtypes of IfcSweptAreaSolid or as +/// CrossSections in IfcSectionedSpine. +/// +/// Several subtypes of IfcParameterizedProfileDef provide +/// shape parameters which are optional. Sending systems should always +/// provide values for these parameters if possible. If these parameters +/// are left unspecified, receiving systems may retrieve values for them +/// by external reference (if a reference to an external document or library +/// is given; see guidance at IfcProfileDef), or estimate them, or +/// simply assume zero values. +/// +/// HISTORY  New entity in IFC2x2. +/// +/// IFC2x Platform CHANGE  The IfcParameterizedProfileDef +/// is introduced as an intermediate new abstract entity that unifies the +/// definition and usage of the position coordinate system for all +/// parameterized profiles. The Position attribute has been removed at all +/// subtypes (like IfcRectangleProfileDef, IfcCircleProfileDef, +/// etc.). +/// +/// IFC2x3 CHANGE  All profile origins are now in the center +/// of the bounding box. +/// +/// IFC2x4 CHANGE  Position attribute made optional (default: identity transformation). +/// Several radius parameters in subtypes have been changed from optional IfcPositiveLengthMeasure (assumed default: 0.) to optional IfcNonNegativeLengthMeasure (default: unspecified). This change allows to explicitly specify zero radius. Sending systems shall export 0. values if parameters are known to be 0. +/// Subtypes IfcCraneRailAShapeProfileDef and IfcCraneRailFShapeProfileDef deleted. Rail profiles shall be modeled as IfcArbitraryClosedProfileDef or as IfcAsymmetricIShapeProfileDef together with appropriate external reference. +class IFC_PARSE_API IfcParameterizedProfileDef : public IfcProfileDef { +public: + /// Position coordinate system of the parameterized profile definition. If unspecified, no translation and no rotation is applied. + ::Ifc4x3_add2::IfcAxis2Placement2D* Position() const; + void setPosition(::Ifc4x3_add2::IfcAxis2Placement2D* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcParameterizedProfileDef (IfcEntityInstanceData* e); + IfcParameterizedProfileDef (::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position); + typedef aggregate_of< IfcParameterizedProfileDef > list; +}; +/// Definition from ISO/CD 10303-42:1992: A path is a topological entity consisting of an ordered collection of oriented edges, such that the edge start vertex of each edge coincides with the edge end of its predecessor. The path is ordered from the edge start of the first oriented edge to the edge end of the last edge. The BOOLEAN value sense in the oriented edge indicates whether the edge direction agrees with the direction of the path (TRUE) or is the opposite direction (FALSE). +/// +/// An individual edge can only be referenced once by an individual path. An edge can be referenced by multiple paths. An edge can exist independently of a path. +/// +/// NOTE  Corresponding ISO 10303 entity: path. Please refer to ISO/IS 10303-42:1994, p. 133 for the final definition of the formal standard. +/// +/// HISTORY  New Entity in IFC Release 2.0 +/// +/// Informal proposition: +/// +/// A path has dimensionality 1. +/// A path is arcwise connected. +/// The edges of the path do not intersect except at common vertices. +/// A path has a finite, non-zero extent. +class IFC_PARSE_API IfcPath : public IfcTopologicalRepresentationItem { +public: + /// The list of oriented edges which are concatenated together to form this path. + aggregate_of< ::Ifc4x3_add2::IfcOrientedEdge >::ptr EdgeList() const; + void setEdgeList(aggregate_of< ::Ifc4x3_add2::IfcOrientedEdge >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPath (IfcEntityInstanceData* e); + IfcPath (aggregate_of< ::Ifc4x3_add2::IfcOrientedEdge >::ptr v1_EdgeList); + typedef aggregate_of< IfcPath > list; +}; +/// The complex physical quantity, IfcPhysicalComplexQuantity, is an entity that holds a set of single quantity measure value (as defined at the subtypes of IfcPhysicalSimpleQuantity), that all apply to a given component or aspect of the element. +/// +/// EXAMPLE: A layered element, like a wall, may have several material layers, each having individual quantities, like footprint area, side area and volume. An instance of IfcPhysicalComplexQuantity would group these individual quantities (given by a subtype of IfcPhysicalSimpleQuantity) and name them according to the material layer name by using the Name attribute. The Discrimination attribute would then be 'layer'. +/// +/// A section "Quantity Use Definition" at individual entities as subtypes of IfcBuildingElement gives guidance to the usage of the Name and Discrimination attribute to characterize the complex quantities. +/// +/// HISTORY  New entity in IFC2x2 Addendum 1. +/// +/// IFC2x2 ADDENDUM 1 CHANGE  The entity IfcPhysicalComplexQuantity has been added. Upward compatibility for file based exchange is guaranteed. +class IFC_PARSE_API IfcPhysicalComplexQuantity : public IfcPhysicalQuantity { +public: + /// Set of physical quantities that are grouped by this complex physical quantity according to a given discrimination. + aggregate_of< ::Ifc4x3_add2::IfcPhysicalQuantity >::ptr HasQuantities() const; + void setHasQuantities(aggregate_of< ::Ifc4x3_add2::IfcPhysicalQuantity >::ptr v); + /// Identification of the discrimination by which this physical complex property is distinguished. Examples of discriminations are 'layer', 'steel bar diameter', etc. + std::string Discrimination() const; + void setDiscrimination(std::string v); + /// Additional indication of a quality of the quantities that are grouped under this physical complex quantity. + boost::optional< std::string > Quality() const; + void setQuality(boost::optional< std::string > v); + /// Additional indication of a usage type of the quantities that are grouped under this physical complex quantity. + boost::optional< std::string > Usage() const; + void setUsage(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPhysicalComplexQuantity (IfcEntityInstanceData* e); + IfcPhysicalComplexQuantity (std::string v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_add2::IfcPhysicalQuantity >::ptr v3_HasQuantities, std::string v4_Discrimination, boost::optional< std::string > v5_Quality, boost::optional< std::string > v6_Usage); + typedef aggregate_of< IfcPhysicalComplexQuantity > list; +}; +/// An IfcPixelTexture provides a 2D image-based texture map as an explicit array of pixel values (list of Pixel binary attributes). In contrary to the IfcImageTexture the IfcPixelTexture holds a 2 dimensional list of pixel color +/// (and opacity) directly, instead of referencing to an URL. +/// +/// The following definitions from ISO/IEC 19775-1 X3D Architecture and base components (X3D Specification) apply: +/// +/// The PixelTexture node defines a 2D image-based texture map as an explicit array of pixel values (image field) and parameters controlling tiling repetition of the texture onto geometry. +/// Texture maps are defined in a 2D coordinate system (s, t) that ranges from 0.0 to 1.0 in both directions. The bottom edge of the pixel image corresponds to the S-axis of the texture map, and left edge of the pixel image corresponds to the T-axis of the texture map. The lower-left pixel of the pixel image corresponds to s=0.0, t=0.0, and the top-right pixel of the image corresponds to s = 1.0, t = 1.0. +/// The Image field specifies a single uncompressed 2-dimensional pixel image. Image fields contain three integers representing the width, height and number of components in the image, followed by width×height hexadecimal values representing the pixels in the image. Pixel values are limited to 256 levels of intensity (that is, 0x00-0xFF hexadecimal). +/// +/// A one-component image specifies one-byte hexadecimal value representing the intensity of the image. For example, 0xFF is full intensity in hexadecimal (255 in decimal), 0x00 is no intensity (0 in decimal). +/// A two-component image specifies the intensity in the first +/// (high) byte and the alpha opacity in the second (low) byte. +/// Pixels in a three-component image specify the red component in the first (high) byte, followed by the green and blue components (for example, 0xFF0000 is red, 0x00FF00 is green, 0x0000FF is blue). +/// Four-component images specify the alpha opacity byte after red/green/blue (e.g., 0x0000FF80 is semi-transparent blue). A value of 00 is completely transparent, FF is completely opaque, 80 is semi-transparent. +/// +/// Note that alpha equals (1.0 -transparency), if alpha and transparency each range from 0.0 to 1.0. +/// +/// HISTORY: New class in IFC2x2. +class IFC_PARSE_API IfcPixelTexture : public IfcSurfaceTexture { +public: + /// The number of pixels in width (S) direction. + int Width() const; + void setWidth(int v); + /// The number of pixels in height (T) direction. + int Height() const; + void setHeight(int v); + /// Indication whether the pixel values contain a 1, 2, 3, or 4 colour component. + int ColourComponents() const; + void setColourComponents(int v); + /// Flat list of hexadecimal values, each describing one pixel by 1, 2, 3, or 4 components. + /// + /// IFC2x Edition 3 CHANGE  The data type has been changed from STRING to BINARY. + std::vector< boost::dynamic_bitset<> > /*[1:?]*/ Pixel() const; + void setPixel(std::vector< boost::dynamic_bitset<> > /*[1:?]*/ v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPixelTexture (IfcEntityInstanceData* e); + IfcPixelTexture (bool v1_RepeatS, bool v2_RepeatT, boost::optional< std::string > v3_Mode, ::Ifc4x3_add2::IfcCartesianTransformationOperator2D* v4_TextureTransform, boost::optional< std::vector< std::string > /*[1:?]*/ > v5_Parameter, int v6_Width, int v7_Height, int v8_ColourComponents, std::vector< boost::dynamic_bitset<> > /*[1:?]*/ v9_Pixel); + typedef aggregate_of< IfcPixelTexture > list; +}; +/// Definition from ISO/CD 10303-42:1992: A placement entity defines the local environment for the definition of a geometry item. It locates the item to be defined and, in the case of the axis placement subtypes, gives its orientation. +/// +/// Additional definition from ISO/WD SC4/WG12/N071 Part42.2 geometry_schema: A placement locates a geometric item with respect to the coordinate system of its geometric context. +/// +/// IfcPlacement is an abstract supertype not to be directly instantiated, whereas the ISO 10303-42 entity placement can be instantiated to define a placement without orientation. The derived attribute Dim has been added, see also note at IfcGeometricRepresentationItem. +/// +/// NOTE: Corresponding ISO 10303 entity: placement. Please refer to ISO/IS 10303-42:1994, p. 27 for the final definition of the formal standard. +/// +/// HISTORY: New entity in IFC Release 1.0 +class IFC_PARSE_API IfcPlacement : public IfcGeometricRepresentationItem { +public: + /// The geometric position of a reference point, such as the center of a circle, of the item to be located. + ::Ifc4x3_add2::IfcPoint* Location() const; + void setLocation(::Ifc4x3_add2::IfcPoint* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPlacement (IfcEntityInstanceData* e); + IfcPlacement (::Ifc4x3_add2::IfcPoint* v1_Location); + typedef aggregate_of< IfcPlacement > list; +}; +/// The planar extent defines the extent along the two axes of the two-dimensional coordinate system, independently of its position. +/// +/// NOTE  Corresponding ISO 10303 name: planar_extent. Please refer to ISO/IS 10303-46:1994, p. 141 for the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC2x2. +class IFC_PARSE_API IfcPlanarExtent : public IfcGeometricRepresentationItem { +public: + /// The extent in the direction of the x-axis. + double SizeInX() const; + void setSizeInX(double v); + /// The extent in the direction of the y-axis. + double SizeInY() const; + void setSizeInY(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPlanarExtent (IfcEntityInstanceData* e); + IfcPlanarExtent (double v1_SizeInX, double v2_SizeInY); + typedef aggregate_of< IfcPlanarExtent > list; +}; +/// Definition from ISO/CD 10303-42:1992: A point is a location in some real Cartesian coordinate space Rm, for m = 1, 2 or 3. +/// +/// NOTE: Corresponding ISO 10303 entity: point. Only the subtypes cartesian_point, point_on_curve, point_on_surface have been incorporated in the current release of IFC. Please refer to ISO/IS 10303-42:1994, p. 22 for the final definition of the formal standard. +/// +/// HISTORY: New entity in IFC Release 1.5 +class IFC_PARSE_API IfcPoint : public IfcGeometricRepresentationItem, public IfcGeometricSetSelect, public IfcPointOrVertexPoint { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPoint (IfcEntityInstanceData* e); + IfcPoint (); + typedef aggregate_of< IfcPoint > list; +}; + +class IFC_PARSE_API IfcPointByDistanceExpression : public IfcPoint { +public: + ::Ifc4x3_add2::IfcCurveMeasureSelect* DistanceAlong() const; + void setDistanceAlong(::Ifc4x3_add2::IfcCurveMeasureSelect* v); + boost::optional< double > OffsetLateral() const; + void setOffsetLateral(boost::optional< double > v); + boost::optional< double > OffsetVertical() const; + void setOffsetVertical(boost::optional< double > v); + boost::optional< double > OffsetLongitudinal() const; + void setOffsetLongitudinal(boost::optional< double > v); + ::Ifc4x3_add2::IfcCurve* BasisCurve() const; + void setBasisCurve(::Ifc4x3_add2::IfcCurve* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPointByDistanceExpression (IfcEntityInstanceData* e); + IfcPointByDistanceExpression (::Ifc4x3_add2::IfcCurveMeasureSelect* v1_DistanceAlong, boost::optional< double > v2_OffsetLateral, boost::optional< double > v3_OffsetVertical, boost::optional< double > v4_OffsetLongitudinal, ::Ifc4x3_add2::IfcCurve* v5_BasisCurve); + typedef aggregate_of< IfcPointByDistanceExpression > list; +}; +/// Definition from ISO/CD 10303-42:1992: A point on curve is a point which lies on a curve. The point is determined by evaluating the curve at a specific parameter value. The coordinate space dimensionality of the point is that of the basis curve. +/// +/// NOTE: Corresponding STEP entity: point_on_curve. Please refer to ISO/IS 10303-42:1994, p. 23 for the final definition of the formal standard. +/// +/// HISTORY: New entity in Release IFC2x Edition 2. +/// +/// Informal Propositions: +/// +/// The value of the point parameter shall not be outside the parametric range of the curve. +class IFC_PARSE_API IfcPointOnCurve : public IfcPoint { +public: + /// The curve to which point parameter relates. + ::Ifc4x3_add2::IfcCurve* BasisCurve() const; + void setBasisCurve(::Ifc4x3_add2::IfcCurve* v); + /// The parameter value of the point location. + double PointParameter() const; + void setPointParameter(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPointOnCurve (IfcEntityInstanceData* e); + IfcPointOnCurve (::Ifc4x3_add2::IfcCurve* v1_BasisCurve, double v2_PointParameter); + typedef aggregate_of< IfcPointOnCurve > list; +}; +/// Definition from ISO/CD 10303-42:1992: A point on surface is a point which lies on a parametric surface. The point is determined by evaluating the surface at a particular pair of parameter values. +/// +/// NOTE: Corresponding ISO 10303 entity: point_on_surface. Please refer to ISO/IS 10303-42:1994, p. 24 for the final definition of the formal standard. +/// +/// HISTORY: New entity in Release IFC2x Edition 2. +/// +/// Informal Propositions: +/// +/// The parametric values specified for u and v shall not be outside the parametric range of the basis surface. +class IFC_PARSE_API IfcPointOnSurface : public IfcPoint { +public: + /// The surface to which the parameter values relate. + ::Ifc4x3_add2::IfcSurface* BasisSurface() const; + void setBasisSurface(::Ifc4x3_add2::IfcSurface* v); + /// The first parameter value of the point location. + double PointParameterU() const; + void setPointParameterU(double v); + /// The second parameter value of the point location. + double PointParameterV() const; + void setPointParameterV(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPointOnSurface (IfcEntityInstanceData* e); + IfcPointOnSurface (::Ifc4x3_add2::IfcSurface* v1_BasisSurface, double v2_PointParameterU, double v3_PointParameterV); + typedef aggregate_of< IfcPointOnSurface > list; +}; +/// Definition from ISO/CD 10303-42:1992: A +/// poly loop is a loop with straight edges bounding a planar region in +/// space. A poly loop is a loop of genus 1 where the loop is represented +/// by an ordered coplanar collection of points forming the vertices of the +/// loop. The loop is composed of straight line segments joining a point in +/// the collection to the succeeding point in the collection. The closing +/// segment is from the last to the first point in the collection.  +/// The direction of the loop is in the direction of the line +/// segments. +/// +/// NOTE  This entity exists primarily to facilitate the efficient communication of faceted B-rep models. +/// +/// A poly loop shall conform to the following topological +/// constraints: +/// +/// - the loop has the genus of one. +/// - the following equation shall be satisfied +/// +/// The IfcPolyLoop +/// is always closed and the last segment is from the last IfcCartesianPoint +/// in the list of Polygon's to the first IfcCartesianPoint. +/// Therefore the first point shall not be repeated at the end of the list, +/// neither by referencing the same instance, nor by using an additional +/// instance of IfcCartesianPoint having the +/// coordinates as the first point. +/// +/// NOTE  Corresponding ISO 10303 entity: poly_loop. Please refer to ISO/IS +/// 10303-42:1994, p. 138 for the final definition of the formal standard. +/// Due to the general IFC model specification rule not to use multiple +/// inheritance, the subtype relationship to geometric_representation_item +/// is not included. The derived attribute Dim has been +/// added at this level. +/// +/// HISTORY   New class in IFC Release 1.0 +/// +/// Informal propositions: +/// +/// All the points in the polygon defining the poly loop shall be coplanar. +/// The first and the last Polygon shall be different by value. +class IFC_PARSE_API IfcPolyLoop : public IfcLoop { +public: + /// List of points defining the loop. There are no repeated points in the list. + aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr Polygon() const; + void setPolygon(aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPolyLoop (IfcEntityInstanceData* e); + IfcPolyLoop (aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr v1_Polygon); + typedef aggregate_of< IfcPolyLoop > list; +}; +/// The polygonal bounded +/// half space is a special subtype of a half space solid, where the +/// material of the half space used in Boolean expressions is bounded by a +/// polygonal boundary. The base +/// surface of the half space is positioned by its normal relativeto the +/// object coordinate system +/// (as defined at the supertype IfcHalfSpaceSolid), and +/// its polygonal (with or without arc segments) boundary is defined in the +/// XY plane of the position +/// coordinate system established by the Position +/// attribute, the subtraction body is extruded perpendicular to the XY +/// plane of the position coordinate system, that is, into the direction of the +/// positive Z axis defined by the Position attribute. +/// The boundary is defined by a 2 dimensional polyline (or 2 dimensional composite curve, +/// consisting of straight segments and circular arc segments) +/// within the +/// XY plane of the position coordinate system. The side of the surface +/// which is in the half space is determined by the surface normal and the +/// agreement flag. If the agreement flag is TRUE, then the subset is the +/// one the normal points away from. If the agreement flag is FALSE, then +/// the subset is the one the normal points into. +/// +/// NOTE  A polygonal bounded half space is not a subtype of IfcSolidModel, half space solids are only useful as operands in Boolean expressions. +/// +/// HISTORY  New class in IFC Release 2x. +/// +/// Informal propositions: +/// +/// The IfcPolyline or the IfcCompositeCurve +/// providing the PolygonalBoundary +/// shall be closed. +/// If the PolygonalBoundary +/// is given by an IfcCompositeCurve, it shall only +/// have IfcCompositeCurveSegment's of type IfcPolyline, +/// or IfcTrimmedCurve (having a BasisCurve +/// of type IfcLine, or IfcCircle) +/// +/// Figure 259 illustrates a polygonal bounded half space. +/// +/// Black coordinates indicate the object coordinate system (usually provided by IfcLocalPlacement). +/// Green coordinates indicate the position coordinate system; the PolygonalBoundary is given within this coordinate system. It is provided by IfcPolygonalBoundedHalfSpace.Position. This coordinate system is relative to the object coordinate system. The extrusion direction of the subtraction body is the positive Z axis. +/// Red coordinates indicate the normal of the plane. It is provided by the BaseSurface (IfcSurface.Position). This normal is also relative to the object coordinate system. +/// +/// Figure 259 — Polygonal half space geometry +/// +/// Purpose +/// The polygonal bounded half space is used to limit the volume of the +/// half space in Boolean difference expressions. Only the part that is +/// defined by a theoretical intersection between the half space solid and +/// an extruded area solid, defined by extruding the polygonal boundary, is +/// used for Boolean expressions. +/// Parameter +/// The PolygonalBoundary defines the 2D polyline which +/// bounds the effectiveness of the half space in Boolean expressions. The BaseSurface +/// is defined by a plane, and the normal of the plane together with the AgreementFlag +/// defines the side of the material of the half space. +class IFC_PARSE_API IfcPolygonalBoundedHalfSpace : public IfcHalfSpaceSolid { +public: + /// Definition of the position coordinate system for the bounding polyline and the base surface. + ::Ifc4x3_add2::IfcAxis2Placement3D* Position() const; + void setPosition(::Ifc4x3_add2::IfcAxis2Placement3D* v); + /// Two-dimensional polyline bounded curve, defined in the xy plane of the position coordinate system. + /// + /// IFC2x Edition 3 CHANGE  The attribute type has been changed from IfcPolyline to its supertype IfcBoundedCurve with upward compatibility for file based exchange. + ::Ifc4x3_add2::IfcBoundedCurve* PolygonalBoundary() const; + void setPolygonalBoundary(::Ifc4x3_add2::IfcBoundedCurve* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPolygonalBoundedHalfSpace (IfcEntityInstanceData* e); + IfcPolygonalBoundedHalfSpace (::Ifc4x3_add2::IfcSurface* v1_BaseSurface, bool v2_AgreementFlag, ::Ifc4x3_add2::IfcAxis2Placement3D* v3_Position, ::Ifc4x3_add2::IfcBoundedCurve* v4_PolygonalBoundary); + typedef aggregate_of< IfcPolygonalBoundedHalfSpace > list; +}; +/// A pre defined item is a qualified name given to a style or font which is determined within the data exchange specification by convention on using the Name attribute value (in contrary to externally defined items, which are agreed by an external source). +/// +/// NOTE  The convention on using the Name value is defined at the subtypes of IfcPreDefinedItem and is part of the specification. +/// +/// NOTE  Corresponding ISO 10303 name: pre_defined_item. Please refer to ISO/IS 10303-41:1994, page 137 for the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC2x2. +class IFC_PARSE_API IfcPreDefinedItem : public IfcPresentationItem { +public: + /// The string by which the pre defined item is identified. Allowable values for the string are declared at the level of subtypes. + std::string Name() const; + void setName(std::string v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPreDefinedItem (IfcEntityInstanceData* e); + IfcPreDefinedItem (std::string v1_Name); + typedef aggregate_of< IfcPreDefinedItem > list; +}; + +class IFC_PARSE_API IfcPreDefinedProperties : public IfcPropertyAbstraction { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPreDefinedProperties (IfcEntityInstanceData* e); + IfcPreDefinedProperties (); + typedef aggregate_of< IfcPreDefinedProperties > list; +}; +/// The pre defined text font determines those qualified names which can be used for fonts that are in scope of the current data exchange specification (in contrary to externally defined text fonts). There are two choices: +/// +/// IfcDraughtingPreDefinedTextFont for definitions from ISO/IS 10303-46:1994 for (old) vector based and monospace text. +/// +/// IfcTextStyleFontModel for definitions from Cascading Style Sheets, level 1, W3C Recommendation 17 Dec 1996, revised 11 Jan 1999, CSS1, for all true type text. The use of the CSS1 definitions is the preferred way to represent text fonts. +/// +/// NOTE  Corresponding ISO 10303 name: pre_defined_text_font. Please refer to ISO/IS 10303-46:1994, p. 138 for the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC2x2. +/// +/// IFC2x3 CHANGE  The IfcTextStyleFontModel has been added as new subtype. +class IFC_PARSE_API IfcPreDefinedTextFont : public IfcPreDefinedItem, public IfcTextFontSelect { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPreDefinedTextFont (IfcEntityInstanceData* e); + IfcPreDefinedTextFont (std::string v1_Name); + typedef aggregate_of< IfcPreDefinedTextFont > list; +}; +/// The IfcProductDefinitionShape defines all shape relevant information about an IfcProduct. It allows for multiple geometric shape representations of the same product. The shape relevant information includes: +/// +/// the shape representation including geometric representation items (for 3D solids, 2D annotations, etc.) and: +/// +/// associated presentation information (line color, line type, surface rendering properties) +/// assignment to presentation layers (CAD layers for visibility control) +/// +/// or the topological representation items for connectivity systems (vertex, edge, face representations) that may include geometric representation items (vertex points, edge curves, face surfaces) +/// +/// NOTE  The definition of this entity relates to the ISO 10303 entity product_definition_shape. Please refer to ISO/IS 10303-41:1994 for the final definition of the formal standard. +/// +/// HISTORY  New Entity in IFC Release 1.5 +class IFC_PARSE_API IfcProductDefinitionShape : public IfcProductRepresentation, public IfcProductRepresentationSelect { +public: + aggregate_of< IfcProduct >::ptr ShapeOfProduct() const; // INVERSE IfcProduct::Representation + aggregate_of< IfcShapeAspect >::ptr HasShapeAspects() const; // INVERSE IfcShapeAspect::PartOfProductDefinitionShape + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcProductDefinitionShape (IfcEntityInstanceData* e); + IfcProductDefinitionShape (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_add2::IfcRepresentation >::ptr v3_Representations); + typedef aggregate_of< IfcProductDefinitionShape > list; +}; +/// This is a collection of properties applicable to section profile definitions. +/// +/// The following sets of extended profile property definitions are part of this IFC release: +/// +/// mechanical properties for all classes of profiles +/// properties for precast concrete double-T sections +/// properties for precast concrete hollow core sections +/// +/// HISTORY  New entity in IFC2x2. +/// +/// IFC2x4 CHANGE  Entity made non-abstract. Subtypes IfcGeneralProfileProperties, IfcStructuralProfileProperties, and IfcStructuralSteelProfileProperties deleted. Attribute ProfileName deleted, use ProfileDefinition.ProfileName instead. Attribute ProfileDefinition made mandatory. Attributes Name, Description, and HasProperties added. +class IFC_PARSE_API IfcProfileProperties : public IfcExtendedProperties { +public: + /// Profile definition which is qualified by these properties. + ::Ifc4x3_add2::IfcProfileDef* ProfileDefinition() const; + void setProfileDefinition(::Ifc4x3_add2::IfcProfileDef* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcProfileProperties (IfcEntityInstanceData* e); + IfcProfileProperties (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_add2::IfcProperty >::ptr v3_Properties, ::Ifc4x3_add2::IfcProfileDef* v4_ProfileDefinition); + typedef aggregate_of< IfcProfileProperties > list; +}; +/// IfcProperty is an abstract generalization for all types of properties that can be associated with IFC objects through the property set mechanism. +/// +/// HISTORY  New entity in IFC Release 1.0. +class IFC_PARSE_API IfcProperty : public IfcPropertyAbstraction { +public: + /// Name for this property. This label is the significant name string that defines the semantic meaning for the property. + std::string Name() const; + void setName(std::string v); + boost::optional< std::string > Specification() const; + void setSpecification(boost::optional< std::string > v); + aggregate_of< IfcPropertySet >::ptr PartOfPset() const; // INVERSE IfcPropertySet::HasProperties + aggregate_of< IfcPropertyDependencyRelationship >::ptr PropertyForDependance() const; // INVERSE IfcPropertyDependencyRelationship::DependingProperty + aggregate_of< IfcPropertyDependencyRelationship >::ptr PropertyDependsOn() const; // INVERSE IfcPropertyDependencyRelationship::DependantProperty + aggregate_of< IfcComplexProperty >::ptr PartOfComplex() const; // INVERSE IfcComplexProperty::HasProperties + aggregate_of< IfcResourceConstraintRelationship >::ptr HasConstraints() const; // INVERSE IfcResourceConstraintRelationship::RelatedResourceObjects + aggregate_of< IfcResourceApprovalRelationship >::ptr HasApprovals() const; // INVERSE IfcResourceApprovalRelationship::RelatedResourceObjects + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcProperty (IfcEntityInstanceData* e); + IfcProperty (std::string v1_Name, boost::optional< std::string > v2_Specification); + typedef aggregate_of< IfcProperty > list; +}; +/// IfcPropertyDefinition defines the generalization of +/// all characteristics (i.e. a grouping of individual properties), +/// that may be assigned to objects. Currently, subtypes of +/// IfcPropertyDefinition include property set occurrences, +/// property set templates, and property templates. +/// +/// Property set template - +/// IfcPropertySetTemplate, a collection of property templates +/// that determine the definition of properties used within a project +/// context. +/// Property template - +/// IfcPropertyTemplate, a single template that determines the +/// definition of a particular property used in the same project +/// context. The template may determine the name, description, data +/// type, the unit, or a standard expression for each property that is +/// based on that template. +/// Property set occurrence - +/// IfcPropertySet, a set of individual properties (that may +/// or may not be determined by a property template) holding individual +/// values, measure types and units, and are associated to an object +/// occurrence or object type. +/// +/// NOTE 1  The subtype hierarchy of IfcPropertyDefinition also includes statically defined property sets as IfcPreDefinedPropertySet. Those are rarely used collections of fixed attributes combined in an entity definition. The IfcPreDefinedPropertySet can not be determined by an IfcPropertySetTemplate. +/// +/// NOTE 2  Individual properties, (subtypes of IfcProperty), are currently not included in the subtype hierarchy of IfcPropertyDefinition. This anomaly is due to upward compatibility reasons with earlier releases of this +/// standard. +/// +/// HISTORY  New Entity in IFC2.0 +/// +/// Relationship use definition +/// Property definitions define information that is shared among +/// multiple instances of objects, either object occurrences or object +/// types. IfcPropertyDefinition's (by their instantiable +/// subtypes) can participated within the following relationships: +/// +/// Assignment to a project context - an +/// HasContext relationship to IfcRelDeclares that +/// establishes the project context in which this property definition +/// is declared. This relationship is predominately applicable to +/// subtypes of IfcPropertyTemplateDefinition. +/// Association to external resources - an +/// HasAssociation relationship to IfcRelAssociates +/// that refers to external sources of information (most notably a +/// classification or document) and creates a uni-directional +/// association. There is no dependency implied by the +/// association. +/// +/// Subtypes are included in more specific relationships, see +/// IfcPropertySetDefinition and +/// IfcPropertyTemplateDefinition for details. +class IFC_PARSE_API IfcPropertyDefinition : public IfcRoot, public IfcDefinitionSelect { +public: + aggregate_of< IfcRelDeclares >::ptr HasContext() const; // INVERSE IfcRelDeclares::RelatedDefinitions + aggregate_of< IfcRelAssociates >::ptr HasAssociations() const; // INVERSE IfcRelAssociates::RelatedObjects + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPropertyDefinition (IfcEntityInstanceData* e); + IfcPropertyDefinition (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description); + typedef aggregate_of< IfcPropertyDefinition > list; +}; +/// An IfcPropertyDependencyRelationship describes an identified dependency between the value of one property and that of another. +/// +/// HISTORY  New entity in IFC2x2 +/// +/// IFC2x4 CHANGE  Made subtype of IfcResourceLevelRelationship (attribute order changed). +/// +/// Use Definition +/// Whilst the IfcPropertyDependencyRelationship may be used to describe the dependency, and it may do so in terms of the expression of how the dependency operates, it is not possible through the current IFC model for the value of the related property to be actually derived from the value of the relating property. The determination of value according to the dependency is required to be performed by an application that can then use the Expression attribute to flag the form of the dependency. +class IFC_PARSE_API IfcPropertyDependencyRelationship : public IfcResourceLevelRelationship { +public: + /// The property on which the relationship depends. + ::Ifc4x3_add2::IfcProperty* DependingProperty() const; + void setDependingProperty(::Ifc4x3_add2::IfcProperty* v); + /// The dependant property. + ::Ifc4x3_add2::IfcProperty* DependantProperty() const; + void setDependantProperty(::Ifc4x3_add2::IfcProperty* v); + /// Expression that further describes the nature of the dependency relation. + boost::optional< std::string > Expression() const; + void setExpression(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPropertyDependencyRelationship (IfcEntityInstanceData* e); + IfcPropertyDependencyRelationship (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcProperty* v3_DependingProperty, ::Ifc4x3_add2::IfcProperty* v4_DependantProperty, boost::optional< std::string > v5_Expression); + typedef aggregate_of< IfcPropertyDependencyRelationship > list; +}; +/// IfcPropertySetDefinition is a generalization of all +/// individual property sets that can be assigned to an object or type +/// object. The property set definition can be either: +/// +/// Dynamically extendable property sets - +/// IfcPropertySet, a set of properties for which the IFC +/// model only provides a kind of "meta model", to be further declared +/// by agreement. This means no entity definition of the properties +/// exists within the IFC model. The declaration is done by assigning a +/// significant string value to the Name attribute of the +/// entity as defined in the entity IfcPropertySet and at each +/// subtype of IfcProperty, referenced by the property set. +/// Dynamically defined property sets may have an underlying template +/// provided by IfcPropertySetTemplate. +/// Statically defined property sets - +/// IfcPreDefinedPropertySet, a property set entity that +/// exists within the IFC specification. The semantic meaning of each +/// statically defined property set is declared by its entity type and +/// the meaning of the properties is defined by the name and data type +/// of the explicit attribute representing it. +/// +/// HISTORY  New Entity in IFC Release 2x +/// +/// IFC2x4 CHANGE  The subtype IfcPreDefinedPropertySet has been added. +/// +/// Relationship use definition +/// Property set definitions define information that is shared among +/// multiple instances of objects, either object occurrences or object +/// types. IfcPropertySetDefinition's (by their instantiable +/// subtypes) can participated within the following relationships: +/// +/// Assignment to object types - an +/// DefinesType direct relationship to IfcTypeObject +/// that applies the property set, with all included properties, to the +/// object type. Those properties apply to all object occurrences +/// having the same object type. +/// Assignment to object occurrences - an +/// DefinesOccurrence relationship to +/// IfcRelDefinesByProperties that applies the property set, +/// with all included properties, to the object occurrence. +/// +/// NOTE  Properties assigned to object occurrences may override properties assigned to the object type. See IfcRelDefinesByType for further information. +class IFC_PARSE_API IfcPropertySetDefinition : public IfcPropertyDefinition, public IfcPropertySetDefinitionSelect { +public: + aggregate_of< IfcTypeObject >::ptr DefinesType() const; // INVERSE IfcTypeObject::HasPropertySets + aggregate_of< IfcRelDefinesByTemplate >::ptr IsDefinedBy() const; // INVERSE IfcRelDefinesByTemplate::RelatedPropertySets + aggregate_of< IfcRelDefinesByProperties >::ptr DefinesOccurrence() const; // INVERSE IfcRelDefinesByProperties::RelatingPropertyDefinition + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPropertySetDefinition (IfcEntityInstanceData* e); + IfcPropertySetDefinition (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description); + typedef aggregate_of< IfcPropertySetDefinition > list; +}; +/// IfcPropertyTemplateDefinition is a generalization of +/// all property and property set templates. Templates define the +/// collection, types, names, applicable measure types and units of +/// individual properties used in a project. The property template +/// definition can be either: +/// +/// Property set template - +/// IfcPropertySetTemplate, a collection of property templates +/// that determine the definition of properties used within a project +/// context. +/// Property template - +/// IfcPropertyTemplate, a single template that determines the +/// definition of a particular property used in the same project +/// context. The template may determine the name, description, data +/// type, the unit, or a standard expression for each property that is +/// based on that template. +/// +/// The subtypes of IfcPropertyTemplateDefinition are +/// declared within a project context. The uppermost template +/// definition (e.g. the IfcPropertySetTemplate including +/// several IfcPropertyTemplate's) should be related to the +/// context, either IfcProject, or IfcProjectLibrary, +/// using the inherited HasContext inverse attribute. +/// +/// HISTORY  New Entity in IFC2x4. +class IFC_PARSE_API IfcPropertyTemplateDefinition : public IfcPropertyDefinition { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPropertyTemplateDefinition (IfcEntityInstanceData* e); + IfcPropertyTemplateDefinition (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description); + typedef aggregate_of< IfcPropertyTemplateDefinition > list; +}; + +class IFC_PARSE_API IfcQuantitySet : public IfcPropertySetDefinition { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcQuantitySet (IfcEntityInstanceData* e); + IfcQuantitySet (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description); + typedef aggregate_of< IfcQuantitySet > list; +}; +/// IfcRectangleProfileDef defines a rectangle as the profile definition used by the swept surface geometry or the swept area solid. It is given by its X extent and its Y extent, and placed within the 2D position coordinate system, established by the Position attribute. It is placed centric within the position coordinate system. +/// +/// HISTORY: New class in IFC 1.5. The use definition has changed in IFC Release 2x. +/// +/// Figure 323 illustrates parameters of the rectangle profile definition. +/// +/// Position +/// +/// The parameterized profile defines its own position coordinate system. +/// The underlying +/// coordinate system is defined by the swept surface or swept area solid +/// that uses the profile definition. It is the xy plane of either: +/// +/// IfcSweptSurface.Position +/// IfcSweptAreaSolid.Position +/// +/// or in case of sectioned spines the xy plane of each list member of IfcSectionedSpine.CrossSectionPositions. +/// +/// By using offsets of the position location, the parameterized profile +/// can be positioned centric (using x,y offsets = 0.), or at any position +/// relative to the profile. Explicit coordinate offsets are used to define +/// cardinal points (for example, upper-left bound). +/// Parameter +/// +/// The IfcRectangleProfileDef +/// is defined within the position +/// coordinate system, where the XDim +/// defines the length measure +/// for the length of the rectangle (half along the positive x-axis) and +/// the YDim +/// defines the length measure for the width of the +/// rectangle (half along the positive y-axis). +/// +/// Figure 323 — Rectangle profile +class IFC_PARSE_API IfcRectangleProfileDef : public IfcParameterizedProfileDef { +public: + /// The extent of the rectangle in the direction of the x-axis. + double XDim() const; + void setXDim(double v); + /// The extent of the rectangle in the direction of the y-axis. + double YDim() const; + void setYDim(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRectangleProfileDef (IfcEntityInstanceData* e); + IfcRectangleProfileDef (::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_XDim, double v5_YDim); + typedef aggregate_of< IfcRectangleProfileDef > list; +}; +/// In a regular time series, the data arrives predictably at predefined intervals. In a regular time series there is no need to store multiple time stamps and the algorithms for analyzing the time series are therefore significantly simpler. Using the start time provided in the supertype, the time step is used to identify the frequency of the occurrences of the list of values. +/// +/// EXAMPLE: A smoke detector samples the concentration of particulates in a space at a fixed rate (for example, every six seconds); a control system measures the outside air temperature every hour. +/// +/// HISTORY: New entity in IFC 2x2. +class IFC_PARSE_API IfcRegularTimeSeries : public IfcTimeSeries { +public: + /// A duration of time intervals between values. + double TimeStep() const; + void setTimeStep(double v); + /// The collection of time series values. + aggregate_of< ::Ifc4x3_add2::IfcTimeSeriesValue >::ptr Values() const; + void setValues(aggregate_of< ::Ifc4x3_add2::IfcTimeSeriesValue >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRegularTimeSeries (IfcEntityInstanceData* e); + IfcRegularTimeSeries (std::string v1_Name, boost::optional< std::string > v2_Description, std::string v3_StartTime, std::string v4_EndTime, ::Ifc4x3_add2::IfcTimeSeriesDataTypeEnum::Value v5_TimeSeriesDataType, ::Ifc4x3_add2::IfcDataOriginEnum::Value v6_DataOrigin, boost::optional< std::string > v7_UserDefinedDataOrigin, ::Ifc4x3_add2::IfcUnit* v8_Unit, double v9_TimeStep, aggregate_of< ::Ifc4x3_add2::IfcTimeSeriesValue >::ptr v10_Values); + typedef aggregate_of< IfcRegularTimeSeries > list; +}; +/// IfcReinforcementProperties defines the set of properties for a specific combination of reinforcement bar steel grade, bar type and effective depth. +/// +/// HISTORY  New entity in IFC2x2. +/// +/// The total cross section area for the specific steel grade is always provided. Additionally also general reinforcing bar configurations as a count of bars may be provided as defined in attribute BarCount. In this case the nominal bar diameter should be identical for all given bars as defined in attribute NominalBarDiameter. +class IFC_PARSE_API IfcReinforcementBarProperties : public IfcPreDefinedProperties { +public: + /// The total effective cross-section area of the reinforcement of a specific steel grade. + double TotalCrossSectionArea() const; + void setTotalCrossSectionArea(double v); + /// The nominal steel grade defined according to local standards. + std::string SteelGrade() const; + void setSteelGrade(std::string v); + /// Indicator for whether the bar surface is plain or textured. + boost::optional< ::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::Value > BarSurface() const; + void setBarSurface(boost::optional< ::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::Value > v); + /// The effective depth, i.e. the distance of the specific reinforcement cross section area or reinforcement configuration in a row, counted from a common specific reference point. Usually the reference point is the upper surface (for beams and slabs) or a similar projection in a plane (for columns). + boost::optional< double > EffectiveDepth() const; + void setEffectiveDepth(boost::optional< double > v); + /// The nominal diameter defining the cross-section size of the reinforcing bar. The bar diameter should be identical for all bars included in the specific reinforcement configuration. + boost::optional< double > NominalBarDiameter() const; + void setNominalBarDiameter(boost::optional< double > v); + /// The number of bars with identical nominal diameter and steel grade included in the specific reinforcement configuration. + boost::optional< int > BarCount() const; + void setBarCount(boost::optional< int > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcReinforcementBarProperties (IfcEntityInstanceData* e); + IfcReinforcementBarProperties (double v1_TotalCrossSectionArea, std::string v2_SteelGrade, boost::optional< ::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::Value > v3_BarSurface, boost::optional< double > v4_EffectiveDepth, boost::optional< double > v5_NominalBarDiameter, boost::optional< int > v6_BarCount); + typedef aggregate_of< IfcReinforcementBarProperties > list; +}; +/// IfcRelationship is the abstract generalization of all objectified relationships in IFC. Objectified relationships are the preferred way to handle relationships among objects. This allows to keep relationship specific properties directly at the relationship and opens the possibility to later handle relationship specific behavior. +/// +/// There are two different types of relationships, 1-to-1 relationships and 1-to-many relationship. used within the subtypes of IfcRelationship. The following convention applies to all subtypes: +/// +/// The two sides of the objectified relationship are named - Relating+ and - Related+ +/// In case of the 1-to-many relationship, the related side of the relationship shall be an aggregate SET 1:N +/// +/// HISTORY: New entity in IFC Release 1.0. +class IFC_PARSE_API IfcRelationship : public IfcRoot { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelationship (IfcEntityInstanceData* e); + IfcRelationship (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description); + typedef aggregate_of< IfcRelationship > list; +}; +/// An IfcResourceApprovalRelationship is used for +/// associating an approval to resource objects. A single approval +/// might be given to one or many items via IfcResourceObjectSelect. +/// +/// HISTORY  New +/// Entity in IFC Release 2x4 +class IFC_PARSE_API IfcResourceApprovalRelationship : public IfcResourceLevelRelationship { +public: + /// Resource objects that are approved. + aggregate_of< ::Ifc4x3_add2::IfcResourceObjectSelect >::ptr RelatedResourceObjects() const; + void setRelatedResourceObjects(aggregate_of< ::Ifc4x3_add2::IfcResourceObjectSelect >::ptr v); + /// The approval for the resource objects selected. + ::Ifc4x3_add2::IfcApproval* RelatingApproval() const; + void setRelatingApproval(::Ifc4x3_add2::IfcApproval* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcResourceApprovalRelationship (IfcEntityInstanceData* e); + IfcResourceApprovalRelationship (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, aggregate_of< ::Ifc4x3_add2::IfcResourceObjectSelect >::ptr v3_RelatedResourceObjects, ::Ifc4x3_add2::IfcApproval* v4_RelatingApproval); + typedef aggregate_of< IfcResourceApprovalRelationship > list; +}; +/// An IfcResourceConstraintRelationship is a relationship +/// entity that enables a constraint to be related to one or more +/// resource level objects. +/// +/// HISTORY  New Entity in Release IFC2x2. +/// +/// IFC2x4 CHANGE  Renamed from IfcPropertyConstraintRelationship and extended to apply to all resource level entities. Subtyped from IfcResourceLevelRelationship. +/// +/// Use definition +/// +/// An IfcResourceConstraintRelationship allows for the +/// specification of a constraint to be applied to many entity types. +/// An important case is to apply constraints to properties. The +/// constraints applied therefore enable a property to carry values +/// identifying requirements as well as those identifying the +/// fulfilment of those requirements. +/// +/// Figure 238 shows how a constraint may be applied to a property within a property set. For simplicity, only the mandatory attributes are shown as asserted. It shows how a property 'ThingWeight' which has a nominal value of 19.5 kg has two constraints that are logically aggregated by an AND connection. One of the constraints has a benchmark of 'GREATERTHANOREQUALTO' whilst the second has a benchmark of 'LESSTHANOREQUALTO'. This means that the constraint must lie between these two bounding values. The relating constraint is instantiated as an objective named as 'Weight Constraint' and qualified as a SPECIFICATION constraint. The two related constraints are both specified as metrics since they can have specific values. +/// +/// Figure 238 — Resource constraint relationship +class IFC_PARSE_API IfcResourceConstraintRelationship : public IfcResourceLevelRelationship { +public: + /// The constraint that is to be related. + ::Ifc4x3_add2::IfcConstraint* RelatingConstraint() const; + void setRelatingConstraint(::Ifc4x3_add2::IfcConstraint* v); + /// The properties to which a constraint is to be related. + aggregate_of< ::Ifc4x3_add2::IfcResourceObjectSelect >::ptr RelatedResourceObjects() const; + void setRelatedResourceObjects(aggregate_of< ::Ifc4x3_add2::IfcResourceObjectSelect >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcResourceConstraintRelationship (IfcEntityInstanceData* e); + IfcResourceConstraintRelationship (boost::optional< std::string > v1_Name, boost::optional< std::string > v2_Description, ::Ifc4x3_add2::IfcConstraint* v3_RelatingConstraint, aggregate_of< ::Ifc4x3_add2::IfcResourceObjectSelect >::ptr v4_RelatedResourceObjects); + typedef aggregate_of< IfcResourceConstraintRelationship > list; +}; +/// IfcResourceTime captures the time-related information about a construction resource. +/// HISTORY: New entity in IFC2x4. +class IFC_PARSE_API IfcResourceTime : public IfcSchedulingTime { +public: + /// Indicates the total work (e.g. person-hours) allocated to the task on behalf of the resource. + /// Note: this is not necessarily the same as the task duration (IfcTaskTime.ScheduleDuration); it may vary according to the resource usage ratio and other resources assigned to the task. + boost::optional< std::string > ScheduleWork() const; + void setScheduleWork(boost::optional< std::string > v); + /// Indicates the amount of the resource used concurrently. For example, 100% means 1 worker, 300% means 3 workers, 50% means half of 1 worker's time for scenarios where multitasking is feasible. If not provided, then the usage ratio is considered to be 100%. + boost::optional< double > ScheduleUsage() const; + void setScheduleUsage(boost::optional< double > v); + /// Indicates the time when the resource is scheduled to start working. + boost::optional< std::string > ScheduleStart() const; + void setScheduleStart(boost::optional< std::string > v); + /// Indicates the time when the resource is scheduled to finish working. + boost::optional< std::string > ScheduleFinish() const; + void setScheduleFinish(boost::optional< std::string > v); + /// Indicates how a resource should be leveled over time by adjusting the resource usage according to a specified curve. Standard values include: 'Flat', 'BackLoaded', 'FrontLoaded', 'DoublePeak', 'EarlyPeak', 'LatePeak', 'Bell', and 'Turtle'. Custom values may specify a custom name or formula. + boost::optional< std::string > ScheduleContour() const; + void setScheduleContour(boost::optional< std::string > v); + /// Indicates a delay in the ScheduleStart caused by leveling. + boost::optional< std::string > LevelingDelay() const; + void setLevelingDelay(boost::optional< std::string > v); + /// Indicates that the resource is scheduled in excess of its capacity. + boost::optional< bool > IsOverAllocated() const; + void setIsOverAllocated(boost::optional< bool > v); + /// Indicates the date and time for which status values are applicable; particularly completion, actual, and remaining values. If values are time-phased (the referencing IfcConstructionResource has associated time series values for attributes), then the status values may be determined from such time-phased data as of the StatusTime. + boost::optional< std::string > StatusTime() const; + void setStatusTime(boost::optional< std::string > v); + /// Indicates the actual work performed by the resource as of the StatusTime. + boost::optional< std::string > ActualWork() const; + void setActualWork(boost::optional< std::string > v); + /// Indicates the actual amount of the resource used concurrently. + boost::optional< double > ActualUsage() const; + void setActualUsage(boost::optional< double > v); + /// Indicates the time when the resource actually started working. + boost::optional< std::string > ActualStart() const; + void setActualStart(boost::optional< std::string > v); + /// Indicates the time when the resource actually finished working. + boost::optional< std::string > ActualFinish() const; + void setActualFinish(boost::optional< std::string > v); + /// Indicates the work remaining to be completed by the resource. + boost::optional< std::string > RemainingWork() const; + void setRemainingWork(boost::optional< std::string > v); + boost::optional< double > RemainingUsage() const; + void setRemainingUsage(boost::optional< double > v); + /// Indicates the percent completion of this resource. If the resource is assigned to a task, then indicates completion of the task on behalf of the resource; if the resource is partitioned into sub-allocations, then indicates overall completion of sub-allocations. + boost::optional< double > Completion() const; + void setCompletion(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcResourceTime (IfcEntityInstanceData* e); + IfcResourceTime (boost::optional< std::string > v1_Name, boost::optional< ::Ifc4x3_add2::IfcDataOriginEnum::Value > v2_DataOrigin, boost::optional< std::string > v3_UserDefinedDataOrigin, boost::optional< std::string > v4_ScheduleWork, boost::optional< double > v5_ScheduleUsage, boost::optional< std::string > v6_ScheduleStart, boost::optional< std::string > v7_ScheduleFinish, boost::optional< std::string > v8_ScheduleContour, boost::optional< std::string > v9_LevelingDelay, boost::optional< bool > v10_IsOverAllocated, boost::optional< std::string > v11_StatusTime, boost::optional< std::string > v12_ActualWork, boost::optional< double > v13_ActualUsage, boost::optional< std::string > v14_ActualStart, boost::optional< std::string > v15_ActualFinish, boost::optional< std::string > v16_RemainingWork, boost::optional< double > v17_RemainingUsage, boost::optional< double > v18_Completion); + typedef aggregate_of< IfcResourceTime > list; +}; +/// IfcRoundedRectangleProfileDef defines a rectangle with equally rounded corners as the profile definition used by the swept surface geometry or the swept area solid. It is given by the X extent, the Y extent, and the radius for the rounded corners, and placed within the 2D position coordinate system, established by the Position attribute. It is placed centric within the position coordinate system, that is, in the center of the bounding box. +/// +/// HISTORY  New class in IFC2x. +/// +/// IFC2x PLATFORM CHANGE  The IfcRoundedRectangleProfileDef is now subtyped from IfcRectangleProfileDef. The XDim and YDim attributes have been removed (now inherited from supertype). +/// +/// Figure 324 illustrates parameters of the rounded rectangle profile definition. +/// +/// Position +/// +/// The parameterized profile defines its own position coordinate system. +/// The underlying +/// coordinate system is defined by the swept surface or swept area solid +/// that uses the profile definition. It is the xy plane of either: +/// +/// IfcSweptSurface.Position +/// IfcSweptAreaSolid.Position +/// +/// or in case of sectioned spines the xy plane of each list member of IfcSectionedSpine.CrossSectionPositions. +/// +/// By using offsets of the position location, the parameterized profile +/// can be positioned centric (using x,y offsets = 0.), or at any position +/// relative to the profile. Explicit coordinate offsets are used to define +/// cardinal points (e.g. upper-left bound). +/// Parameter +/// +/// The IfcRoundedRectangleProfileDef +/// is defined within the +/// position coordinate system, where the XDim +/// defines the measure +/// for the length of the rectangle (half along the positive x-axis), the YDim +/// defines the length measure for the width of the rectangle (half along +/// the positive y-axis) and the RoundingRadius +/// defines the radius +/// of curvature in all four corners of the rectangle. +/// +/// Figure 324 — Rounded rectangle profile +class IFC_PARSE_API IfcRoundedRectangleProfileDef : public IfcRectangleProfileDef { +public: + /// Radius of the circular arcs by which all four corners of the rectangle are equally rounded. + double RoundingRadius() const; + void setRoundingRadius(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRoundedRectangleProfileDef (IfcEntityInstanceData* e); + IfcRoundedRectangleProfileDef (::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_XDim, double v5_YDim, double v6_RoundingRadius); + typedef aggregate_of< IfcRoundedRectangleProfileDef > list; +}; +/// IfcSectionProperties defines the cross section properties for a single longitudinal piece of a cross section. It is a special-purpose helper class for IfcSectionReinforcementProperties. +/// +/// HISTORY  New entity in IFC2x2. +/// +/// The section piece may be either uniform or tapered. In the latter case an end profile should also be provided. The start and end profiles are assumed to be of the same profile type. Generally only rectangular or circular cross section profiles are assumed to be used. +class IFC_PARSE_API IfcSectionProperties : public IfcPreDefinedProperties { +public: + /// An indicator whether a specific piece of a cross section is uniform or tapered in longitudinal direction. + ::Ifc4x3_add2::IfcSectionTypeEnum::Value SectionType() const; + void setSectionType(::Ifc4x3_add2::IfcSectionTypeEnum::Value v); + /// The cross section profile at the start point of the longitudinal section. + ::Ifc4x3_add2::IfcProfileDef* StartProfile() const; + void setStartProfile(::Ifc4x3_add2::IfcProfileDef* v); + /// The cross section profile at the end point of the longitudinal section. + ::Ifc4x3_add2::IfcProfileDef* EndProfile() const; + void setEndProfile(::Ifc4x3_add2::IfcProfileDef* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSectionProperties (IfcEntityInstanceData* e); + IfcSectionProperties (::Ifc4x3_add2::IfcSectionTypeEnum::Value v1_SectionType, ::Ifc4x3_add2::IfcProfileDef* v2_StartProfile, ::Ifc4x3_add2::IfcProfileDef* v3_EndProfile); + typedef aggregate_of< IfcSectionProperties > list; +}; +/// IfcSectionReinforcementProperties defines the cross section properties of reinforcement for a single longitudinal piece of a cross section with a specific reinforcement usage type. +/// +/// HISTORY  New entity in IFC2x2. +/// +/// Several sets of cross section reinforcement properties represented by instances of IfcReinforcementProperties may be attached to the section reinforcement properties +/// (IfcReinforcementDefinitionProperties of IfcStructuralElementsDomain schema), +/// one for each combination of steel grades and reinforcement bar types and sizes. +class IFC_PARSE_API IfcSectionReinforcementProperties : public IfcPreDefinedProperties { +public: + /// The start position in longitudinal direction for the section reinforcement properties. + double LongitudinalStartPosition() const; + void setLongitudinalStartPosition(double v); + /// The end position in longitudinal direction for the section reinforcement properties. + double LongitudinalEndPosition() const; + void setLongitudinalEndPosition(double v); + /// The position for the section reinforcement properties in transverse direction. + boost::optional< double > TransversePosition() const; + void setTransversePosition(boost::optional< double > v); + /// The role, purpose or usage of the reinforcement, i.e. the kind of loads and stresses it is intended to carry, defined for the section reinforcement properties. + ::Ifc4x3_add2::IfcReinforcingBarRoleEnum::Value ReinforcementRole() const; + void setReinforcementRole(::Ifc4x3_add2::IfcReinforcingBarRoleEnum::Value v); + /// Definition of the cross section profile and longitudinal section type. + ::Ifc4x3_add2::IfcSectionProperties* SectionDefinition() const; + void setSectionDefinition(::Ifc4x3_add2::IfcSectionProperties* v); + /// The set of reinforcment properties attached to a section reinforcement properties definition. + aggregate_of< ::Ifc4x3_add2::IfcReinforcementBarProperties >::ptr CrossSectionReinforcementDefinitions() const; + void setCrossSectionReinforcementDefinitions(aggregate_of< ::Ifc4x3_add2::IfcReinforcementBarProperties >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSectionReinforcementProperties (IfcEntityInstanceData* e); + IfcSectionReinforcementProperties (double v1_LongitudinalStartPosition, double v2_LongitudinalEndPosition, boost::optional< double > v3_TransversePosition, ::Ifc4x3_add2::IfcReinforcingBarRoleEnum::Value v4_ReinforcementRole, ::Ifc4x3_add2::IfcSectionProperties* v5_SectionDefinition, aggregate_of< ::Ifc4x3_add2::IfcReinforcementBarProperties >::ptr v6_CrossSectionReinforcementDefinitions); + typedef aggregate_of< IfcSectionReinforcementProperties > list; +}; +/// Definition from ISO 10303-42:1999: A sectioned +/// spine is a representation of the shape of a three dimensional +/// object composed of a spine curve and a number of planar cross +/// sections. The shape is defined between the first element of cross +/// sections and the last element of this set. +/// +/// NOTE A sectioned spine may be used to represent a surface or a +/// solid but the interpolation of the shape between the +/// cross-sections is not defined. For the representation of a solid +/// all cross-sections are closed curves. +/// +/// A sectioned spine +/// (IfcSectionedSpine) is a representation of the shape of a +/// three dimensional object composed by a number of planar cross +/// sections, and a spine curve. The shape is defined between the +/// first element of cross sections and the last element of the cross +/// sections. A sectioned spine may be used to represent a surface or +/// a solid but the interpolation of the shape between the cross +/// sections is not defined. +/// For the representation of a solid all cross sections are +/// areas. For representation of a surface all cross sections are +/// curves. The cross sections are defined as profiles, whereas the +/// consecutive profiles may be derived by a transformation of the +/// start profile or the previous consecutive profile. +/// The spine curve shall be of type IfcCompositeCurve, +/// each of its segments (IfcCompositeCurveSegment) shall +/// correspond to the part between exactly two consecutive +/// cross-sections. +/// +/// NOTE: Corresponding ISO 10303 entity: sectioned spine. Please refer to ISO/DIS 10303-42-ed2:1999, p. 282 for the definition of the formal standard. The cross sections are defined in IFC as IfcProfileDef. The position coordinate systems are added. +/// +/// HISTORY New entity in IFC Release 2x. +/// +/// Figure 268 illustrates an example of an IfcSectionedSpine. +/// +/// The SpineCurve is given by an IfcCompositeCurve with two Segments. The Segments[1] has a ParentCurve of type IfcPolyline and a Transition = CONTSAMEGRADIENT. The Segments[2] has a ParentCurve of type +/// IfcTrimmedCurve and a Transition = DISCONTINUOUS. +/// Each CrossSectionPosition lies at a start or end point of the Segments. +/// Each CrossSections are inserted by the CrossSectionPositions. The first two cross sections are of +/// type IfcRectangleProfileDef, the third is of type IfcDerivedProfileDef. +/// +/// Figure 268 — Sectioned spine geometry +/// +/// Figure 269 illustrates the final result of the IfcSectionedSpine. The body (shown transparently) is not fully defined by the +/// exchange definition. +/// +/// Figure 269 — Sectioned spine result +/// +/// Informal propositions +/// +/// none of the cross sections, after being placed by the cross section positions, shall intersect +/// none of the cross sections, after being placed by the cross section positions, shall lie in the same plane +/// the local origin of each cross section position shall lie at the beginning or end of a composite curve segment. +class IFC_PARSE_API IfcSectionedSpine : public IfcGeometricRepresentationItem { +public: + /// A single composite curve, that defines the spine curve. Each of the composite curve segments correspond to the part between two cross-sections. + ::Ifc4x3_add2::IfcCompositeCurve* SpineCurve() const; + void setSpineCurve(::Ifc4x3_add2::IfcCompositeCurve* v); + /// A list of at least two cross sections, each defined within the xy plane of the position coordinate system of the cross section. The position coordinate system is given by the corresponding list CrossSectionPositions. + aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr CrossSections() const; + void setCrossSections(aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr v); + /// Position coordinate systems for the cross sections that form the sectioned spine. The profiles defining the cross sections are positioned within the xy plane of the corresponding position coordinate system. + aggregate_of< ::Ifc4x3_add2::IfcAxis2Placement3D >::ptr CrossSectionPositions() const; + void setCrossSectionPositions(aggregate_of< ::Ifc4x3_add2::IfcAxis2Placement3D >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSectionedSpine (IfcEntityInstanceData* e); + IfcSectionedSpine (::Ifc4x3_add2::IfcCompositeCurve* v1_SpineCurve, aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr v2_CrossSections, aggregate_of< ::Ifc4x3_add2::IfcAxis2Placement3D >::ptr v3_CrossSectionPositions); + typedef aggregate_of< IfcSectionedSpine > list; +}; + +class IFC_PARSE_API IfcSegment : public IfcGeometricRepresentationItem { +public: + ::Ifc4x3_add2::IfcTransitionCode::Value Transition() const; + void setTransition(::Ifc4x3_add2::IfcTransitionCode::Value v); + aggregate_of< IfcCompositeCurve >::ptr UsingCurves() const; // INVERSE IfcCompositeCurve::Segments + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSegment (IfcEntityInstanceData* e); + IfcSegment (::Ifc4x3_add2::IfcTransitionCode::Value v1_Transition); + typedef aggregate_of< IfcSegment > list; +}; +/// Definition from ISO/CD 10303-42:1992: A shell based surface model is described by a set of open or closed shells of dimensionality 2. The shells shall not intersect except at edges and vertices. In particular, distinct faces may not intersect. A complete face of one shell may be shared with another shell. Coincident portions of shells shall both reference the same faces, edges and vertices defining the coincident region. There shall be at least one shell. +/// +/// A shell may exist independently of a surface model. +/// +/// NOTE Corresponding ISO 10303-42 entity: shell_based_surface_model. Please refer to ISO/IS 10303-42:1994, p. 187 for the final definition of the formal standard. +/// +/// HISTORY: New entity in IFC Release 2x. +/// +/// Informal propositions +/// +/// The dimensionality of the shell based surface model is 2. +/// The shells shall not overlap or intersect except at common faces, edges or vertices. +class IFC_PARSE_API IfcShellBasedSurfaceModel : public IfcGeometricRepresentationItem { +public: + aggregate_of< ::Ifc4x3_add2::IfcShell >::ptr SbsmBoundary() const; + void setSbsmBoundary(aggregate_of< ::Ifc4x3_add2::IfcShell >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcShellBasedSurfaceModel (IfcEntityInstanceData* e); + IfcShellBasedSurfaceModel (aggregate_of< ::Ifc4x3_add2::IfcShell >::ptr v1_SbsmBoundary); + typedef aggregate_of< IfcShellBasedSurfaceModel > list; +}; +/// IfcSimpleProperty is a generalization of a single property object. The various subtypes of IfcSimpleProperty establish different ways in which a property value can be set. +/// +/// HISTORY  New Entity in IFC Release 1.0, definition changed in IFC Release 2x. +class IFC_PARSE_API IfcSimpleProperty : public IfcProperty { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSimpleProperty (IfcEntityInstanceData* e); + IfcSimpleProperty (std::string v1_Name, boost::optional< std::string > v2_Specification); + typedef aggregate_of< IfcSimpleProperty > list; +}; +/// Definition from IAI: Describes slippage in support conditions or connection conditions. Slippage means that a relative displacement may occur in a support or connection before support or connection reactions are awoken. +/// +/// Applicability: +/// +/// Point supports and connections, +/// curve supports and connections, +/// surface supports and connections. +/// +/// HISTORY: New entity in IFC 2x2. +class IFC_PARSE_API IfcSlippageConnectionCondition : public IfcStructuralConnectionCondition { +public: + /// Slippage in x-direction of the coordinate system defined by the instance which uses this resource object. + boost::optional< double > SlippageX() const; + void setSlippageX(boost::optional< double > v); + /// Slippage in y-direction of the coordinate system defined by the instance which uses this resource object. + boost::optional< double > SlippageY() const; + void setSlippageY(boost::optional< double > v); + /// Slippage in z-direction of the coordinate system defined by the instance which uses this resource object. + boost::optional< double > SlippageZ() const; + void setSlippageZ(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSlippageConnectionCondition (IfcEntityInstanceData* e); + IfcSlippageConnectionCondition (boost::optional< std::string > v1_Name, boost::optional< double > v2_SlippageX, boost::optional< double > v3_SlippageY, boost::optional< double > v4_SlippageZ); + typedef aggregate_of< IfcSlippageConnectionCondition > list; +}; +/// Definition from ISO/CD 10303-42:1992: A solid model is a complete representation of the nominal shape of a product such that all points in the interior are connected. Any point can be classified as being inside, outside, or on the boundary of a solid. There are several different types of solid model representations. +/// +/// NOTE: Corresponding ISO 10303-42 entity: solid_model, only three subtypes have been incorporated into the current IFC Release - subset of manifold_solid_brep (IfcManifoldSolidBrep, constraint to faceted B-rep), swept_area_solid (IfcSweptAreaSolid), the swept_disk_solid (IfcSweptDiskSolid) and subset of csg_solid (IfcCsgSolid). The derived attribute Dim has been added at this level and was therefore demoted from the geometric_representation_item. Please refer to ISO/IS 10303-42:1994, p. 170 for the final definition of the formal standard. +/// +/// HISTORY: New entity in IFC Release 1.5 +class IFC_PARSE_API IfcSolidModel : public IfcGeometricRepresentationItem, public IfcBooleanOperand, public IfcSolidOrShell { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSolidModel (IfcEntityInstanceData* e); + IfcSolidModel (); + typedef aggregate_of< IfcSolidModel > list; +}; +/// Definition from IAI: An instance of the entity +/// IfcStructuralLoadLinearForce shall be used to define actions on curves. +/// +/// HISTORY: New entity in Release IFC2x +/// edition 2. +class IFC_PARSE_API IfcStructuralLoadLinearForce : public IfcStructuralLoadStatic { +public: + /// Linear force value in x-direction. + boost::optional< double > LinearForceX() const; + void setLinearForceX(boost::optional< double > v); + /// Linear force value in y-direction. + boost::optional< double > LinearForceY() const; + void setLinearForceY(boost::optional< double > v); + /// Linear force value in z-direction. + boost::optional< double > LinearForceZ() const; + void setLinearForceZ(boost::optional< double > v); + /// Linear moment about the x-axis. + boost::optional< double > LinearMomentX() const; + void setLinearMomentX(boost::optional< double > v); + /// Linear moment about the y-axis. + boost::optional< double > LinearMomentY() const; + void setLinearMomentY(boost::optional< double > v); + /// Linear moment about the z-axis. + boost::optional< double > LinearMomentZ() const; + void setLinearMomentZ(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralLoadLinearForce (IfcEntityInstanceData* e); + IfcStructuralLoadLinearForce (boost::optional< std::string > v1_Name, boost::optional< double > v2_LinearForceX, boost::optional< double > v3_LinearForceY, boost::optional< double > v4_LinearForceZ, boost::optional< double > v5_LinearMomentX, boost::optional< double > v6_LinearMomentY, boost::optional< double > v7_LinearMomentZ); + typedef aggregate_of< IfcStructuralLoadLinearForce > list; +}; +/// Definition from IAI: An instance of the entity +/// IfcStructuralLoadPlanarForce shall be used to define actions on faces. +/// +/// HISTORY: New entity in Release IFC2x +/// edition 2. +class IFC_PARSE_API IfcStructuralLoadPlanarForce : public IfcStructuralLoadStatic { +public: + /// Planar force value in x-direction. + boost::optional< double > PlanarForceX() const; + void setPlanarForceX(boost::optional< double > v); + /// Planar force value in y-direction. + boost::optional< double > PlanarForceY() const; + void setPlanarForceY(boost::optional< double > v); + /// Planar force value in z-direction. + boost::optional< double > PlanarForceZ() const; + void setPlanarForceZ(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralLoadPlanarForce (IfcEntityInstanceData* e); + IfcStructuralLoadPlanarForce (boost::optional< std::string > v1_Name, boost::optional< double > v2_PlanarForceX, boost::optional< double > v3_PlanarForceY, boost::optional< double > v4_PlanarForceZ); + typedef aggregate_of< IfcStructuralLoadPlanarForce > list; +}; +/// Definition from IAI: Instances of the entity +/// IfcStructuralLoadSingleDisplacement shall be used to define displacements. +/// +/// HISTORY: New entity in Release IFC2x +/// edition 2. +class IFC_PARSE_API IfcStructuralLoadSingleDisplacement : public IfcStructuralLoadStatic { +public: + /// Displacement in x-direction. + boost::optional< double > DisplacementX() const; + void setDisplacementX(boost::optional< double > v); + /// Displacement in y-direction. + boost::optional< double > DisplacementY() const; + void setDisplacementY(boost::optional< double > v); + /// Displacement in z-direction. + boost::optional< double > DisplacementZ() const; + void setDisplacementZ(boost::optional< double > v); + /// Rotation about the x-axis. + boost::optional< double > RotationalDisplacementRX() const; + void setRotationalDisplacementRX(boost::optional< double > v); + /// Rotation about the y-axis. + boost::optional< double > RotationalDisplacementRY() const; + void setRotationalDisplacementRY(boost::optional< double > v); + /// Rotation about the z-axis. + boost::optional< double > RotationalDisplacementRZ() const; + void setRotationalDisplacementRZ(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralLoadSingleDisplacement (IfcEntityInstanceData* e); + IfcStructuralLoadSingleDisplacement (boost::optional< std::string > v1_Name, boost::optional< double > v2_DisplacementX, boost::optional< double > v3_DisplacementY, boost::optional< double > v4_DisplacementZ, boost::optional< double > v5_RotationalDisplacementRX, boost::optional< double > v6_RotationalDisplacementRY, boost::optional< double > v7_RotationalDisplacementRZ); + typedef aggregate_of< IfcStructuralLoadSingleDisplacement > list; +}; +/// Definition from IAI: Defines a displacement with warping. +/// +/// HISTORY: New entity in IFC 2x2. +class IFC_PARSE_API IfcStructuralLoadSingleDisplacementDistortion : public IfcStructuralLoadSingleDisplacement { +public: + /// The distortion curvature (warping, i.e. a cross-sectional deplanation) given to the displacement load. + boost::optional< double > Distortion() const; + void setDistortion(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralLoadSingleDisplacementDistortion (IfcEntityInstanceData* e); + IfcStructuralLoadSingleDisplacementDistortion (boost::optional< std::string > v1_Name, boost::optional< double > v2_DisplacementX, boost::optional< double > v3_DisplacementY, boost::optional< double > v4_DisplacementZ, boost::optional< double > v5_RotationalDisplacementRX, boost::optional< double > v6_RotationalDisplacementRY, boost::optional< double > v7_RotationalDisplacementRZ, boost::optional< double > v8_Distortion); + typedef aggregate_of< IfcStructuralLoadSingleDisplacementDistortion > list; +}; +/// Definition from IAI: Instances of the entity +/// IfcStructuralLoadSingleForce shall be used to define the forces and +/// moments of an action operating on a single point. +/// +/// HISTORY: New entity in Release IFC2x +/// edition 2. +class IFC_PARSE_API IfcStructuralLoadSingleForce : public IfcStructuralLoadStatic { +public: + /// Force value in x-direction. + boost::optional< double > ForceX() const; + void setForceX(boost::optional< double > v); + /// Force value in y-direction. + boost::optional< double > ForceY() const; + void setForceY(boost::optional< double > v); + /// Force value in z-direction. + boost::optional< double > ForceZ() const; + void setForceZ(boost::optional< double > v); + /// Moment about the x-axis. + boost::optional< double > MomentX() const; + void setMomentX(boost::optional< double > v); + /// Moment about the y-axis. + boost::optional< double > MomentY() const; + void setMomentY(boost::optional< double > v); + /// Moment about the z-axis. + boost::optional< double > MomentZ() const; + void setMomentZ(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralLoadSingleForce (IfcEntityInstanceData* e); + IfcStructuralLoadSingleForce (boost::optional< std::string > v1_Name, boost::optional< double > v2_ForceX, boost::optional< double > v3_ForceY, boost::optional< double > v4_ForceZ, boost::optional< double > v5_MomentX, boost::optional< double > v6_MomentY, boost::optional< double > v7_MomentZ); + typedef aggregate_of< IfcStructuralLoadSingleForce > list; +}; +/// Definition from IAI: Instances of the entity +/// IfcStructuralLoadSingleForceWarping, as a subtype of +/// IfcStructuralLoadSingleForce, shall be used to define an action operation +/// on a single point. In addition to forces and moments defined by its supertype a +/// warping moment can be defined. +/// +/// HISTORY: New entity in Release IFC2x +/// edition 2. +class IFC_PARSE_API IfcStructuralLoadSingleForceWarping : public IfcStructuralLoadSingleForce { +public: + /// The warping moment at the point load. + boost::optional< double > WarpingMoment() const; + void setWarpingMoment(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralLoadSingleForceWarping (IfcEntityInstanceData* e); + IfcStructuralLoadSingleForceWarping (boost::optional< std::string > v1_Name, boost::optional< double > v2_ForceX, boost::optional< double > v3_ForceY, boost::optional< double > v4_ForceZ, boost::optional< double > v5_MomentX, boost::optional< double > v6_MomentY, boost::optional< double > v7_MomentZ, boost::optional< double > v8_WarpingMoment); + typedef aggregate_of< IfcStructuralLoadSingleForceWarping > list; +}; +/// Definition from ISO/DIS 10303-42:1999(E): A subedge is an edge whose domain is a connected portion of the domain of an existing edge. The topological constraints on a subedge are the same as those on an edge. +/// +/// Informal propositions: +/// +/// The domain of the subedge is formally defined to be the domain of the parent edge, as trimmed by the subedge start vertex and subedge end vertex. +/// The start vertex and end vertex shall be within the union of the domains of the vertices of the parent edge and the domain of the parent edge. +/// +/// NOTE  Corresponding ISO 10303 entity: subedge. Please refer to ISO/DIS 10303-42:1999(E), p. 194 for the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC2x2. +class IFC_PARSE_API IfcSubedge : public IfcEdge { +public: + /// The Edge, or Subedge, which contains the Subedge. + ::Ifc4x3_add2::IfcEdge* ParentEdge() const; + void setParentEdge(::Ifc4x3_add2::IfcEdge* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSubedge (IfcEntityInstanceData* e); + IfcSubedge (::Ifc4x3_add2::IfcVertex* v1_EdgeStart, ::Ifc4x3_add2::IfcVertex* v2_EdgeEnd, ::Ifc4x3_add2::IfcEdge* v3_ParentEdge); + typedef aggregate_of< IfcSubedge > list; +}; +/// Definition from ISO/CD 10303-42:1992: A surface can be envisioned as a set of connected points in 3-dimensional space which is always locally 2-dimensional, but need not be a manifold. +/// +/// NOTE Corresponding ISO 10303 entity: surface, the following subtypes have been incorporated into IFC - elementary_surface (as IfcElementarySurface), swept_surface (as IfcSweptSurface) and bounded_surface (as IfcBoundedSurface). Please refer to ISO/IS 10303-42:1994, p. 68 for the final definition of the formal standard. +/// +/// HISTORY New class in IFC Release 1.5 +/// +/// Informal proposition: +/// +/// A surface has non zero area. +/// A surface is arcwise connected. +class IFC_PARSE_API IfcSurface : public IfcGeometricRepresentationItem, public IfcGeometricSetSelect, public IfcSurfaceOrFaceSurface { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSurface (IfcEntityInstanceData* e); + IfcSurface (); + typedef aggregate_of< IfcSurface > list; +}; +/// IfcSurfaceStyleRendering holds the properties for visualization related to a particular surface side style. +/// +/// It allows rendering properties to be defined by: +/// +/// a transparency component (Transparency attribute) +/// a colour component (SurfaceColour attribute inherited from IfcSurfaceStyleShading) +/// a reflectance component, given either by +/// +/// applying reflectance factors to the surface colour: +/// +/// diffuse component (SurfaceColour * DiffuseFactor) +/// transmission component (SurfaceColour * TransmissionFactor) +/// diffuse transmission component (SurfaceColour * DiffuseTransmissionFactor) +/// reflection component (SurfaceColour * ReflectionFactor) +/// specular component (SurfaceColour * SpecularFactor attribute together with SpecularHighlight) +/// +/// explicitly defining such factors as colours (DiffuseColour, TransmissionColour, DiffuseTransmissionColour, ReflectionColour and SpecularColour) +/// +/// a displacement component, currently only given by a texture map with the TextureType = bump +/// a coverage component, currently only given by the alpha component of the texture map (2 or 4 component colour texture) +/// +/// NOTE: The inherited attribute SurfaceColour is treated as the ambient colour and specifies how much ambient light from light sources this surface shall reflect. Ambient light is omnidirectional and depends only on the number of light sources, not their positions with respect to the surface. +/// +/// NOTE: If the reflectance method, as given by the IfcReflectanceMethodEnum is "GLASS", the transmission factor controls the level of transparency in the glass, In this case the transparency factor is interpreted as transmission factor. +/// +/// NOTE: Both Transparency and TransmissionColour (or factor) are included, the following definitions apply: +/// +/// Transparency is the ratio of the transmitted flux in a solid angle of 2 * PI sr (one hemisphere). It is a simple colour filtration that does not account for refraction. +/// Transmission factor of a material is the ratio of transmitted flux in a given solid angle to the transmitted flux of a completely diffuse material with 100% transmission in the same solid angle. It is the portion of light that goes through the material and may be refracted. +/// +/// NOTE: IFC 2x2 adds additional capability for presentation of physically accurate illuminance on surfaces. VRML type rendering and rendering based on ISO 10303-46 continues to be supported by a subset of the information. For reflectance equations and further information about the surface style properties and its processing, see: +/// +/// ISO/IEC 14772-1: 1997: The Virtual Reality Modeling Language +/// +/// NOTE: The definition of IfcSurfaceStyleRenderingProperties includes the definitions as found in ISO 10303-46:1994, in particular of: +/// +/// surface_style_rendering_with_properties +/// surface_style_rendering_ambient +/// surface_style_rendering_ambient_diffuse +/// surface_style_rendering_ambient_diffuse_specular +/// surface_style_transparent +/// +/// In addition to the attributes as defined in ISO 10303-46, (ambient_reflectance, diffuse_reflectance, specular_reflectance, specular_exponent, and specular_colour), the current IFC definition adds other colours, reflectance factors and specular roughness. +/// +/// HISTORY: New Entity in IFC 2x. +class IFC_PARSE_API IfcSurfaceStyleRendering : public IfcSurfaceStyleShading { +public: + /// The diffuse part of the reflectance equation can be given as either a colour or a scalar factor. + /// The diffuse colour field reflects all light sources depending on the angle of the surface with respect to the light source. The more directly the surface faces the light, the more diffuse light reflects. + /// The diffuse factor field specifies how much diffuse light from light sources this surface shall reflect. Diffuse light depends on the angle of the surface with respect to the light source. The more directly the surface faces the light, the more diffuse light reflects. The diffuse colour is then defined by surface colour * diffuse factor. + ::Ifc4x3_add2::IfcColourOrFactor* DiffuseColour() const; + void setDiffuseColour(::Ifc4x3_add2::IfcColourOrFactor* v); + /// The transmissive part of the reflectance equation can be given as either a colour or a scalar factor. It only applies to materials which Transparency field is greater than zero. + /// The transmissive colour field specifies the colour that passes through a transparant material (like the colour that shines through a glass). + /// The transmissive factor defines the transmissive part, the transmissive colour is then defined by surface colour * transmissive factor. + ::Ifc4x3_add2::IfcColourOrFactor* TransmissionColour() const; + void setTransmissionColour(::Ifc4x3_add2::IfcColourOrFactor* v); + /// The diffuse transmission part of the reflectance equation can be given as either a colour or a scalar factor. It only applies to materials whose Transparency field is greater than zero. + /// The diffuse transmission colour specifies how much diffuse light is reflected at the opposite side of the material surface. + /// The diffuse transmission factor field specifies how much diffuse light from light sources this surface shall reflect on the opposite side of the material surface. The diffuse transmissive colour is then defined by surface colour * diffuse transmissive factor. + ::Ifc4x3_add2::IfcColourOrFactor* DiffuseTransmissionColour() const; + void setDiffuseTransmissionColour(::Ifc4x3_add2::IfcColourOrFactor* v); + /// The reflection (or mirror) part of the reflectance equation can be given as either a colour or a scalar factor. Applies to "glass" and "mirror" reflection models. + /// The reflection colour specifies the contribution made by light from the mirror direction, i.e. light being reflected from the surface. + /// The reflection factor specifies the amount of contribution made by light from the mirror direction. The reflection colour is then defined by surface colour * reflection factor. + ::Ifc4x3_add2::IfcColourOrFactor* ReflectionColour() const; + void setReflectionColour(::Ifc4x3_add2::IfcColourOrFactor* v); + /// The specular part of the reflectance equation can be given as either a colour or a scalar factor. + /// The specular colour determine the specular highlights (e.g., the shiny spots on an apple). When the angle from the light to the surface is close to the angle from the surface to the viewer, the specular colour is added to the diffuse and ambient colour calculations. + /// The specular factor defines the specular part, the specular colour is then defined by surface colour * specular factor. + ::Ifc4x3_add2::IfcColourOrFactor* SpecularColour() const; + void setSpecularColour(::Ifc4x3_add2::IfcColourOrFactor* v); + /// The exponent or roughness part of the specular reflectance. + ::Ifc4x3_add2::IfcSpecularHighlightSelect* SpecularHighlight() const; + void setSpecularHighlight(::Ifc4x3_add2::IfcSpecularHighlightSelect* v); + /// Identifies the predefined types of reflectance method from which the method required may be set. + ::Ifc4x3_add2::IfcReflectanceMethodEnum::Value ReflectanceMethod() const; + void setReflectanceMethod(::Ifc4x3_add2::IfcReflectanceMethodEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSurfaceStyleRendering (IfcEntityInstanceData* e); + IfcSurfaceStyleRendering (::Ifc4x3_add2::IfcColourRgb* v1_SurfaceColour, boost::optional< double > v2_Transparency, ::Ifc4x3_add2::IfcColourOrFactor* v3_DiffuseColour, ::Ifc4x3_add2::IfcColourOrFactor* v4_TransmissionColour, ::Ifc4x3_add2::IfcColourOrFactor* v5_DiffuseTransmissionColour, ::Ifc4x3_add2::IfcColourOrFactor* v6_ReflectionColour, ::Ifc4x3_add2::IfcColourOrFactor* v7_SpecularColour, ::Ifc4x3_add2::IfcSpecularHighlightSelect* v8_SpecularHighlight, ::Ifc4x3_add2::IfcReflectanceMethodEnum::Value v9_ReflectanceMethod); + typedef aggregate_of< IfcSurfaceStyleRendering > list; +}; +/// Definition from ISO/CD 10303-42:1992: The swept area +/// solid entity collects the entities which are defined +/// procedurally by sweeping action on planar bounded surfaces. +/// The position is space of the swept solid will be dependent +/// upon the position of the swept area. The swept area will be +/// a face of the resulting swept area solid, except for the +/// case of a revolved area solid with angle equal to 2Ï€ +/// (or 360 degrees). +/// +/// The swept area is defined by a +/// cross section (also referred to as profile), which is given +/// as a closed two-dimensional boundary on an implicit plane. +/// The swept area is defined in the xy plane of the position +/// coordinate system, which is given for the swept area solid. +/// +/// NOTE Corresponding ISO 10303-42 entity: swept_area_solid, The data type of SweptArea is modified and given by a profile definition (IfcProfileDef). A position coordinate system is defined by the Position attribute has been added. Please refer to ISO/IS 10303-42:1994, p. 183 for the final definition of the formal standard. +/// +/// HISTORY New entity in IFC Release 1.5, the capabilities have been enhanced in IFC Release 2x. +class IFC_PARSE_API IfcSweptAreaSolid : public IfcSolidModel { +public: + /// The surface defining the area to be swept. It is given as a profile definition within the xy plane of the position coordinate system. + ::Ifc4x3_add2::IfcProfileDef* SweptArea() const; + void setSweptArea(::Ifc4x3_add2::IfcProfileDef* v); + /// Position coordinate system for the swept area, provided by a profile definition within the XY plane of the Position. + ::Ifc4x3_add2::IfcAxis2Placement3D* Position() const; + void setPosition(::Ifc4x3_add2::IfcAxis2Placement3D* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSweptAreaSolid (IfcEntityInstanceData* e); + IfcSweptAreaSolid (::Ifc4x3_add2::IfcProfileDef* v1_SweptArea, ::Ifc4x3_add2::IfcAxis2Placement3D* v2_Position); + typedef aggregate_of< IfcSweptAreaSolid > list; +}; +/// Definition from ISO 10303-42:2002: A swept +/// disk solid is the solid produced by sweeping a circular disk +/// along a three dimensional curve. During the sweeping operation +/// the normal to the plane of the circular disk is in the direction +/// of the tangent to the directrix curve and the center of the disk +/// lies on the directrix. The circular disk may, optionally, have a +/// central hole, in this case the resulting solid has a through +/// hole, or, an internal void when the directrix forms a close +/// curve. +/// The StartParam and +/// EndParam parameter are optional, if not provided they +/// default to the start and end of the Directrix. Only if the +/// Directrix is given by a bounded or by a closed curve, it +/// is permissible to omit the values of StartParam and +/// EndParam. +/// If the transitions between consecutive segments of the +/// Directrix are not tangent continuous, the resulting solid +/// is created by a miter at half angle between the two segments. +/// Informal proposition restricts the permissible angle between two +/// non-tangent continuous segments. +/// +/// Figure 272 illustrates an example. +/// +/// Directrix given as IfcCompositeCurve being +/// tangent continuous between its segments +/// Directrix being a bounded and open curve +/// No StartParam and EndParam are provided, start +/// and end default to start and end of the bounded curve of the +/// Directrix +/// +/// NOTE  Although the example shows a Directrix as a composite curve on a planar reference surface, the definition of IfcSweptDiskSolid is not restricted to be based on planer curves. However view definitions or implementer agreements may provide restrictions. +/// +/// Figure 272 — Swept disk solid geometry +/// +/// NOTE  Corresponding ISO 10303-42 entity: swept_disk_solid. Please refer to ISO/FDIS 10303-42:2002, p. 282 for the definition of the formal standard. +/// +/// HISTORY  New entity in IFC Release 2x2. +/// +/// IFC2x4 CHANGE  The attribute StartParam and EndParam have been made optional. +/// +/// Informal proposition +/// +/// If the Directrix curve definition is not tangent +/// continuous, the transition between the segments has to be within +/// an acceptable limit of tangent discontinuity. Very sharp edges +/// may result in nearly impossible miter. Implementer agreements may +/// define acceptable limits for tangent discontinuity. +/// The segments of the Directrix shall be long enough to +/// apply the Radius. In case of an arc segment forming part +/// of the Directrix ,its radius shall be greater then the +/// disk Radius +/// The Directrix shall not be based on an intersecting +/// curve. +class IFC_PARSE_API IfcSweptDiskSolid : public IfcSolidModel { +public: + /// The curve used to define the sweeping operation. The solid is generated by sweeping a circular disk along the Directrix. + ::Ifc4x3_add2::IfcCurve* Directrix() const; + void setDirectrix(::Ifc4x3_add2::IfcCurve* v); + /// The Radius of the circular disk to be swept along the directrix. Denotes the outer radius, if an InnerRadius is applied. + double Radius() const; + void setRadius(double v); + /// This attribute is optional, if present it defines the radius of a circular hole in the centre of the disk. + boost::optional< double > InnerRadius() const; + void setInnerRadius(boost::optional< double > v); + /// The parameter value on the Directrix at which the sweeping operation commences. If no value is provided the start of the sweeping operation is at the start of the Directrix.. + /// + /// IFC2x4 CHANGE  The attribute has been changed to OPTIONAL with upward compatibility for file-based exchange. + boost::optional< double > StartParam() const; + void setStartParam(boost::optional< double > v); + /// The parameter value on the Directrix at which the sweeping operation ends. If no value is provided the end of the sweeping operation is at the end of the Directrix.. + /// + /// IFC2x4 CHANGE  The attribute has been changed to OPTIONAL with upward compatibility for file-based exchange. + boost::optional< double > EndParam() const; + void setEndParam(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSweptDiskSolid (IfcEntityInstanceData* e); + IfcSweptDiskSolid (::Ifc4x3_add2::IfcCurve* v1_Directrix, double v2_Radius, boost::optional< double > v3_InnerRadius, boost::optional< double > v4_StartParam, boost::optional< double > v5_EndParam); + typedef aggregate_of< IfcSweptDiskSolid > list; +}; +/// The IfcSweptDiskSolidPolygonal is a IfcSweptDiskSolid where the Directrix is restricted to be provided by an IfcPolyline only. An optional FilletRadius attribute can be asserted, it is then applied as a fillet to all transitions between the segments of the IfcPolyline. +/// +/// HISTORY New entity in IFC2x4. +/// +/// Informal proposition +/// +/// The FilletRadius, if provided, has to be smaller then +/// or equal to the length of the start and end segment of the +/// IfcPolyline, and smaller then or equal to one half of the +/// lenght of the shortest inner segment. +class IFC_PARSE_API IfcSweptDiskSolidPolygonal : public IfcSweptDiskSolid { +public: + /// The fillet that is equally applied to all transitions between the segments of the IfcPolyline, providing the geometric representation for the Directrix. If omited, no fillet is applied to the segments. + boost::optional< double > FilletRadius() const; + void setFilletRadius(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSweptDiskSolidPolygonal (IfcEntityInstanceData* e); + IfcSweptDiskSolidPolygonal (::Ifc4x3_add2::IfcCurve* v1_Directrix, double v2_Radius, boost::optional< double > v3_InnerRadius, boost::optional< double > v4_StartParam, boost::optional< double > v5_EndParam, boost::optional< double > v6_FilletRadius); + typedef aggregate_of< IfcSweptDiskSolidPolygonal > list; +}; +/// Definition from ISO/CD 10303-42:1992: A swept surface is one that is constructed by sweeping a curve along another curve. +/// +/// NOTE: Corresponding ISO 10303 entity: swept_surface. Please refer to ISO/IS 10303-42:1994, p.76 for the final definition of the formal standard. +/// +/// HISTORY: New entity in IFC Release 2x. +class IFC_PARSE_API IfcSweptSurface : public IfcSurface { +public: + /// The curve to be swept in defining the surface. The curve is defined as a profile within the position coordinate system. + ::Ifc4x3_add2::IfcProfileDef* SweptCurve() const; + void setSweptCurve(::Ifc4x3_add2::IfcProfileDef* v); + /// Position coordinate system for the placement of the profile within the xy plane of the axis placement. + ::Ifc4x3_add2::IfcAxis2Placement3D* Position() const; + void setPosition(::Ifc4x3_add2::IfcAxis2Placement3D* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSweptSurface (IfcEntityInstanceData* e); + IfcSweptSurface (::Ifc4x3_add2::IfcProfileDef* v1_SweptCurve, ::Ifc4x3_add2::IfcAxis2Placement3D* v2_Position); + typedef aggregate_of< IfcSweptSurface > list; +}; +/// IfcTShapeProfileDef defines +/// a section profile that provides the defining parameters of a T-shaped +/// section to be used by the swept area solid. Its parameters and +/// orientation relative to the position coordinate system are according to +/// the following illustration. The centre of the position coordinate +/// system is in the profile's centre of the bounding box. +/// +/// HISTORY  New entity in IFC2x2. +/// +/// IFC2x3 CHANGE  All profile origins are now in the center of the bounding box. +/// +/// IFC2x4 CHANGE  Type of FilletRadius, FlangeEdgeRadius, and WebEdgeRadius relaxed to allow for zero radius. Trailing attribute CentreOfGravityInY deleted, use respective property in IfcExtendedProfileProperties instead. +/// +/// Figure 326 illustrates parameters of the T-shape profile definition. +/// +/// Position +/// The parameterized profile defines its own position coordinate system. +/// The underlying +/// coordinate system is defined by the swept area solid +/// that uses the profile definition. It is the xy plane of: +/// +/// IfcSweptAreaSolid.Position +/// +/// by using offsets of the position location, the parameterized profile +/// can be positioned centric (using x,y offsets = 0.), or at any position +/// relative to the profile. +/// +/// Figure 326 — T-shape profile +class IFC_PARSE_API IfcTShapeProfileDef : public IfcParameterizedProfileDef { +public: + /// Web lengths, see illustration above (= h). + double Depth() const; + void setDepth(double v); + /// Flange lengths, see illustration above (= b). + double FlangeWidth() const; + void setFlangeWidth(double v); + /// Constant wall thickness of web (= ts). + double WebThickness() const; + void setWebThickness(double v); + /// Constant wall thickness of flange (= tg). + double FlangeThickness() const; + void setFlangeThickness(double v); + /// Fillet radius according the above illustration (= r1). + boost::optional< double > FilletRadius() const; + void setFilletRadius(boost::optional< double > v); + /// Edge radius according the above illustration (= r2). + boost::optional< double > FlangeEdgeRadius() const; + void setFlangeEdgeRadius(boost::optional< double > v); + /// Edge radius according the above illustration (= r3). + boost::optional< double > WebEdgeRadius() const; + void setWebEdgeRadius(boost::optional< double > v); + /// Slope of flange of the profile. + boost::optional< double > WebSlope() const; + void setWebSlope(boost::optional< double > v); + /// Slope of web of the profile. + boost::optional< double > FlangeSlope() const; + void setFlangeSlope(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTShapeProfileDef (IfcEntityInstanceData* e); + IfcTShapeProfileDef (::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_Depth, double v5_FlangeWidth, double v6_WebThickness, double v7_FlangeThickness, boost::optional< double > v8_FilletRadius, boost::optional< double > v9_FlangeEdgeRadius, boost::optional< double > v10_WebEdgeRadius, boost::optional< double > v11_WebSlope, boost::optional< double > v12_FlangeSlope); + typedef aggregate_of< IfcTShapeProfileDef > list; +}; + +class IFC_PARSE_API IfcTessellatedItem : public IfcGeometricRepresentationItem { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTessellatedItem (IfcEntityInstanceData* e); + IfcTessellatedItem (); + typedef aggregate_of< IfcTessellatedItem > list; +}; +/// The text literal is a geometric representation item which describes a text string using a string literal and additional position and path information. +/// +/// NOTE  The IfcTextLiteral is an entity that had been adopted from ISO 10303, Industrial automation systems and integration—Product data representation and exchange. +/// +/// NOTE  Corresponding ISO 10303 name: text_literal. Please refer to ISO/IS 10303-46:1994 for the +/// final definition of the formal standard. The attributes font and alignment have been removed as those should be handled by the text style. +/// +/// HISTORY  New entity in IFC2x2. +/// +/// IFC2x3 CHANGE  The IfcTextLiteral has been changed by removing Font and Alignment. +class IFC_PARSE_API IfcTextLiteral : public IfcGeometricRepresentationItem { +public: + /// The text literal to be presented. + std::string Literal() const; + void setLiteral(std::string v); + /// An IfcAxis2Placement that determines the placement and orientation of the presented string. + /// When used with a text style based on IfcTextStyleWithBoxCharacteristics then the y-axis is taken as the reference direction for the box rotation angle and the box slant angle. + ::Ifc4x3_add2::IfcAxis2Placement* Placement() const; + void setPlacement(::Ifc4x3_add2::IfcAxis2Placement* v); + /// The writing direction of the text literal. + ::Ifc4x3_add2::IfcTextPath::Value Path() const; + void setPath(::Ifc4x3_add2::IfcTextPath::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTextLiteral (IfcEntityInstanceData* e); + IfcTextLiteral (std::string v1_Literal, ::Ifc4x3_add2::IfcAxis2Placement* v2_Placement, ::Ifc4x3_add2::IfcTextPath::Value v3_Path); + typedef aggregate_of< IfcTextLiteral > list; +}; +/// The text literal with extent is a text literal with the additional explicit information of the planar extent (or surrounding text box). An alignment attribute defines, how the text box is aligned to the placement and how it may expand. +/// +/// NOTE  The IfcTextLiteralWithExtent is an entity that had been adopted from ISO 10303, Industrial automation systems and integration—Product data representation and exchange, Part 46: Integrated generic resources: Visual presentation. +/// +/// NOTE  Corresponding ISO 10303 name: text_literal_with_extent. Please refer to ISO/IS 10303-46:1994 for the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC2x2. +/// +/// IFC2x3 CHANGE  The IfcTextLiteralWithExtent has been changed by adding BoxAlignment. +class IFC_PARSE_API IfcTextLiteralWithExtent : public IfcTextLiteral { +public: + /// The extent in the x and y direction of the text literal. + ::Ifc4x3_add2::IfcPlanarExtent* Extent() const; + void setExtent(::Ifc4x3_add2::IfcPlanarExtent* v); + /// The alignment of the text literal relative to its position. + std::string BoxAlignment() const; + void setBoxAlignment(std::string v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTextLiteralWithExtent (IfcEntityInstanceData* e); + IfcTextLiteralWithExtent (std::string v1_Literal, ::Ifc4x3_add2::IfcAxis2Placement* v2_Placement, ::Ifc4x3_add2::IfcTextPath::Value v3_Path, ::Ifc4x3_add2::IfcPlanarExtent* v4_Extent, std::string v5_BoxAlignment); + typedef aggregate_of< IfcTextLiteralWithExtent > list; +}; +/// Definition from CSS1 (W3C Recommendation): Setting font properties will be among the most common uses of style sheets. Unfortunately, there exists no well-defined and universally accepted taxonomy for classifying fonts, and terms that apply to one font family may not be appropriate for others. For example, 'italic' is commonly used to label slanted text, but slanted text may also be labeled as being Oblique, Slanted, Incline, Cursive or Kursiv. Therefore it is not a simple problem to map typical font selection properties to a specific font. +/// +/// Font matching +/// Because there is no accepted, universal taxonomy of font properties, matching of properties to font faces must be done carefully. The properties are matched in a well-defined order to ensure that the results of this matching process are as consistent as possible across user agents (assuming that the same library of font faces is presented to each of them). +/// +/// The user agent makes (or +/// accesses) a database of relevant CSS1 +/// properties of all the fonts of which the UA is aware. The UA may be +/// aware of a font because it has been installed locally or it has been +/// previously downloaded over the web. If there are two fonts with +/// exactly the same properties, one of them is ignored. +/// At a given element and for +/// each character in that element, the UA +/// assembles the font-properties applicable to that element. Using the +/// complete set of properties, the UA uses the 'font-family' property to +/// choose a tentative font family. The remaining properties are tested +/// against the family according to the matching criteria described with +/// each property. If there are matches for all the remaining properties, +/// then that is the matching font face for the given element. +/// If there is no matching font +/// face within the 'font-family' being +/// processed by step 2, and if there is a next alternative 'font-family' +/// in the font set, then repeat step 2 with the next alternative +/// 'font-family'. +/// If there is a matching font +/// face, but it doesn't contain a glyph +/// for the current character, and if there is a next alternative +/// 'font-family' in the font sets, then repeat step 2 with the next +/// alternative 'font-family'.  +/// If there is no font within +/// the family selected in 2, then use a +/// UA-dependent default 'font-family' and repeat step 2, using the best +/// match that can be obtained within the default font. +/// +/// (The above algorithm can be +/// optimized to avoid having to revisit +/// the CSS1 properties for each character.) +/// +/// The per-property matching rules +/// from (2) above are as follows: +/// +/// 'font-style' is tried first. +/// 'italic' +/// will be satisfied if there is either a face in the UA's font database +/// labeled with the CSS keyword 'italic' (preferred) or 'oblique'. +/// Otherwise the values must be matched exactly or font-style will fail. +/// 'font-variant' is tried +/// next. 'normal' +/// matches a font not labeled as 'small-caps'; 'small-caps' matches (1) a +/// font labeled as 'small-caps', (2) a font in which the small caps are +/// synthesized, or (3) a font where all lowercase letters are replaced by +/// upper case letters. A small-caps font may be synthesized by +/// electronically scaling uppercase letters from a normal font. +/// 'font-weight' is matched next, it will never fail. (See 'font-weight' below.) +/// 'font-size' must be matched within a +/// UA-dependent margin of tolerance. (Typically, sizes for scalable fonts +/// are rounded to the nearest whole pixel, while the tolerance for +/// bitmapped fonts could be as large as 20%.) Further computations, are +/// based on the 'font-size' value that is used, not the one that is specified. +/// +/// The inherited Name attribute is used to define the font name, particularly in cases, where no (list of) font families are provided. +/// +/// NOTE  Corresponding CSS1 definitions are Font properties ('font-family', 'font-style', 'font-variant',  'font-weight'). +/// +/// HISTORY  New entity in IFC2x3. +class IFC_PARSE_API IfcTextStyleFontModel : public IfcPreDefinedTextFont { +public: + /// The value is a prioritized list of font family names and/or generic family names. The first list entry has the highest priority, if this font fails, the next list item shall be used. The last list item should (if possible) be a generic family. + std::vector< std::string > /*[1:?]*/ FontFamily() const; + void setFontFamily(std::vector< std::string > /*[1:?]*/ v); + /// The font style property selects between normal (sometimes referred to as "roman" or "upright"), italic and oblique faces within a font family. + boost::optional< std::string > FontStyle() const; + void setFontStyle(boost::optional< std::string > v); + /// The font variant property selects between normal and small-caps. + /// NOTE  It has been introduced for later compliance to full CSS1 support. + boost::optional< std::string > FontVariant() const; + void setFontVariant(boost::optional< std::string > v); + /// The font weight property selects the weight of the font. + /// NOTE  Values other then 'normal' and 'bold' have been introduced for later compliance to full CSS1 support. + boost::optional< std::string > FontWeight() const; + void setFontWeight(boost::optional< std::string > v); + /// The font size provides the size or height of the text font. + /// NOTE  The following values are allowed, /*[1:?]*/ v2_FontFamily, boost::optional< std::string > v3_FontStyle, boost::optional< std::string > v4_FontVariant, boost::optional< std::string > v5_FontWeight, ::Ifc4x3_add2::IfcSizeSelect* v6_FontSize); + typedef aggregate_of< IfcTextStyleFontModel > list; +}; +/// IfcTrapeziumProfileDef defines a trapezium as the profile definition used by the swept surface geometry or the swept area solid. It is given by its Top X and Bottom X extent and its Y extent as well as by the offset of the Top X extend, and placed within the 2D position coordinate system, established by the Position attribute. It is placed centric within the position coordinate system, that is, in the center of the bounding box. +/// +/// HISTORY  New class in IFC 1.5. The use definition has changed in IFC2x. +/// +/// Figure 325 illustrates parameters of the trapezium profile definition. +/// +/// Position +/// +/// The parameterized profile defines its own position coordinate system. +/// The underlying +/// coordinate system is defined by the swept surface or swept area solid +/// that uses the profile definition. It is the xy plane of either: +/// +/// IfcSweptSurface.Position +/// IfcSweptAreaSolid.Position +/// +/// or in case of sectioned spines the xy plane of each list member of IfcSectionedSpine.CrossSectionPositions. +/// +/// By using offsets of the position location, the parameterized profile +/// can be positioned centric (using x,y offsets = 0.), or at any position +/// relative to the profile. Explicit coordinate offsets are used to define +/// cardinal points (e.g. upper-left bound). +/// Parameter +/// +/// The IfcTrapeziumProfileDef +/// is defined within the position +/// coordinate system, where the BottomDim +/// defines the length +/// measure for the bottom line (half along the positive x-axis) and the YDim +/// defines the length measure for the parallel distance of bottom and top +/// line (half along the positive y-axis). The top line starts with a +/// distance of TopXOffset +/// from [-BottomLine/2,YDim] (which can be +/// negative, zero, or positive) and has a length of TopXDim +/// along +/// the positive x-axis. +/// +/// Figure 325 — Trapezium profile +class IFC_PARSE_API IfcTrapeziumProfileDef : public IfcParameterizedProfileDef { +public: + /// The extent of the bottom line measured along the implicit x-axis. + double BottomXDim() const; + void setBottomXDim(double v); + /// The extent of the top line measured along the implicit x-axis. + double TopXDim() const; + void setTopXDim(double v); + /// The extent of the distance between the parallel bottom and top lines measured along the implicit y-axis. + double YDim() const; + void setYDim(double v); + /// Offset from the beginning of the top line to the bottom line, measured along the implicit x-axis. + double TopXOffset() const; + void setTopXOffset(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTrapeziumProfileDef (IfcEntityInstanceData* e); + IfcTrapeziumProfileDef (::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_BottomXDim, double v5_TopXDim, double v6_YDim, double v7_TopXOffset); + typedef aggregate_of< IfcTrapeziumProfileDef > list; +}; +/// The object type defines the +/// specific information about a type, being common to all +/// occurrences of this type. It refers to the specific level of the +/// well recognized generic - specific - occurrance modeling +/// paradigm. The IfcTypeObject gets assigned to the +/// individual object instances (the occurrences) via the +/// IfcRelDefinesByType relationship. +/// NOTE The terms 'Type' and 'Style' are often +/// used interchangeably. +/// The object type is represented by a set of property set +/// definitions. The attached property sets describe the available +/// alpha-numeric information about the object type. and are used to +/// define all common properties that apply to all object occurrences +/// of that type. +/// NOTE If a property having having the same name +/// is used within the IfcPropertySet assigned to an +/// IfcTypeObject (and subtypes) and to an occurrence of that +/// type, then the occurrence property overrides the type property. +/// See IfcRelDefinesByType for an explanatory +/// figure. +/// Object types may be exchanged without being already assigned +/// to objects. An object type may have an indication of the library +/// (or catalogue) from which its definition originates. This +/// association is handled by the inherited HasAssociations +/// relationship pointing to IfcRelAssociatesLibrary. +/// +/// HISTORY New entity in IFC Release 2x +/// +/// IFC2x3 CHANGE The IfcTypeObject is now subtyped from the new supertype IfcObjectDefinition, and the attribute HasPropertySets has been changed from a LIST into a SET. +/// +/// IFC2x4 CHANGE (1) The entity IfcTypeObject shall not be instantiated from IFC2x4 onwards. It will be changed into an ABSTRACT supertype in future releases of IFC. (2) The inverse attribute Types has been renamed from ObjectTypeOf. +class IFC_PARSE_API IfcTypeObject : public IfcObjectDefinition { +public: + /// The attribute optionally defines the data type of the occurrence object, to which the assigned type object can relate. If not present, no instruction is given to which occurrence object the type object is applicable. The following conventions are used: + /// + /// The IFC entity name of the applicable occurrence using the IFC naming convention, CamelCase with IFC prefix + /// It can be optionally followed by the predefined type after the separator "/" (forward slash), using Uupper case + /// If one type object is applicable to many occurrence objects, then those occurrence object names should be separate by comma "," forming a comma separated string. + /// + /// EXAMPLE Refering to a furniture as applicable occurrence entity would be expressed as 'IfcFurnishingElement', refering to a brace as applicable entity would be expressed as 'IfcMember/BRACE', refering to a wall and wall standard case would be expressed as 'IfcWall, IfcWallStandardCase'. + boost::optional< std::string > ApplicableOccurrence() const; + void setApplicableOccurrence(boost::optional< std::string > v); + /// Set list of unique property sets, that are associated with the object type and are common to all object occurrences referring to this object type. + /// + /// IFC2x3 CHANGE  The attribute aggregate type has been changed from LIST to SET. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > HasPropertySets() const; + void setHasPropertySets(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v); + aggregate_of< IfcRelDefinesByType >::ptr Types() const; // INVERSE IfcRelDefinesByType::RelatingType + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTypeObject (IfcEntityInstanceData* e); + IfcTypeObject (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets); + typedef aggregate_of< IfcTypeObject > list; +}; +/// IfcTypeProcess defines a +/// specific (or type) definition of a process or activity without +/// being assigned to a schedule or a time.It is used to define a +/// process or activity specification, that is, the specific process or +/// activity information that is common to all occurrences that are +/// defined for that process or activity type. +/// +/// An IfcTypeProcess may have a list of property set +/// attached. Values of these properties are common to all +/// occurrences of that process or activity type. The type occurrence +/// relationship is realized using the objectified relationship +/// IfcRelDefinesByType. +/// +/// Subtypes of IfcTypeProcess may be exchanged without +/// being already assigned to subtypes of IfcProcess. +/// +/// HISTORY New entity in IFC2x4. +/// +/// Property set use definition +/// An IfcTypeProcess may have a list of property sets +/// attached, accessible by the attribute +/// SELF\IfcTypeObject.HasPropertySets. Currently there are no +/// predefined property sets defined as part of the IFC +/// specification. +/// NOTE: For property sets, a property within an +/// occurrence property set that is assigned at the process +/// occurrence, overrides the same property assigned to the process +/// type. +class IFC_PARSE_API IfcTypeProcess : public IfcTypeObject, public IfcProcessSelect { +public: + /// An identifying designation given to a process type. + boost::optional< std::string > Identification() const; + void setIdentification(boost::optional< std::string > v); + /// An long description, or text, describing the activity in detail. + /// + /// NOTE The inherited SELF\IfcRoot.Description attribute is used as the short description. + boost::optional< std::string > LongDescription() const; + void setLongDescription(boost::optional< std::string > v); + /// The type denotes a particular type that indicates the process further. The use has to be established at the level of instantiable subtypes. In particular it holds the user defined type, if the enumeration of the attribute 'PredefinedType' is set to USERDEFINED. + boost::optional< std::string > ProcessType() const; + void setProcessType(boost::optional< std::string > v); + aggregate_of< IfcRelAssignsToProcess >::ptr OperatesOn() const; // INVERSE IfcRelAssignsToProcess::RelatingProcess + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTypeProcess (IfcEntityInstanceData* e); + IfcTypeProcess (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ProcessType); + typedef aggregate_of< IfcTypeProcess > list; +}; +/// IfcTypeProduct defines a type +/// definition of a product without being already inserted into a +/// project structure (without having a placement), and not being +/// included into the geometric representation context of the +/// project.It is used to define a product specification, that is, the +/// specific product information that is common to all occurrences +/// of that product type. +/// +/// An IfcTypeProduct may have a list of property set +/// attached and an optional set of product representations. Values +/// of these properties and the representation maps are common to all +/// occurrencesof that product type.The type occurrence +/// relationship is realized using the objectified relationship +/// IfcRelDefinesByType. +/// +/// NOTE 1 The product representations are +/// defined as representation maps, which gets assigned by a product +/// instance through the representation item(s) being an +/// IfcShapeRepresentation and having Items of +/// typeIfcMappedItem. +/// NOTE 2 The representations at the occurrence +/// level (represented by subtypes of IfcProduct) can override +/// the specific representations at the type level, +/// +/// for geometric representations: a Cartesian +/// transformation operator can be applied at the occurrence level, +/// and +/// for property sets: A property within an occurrence +/// property set, assigned at the product occurrence, overrides the +/// same property assigned to the product type. +/// +/// An IfcTypeProduct may be exchanged without being +/// already assigned to subtypes of IfcProduct. +/// +/// HISTORY New entity in IFC Release 2x. +/// +/// IFC2x4 CHANGE The entity IfcTypeProduct shall not be instantiated from IFC2x4 onwards. It will be changed into an ABSTRACT supertype in future releases of IFC. +/// +/// Geometry use definition +/// The RepresentationMaps define the type product shape +/// and multiple geometric representations can be assigned. If a +/// product occurrence is assigned to the type by using the +/// IfcRelDefinesByType relationship, then these occurrences +/// have to reference the representation maps. The reference is +/// created by one or multiple IfcShapeRepresentation's having +/// an IfcMappedItem as Items, that places the +/// IfcRepresentationMap of the type product into the spatial +/// contexts, i.e. by using an Cartesian transformation operator to +/// transform the IfcRepresentationMap into the object +/// coordinate system of the product occurrence. +/// +/// Figure 10 illustrates an example of referencing a representation map by +/// the shape representation of a product occurrence. Here the +/// Cartesian transformation operator only uses translation, but no +/// rotation, mirroring, or scaling. +/// +/// Figure 10 — Product type geometry with single placement +/// +/// Figure 11 illustrates an example of referencing a representation +/// multiple times map by the shape representation of a product +/// occurrence. Here the Cartesian transformation operator only uses +/// translation, but no rotation, mirroring, or scaling. The +/// different translation values determine the pattern of the +/// multiple placement. +/// +/// Figure 11 — Product type geometry with multiple placement +class IFC_PARSE_API IfcTypeProduct : public IfcTypeObject, public IfcProductSelect { +public: + /// List of unique representation maps. Each representation map describes a block definition of the shape of the product style. By providing more than one representation map, a multi-view block definition can be given. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > RepresentationMaps() const; + void setRepresentationMaps(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v); + /// The tag (or label) identifier at the particular type of a product, e.g. the article number (like the EAN). It is the identifier at the specific level. + boost::optional< std::string > Tag() const; + void setTag(boost::optional< std::string > v); + aggregate_of< IfcRelAssignsToProduct >::ptr ReferencedBy() const; // INVERSE IfcRelAssignsToProduct::RelatingProduct + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTypeProduct (IfcEntityInstanceData* e); + IfcTypeProduct (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcTypeProduct > list; +}; +/// IfcTypeResource defines a specific (or type) definition of a resource.It is used to define a resource specification (the specific resource, that is common to all occurrences that are defined for that resource) and could act as a resource template. +/// +/// An IfcTypeResource may have a list of property sets attached. Values of these properties are common to all occurrences of that resource type. The type occurrence relationship is realized using the objectified relationship IfcRelDefinesByType. +/// +/// Subtypes of IfcTypeResource may be exchanged without being already assigned to subtypes of IfcResource. +/// +/// HISTORY New entity in IFC2x4. +/// +/// Property set use definition +/// An IfcTypeResource may have a list of property sets attached, accessible by the attribute SELF\IfcTypeObject.HasPropertySets. Currently there are no predefined property sets defined as part of the IFC specification. +/// +/// NOTE: For property sets, a property within an occurrence property set that is assigned at the resource occurrence, overrides the same property assigned to the resource type. +class IFC_PARSE_API IfcTypeResource : public IfcTypeObject, public IfcResourceSelect { +public: + /// An identifying designation given to a resource type. + boost::optional< std::string > Identification() const; + void setIdentification(boost::optional< std::string > v); + /// An long description, or text, describing the resource in detail. + /// + /// NOTE The inherited SELF\IfcRoot.Description attribute is used as the short description. + boost::optional< std::string > LongDescription() const; + void setLongDescription(boost::optional< std::string > v); + /// The type denotes a particular type that indicates the resource further. The use has to be established at the level of instantiable subtypes. In particular it holds the user defined type, if the enumeration of the attribute 'PredefinedType' is set to USERDEFINED. + boost::optional< std::string > ResourceType() const; + void setResourceType(boost::optional< std::string > v); + aggregate_of< IfcRelAssignsToResource >::ptr ResourceOf() const; // INVERSE IfcRelAssignsToResource::RelatingResource + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTypeResource (IfcEntityInstanceData* e); + IfcTypeResource (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ResourceType); + typedef aggregate_of< IfcTypeResource > list; +}; +/// IfcUShapeProfileDef defines +/// a section profile that provides the defining parameters of a U-shape +/// (channel) section to be used by the swept area solid. Its parameters +/// and orientation relative to the position coordinate system are +/// according to the following illustration. The centre of the position +/// coordinate system is in the profile's centre of the bounding box. +/// +/// HISTORY  New entity in IFC2x2. +/// +/// IFC2x3 CHANGE  All profile origins are now in the center of the bounding box. +/// +/// IFC2x4 CHANGE  Type of FilletRadius and EdgeRadius relaxed to allow for zero radius. +/// Trailing attribute CentreOfGravityInX deleted, use respective property in IfcExtendedProfileProperties instead. +/// +/// Figure 327 illustrates parameters of the U-shape profile definition. +/// +/// Position +/// The parameterized profile defines its own position coordinate system. +/// The underlying coordinate system is defined by the swept area solid +/// that uses the profile definition. It is the xy plane of: +/// +/// IfcSweptAreaSolid.Position +/// +/// By using offsets of the position location, the parameterized profile +/// can be positioned centric (using x,y offsets = 0.), or at any position +/// relative to the profile. +/// +/// Figure 327 — U-shape profile +class IFC_PARSE_API IfcUShapeProfileDef : public IfcParameterizedProfileDef { +public: + /// Web lengths, see illustration above (= h). + double Depth() const; + void setDepth(double v); + /// Flange lengths, see illustration above (= b). + double FlangeWidth() const; + void setFlangeWidth(double v); + /// Constant wall thickness of web (= ts). + double WebThickness() const; + void setWebThickness(double v); + /// Constant wall thickness of flange (= tg). + double FlangeThickness() const; + void setFlangeThickness(double v); + /// Fillet radius according the above illustration (= r1). + boost::optional< double > FilletRadius() const; + void setFilletRadius(boost::optional< double > v); + /// Edge radius according the above illustration (= r2). + boost::optional< double > EdgeRadius() const; + void setEdgeRadius(boost::optional< double > v); + /// Slope of flange of the profile. + boost::optional< double > FlangeSlope() const; + void setFlangeSlope(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcUShapeProfileDef (IfcEntityInstanceData* e); + IfcUShapeProfileDef (::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_Depth, double v5_FlangeWidth, double v6_WebThickness, double v7_FlangeThickness, boost::optional< double > v8_FilletRadius, boost::optional< double > v9_EdgeRadius, boost::optional< double > v10_FlangeSlope); + typedef aggregate_of< IfcUShapeProfileDef > list; +}; +/// Definition from ISO/CD 10303-42:1992: The vector is defined in terms of the direction and magnitude of the vector. The value of the magnitude attribute defines the magnitude of the vector. +/// +/// NOTE: The magnitude of the vector can not be reliable calculated from the components of the Orientation attribute. This form of representation was selected to reduce problems with numerical instability. For example a vector of magnitude 2.0 mm and equally inclined to the coordinate axes could be represented with Orientation attribute of (1.0,1.0,1.0). +/// +/// NOTE: Corresponding ISO 10303 entity: vector. Please refer to ISO/IS 10303-42:1994, p.27 for the final definition of the formal standard. The derived attribute Dim has been added (see also note at IfcGeometricRepresentationItem). +/// +/// HISTORY: New entity in IFC Release 1.0 +class IFC_PARSE_API IfcVector : public IfcGeometricRepresentationItem, public IfcHatchLineDistanceSelect, public IfcVectorOrDirection { +public: + /// The direction of the vector. + ::Ifc4x3_add2::IfcDirection* Orientation() const; + void setOrientation(::Ifc4x3_add2::IfcDirection* v); + /// The magnitude of the vector. All vectors of Magnitude 0.0 are regarded as equal in value regardless of the orientation attribute. + double Magnitude() const; + void setMagnitude(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcVector (IfcEntityInstanceData* e); + IfcVector (::Ifc4x3_add2::IfcDirection* v1_Orientation, double v2_Magnitude); + typedef aggregate_of< IfcVector > list; +}; +/// Definition from ISO/CD 10303-42:1992: A vertex_loop is a loop of +/// zero genus consisting of a single vertex. A vertex can exist independently of a +/// vertex loop. The topological data shall satisfy the following constraint: +/// +/// Informal propositions: +/// +/// A vertex loop has zero extent and dimensionality. +/// The vertex loop has genus 0. +/// +/// NOTE  Corresponding ISO 10303 entity: vertex_loop. Please refer to ISO/IS 10303-42:1994, p. 121 for the final definition of the formal standard. +/// +/// HISTORY  New Entity in IFC2x2. +class IFC_PARSE_API IfcVertexLoop : public IfcLoop { +public: + /// The vertex which defines the entire loop. + ::Ifc4x3_add2::IfcVertex* LoopVertex() const; + void setLoopVertex(::Ifc4x3_add2::IfcVertex* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcVertexLoop (IfcEntityInstanceData* e); + IfcVertexLoop (::Ifc4x3_add2::IfcVertex* v1_LoopVertex); + typedef aggregate_of< IfcVertexLoop > list; +}; +/// IfcZShapeProfileDef defines +/// a section profile that provides the defining parameters of a Z-shape +/// section to be used by the swept area solid. Its parameters and +/// orientation relative to the position coordinate system are according to +/// the following illustration. The centre of the position coordinate +/// system is in the profile's centre of the bounding box. +/// +/// HISTORY  New entity in IFC2x2. +/// +/// IFC2x Edition 4 CHANGE  Type of FilletRadius and EdgeRadius relaxed to allow for zero radius. +/// +/// Figure 328 illustrates parameters of the Z-shape profile definition. +/// +/// Position +/// The parameterized profile defines its own position coordinate system. +/// The underlying coordinate system is defined by the swept area solid +/// that uses the profile definition. It is the xy plane of: +/// +/// IfcSweptAreaSolid.Position +/// +/// By using offsets of the position location, the parameterized profile +/// can be positioned centric (using x,y offsets = 0.), or at any position +/// relative to the profile. +/// +/// Figure 328 — Z-shape profile +class IFC_PARSE_API IfcZShapeProfileDef : public IfcParameterizedProfileDef { +public: + /// Web length, see illustration above (= h). + double Depth() const; + void setDepth(double v); + /// Flange length, see illustration above (= b). + double FlangeWidth() const; + void setFlangeWidth(double v); + /// Constant wall thickness of web, see illustration above (= ts). + double WebThickness() const; + void setWebThickness(double v); + /// Constant wall thickness of flange, see illustration above (= tg). + double FlangeThickness() const; + void setFlangeThickness(double v); + /// Fillet radius according the above illustration (= r1). + boost::optional< double > FilletRadius() const; + void setFilletRadius(boost::optional< double > v); + /// Edge radius according the above illustration (= r2). + boost::optional< double > EdgeRadius() const; + void setEdgeRadius(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcZShapeProfileDef (IfcEntityInstanceData* e); + IfcZShapeProfileDef (::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_Depth, double v5_FlangeWidth, double v6_WebThickness, double v7_FlangeThickness, boost::optional< double > v8_FilletRadius, boost::optional< double > v9_EdgeRadius); + typedef aggregate_of< IfcZShapeProfileDef > list; +}; +/// An advanced face is a specialization of a face surface that has to meet requirements on using particular topological and geometric representation items for the definition of the faces, edges and vertices. +/// +/// An IfcAdvancedFace is restricted to: +/// +/// have a face surface geometry of type IfcElementarySurface, IfcSweptSurface or IfcBSplineSurface +/// have at least on IfcFaceOuterBound as the bound of the face +/// have all faces to be bound by IfcEdgeLoop or IfcVertexLoop +/// have all edges to have an edge curve geometry have the edge curve geometry restricted to IfcLine, IfcConic, IfcPolyline, or IfcBSplineCurve +/// +/// NOTE  Corresponding ISO 10303 entity: advanced_face. Please refer to ISO/IS 10303-511:1999 for +/// the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC2x4 +class IFC_PARSE_API IfcAdvancedFace : public IfcFaceSurface { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAdvancedFace (IfcEntityInstanceData* e); + IfcAdvancedFace (aggregate_of< ::Ifc4x3_add2::IfcFaceBound >::ptr v1_Bounds, ::Ifc4x3_add2::IfcSurface* v2_FaceSurface, bool v3_SameSense); + typedef aggregate_of< IfcAdvancedFace > list; +}; +/// Definition from ISO/CD 10303-46:1992: An annotation fill area is a set of curves that may be filled with hatching, colour or tiling. The annotation fill are is described by boundaries which consist of non-intersecting, non-self-intersecting closed curves. These curves form the boundary of planar areas to be filled according to the style for the annotation fill area. +/// +/// NOTE: A curve that is not surrounded by any other curve is a border between an unfilled area on the outside and a filled area on the inside. Another curve may surround an unfilled area if it is surrounded by another curve whose inside is a filled area. +/// +/// Figure 300 (from ISO 10303-46) illustrates annotation fill area. +/// +/// Figure 300 — Annotation fill area +/// +/// NOTE  Corresponding ISO 10303 name: annotation_fill_area. Please refer to ISO/IS 10303-46:1994 for the final definition of the formal standard. +/// +/// The IfcAnnotationFillArea defines an area by a definite OuterBoundary, that might include InnerBoundaries. The areas defined by the InnerBoundaries are excluded from applying the fill area style. +/// +/// Informal Proposition: +/// +/// Any curve that describes an inner boundary shall not intersect with, nor include, another curve defining an inner boundary. +/// The curve defining the outer boundary shall not intersect with any curve defining an inner boundary, nor shall it be surrounded by a curve defining an inner boundary. +/// +/// HISTORY  New entity in IFC2x2. +/// +/// IFC2x3 CHANGE  The two attributes OuterBoundary and InnerBoundaries are added and replace the previous single boundary. +class IFC_PARSE_API IfcAnnotationFillArea : public IfcGeometricRepresentationItem { +public: + /// A closed curve that defines the outer boundary of the fill area. The areas defined by the outer boundary (minus potentially defined inner boundaries) is filled by the fill area style. + /// + /// IFC2x Edition 3 CHANGE  The two new attributes OuterBoundary and InnerBoundaries replace the old single attribute Boundaries. + ::Ifc4x3_add2::IfcCurve* OuterBoundary() const; + void setOuterBoundary(::Ifc4x3_add2::IfcCurve* v); + /// A set of inner curves that define the inner boundaries of the fill area. The areas defined by the inner boundaries are excluded from applying the fill area style. + /// + /// IFC2x Edition 3 CHANGE  The two new attributes OuterBoundary and InnerBoundaries replace the old single attribute Boundaries. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcCurve >::ptr > InnerBoundaries() const; + void setInnerBoundaries(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcCurve >::ptr > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAnnotationFillArea (IfcEntityInstanceData* e); + IfcAnnotationFillArea (::Ifc4x3_add2::IfcCurve* v1_OuterBoundary, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcCurve >::ptr > v2_InnerBoundaries); + typedef aggregate_of< IfcAnnotationFillArea > list; +}; +/// IfcAsymmetricIShapeProfileDef +/// defines a section profile that provides the defining parameters of a +/// singly symmetric I-shaped section. Its parameters and orientation relative to the +/// position coordinate system are according to the following illustration. +/// The centre of the position coordinate system is in the profile's centre +/// of the bounding box. +/// +/// The inherited attributes are redefined as: +/// +/// OverallWidth -- BottomFlangeWidth +/// FlangeThickness -- BottomFlangeThickness +/// FilletRadius -- BottomFlangeFilletRadius +/// +/// The overall width of the profile is implicitly given by the maximum of +/// the bottom flange width and the top flange width. +/// +/// IfcAsymmetricIShapeProfileDef can also be used to model rail profiles +/// if the application scenario does not require a full explicit shape model of the +/// rail profile. Alternatively, IfcArbitraryClosedProfileDef can be +/// used to provide the exact shape of rail profiles. Either way, a reference +/// to an external document or library should be provided to further define the +/// profile as described at IfcProfileDef. +/// +/// HISTORY  New entity in Release IFC2x Edition 2. +/// +/// IFC2x3 CHANGE  All profile origins are now in the center of the bounding box. The attribute CentreOfGravityInY has been made OPTIONAL. +/// +/// IFC2x4 CHANGE  Bottom flange is not necessarily wider than top flange. TopFlangeThickness changed from OPTIONAL to mandatory. Type of TopFlangeFilletRadius relaxed to allow for zero radius. Trailing attribute CentreOfGravityInY deleted, use respective property in IfcExtendedProfileProperties instead. +/// +/// Figure 310 illustrates parameters of the asymmetric I-shaped section definition. The parameterized profile defines its own position coordinate system. The underlying coordinate system is defined by the swept area solid that uses the profile definition. It is the xy plane of: +/// +/// IfcSweptAreaSolid.Position +/// +/// By using offsets of the position location, the parameterized profile can be positioned centric (using x,y offsets = 0.), or at any position +/// relative to the profile. The parameterized profile is defined by a set of parameter attributes. In the illustrated example, the 'CentreOfGravityInY' property in IfcExtendedProfileProperties, if provided, is negative. +/// +/// Figure 310 — Assymetric I-shape profile +class IFC_PARSE_API IfcAsymmetricIShapeProfileDef : public IfcParameterizedProfileDef { +public: + double BottomFlangeWidth() const; + void setBottomFlangeWidth(double v); + double OverallDepth() const; + void setOverallDepth(double v); + double WebThickness() const; + void setWebThickness(double v); + double BottomFlangeThickness() const; + void setBottomFlangeThickness(double v); + boost::optional< double > BottomFlangeFilletRadius() const; + void setBottomFlangeFilletRadius(boost::optional< double > v); + /// Extent of the top flange, defined parallel to the x axis of the position coordinate system. + double TopFlangeWidth() const; + void setTopFlangeWidth(double v); + /// Flange thickness of the top flange of the I-shape. + boost::optional< double > TopFlangeThickness() const; + void setTopFlangeThickness(boost::optional< double > v); + /// The fillet between the web and the top flange of the I-shape. + boost::optional< double > TopFlangeFilletRadius() const; + void setTopFlangeFilletRadius(boost::optional< double > v); + boost::optional< double > BottomFlangeEdgeRadius() const; + void setBottomFlangeEdgeRadius(boost::optional< double > v); + boost::optional< double > BottomFlangeSlope() const; + void setBottomFlangeSlope(boost::optional< double > v); + boost::optional< double > TopFlangeEdgeRadius() const; + void setTopFlangeEdgeRadius(boost::optional< double > v); + boost::optional< double > TopFlangeSlope() const; + void setTopFlangeSlope(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAsymmetricIShapeProfileDef (IfcEntityInstanceData* e); + IfcAsymmetricIShapeProfileDef (::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_BottomFlangeWidth, double v5_OverallDepth, double v6_WebThickness, double v7_BottomFlangeThickness, boost::optional< double > v8_BottomFlangeFilletRadius, double v9_TopFlangeWidth, boost::optional< double > v10_TopFlangeThickness, boost::optional< double > v11_TopFlangeFilletRadius, boost::optional< double > v12_BottomFlangeEdgeRadius, boost::optional< double > v13_BottomFlangeSlope, boost::optional< double > v14_TopFlangeEdgeRadius, boost::optional< double > v15_TopFlangeSlope); + typedef aggregate_of< IfcAsymmetricIShapeProfileDef > list; +}; +/// Definition from ISO/CD 10303-42:1992: The direction and location in three dimensional space of a single axis. An axis1_placement is defined in terms of a locating point (inherited from placement supertype) and an axis direction: this is either the direction of axis or defaults to (0.0,0.0,1.0). The actual direction for the axis placement is given by the derived attribute z (Z). +/// +/// NOTE  Corresponding ISO 10303 name: axis1_placement, please refer to ISO/IS 10303-42:1994, p. 28 for the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC Release 1.5 +/// +/// Figure 274 illustrates the definition of the IfcAxis1Placement within the three-dimensional coordinate system. +/// +/// Figure 274 — Axis1 placement +class IFC_PARSE_API IfcAxis1Placement : public IfcPlacement { +public: + /// The direction of the local Z axis. + ::Ifc4x3_add2::IfcDirection* Axis() const; + void setAxis(::Ifc4x3_add2::IfcDirection* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAxis1Placement (IfcEntityInstanceData* e); + IfcAxis1Placement (::Ifc4x3_add2::IfcPoint* v1_Location, ::Ifc4x3_add2::IfcDirection* v2_Axis); + typedef aggregate_of< IfcAxis1Placement > list; +}; +/// Definition from ISO/CD 10303-42:1992: The location and orientation in two dimensional space of two mutually perpendicular axes. An axis2_placement_2d is defined in terms of a point, (inherited from the placement supertype), and an axis. It can be used to locate and originate an object in two dimensional space and to define a placement coordinate system. The class includes a point which forms the origin of the placement coordinate system. A direction vector is required to complete the definition of the placement coordinate system. The reference direction defines the placement X axis direction, the placement Y axis is derived from this. +/// +/// If the RefDirection attribute is not given, the placement defaults to P[1] (x-axis) as [1.,0.] and P[2] (y-axis) as [0.,1.]. +/// +/// NOTE  Corresponding ISO 10303 name: axis2_placement_2d, please refer to ISO/IS 10303-42:1994, p. 28 for the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC Release 1.5. +/// +/// Figure 275 illustrates the definition of the IfcAxis2Placement2D within the two-dimensional coordinate system. +/// +/// Figure 275 — Axis2 placement 2D +class IFC_PARSE_API IfcAxis2Placement2D : public IfcPlacement, public IfcAxis2Placement { +public: + /// The direction used to determine the direction of the local X axis. If a value is omited that it defaults to [1.0, 0.0.]. + ::Ifc4x3_add2::IfcDirection* RefDirection() const; + void setRefDirection(::Ifc4x3_add2::IfcDirection* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAxis2Placement2D (IfcEntityInstanceData* e); + IfcAxis2Placement2D (::Ifc4x3_add2::IfcPoint* v1_Location, ::Ifc4x3_add2::IfcDirection* v2_RefDirection); + typedef aggregate_of< IfcAxis2Placement2D > list; +}; +/// Definition from ISO/CD 10303-42:1992: The location and orientation in three dimensional space of three mutually perpendicular axes. An axis2_placement_3D is defined in terms of a point (inherited from placement supertype) and two (ideally orthogonal) axes. It can be used to locate and originate an object in three dimensional space and to define a placement coordinate system. The entity includes a point which forms the origin of the placement coordinate system. Two direction vectors are required to complete the definition of the placement coordinate system. The axis is the placement Z axis direction and the ref_direction is an approximation to the placement X axis direction. +/// +/// If the attribute values for Axis and RefDirection +/// are not given, the placement defaults to P[1] (x-axis) as [1.,0.,0.], +/// P[2] (y-axis) as [0.,1.,0.] and P[3] (z-axis) as [0.,0.,1.]. +/// +/// NOTE  Corresponding ISO 10303 name: axis2_placement_3d, please refer to ISO/IS 10303-42:1994 for the final definition of the formal standard. The WR5 is added to ensure that either both attributes Axis and RefDirection are given, or both are omitted. +/// +/// HISTORY  New entity in IFC Release 1.5. +/// +/// Figure 276 illustrates the definition of the IfcAxis2Placement3D within the three-dimensional coordinate system. +/// +/// Figure 276 — Axis2 placement 3D +class IFC_PARSE_API IfcAxis2Placement3D : public IfcPlacement, public IfcAxis2Placement { +public: + /// The exact direction of the local Z Axis. + ::Ifc4x3_add2::IfcDirection* Axis() const; + void setAxis(::Ifc4x3_add2::IfcDirection* v); + /// The direction used to determine the direction of the local X Axis. If necessary an adjustment is made to maintain orthogonality to the Axis direction. If Axis and/or RefDirection is omitted, these directions are taken from the geometric coordinate system. + ::Ifc4x3_add2::IfcDirection* RefDirection() const; + void setRefDirection(::Ifc4x3_add2::IfcDirection* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAxis2Placement3D (IfcEntityInstanceData* e); + IfcAxis2Placement3D (::Ifc4x3_add2::IfcPoint* v1_Location, ::Ifc4x3_add2::IfcDirection* v2_Axis, ::Ifc4x3_add2::IfcDirection* v3_RefDirection); + typedef aggregate_of< IfcAxis2Placement3D > list; +}; + +class IFC_PARSE_API IfcAxis2PlacementLinear : public IfcPlacement { +public: + ::Ifc4x3_add2::IfcDirection* Axis() const; + void setAxis(::Ifc4x3_add2::IfcDirection* v); + ::Ifc4x3_add2::IfcDirection* RefDirection() const; + void setRefDirection(::Ifc4x3_add2::IfcDirection* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAxis2PlacementLinear (IfcEntityInstanceData* e); + IfcAxis2PlacementLinear (::Ifc4x3_add2::IfcPoint* v1_Location, ::Ifc4x3_add2::IfcDirection* v2_Axis, ::Ifc4x3_add2::IfcDirection* v3_RefDirection); + typedef aggregate_of< IfcAxis2PlacementLinear > list; +}; +/// Definition from ISO/CD 10303-42:1992: A Boolean result +/// is the result of a regularized operation on two solids to create +/// a new solid. Valid operations are regularized union, regularized +/// intersection, and regularized difference. For purpose of Boolean +/// operations, a solid is considered to be a regularized set of +/// points. The final Boolean result depends upon the operation and +/// the two operands. In the case of the difference operator the +/// order of the operands is also significant. The operator can be +/// either union, intersection or difference. The effect of these +/// operators is described below: +/// +/// Union on two solids is the new solid that is the +/// regularization of the set of all points that are in either the +/// first operand or the second operand or in both. +/// Intersection on two solids is the new solid that is the +/// regularization of the set of all points that are in both the +/// first operand and the second operand. +/// The result of the difference operation on two solids is the +/// regularization of the set of all points which are in the first +/// operand, but not in the second operand. +/// +/// NOTE For example if the first operand is a block and the second operand is a solid cylinder of suitable dimensions and location, the boolean result produced with the difference operator would be a block with a circular hole. +/// +/// NOTE Corresponding ISO 10303-42 entity: boolean_result. The derived attribute Dim has been added at this level and was therefore demoted from the geometric_representation_item. Please refer to ISO/IS 10303-42:1994, p.175 for the final definition of the formal standard. +/// +/// HISTORY: New class in IFC Release 1.5.1. +class IFC_PARSE_API IfcBooleanResult : public IfcGeometricRepresentationItem, public IfcBooleanOperand, public IfcCsgSelect { +public: + /// The Boolean operator used in the operation to create the result. + ::Ifc4x3_add2::IfcBooleanOperator::Value Operator() const; + void setOperator(::Ifc4x3_add2::IfcBooleanOperator::Value v); + /// The first operand to be operated upon by the Boolean operation. + ::Ifc4x3_add2::IfcBooleanOperand* FirstOperand() const; + void setFirstOperand(::Ifc4x3_add2::IfcBooleanOperand* v); + /// The second operand specified for the operation. + ::Ifc4x3_add2::IfcBooleanOperand* SecondOperand() const; + void setSecondOperand(::Ifc4x3_add2::IfcBooleanOperand* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBooleanResult (IfcEntityInstanceData* e); + IfcBooleanResult (::Ifc4x3_add2::IfcBooleanOperator::Value v1_Operator, ::Ifc4x3_add2::IfcBooleanOperand* v2_FirstOperand, ::Ifc4x3_add2::IfcBooleanOperand* v3_SecondOperand); + typedef aggregate_of< IfcBooleanResult > list; +}; +/// Definition from ISO/CD 10303-42:1992: A bounded surface is a surface of finite area with identifiable boundaries. +/// +/// NOTE Corresponding ISO 10303 name: bounded_surface. Please refer to ISO/IS 10303-42:1994, p.78 for the final definition of the formal standard. +/// +/// HISTORY New entity in IFC Release 2x +/// +/// IFC2x4 CHANGE Entity made abstract. +/// +/// Informal propositions: +/// +/// A bounded surface has finite non-zero surface area. +/// A bounded surface has boundary curves. +class IFC_PARSE_API IfcBoundedSurface : public IfcSurface { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBoundedSurface (IfcEntityInstanceData* e); + IfcBoundedSurface (); + typedef aggregate_of< IfcBoundedSurface > list; +}; +/// Definition from ISO/CD 10303-42:1992: A box domain +/// is an orthogonal box parallel to the axes of the geometric +/// coordinate system which may be used to limit the domain of +/// a half space solid. A box domain is specified by the +/// coordinates of the bottom left corner, and the lengths of +/// the sides measured in the directions of the coordinate +/// axes. +/// +/// Every semantic object having a +/// physical extent might have a minimum default representation +/// of a bounding box. The bounding box is therefore also used +/// as minimal geometric representation for any geometrically +/// represented object. Therefore the IfcBoundingBox is +/// subtyped from IfcGeometricRepresentationItem. +/// +/// NOTE Corresponding ISO 10303-42 entity: box_domain, please refer to ISO/IS 10303-42:1994, p. 186 for the final definition of the formal standard. In IFC the bounding box can also be used outside of the context of an IfcBoxedHalfSpace. +/// +/// HISTORY New entity in IFC Release 1.0. +/// +/// As shown in Figure 252, the IfcBoundingBox is defined with its own location which can be used to place the IfcBoundingBox relative to the geometric coordinate system. The IfcBoundingBox is defined by the lower left corner (Corner) and the upper right corner (XDim, YDim, ZDim measured within the parent co-ordinate system). +/// +/// Figure 252 — Bounding box +class IFC_PARSE_API IfcBoundingBox : public IfcGeometricRepresentationItem { +public: + /// Location of the bottom left corner (having the minimum values). + ::Ifc4x3_add2::IfcCartesianPoint* Corner() const; + void setCorner(::Ifc4x3_add2::IfcCartesianPoint* v); + /// Length attribute (measured along the edge parallel to the X Axis) + double XDim() const; + void setXDim(double v); + /// Width attribute (measured along the edge parallel to the Y Axis) + double YDim() const; + void setYDim(double v); + /// Height attribute (measured along the edge parallel to the Z Axis). + double ZDim() const; + void setZDim(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBoundingBox (IfcEntityInstanceData* e); + IfcBoundingBox (::Ifc4x3_add2::IfcCartesianPoint* v1_Corner, double v2_XDim, double v3_YDim, double v4_ZDim); + typedef aggregate_of< IfcBoundingBox > list; +}; +/// Definition from ISO/CD 10303-42:1992: This entity is a subtype of the half space solid which is trimmed by a surrounding rectangular box. The box has its edges parallel to the coordinate axes of the geometric coordinate system. +/// +/// NOTE  The purpose of the box is to facilitate CSG computations by producing a solid of finite size. +/// +/// The IfcBoxedHalfSpace is +/// used (as its supertype IfcHalfSpaceSolid) only within +/// Boolean operations. It divides the domain into exactly two +/// subsets, where the domain in question is that of the attribute +/// Enclosure. +/// The purpose of the attribute Enclosure is to provide a +/// search box for the other operand in the Boolean operation. It +/// shall be sufficiently large to fully enclose the resulting solid +/// after the Boolean operation with the half space. It however does +/// not alter the final result. The result of the Boolean operation +/// would be the same, as if executed by the supertype +/// IfcHalfSpaceSolid. See Figure 253 below. +/// +/// Figure 253 — Boxed half space operands +/// +/// NOTE Corresponding ISO 10303-42 entity: boxed_half_space, please refer to ISO/IS 10303-42:1994, p. 185 for the final definition of the formal standard. The IFC class IfcBoundingBox is used for the definition of the enclosure, providing the same definition as box_domain. +/// +/// HISTORY  New entity in IFC Release 1.5.1, improved documentation available in IFC Release 2x. +/// +/// IFC2x4 CHANGE  Usage correct, position coordinate system for Enclosure is the object coordinate system. +/// +/// The IfcBoundingBox (relating to ISO 10303-42:1994 box_domain) that provides the enclosure is given for the convenience of the receiving application to enable the use of size box comparison for efficiency (for example, to check first whether size boxes intersect, if not no calculations has to be done to check whether the solids of the entities intersect). +/// +/// The Enclosure therefore helps to prevent dealing with infinite-size related issues. The enclosure box is positioned within the object coordinate system, established by the ObjectPlacement of the element represented (for example, by IfcLocalPlacement). Figure 254 shows the Enclosure box being sufficiently large to fully enclose the Boolean result. +/// +/// Figure 254 — Boxed half space geometry +class IFC_PARSE_API IfcBoxedHalfSpace : public IfcHalfSpaceSolid { +public: + /// The box which bounds the resulting solid of the Boolean operation involving the half space solid for computational purposes only. + ::Ifc4x3_add2::IfcBoundingBox* Enclosure() const; + void setEnclosure(::Ifc4x3_add2::IfcBoundingBox* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBoxedHalfSpace (IfcEntityInstanceData* e); + IfcBoxedHalfSpace (::Ifc4x3_add2::IfcSurface* v1_BaseSurface, bool v2_AgreementFlag, ::Ifc4x3_add2::IfcBoundingBox* v3_Enclosure); + typedef aggregate_of< IfcBoxedHalfSpace > list; +}; +/// IfcCShapeProfileDef defines +/// a section profile that provides the defining parameters of a C-shaped +/// section to be used by the swept area solid. This section is typically +/// produced by cold forming steel. Its parameters and orientation relative +/// to the position coordinate system are according to the following +/// illustration. The centre of the position coordinate system is in the +/// profile's centre of the bounding box. +/// +/// HISTORY  New entity in IFC2x2. +/// +/// IFC2x3 CHANGE  All profile origins are now in the center of the bounding box. +/// +/// IFC2x4 CHANGE  Type of InternalFilletRadius relaxed to allow for zero radius. +/// Trailing attribute CentreOfGravityInX deleted, use respective property in IfcExtendedProfileProperties instead. +/// +/// Figure 315 illustrates parameters of the C-shape profile definition. The parameterized profile defines its own position coordinate system. The underlying coordinate system is defined by the swept area solid that uses the profile definition. It is the xy plane of: +/// +/// IfcSweptAreaSolid.Position +/// +/// By using offsets of the position location, the parameterized profile can be positioned centric (using x,y offsets = 0.), or at any position relative to the profile. The parameterized profile is defined by a set of parameter attributes. In the illustrated example, the 'CentreOfGravityInX' property in IfcExtendedProfileProperties, if provided, is negative. +/// +/// Figure 315 — C-shape profile +class IFC_PARSE_API IfcCShapeProfileDef : public IfcParameterizedProfileDef { +public: + /// Profile depth, see illustration above (= h). + double Depth() const; + void setDepth(double v); + /// Profile width, see illustration above (= b). + double Width() const; + void setWidth(double v); + /// Constant wall thickness of profile (= ts). + double WallThickness() const; + void setWallThickness(double v); + /// Lengths of girth, see illustration above (= c). + double Girth() const; + void setGirth(double v); + /// Internal fillet radius according the above illustration (= r1). + boost::optional< double > InternalFilletRadius() const; + void setInternalFilletRadius(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCShapeProfileDef (IfcEntityInstanceData* e); + IfcCShapeProfileDef (::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_Depth, double v5_Width, double v6_WallThickness, double v7_Girth, boost::optional< double > v8_InternalFilletRadius); + typedef aggregate_of< IfcCShapeProfileDef > list; +}; +/// Definition from ISO/CD 10303-42:1992: A point defined by its coordinates in a two or three dimensional rectangular Cartesian coordinate system, or in a two dimensional parameter space. The entity is defined in a two or three dimensional space. +/// +/// The derived attribute Dim has been added (see also note at IfcGeometricRepresentationItem). The WR1 was added to constrain the usage of IfcCartesianPoint in the context of IFC geometry. For the purpose of defining geometry in IFC only two and three dimensional Cartesian points are used. +/// +/// NOTE: Corresponding STEP entity: cartesian_point, please refer to ISO/IS 10303-42:1994, p. 23 for the final definition of the formal standard. +/// +/// HISTORY: New entity in IFC Release 1.0 +class IFC_PARSE_API IfcCartesianPoint : public IfcPoint, public IfcTrimmingSelect { +public: + /// The first, second, and third coordinate of the point location. If placed in a two or three dimensional rectangular Cartesian coordinate system, Coordinates[1] is the X coordinate, Coordinates[2] is the Y coordinate, and Coordinates[3] is the Z coordinate. + std::vector< double > /*[1:3]*/ Coordinates() const; + void setCoordinates(std::vector< double > /*[1:3]*/ v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCartesianPoint (IfcEntityInstanceData* e); + IfcCartesianPoint (std::vector< double > /*[1:3]*/ v1_Coordinates); + typedef aggregate_of< IfcCartesianPoint > list; +}; + +class IFC_PARSE_API IfcCartesianPointList : public IfcGeometricRepresentationItem { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCartesianPointList (IfcEntityInstanceData* e); + IfcCartesianPointList (); + typedef aggregate_of< IfcCartesianPointList > list; +}; + +class IFC_PARSE_API IfcCartesianPointList2D : public IfcCartesianPointList { +public: + std::vector< std::vector< double > > CoordList() const; + void setCoordList(std::vector< std::vector< double > > v); + boost::optional< std::vector< std::string > /*[1:?]*/ > TagList() const; + void setTagList(boost::optional< std::vector< std::string > /*[1:?]*/ > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCartesianPointList2D (IfcEntityInstanceData* e); + IfcCartesianPointList2D (std::vector< std::vector< double > > v1_CoordList, boost::optional< std::vector< std::string > /*[1:?]*/ > v2_TagList); + typedef aggregate_of< IfcCartesianPointList2D > list; +}; + +class IFC_PARSE_API IfcCartesianPointList3D : public IfcCartesianPointList { +public: + std::vector< std::vector< double > > CoordList() const; + void setCoordList(std::vector< std::vector< double > > v); + boost::optional< std::vector< std::string > /*[1:?]*/ > TagList() const; + void setTagList(boost::optional< std::vector< std::string > /*[1:?]*/ > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCartesianPointList3D (IfcEntityInstanceData* e); + IfcCartesianPointList3D (std::vector< std::vector< double > > v1_CoordList, boost::optional< std::vector< std::string > /*[1:?]*/ > v2_TagList); + typedef aggregate_of< IfcCartesianPointList3D > list; +}; +/// Definition from ISO/CD 10303-42:1992: A Cartesian transformation operator defines a geometric transformation composed of translation, rotation, mirroring and uniform scaling. The list of normalized vectors u defines the columns of an orthogonal matrix T. These vectors are computed, by the base axis function, from the direction attributes axis1, axis2 and, in Cartesian transformation operator 3d, axis3. If |T|= -1, the transformation includes mirroring. The local origin point A, the scale value S and the matrix T together define a transformation. +/// +/// The transformation for a point with position vector P is defined by +/// +/// P -> A + STP +/// The transformation for a direction d is defined by +/// +/// d -> Td +/// The transformation for a vector with orientation d and magnitude k is +/// defined by +/// +/// d -> Td, and +/// k -> Sk +/// For those entities whose attributes include an axis2 placement, the +/// transformation is applied, after the derivation, to the derived attributes p +/// defining the placement coordinate directions. For a transformed surface, the +/// direction of the surface normal at any point is obtained by transforming the +/// normal, at the corresponding point, to the original surface. For geometric +/// entities with attributes (such as the radius of a circle) which have the +/// dimensionality of length, the values will be multiplied by S. +/// For curves on surface the p curve.reference to curve will be unaffected +/// by any transformation. The Cartesian transformation operator shall only be +/// applied to geometry defined in a consistent system of units with the same units +/// on each axis. With all optional attributes omitted, the transformation defaults +/// to the identity transformation. The Cartesian transformation operator shall +/// only be instantiated as one of its subtypes. +/// +/// NOTE: Corresponding ISO 10303 entity: cartesian_transformation_operator, please refer to ISO/IS 10303-42:1994, p. 32 for the final definition of the formal standard. +/// +/// HISTORY: New entity in IFC Release 2x. +class IFC_PARSE_API IfcCartesianTransformationOperator : public IfcGeometricRepresentationItem { +public: + /// The direction used to determine U[1], the derived X axis direction. + ::Ifc4x3_add2::IfcDirection* Axis1() const; + void setAxis1(::Ifc4x3_add2::IfcDirection* v); + /// The direction used to determine U[2], the derived Y axis direction. + ::Ifc4x3_add2::IfcDirection* Axis2() const; + void setAxis2(::Ifc4x3_add2::IfcDirection* v); + /// The required translation, specified as a cartesian point. The actual translation included in the transformation is from the geometric origin to the local origin. + ::Ifc4x3_add2::IfcCartesianPoint* LocalOrigin() const; + void setLocalOrigin(::Ifc4x3_add2::IfcCartesianPoint* v); + /// The scaling value specified for the transformation. + boost::optional< double > Scale() const; + void setScale(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCartesianTransformationOperator (IfcEntityInstanceData* e); + IfcCartesianTransformationOperator (::Ifc4x3_add2::IfcDirection* v1_Axis1, ::Ifc4x3_add2::IfcDirection* v2_Axis2, ::Ifc4x3_add2::IfcCartesianPoint* v3_LocalOrigin, boost::optional< double > v4_Scale); + typedef aggregate_of< IfcCartesianTransformationOperator > list; +}; +/// Definition from ISO/CD 10303-42:1992: A Cartesian transformation operator 2d defines a geometric transformation in two-dimensional space composed of translation, rotation, mirroring and uniform scaling. The list of normalized vectors u defines the columns of an orthogonal matrix T. These vectors are computed from the direction attributes axis1 and axis2 by the base axis function. If |T|= -1, the transformation includes mirroring. +/// +/// NOTE: Corresponding ISO 10303 entity : cartesian_transformation_operator_2d, please refer to ISO/IS 10303-42:1994, p. 36 for the final definition of the formal standard. +/// +/// HISTORY: New entity in IFC Release 2x. +class IFC_PARSE_API IfcCartesianTransformationOperator2D : public IfcCartesianTransformationOperator { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCartesianTransformationOperator2D (IfcEntityInstanceData* e); + IfcCartesianTransformationOperator2D (::Ifc4x3_add2::IfcDirection* v1_Axis1, ::Ifc4x3_add2::IfcDirection* v2_Axis2, ::Ifc4x3_add2::IfcCartesianPoint* v3_LocalOrigin, boost::optional< double > v4_Scale); + typedef aggregate_of< IfcCartesianTransformationOperator2D > list; +}; +/// A Cartesian transformation operator 2d non uniform defines a geometric transformation in two-dimensional space composed of translation, rotation, mirroring and non uniform scaling. Non uniform scaling is given by two different scaling factors: +/// +/// SELF\IfcCartesianTransformationOperator.Scale: the x axis scale factor +/// Scale2: the y axis scale factor +/// +/// If the Scale factor (at supertype IfcCartesianTransformationOperator) is omitted, it defaults to 1.0. If the Scale2 factor is omitted, it defaults to the value of Scale (the x axis scale factor). +/// +/// NOTE: The scale factor (Scl) defined at the supertype IfcCartesianTransformationOperator is used to express the calculated Scale factor (normally x axis scale factor). +/// +/// HISTORY: New entity in IFC Release 2x. +class IFC_PARSE_API IfcCartesianTransformationOperator2DnonUniform : public IfcCartesianTransformationOperator2D { +public: + /// The scaling value specified for the transformation along the axis 2. This is normally the y scale factor. + boost::optional< double > Scale2() const; + void setScale2(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCartesianTransformationOperator2DnonUniform (IfcEntityInstanceData* e); + IfcCartesianTransformationOperator2DnonUniform (::Ifc4x3_add2::IfcDirection* v1_Axis1, ::Ifc4x3_add2::IfcDirection* v2_Axis2, ::Ifc4x3_add2::IfcCartesianPoint* v3_LocalOrigin, boost::optional< double > v4_Scale, boost::optional< double > v5_Scale2); + typedef aggregate_of< IfcCartesianTransformationOperator2DnonUniform > list; +}; +/// Definition from ISO/CD 10303-42:1992: A Cartesian transformation operator 3d defines a geometric transformation in three-dimensional space composed of translation, rotation, mirroring and uniform scaling. The list of normalized vectors u defines the columns of an orthogonal matrix T. These vectors are computed from the direction attributes axis1, axis2 and axis3 by the base axis function. If |T|= -1, the transformation includes mirroring. +/// +/// NOTE: Corresponding ISO 10303 entity: cartesian_transformation_operator_3d, please refer to ISO/IS 10303-42:1994, p. 33 for the final definition of the formal standard. +/// +/// HISTORY: New entity in IFC Release 2x. +class IFC_PARSE_API IfcCartesianTransformationOperator3D : public IfcCartesianTransformationOperator { +public: + /// The exact direction of U[3], the derived Z axis direction. + ::Ifc4x3_add2::IfcDirection* Axis3() const; + void setAxis3(::Ifc4x3_add2::IfcDirection* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCartesianTransformationOperator3D (IfcEntityInstanceData* e); + IfcCartesianTransformationOperator3D (::Ifc4x3_add2::IfcDirection* v1_Axis1, ::Ifc4x3_add2::IfcDirection* v2_Axis2, ::Ifc4x3_add2::IfcCartesianPoint* v3_LocalOrigin, boost::optional< double > v4_Scale, ::Ifc4x3_add2::IfcDirection* v5_Axis3); + typedef aggregate_of< IfcCartesianTransformationOperator3D > list; +}; +/// A Cartesian transformation operator 3d non uniform defines a geometric transformation in three-dimensional space composed of translation, rotation, mirroring and non uniform scaling. Non uniform scaling is given by three different scaling factors: +/// +/// SELF\IfcCartesianTransformationOperator.Scale: the x axis scale factor +/// Scale2: the y axis scale factor +/// Scale3: the z axis scale factor +/// +/// If the Scale factor (at supertype IfcCartesianTransformationOperator) is omitted, it defaults to 1.0. If the Scale2 or the Scale3 factor is omitted, it defaults to the value of Scale (the x axis scale factor). +/// +/// NOTE: The scale factor (Scl) defined at the supertype IfcCartesianTransformationOperator is used to express the calculated Scale factor (normally x axis scale factor). +/// +/// HISTORY: New entity in IFC Release 2x. +class IFC_PARSE_API IfcCartesianTransformationOperator3DnonUniform : public IfcCartesianTransformationOperator3D { +public: + /// The scaling value specified for the transformation along the axis 2. This is normally the y scale factor. + boost::optional< double > Scale2() const; + void setScale2(boost::optional< double > v); + /// The scaling value specified for the transformation along the axis 3. This is normally the z scale factor. + boost::optional< double > Scale3() const; + void setScale3(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCartesianTransformationOperator3DnonUniform (IfcEntityInstanceData* e); + IfcCartesianTransformationOperator3DnonUniform (::Ifc4x3_add2::IfcDirection* v1_Axis1, ::Ifc4x3_add2::IfcDirection* v2_Axis2, ::Ifc4x3_add2::IfcCartesianPoint* v3_LocalOrigin, boost::optional< double > v4_Scale, ::Ifc4x3_add2::IfcDirection* v5_Axis3, boost::optional< double > v6_Scale2, boost::optional< double > v7_Scale3); + typedef aggregate_of< IfcCartesianTransformationOperator3DnonUniform > list; +}; +/// IfcCircleProfileDef defines a circle as the profile definition used by the swept surface geometry or by the swept area solid. It is given by its Radius attribute and placed within the 2D position coordinate system, established by the Position attribute. +/// +/// HISTORY  New class in IFC 1.5. +/// +/// Figure 313 illustrates parameters for the circle profile definition. The parameterized profile defines its own position coordinate system. The underlying coordinate system is defined by the swept surface or swept area solid that uses the profile definition. It is the xy plane of either: +/// +/// IfcSweptSurface.Position +/// IfcSweptAreaSolid.Position +/// +/// Or in case of sectioned spines, it is the xy plane of each list member of IfcSectionedSpine.CrossSectionPositions. By using offsets of the position location, the parameterized profile can be positioned centric (using x,y offsets = 0.), or at any position relative to the profile. Explicit coordinate offsets are used to define cardinal points (e.g. upper-left bound). The Position attribute defines the 2D position coordinate system of the circle. The Radius attribute defines the radius of the circle. +/// +/// Figure 313 — Circle profile +class IFC_PARSE_API IfcCircleProfileDef : public IfcParameterizedProfileDef { +public: + /// The radius of the circle. + double Radius() const; + void setRadius(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCircleProfileDef (IfcEntityInstanceData* e); + IfcCircleProfileDef (::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_Radius); + typedef aggregate_of< IfcCircleProfileDef > list; +}; +/// Definition from ISO/CD 10303-42:1992: A closed shell is a shell +/// of the dimensionality 2 which typically serves as a bound for a region in R3. A +/// closed shell has no boundary, and has non-zero finite extent. If the shell has +/// a domain with coordinate space R3, it divides that space into two connected +/// regions, one finite and the other infinite. In this case, the topological +/// normal of the shell is defined as being directed from the finite to the +/// infinite region. +/// The shell is represented by a collection of faces. The domain of the +/// shell, if present, contains all those faces, together with their bounds. +/// Associated with each face in the shell is a logical value which indicates +/// whether the face normal agrees with (TRUE) or is opposed to (FALSE) the shell +/// normal. The logical value can be applied directly as a BOOLEAN attribute of an +/// oriented face, or be defaulted to TRUE if the shell boundary attribute member +/// is a face without the orientation attribute. +/// The combinatorial restrictions on closed shells and geometrical +/// restrictions on their domains are designed to ensure that any domain associated +/// with a closed shell is a closed, orientable manifold. The domain of a closed +/// shell, if present, is a connected, closed, oriented 2-manifold. It is always +/// topologically equivalent to an H-fold torus for some H +/// ³ 0. The number H is referred to as the +/// surface genus of the shell. If a shell of genus H has a domain within +/// coordinate space R3, then the finite region of space inside +/// it is topologically equivalent to a solid ball with H tunnels drilled +/// through it. +/// The Euler equation (7) applies with B=0, because in this case +/// there are no holes. As in the case of open shells, the surface genus H +/// may not be known a priori, but shall be an integer ³ 0. Thus a necessary, but not sufficient, condition +/// for a well-formed closed shell is the following: +/// +/// In the current IFC Release only poly loops +/// (IfcPolyLoop) are defined for bounds of face bound +/// (IfcFaceBound). This will allow for faceted B-rep only. +/// +/// NOTE: Corresponding ISO 10303 entity: closed_shell, please refer to ISO/IS 10303-42:1994, p.149 for the final definition of the formal standard. +/// +/// HISTORY  New class in IFC Release 1.0 +/// +/// Informal propositions: +/// +/// Every edge shall be referenced exactly twice by the loops of the face. +/// Each oriented edge shall be unique. +/// No edge shall be referenced by more than two faces. +/// Distinct faces of the shell do not intersect, but may share edges or vertices. +/// Distinct edges do not intersect but may share vertices. +/// Each face reference shall be unique. +/// The loops of the shell shall not be a mixture of poly loop and other loop types. Note: this is given, since only poly loop is defined as face bound definition. +/// The closed shell shall be an oriented arcwise connected 2-manifold. +/// The Euler equation shall be satisfied. Note: Please refer to ISO/IS +/// 10303-42:1994, p.149 for the equation. +class IFC_PARSE_API IfcClosedShell : public IfcConnectedFaceSet, public IfcShell, public IfcSolidOrShell { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcClosedShell (IfcEntityInstanceData* e); + IfcClosedShell (aggregate_of< ::Ifc4x3_add2::IfcFace >::ptr v1_CfsFaces); + typedef aggregate_of< IfcClosedShell > list; +}; +/// Definition from ISO/CD 10303-46:1992: A colour rgb as a subtype of colour specifications is defined by three colour component values for red, green, and blue in the RGB colour model. +/// +/// NOTE  In contrary to the usual value range of colour components being integer from 0...255, the definition from ISO10303-46 defines the colour components as real from 0.0 ... 1.0. Applications need to execute this conversion before populating the colour RGB values. +/// +/// NOTE  Corresponding STEP name: colour_rgb. The name attribute has been omitted, the data type for the reg, green and blue parts is IfcNormalizedRatioMeasure, that already includes the range restrictions for the values. Please +/// refer to ISO/IS 10303-46:1994, p. 138 for the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC2x2. +class IFC_PARSE_API IfcColourRgb : public IfcColourSpecification, public IfcColourOrFactor { +public: + /// The intensity of the red colour component. + /// + /// NOTE  The colour component value is given within the range of 0..1, and not within the range of 0..255 as otherwise usual. + double Red() const; + void setRed(double v); + /// The intensity of the green colour component. + /// + /// NOTE  The colour component value is given within the range of 0..1, and not within the range of 0..255 as otherwise usual. + double Green() const; + void setGreen(double v); + /// The intensity of the blue colour component. + /// + /// NOTE  The colour component value is given within the range of 0..1, and not within the range of 0..255 as otherwise usual. + double Blue() const; + void setBlue(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcColourRgb (IfcEntityInstanceData* e); + IfcColourRgb (boost::optional< std::string > v1_Name, double v2_Red, double v3_Green, double v4_Blue); + typedef aggregate_of< IfcColourRgb > list; +}; +/// IfcComplexProperty is used to define complex properties to be handled completely within a property set. The included set of properties may be a mixed or consistent collection of IfcProperty subtypes. This enables the definition of a set of properties to be included as a single 'property' entry in an IfcPropertySet. The definition of such an IfcComplexProperty can be reused in many different IfcPropertySet's. +/// +/// NOTE  Since an IfcComplexProperty may contain other complex properties, sets of properties can be nested. This nesting may be restricted by view definitions and implementer agreements. +/// +/// HISTORY New Entity in IFC Release 2.0, capabilities enhanced in IFC Release 2x. +class IFC_PARSE_API IfcComplexProperty : public IfcProperty { +public: + /// Usage description of the IfcComplexProperty within the property set which references the IfcComplexProperty. + /// NOTE: Consider a complex property for glazing properties. The Name attribute of the IfcComplexProperty could be Pset_GlazingProperties, and the UsageName attribute could be OuterGlazingPane. + std::string UsageName() const; + void setUsageName(std::string v); + /// Set of properties that can be used within this complex property (may include other complex properties). + aggregate_of< ::Ifc4x3_add2::IfcProperty >::ptr HasProperties() const; + void setHasProperties(aggregate_of< ::Ifc4x3_add2::IfcProperty >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcComplexProperty (IfcEntityInstanceData* e); + IfcComplexProperty (std::string v1_Name, boost::optional< std::string > v2_Specification, std::string v3_UsageName, aggregate_of< ::Ifc4x3_add2::IfcProperty >::ptr v4_HasProperties); + typedef aggregate_of< IfcComplexProperty > list; +}; +/// Definition from ISO/CD 10303-42:1992: A composite curve segment is a bounded curve together with transition information which is used to construct a composite curve (IfcCompositeCurve). +/// +/// The derived attribute Dim has been added (see also note at IfcGeometricRepresentationItem). The IfcCompositeCurveSegment is a subtype of IfcGeometricRepresentationItem (whereas in ISO 10303-42 composite_curve_segment is not a subtype of geometric_representation_item, the proposed 2nd edition of ISO 10303-42 however proposes the subtype relationship). +/// +/// NOTE Corresponding ISO 10303 entity: composite_curve_segment. Please refer to ISO/IS 10303-42:1994, p.57 for the final definition of the formal standard. +/// +/// HISTORY New class in IFC Release 1.0 +class IFC_PARSE_API IfcCompositeCurveSegment : public IfcSegment { +public: + /// An indicator of whether or not the sense of the segment agrees with, or opposes, that of the parent curve. If SameSense is false, the point with highest parameter value is taken as the first point of the segment. + /// + /// NOTE  If the datatype of ParentCurve is IfcTrimmedCurve, the value of SameSense overrides the value of IfcTrimmedCurve.SenseAgreement + bool SameSense() const; + void setSameSense(bool v); + /// The bounded curve which defines the geometry of the segment. + ::Ifc4x3_add2::IfcCurve* ParentCurve() const; + void setParentCurve(::Ifc4x3_add2::IfcCurve* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCompositeCurveSegment (IfcEntityInstanceData* e); + IfcCompositeCurveSegment (::Ifc4x3_add2::IfcTransitionCode::Value v1_Transition, bool v2_SameSense, ::Ifc4x3_add2::IfcCurve* v3_ParentCurve); + typedef aggregate_of< IfcCompositeCurveSegment > list; +}; +/// IfcConstructionResourceType is an abstract generalization of the different resource types used in construction projects, mainly labor, material, equipment and product resource types, plus subcontracted resource types and aggregations such as a crew resource type. +/// +/// A resource type represents a model of "use of something" and does not necessarily correspond to a specific type of object such as a person or vehicle, but represents possible usages of such objects such as general labor or an equipment fleet. A resource type can either represent usage in general (consumption attributes defined but no task type assignment) or a task-specific resource type (production attributes defined and having an IfcTask assignment). +/// +/// A construction resource type captures common productivities and cost rates for applying resources to particular task types. +/// +/// HISTORY: New entity in IFC2x4. +/// +/// Composition use definition +/// Resource types may be decomposed into nested resource types indicating productivities when applying the resource to specific task types using the IfcRelNests relationship where IfcRelNests.RelatingObject refers to the general resource type and IfcRelNests.RelatedObjects refers to one or more task-specific productivities. For example, an IfcLaborResourceType may be defined for "Carpenter" which may have a nested IfcLaborResourceType for "Carpenter - Wall Framing" and another nested IfcLaborResourceType for "Carpenter - Drywall", each of which may have productivities based according to specific task types (IfcTaskType). +/// +/// Assignment use definition +/// Resource types may be assigned to process types (IfcTypeProcess subtypes) using the IfcRelAssignsToProcess relationship as shown in Figure 193. Such relationship indicates that the resource type applies to the process type for the use indicated (e.g. IfcTaskType.PredefinedType). Such relationship enables a scenario of placing an IfcProduct of a particular IfcTypeProduct, querying for a set of IfcTypeProcess process types for constructing such product (e.g. IfcTaskTypeEnum.CONSTRUCTION), querying each IfcTypeProcess for a set of IfcTypeResource resource types for carrying out the process, and finally choosing an IfcTypeProcess and IfcTypeResource combination resulting in the shortest time for instantiated IfcTask occurrence(s) and/or lowest-cost for instantiated IfcConstructionResource occurrence(s). +/// +/// Figure 193 — Construction resource type assignment +class IFC_PARSE_API IfcConstructionResourceType : public IfcTypeResource { +public: + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > BaseCosts() const; + void setBaseCosts(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v); + ::Ifc4x3_add2::IfcPhysicalQuantity* BaseQuantity() const; + void setBaseQuantity(::Ifc4x3_add2::IfcPhysicalQuantity* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcConstructionResourceType (IfcEntityInstanceData* e); + IfcConstructionResourceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ResourceType, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v10_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v11_BaseQuantity); + typedef aggregate_of< IfcConstructionResourceType > list; +}; +/// IfcContext is the generalization of a project context in which objects, type objects, property sets, and properties are defined. The IfcProject as subtype of IfcContext provides the context for all information on a construction project, it may include one or several IfcProjectLibrary as subtype of IfcContext to register the included libraries for the project. +/// +/// Context definitions can be named, using the inherited Name attribute, which should be a user recognizable key or number for the context. The LongName can add a full name. Further explanations to the context can be given using the inherited Description attribute. +/// +/// HISTORY  New abstract entity in IFC2x4. +/// +/// Relationship use definition +/// Contexts are declared by the relationship object that refers to the corresponding object: +/// +/// Project library to project: IfcProjectLibrary is assigned to IfcProject (both subtypes of using +/// IfcContext) by using IfcRelDeclares +/// +/// More specific relationships are introduced at the level of subtypes. +class IFC_PARSE_API IfcContext : public IfcObjectDefinition { +public: + /// The type denotes a particular type that indicates the object further. The use has to be established at the level of instantiable subtypes. + boost::optional< std::string > ObjectType() const; + void setObjectType(boost::optional< std::string > v); + /// Long name for the context as used for reference purposes. + boost::optional< std::string > LongName() const; + void setLongName(boost::optional< std::string > v); + /// Current project phase, or life-cycle phase of this project. Applicable values have to be agreed upon by view definitions or implementer agreements. + boost::optional< std::string > Phase() const; + void setPhase(boost::optional< std::string > v); + /// Context of the representations used within the context. When the context is a project and it includes shape representations for its components, one or several geometric representation contexts need to be included that define e.g. the world coordinate system, the coordinate space dimensions, and/or the precision factor. + /// + /// IFC2x4 CHANGE  The attribute has been changed to be optional. Change made with upward compatibility for file based exchange. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationContext >::ptr > RepresentationContexts() const; + void setRepresentationContexts(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationContext >::ptr > v); + /// Units globally assigned to measure types used within the context. + /// + /// IFC2x4 CHANGE  The attribute has been changed to be optional. Change made with upward compatibility for file based exchange. + ::Ifc4x3_add2::IfcUnitAssignment* UnitsInContext() const; + void setUnitsInContext(::Ifc4x3_add2::IfcUnitAssignment* v); + aggregate_of< IfcRelDefinesByProperties >::ptr IsDefinedBy() const; // INVERSE IfcRelDefinesByProperties::RelatedObjects + aggregate_of< IfcRelDeclares >::ptr Declares() const; // INVERSE IfcRelDeclares::RelatingContext + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcContext (IfcEntityInstanceData* e); + IfcContext (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_LongName, boost::optional< std::string > v7_Phase, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationContext >::ptr > v8_RepresentationContexts, ::Ifc4x3_add2::IfcUnitAssignment* v9_UnitsInContext); + typedef aggregate_of< IfcContext > list; +}; +/// The resource type IfcCrewResourceType defines commonly shared information for occurrences of crew resources. The set of shared information may include: +/// +/// common productivities +/// common cost rates +/// common properties within shared property sets +/// +/// It is used to define a crew resource specification the specific resource information that is common to all occurrences of that resource). Resource types may be exchanged without being already assigned to occurrences. +/// Occurrences of the IfcCrewResourceType are represented by instances of IfcCrewResource. +/// +/// HISTORY New entity in IFC2x4. +class IFC_PARSE_API IfcCrewResourceType : public IfcConstructionResourceType { +public: + /// Defines types of crew resources. + ::Ifc4x3_add2::IfcCrewResourceTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcCrewResourceTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCrewResourceType (IfcEntityInstanceData* e); + IfcCrewResourceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ResourceType, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v10_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v11_BaseQuantity, ::Ifc4x3_add2::IfcCrewResourceTypeEnum::Value v12_PredefinedType); + typedef aggregate_of< IfcCrewResourceType > list; +}; +/// IfcCsgPrimitive3D is an abstract supertype of all three dimensional primitives used as either tree root item, or as Boolean results within a CSG solid model. All 3D CSG primitives are defined within a three-dimensional placement coordinate system. +/// +/// NOTE No directly corresponding ISO 10303-42 entity, the select type primitive_3d covers the same individual 3D CSG primitives, the position attribute has been added to apply equally to all subtypes. Please refer to ISO/IS 10303-42:1994, p. 234 for the final definition of the formal standard. +/// +/// HISTORY New entity in IFC2x3. +class IFC_PARSE_API IfcCsgPrimitive3D : public IfcGeometricRepresentationItem, public IfcBooleanOperand, public IfcCsgSelect { +public: + /// The placement coordinate system to which the parameters of each individual CSG primitive apply. + ::Ifc4x3_add2::IfcAxis2Placement3D* Position() const; + void setPosition(::Ifc4x3_add2::IfcAxis2Placement3D* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCsgPrimitive3D (IfcEntityInstanceData* e); + IfcCsgPrimitive3D (::Ifc4x3_add2::IfcAxis2Placement3D* v1_Position); + typedef aggregate_of< IfcCsgPrimitive3D > list; +}; +/// Definition from ISO/CD 10303-42:1992: A solid +/// represented as a CSG model is defined by a collection of +/// so-called primitive solids, combined using regularized +/// Boolean operations. The allowed operations are +/// intersection, union, and difference. As a special case a +/// CSG solid can also consists of a single CSG primitive. +/// +/// A CSG solid requires two kinds of information for its +/// complete definition: geometric and structural. +/// +/// The geometric information is conveyed by solid models. +/// These typically primitive volumes such as cylinders, wedges +/// and extrusions, but can include general B-Rep models. Solid +/// models can also be half space solids. +/// +/// The structural information is in a tree (strictly an +/// acyclic directed graph) of Boolean result and CSG solids, +/// which represent a ‘recipe’ for building the +/// solid. The terminal nodes are the geometric primitives and +/// other solids. Every CSG solid has precisely one Boolean +/// result associated with it which is the root of the tree +/// that defines the solid. (There may be further Boolean +/// results within the tree as operands). The significance of a +/// CSG solid entity is that the solid defined by the +/// associated tree is thus identified as a significant object +/// itself, and in this way it is distinguished from other +/// Boolean result entities representing intermediate results +/// during the construction process. +/// +/// Definition from IAI: The following primitive volumes +/// can be parts of the CSG tree: solid models, i.e. faceted +/// B-Rep (IfcFacetedBrep, IfcFacetedBrepWithVoids), +/// swept area solid (IfcExtrudedAreaSolid, +/// IfcRevolvedAreaSolid, IfcSurfaceCurveSweptAreaSolid), +/// swept disk solids (IfcSweptDiskSolid), half space +/// solids (IfcHalfSpaceSolid and subtypes), and CSG +/// primitives (subtypes of IfcCsgPrimitive3D). +/// +/// NOTE Corresponding ISO 10303-42 entity: csg_solid, please refer to ISO/IS 10303-42:1994, p.174 for the final definition of the formal standard. +/// +/// HISTORY New class in IFC Release 1.5.1 +class IFC_PARSE_API IfcCsgSolid : public IfcSolidModel { +public: + /// Boolean expression of primitives and regularized operators describing the solid. The root of the tree of Boolean expressions is given explicitly as an IfcBooleanResult entitiy or as a primitive (subtypes of IfcCsgPrimitive3D). + ::Ifc4x3_add2::IfcCsgSelect* TreeRootExpression() const; + void setTreeRootExpression(::Ifc4x3_add2::IfcCsgSelect* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCsgSolid (IfcEntityInstanceData* e); + IfcCsgSolid (::Ifc4x3_add2::IfcCsgSelect* v1_TreeRootExpression); + typedef aggregate_of< IfcCsgSolid > list; +}; +/// Definition from ISO/CD 10303-42:1992: A curve can be envisioned as the path of a point moving in its coordinate space. +/// +/// NOTE: Corresponding ISO 10303 entity: curve, only the following subtypes have been incorporated into IFC: line as IfcLine, conic as IfcConic, bounded_curve as IfcBoundedCurve. Please refer to ISO/IS 10303-42:1994, p.37 for the final definition of the formal standard. The derived attribute Dim has been added (see also note at IfcGeometricRepresentationItem). +/// +/// HISTORY: New entity in IFC Release 1.0 +/// +/// Informal proposition: +/// +/// A curve shall be arcwise connected +/// A curve shall have an arc length greater than zero. +class IFC_PARSE_API IfcCurve : public IfcGeometricRepresentationItem, public IfcGeometricSetSelect { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCurve (IfcEntityInstanceData* e); + IfcCurve (); + typedef aggregate_of< IfcCurve > list; +}; +/// Definition from ISO/CD 10303-42:1992: The curve bounded surface is a parametric surface with curved boundaries defined by one or more boundary curves. The bounded surface is defined to be the portion of the basis surface in the direction of N x T from any point on the boundary, where N is the surface normal and T the boundary curve tangent vector at this point. The region so defined shall be arcwise connected. +/// +/// The IfcCurveBoundedPlane is a specialized bounded surface class that deals only with bounding basis plane surfaces. The definition varies from STEP as outer and inner boundaries are separated attributes and refer to IfcCurve. The only basis surface that is allowed is of type IfcPlane, and the implicit_outer attribute has not been incorporated, since only unbounded surfaces are used as basis surface. +/// +/// The BasisSurface is an IfcPlane that establishes the position coordinate system by SELF\IfcElementarySurface.Position. The OuterBoundary and the InnerBoundaries (if provided) shall lie on the surface of IfcPlane. Therefore the IfcCurve's establishing the outer and inner boundaries shall be: +/// +/// either a 2D curve within the XY plane of the position coordinate sytem of IfcPlane or a 3D curve with all coordinates having a z value = 0. +/// +/// NOTE Corresponding ISO 10303 entity curve_bounded_surface has been changed to meet the specific requirements of an easy representation of curve bounded planes. +/// +/// HISTORY  New entity in IFC Release 1.5 +/// +/// IFC2x PLATFORM CHANGE: The data type of the attribute OuterBoundary and InnerBoundaries has been changed from Ifc2DCompositeCurve to its supertype IfcCurve with upward compatibility for file based exchange. +class IFC_PARSE_API IfcCurveBoundedPlane : public IfcBoundedSurface { +public: + /// The surface to be bound. + ::Ifc4x3_add2::IfcPlane* BasisSurface() const; + void setBasisSurface(::Ifc4x3_add2::IfcPlane* v); + /// The outer boundary of the surface. + ::Ifc4x3_add2::IfcCurve* OuterBoundary() const; + void setOuterBoundary(::Ifc4x3_add2::IfcCurve* v); + /// An optional set of inner boundaries. They shall not intersect each other or the outer boundary. + aggregate_of< ::Ifc4x3_add2::IfcCurve >::ptr InnerBoundaries() const; + void setInnerBoundaries(aggregate_of< ::Ifc4x3_add2::IfcCurve >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCurveBoundedPlane (IfcEntityInstanceData* e); + IfcCurveBoundedPlane (::Ifc4x3_add2::IfcPlane* v1_BasisSurface, ::Ifc4x3_add2::IfcCurve* v2_OuterBoundary, aggregate_of< ::Ifc4x3_add2::IfcCurve >::ptr v3_InnerBoundaries); + typedef aggregate_of< IfcCurveBoundedPlane > list; +}; +/// Definition from ISO/CD 10303-42:1992 The curve bounded surface is a parametric surface with curved boundaries defined by one or more boundary curves. One of the boundary curves may be the outer boundary; any number of inner boundaries is permissible. The region of the curve bounded surface in the basis surface is defined to be the portion of the basis surface in the direction of N x T from any point on the boundary, where N is the surface normal and T the boundary curve tangent vector at this point. The region so defined shall be arcwise connected. +/// +/// The IfcCurveBoundedSurface is a parametric surface with boundaries defined by p-curves, that is, a curve which lies on the basis of a surface and is defined in the parameter space of that surface. The p-curve is a special type of a composite curve segment and shall only be used to bound a surface. +/// +/// The outer boundary shall be either defined by: +/// +/// an IfcOuterBoundaryCurve, a closed composite curve on surface for the definition of an outer boundary, then the attribute ImplicitOuter has to be set to FALSE, or +/// by the implicit boundary of the bounded surface, e.g. the u1, u2, v1, v2 of IfcRectangularTrimmedSurface< then the attribute ImplicitOuter has to be set to TRUE. +/// Note that some surfaces, like +/// IfcCylindricalSurface does not have identifiable implicit +/// boundaries. +/// +/// NOTE Corresponding STEP entity: curve_bounded_surface. Please refer to ISO/IS 10303-42:1994, p.87 for the final definition of the formal standard. +/// +/// HISTORY New entity in IFC2x4. +/// +/// Informal Propositions +/// +/// Each curve in the set of Boundaries shall be closed. +/// No two curves in the set of Boundaries shall intersect. +/// At most one of the boundary curves may enclose any other boundary curve. If an IfcOuterBoundaryCurve is designated, only that curve may enclose any other boundary curve. +class IFC_PARSE_API IfcCurveBoundedSurface : public IfcBoundedSurface { +public: + /// The surface to be bounded. + ::Ifc4x3_add2::IfcSurface* BasisSurface() const; + void setBasisSurface(::Ifc4x3_add2::IfcSurface* v); + /// The outer boundary of the surface. + aggregate_of< ::Ifc4x3_add2::IfcBoundaryCurve >::ptr Boundaries() const; + void setBoundaries(aggregate_of< ::Ifc4x3_add2::IfcBoundaryCurve >::ptr v); + bool ImplicitOuter() const; + void setImplicitOuter(bool v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCurveBoundedSurface (IfcEntityInstanceData* e); + IfcCurveBoundedSurface (::Ifc4x3_add2::IfcSurface* v1_BasisSurface, aggregate_of< ::Ifc4x3_add2::IfcBoundaryCurve >::ptr v2_Boundaries, bool v3_ImplicitOuter); + typedef aggregate_of< IfcCurveBoundedSurface > list; +}; + +class IFC_PARSE_API IfcCurveSegment : public IfcSegment { +public: + ::Ifc4x3_add2::IfcPlacement* Placement() const; + void setPlacement(::Ifc4x3_add2::IfcPlacement* v); + ::Ifc4x3_add2::IfcCurveMeasureSelect* SegmentStart() const; + void setSegmentStart(::Ifc4x3_add2::IfcCurveMeasureSelect* v); + ::Ifc4x3_add2::IfcCurveMeasureSelect* SegmentLength() const; + void setSegmentLength(::Ifc4x3_add2::IfcCurveMeasureSelect* v); + ::Ifc4x3_add2::IfcCurve* ParentCurve() const; + void setParentCurve(::Ifc4x3_add2::IfcCurve* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCurveSegment (IfcEntityInstanceData* e); + IfcCurveSegment (::Ifc4x3_add2::IfcTransitionCode::Value v1_Transition, ::Ifc4x3_add2::IfcPlacement* v2_Placement, ::Ifc4x3_add2::IfcCurveMeasureSelect* v3_SegmentStart, ::Ifc4x3_add2::IfcCurveMeasureSelect* v4_SegmentLength, ::Ifc4x3_add2::IfcCurve* v5_ParentCurve); + typedef aggregate_of< IfcCurveSegment > list; +}; +/// Definition from ISO/CD 10303-42:1992: This entity defines a general direction vector in two or three dimensional space. The actual magnitudes of the components have no effect upon the direction being defined, only the ratios X:Y:Z or X:Y are significant. +/// +/// NOTE: The components of this entity are not normalized. If a unit vector is required it should be normalized before use. +/// +/// NOTE: Corresponding ISO 10303 entity: direction. Please refer to ISO/IS 10303-42:1994, p.26 for the final definition of the formal standard. The derived attribute Dim has been added (see also note at IfcGeometricRepresentationItem). +/// +/// HISTORY: New entity in IFC Release 1.0 +class IFC_PARSE_API IfcDirection : public IfcGeometricRepresentationItem, public IfcGridPlacementDirectionSelect, public IfcVectorOrDirection { +public: + /// The components in the direction of X axis (DirectionRatios[1]), of Y axis (DirectionRatios[2]), and of Z axis (DirectionRatios[3]) + std::vector< double > /*[2:3]*/ DirectionRatios() const; + void setDirectionRatios(std::vector< double > /*[2:3]*/ v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDirection (IfcEntityInstanceData* e); + IfcDirection (std::vector< double > /*[2:3]*/ v1_DirectionRatios); + typedef aggregate_of< IfcDirection > list; +}; + +class IFC_PARSE_API IfcDirectrixCurveSweptAreaSolid : public IfcSweptAreaSolid { +public: + ::Ifc4x3_add2::IfcCurve* Directrix() const; + void setDirectrix(::Ifc4x3_add2::IfcCurve* v); + ::Ifc4x3_add2::IfcCurveMeasureSelect* StartParam() const; + void setStartParam(::Ifc4x3_add2::IfcCurveMeasureSelect* v); + ::Ifc4x3_add2::IfcCurveMeasureSelect* EndParam() const; + void setEndParam(::Ifc4x3_add2::IfcCurveMeasureSelect* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDirectrixCurveSweptAreaSolid (IfcEntityInstanceData* e); + IfcDirectrixCurveSweptAreaSolid (::Ifc4x3_add2::IfcProfileDef* v1_SweptArea, ::Ifc4x3_add2::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_add2::IfcCurve* v3_Directrix, ::Ifc4x3_add2::IfcCurveMeasureSelect* v4_StartParam, ::Ifc4x3_add2::IfcCurveMeasureSelect* v5_EndParam); + typedef aggregate_of< IfcDirectrixCurveSweptAreaSolid > list; +}; +/// Definition from ISO/CD 10303-42:1992: An edge_loop is a loop with nonzero extent. It is a path in which the start and end vertices are the same. Its domain, if present, is a closed curve. An edge_loop may overlap itself. +/// +/// Informal propositions: +/// +/// The genus of the IfcEdgeLoop shall be 1 or greater. +/// The Euler formula shall be satisfied:(number of vertices) + genus - (number of edges) = 1; +/// No edge may be referenced more than once by the same IfcEdgeLoop with the same sense. For this purpose, an edge which is not an oriented edge is considered to be referenced with the sense TRUE. +/// +/// NOTE  Corresponding ISO 10303 entity: edge_loop. Please refer to ISO/IS 10303-42:1994, p. 122 for the final definition of the formal standard. +/// +/// HISTORY  New Entity in IFC2x2. +class IFC_PARSE_API IfcEdgeLoop : public IfcLoop { +public: + /// A list of oriented edge entities which are concatenated together to form this path. + aggregate_of< ::Ifc4x3_add2::IfcOrientedEdge >::ptr EdgeList() const; + void setEdgeList(aggregate_of< ::Ifc4x3_add2::IfcOrientedEdge >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcEdgeLoop (IfcEntityInstanceData* e); + IfcEdgeLoop (aggregate_of< ::Ifc4x3_add2::IfcOrientedEdge >::ptr v1_EdgeList); + typedef aggregate_of< IfcEdgeLoop > list; +}; +/// Definition from IAI: An IfcElementQuantity +/// defines a set of derived measures of an element's physical +/// property. Elements could be spatial structure elements (like +/// buildings, storeys, or spaces) or building elements (like walls, +/// slabs, finishes). The IfcElementQuantity gets assigned to +/// the element by using the IfcRelDefinesByProperties +/// relationship. +/// The optional MethodOfMeasurement attribute defines the +/// code, e.g. from a standard method of measurement, which had been +/// used to calculate the element quantity. +/// +/// NOTE The recognizable values for the name and the +/// method of measurement attributes have to be agreed upon in +/// further agreement documents, such as implementers agreements. +/// Some of these agreements might be limited to a certain region, to +/// which the method of measurement applies. +/// +/// The name attribute, given at the individual Quantities +/// provides a recognizable semantic meaning of the element quantity. +/// Both information is needed to establish a precise meaning for the +/// measure value. An optional description may be assigned to each of +/// the Quantities. All quantities assigned by a single +/// instance of IfcElementQuantity are deemed to have been +/// generated according to the same method of measurement. However +/// several instances of IfcElementQuantity are assignable to +/// an element, thus allowing for an element having quantities +/// generated according to several methods of measurement. +/// +/// EXAMPLE1 To exchange the net floor area of spaces in +/// the German region (as IfcSpace), the name might be +/// 'Netto-Grundfläche' (net floor area), and the method of +/// measurement might be accordingly 'DIN277-2' (German industry norm +/// no. 277 edition 2) +/// +/// EXAMPLE2 The same instance of IfcSpace may have +/// a different area measure assigned in the German region according +/// to a housing regulation, the name would be 'Wohnfläche' and +/// the method of measurement would be '2.BV'. It would be attached +/// to the IfcSpace by a separate +/// IfcRelDefinesByProperties relationship. +/// +/// The IfcElementQuantity can have the following subtypes +/// of IfcPhysicalQuantity within its SET of +/// Quantities, which count for the basis measure types +/// used: +/// +/// count measure +/// weight measure +/// length measure +/// area measure +/// volume measure +/// time measure +/// +/// HISTORY New entity in IFC Release +/// 2x. NOTE: It replaces the calcXxx attributes used in previous IFC +/// Releases. +/// IFC2x4 CHANGE Subtyped from new +/// intermediate IfcPreDefinedPropertySet +/// supertype. +/// +/// Quantity Use Defintion +/// Base quantities are quantity definitions that are independent +/// of a particular method of measurement and therefore +/// internationally applicable. Base quantities are defined as gross +/// and net values and provided by measurement of the correct +/// geometric shape representation of the element. The IFC +/// specification includes a set of base quantity definition. See +/// each subtype of IfcElement for applicable base +/// quantities. +/// The following general agreements apply for each base quantity +/// set +/// +/// IfcElementQuantity.Name = 'BaseQuantities' +/// IfcElementQuantity.MethodOfMeasurement = NIL +/// IfcElementQuantity.Quantities = SET of subtypes of +/// IfcPhysicalSimpleQuantity with values for the Name +/// attribute as published as part of the IFC specifciation. +class IFC_PARSE_API IfcElementQuantity : public IfcQuantitySet { +public: + /// Name of the method of measurement used to calculate the element quantity. The method of measurement attribute has to be made recognizable by further agreements. + /// + /// IFC2x2 Addendum 1 change: The attribute has been changed to be optional + boost::optional< std::string > MethodOfMeasurement() const; + void setMethodOfMeasurement(boost::optional< std::string > v); + /// The individual quantities for the element, can be a set of length, area, volume, weight or count based quantities. + aggregate_of< ::Ifc4x3_add2::IfcPhysicalQuantity >::ptr Quantities() const; + void setQuantities(aggregate_of< ::Ifc4x3_add2::IfcPhysicalQuantity >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcElementQuantity (IfcEntityInstanceData* e); + IfcElementQuantity (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_MethodOfMeasurement, aggregate_of< ::Ifc4x3_add2::IfcPhysicalQuantity >::ptr v6_Quantities); + typedef aggregate_of< IfcElementQuantity > list; +}; +/// Definition from IAI: The IfcElementType +/// defines a list of commonly shared property set definitions +/// of an element and an optional set of product +/// representations. It is used to define an element +/// specification (i.e. the specific product information, that +/// is common to all occurrences of that product type). +/// +/// NOTE The product representations are defined as +/// representation maps (at the level of the supertype +/// IfcTypeProduct, which gets assigned by an element +/// instance through the +/// IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// +/// An element type is used to define the common properties of +/// a certain type or style of an element that may be applied +/// to instances of that element type to assign a specific +/// style. Element types (the instantiable subtypes) may be +/// exchanged without being already assigned to occurrences. +/// +/// HISTORY New entity in +/// Release IFC2x Edition 2 +class IFC_PARSE_API IfcElementType : public IfcTypeProduct { +public: + /// The type denotes a particular type that indicates the object further. The use has to be established at the level of instantiable subtypes. In particular it holds the user defined type, if the enumeration of the attribute 'PredefinedType' is set to USERDEFINED. + boost::optional< std::string > ElementType() const; + void setElementType(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcElementType (IfcEntityInstanceData* e); + IfcElementType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType); + typedef aggregate_of< IfcElementType > list; +}; +/// Definition from ISO/CD 10303-42:1992: An elementary surface (IfcElementarySurface) is a simple analytic surface with defined parametric representation. +/// +/// NOTE Corresponding ISO 10303 entity: elementary_surface. Only the subtype plane is incorporated as IfcPlane. The derived attribute Dim has been added (see also note at IfcGeometricRepresentationItem). Please refer to ISO/IS 10303-42:1994, p. 69 for the final definition of the formal standard. +/// +/// HISTORY New class in IFC Release 1.5 +class IFC_PARSE_API IfcElementarySurface : public IfcSurface { +public: + /// The position and orientation of the surface. This attribute is used in the definition of the parameterization of the surface. + ::Ifc4x3_add2::IfcAxis2Placement3D* Position() const; + void setPosition(::Ifc4x3_add2::IfcAxis2Placement3D* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcElementarySurface (IfcEntityInstanceData* e); + IfcElementarySurface (::Ifc4x3_add2::IfcAxis2Placement3D* v1_Position); + typedef aggregate_of< IfcElementarySurface > list; +}; +/// IfcEllipseProfileDef defines an ellipse as the profile definition used by the swept surface geometry +/// or the swept area solid. It is given by its semi axis attributes and placed within the 2D position coordinate system, established by the Position attribute. +/// +/// HISTORY  New entity in IFC2x +/// +/// Figure 317 illustrates parameters for the ellipse profile definition. The parameterized profile defines its own position coordinate system. +/// The underlying coordinate system is defined by the swept surface or swept area solid that uses the profile definition. It is the xy plane of either: +/// +/// IfcSweptSurface.Position +/// IfcSweptAreaSolid.Position +/// +/// Or in case of sectioned spines it is the xy plane of each list member of IfcSectionedSpine.CrossSectionPositions. By using offsets of the position location, the parameterized profile can be positioned centric (using x,y offsets = 0.), or at any position relative to the profile. Explicit coordinate offsets are used to define cardinal points (for example, upper-left bound). The location of the position coordinate system defines the center of the ellipse. The SemiAxis1 attribute defines the first radius of the ellipse in the direction of the X axis, the SemiAxis2 attribute defines the second radius of the ellipse in the direction of the Y axis. +/// +/// NOTE  The semi axes of the ellipse are rectangular to each other by definition. +/// +/// Figure 317 — Ellipse profile +class IFC_PARSE_API IfcEllipseProfileDef : public IfcParameterizedProfileDef { +public: + /// The first radius of the ellipse. It is measured along the direction of Position.P[1]. + double SemiAxis1() const; + void setSemiAxis1(double v); + /// The second radius of the ellipse. It is measured along the direction of Position.P[2]. + double SemiAxis2() const; + void setSemiAxis2(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcEllipseProfileDef (IfcEntityInstanceData* e); + IfcEllipseProfileDef (::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_SemiAxis1, double v5_SemiAxis2); + typedef aggregate_of< IfcEllipseProfileDef > list; +}; +/// An IfcEventType defines a particular type of event that may be specified. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// An IfcEventType provides for all forms of types of event that may be specified. +/// Usage of IfcEventType defines the parameters for one or more occurrences of IfcEvent. Parameters may be specified through property sets that may be enumerated in the IfcEventTypeEnum data type or through explicit attributes of IfcEvent. Event occurrences (IfcEvent entities) are linked to the event type through the IfcRelDefinesByType relationship. +class IFC_PARSE_API IfcEventType : public IfcTypeProcess { +public: + /// Identifies the predefined types of an event from which + /// the type required may be set. + ::Ifc4x3_add2::IfcEventTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcEventTypeEnum::Value v); + /// Identifies the predefined types of event trigger from which + /// the type required may be set. + ::Ifc4x3_add2::IfcEventTriggerTypeEnum::Value EventTriggerType() const; + void setEventTriggerType(::Ifc4x3_add2::IfcEventTriggerTypeEnum::Value v); + /// A user defined event trigger type, the value of which + /// is asserted when the value of an event trigger type is + /// declared as USERDEFINED. + boost::optional< std::string > UserDefinedEventTriggerType() const; + void setUserDefinedEventTriggerType(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcEventType (IfcEntityInstanceData* e); + IfcEventType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ProcessType, ::Ifc4x3_add2::IfcEventTypeEnum::Value v10_PredefinedType, ::Ifc4x3_add2::IfcEventTriggerTypeEnum::Value v11_EventTriggerType, boost::optional< std::string > v12_UserDefinedEventTriggerType); + typedef aggregate_of< IfcEventType > list; +}; +/// The IfcExtrudedAreaSolid is defined by sweeping a cross +/// section provided by a profile definition. The direction of the +/// extrusion is given by the ExtrudedDirection attribute and +/// the length of the extrusion is given by the Depth +/// attribute. If the planar area has inner boundaries (holes +/// defined), then those holes shall be swept into holes of the solid. +/// The extruded direction can be any direction which is not +/// perpendicular to the z axis of the position coordinate system of +/// the profile. +/// The following definitions from ISO 10303-42 apply: +/// +/// An extruded area +/// solid is a solid defined by sweeping a bounded planar surface. The +/// direction of translation is defined by a direction vector, and the +/// length of the translation is defined by a distance depth. The +/// planar area may have holes which will sweep into holes in the +/// solid. +/// +/// The ExtrudedDirection is given within the position +/// coordinate system as defined by +/// IfcSweptAreaSolid.Position. Extrusions are not restricted +/// to be perpendicular to the extruded surface of the profile. +/// +/// Figure 255 illustrates geometric parameters of the extruded area solid. The extruded area solid defines the extrusion of a 2D area (given by a profile definition) by an direction and depth. The result is a +/// solid. The swept area is given by a profile definition. This profile is defined: +/// +/// as a 2D bounded curve within the xy plane of the position coordinate system, +/// as a 2D bounded curve with holes within the xy plane of the position coordinate system, +/// or as a 2D primitive, defined within a 2D position coordinate system, that is placed relative to the xy plane of the position coordinate system +/// +/// Figure 255 — Extruded area solid geometry +/// +/// NOTE  Corresponding ISO 10303-42 entity: extruded_area_solid. Please refer to ISO/IS 10303-42:1994, p. 183 for the final definition of the formal standard. The data type of the inherited SweptArea attribute is different, i.e. of type IfcProfileDef. The Position attribute has been added to position the cross section used for the linear extrusion. +/// +/// HISTORY  New entity in IFC Release 1.5, capabilities of this entity have been enhanced in IFC Release 2x. +/// +/// Texture use definition +/// For side faces, textures are aligned facing upright continuously +/// along the sides with origin at the first point of an arbitrary +/// profile, and following the outer bound of the profile +/// counter-clockwise (as seen from above). For parameterized profiles, +/// the origin is defined at the +Y extent for rounded profiles (having +/// no sharp edge) and the first sharp edge counter-clockwise from the +/// +Y extent for all other profiles. Textures are stretched or +/// repeated on each side along the outer boundary of the profile +/// according to RepeatS. Textures are stretched or repeated +/// on each side along the extrusion axis according to +/// RepeatT. +/// For top and bottom caps, textures are aligned facing +/// front-to-back, with the origin at the minimum X and Y extent. +/// Textures are stretched or repeated on the top and bottom to the +/// extent of each face according to RepeatS and +/// RepeatT. +/// For profiles with voids, textures are aligned facing upright +/// along the inner side with origin at the first point of an arbitrary +/// profile, and following the inner bound of the profile clockwise (as +/// seen from above). For parameterized profiles, the origin of inner +/// sides is defined at the +Y extent for rounded profiles (having no +/// sharp edge such as hollow ellipses or rounded rectangles) and the +/// first sharp edge clockwise from the +Y extent for all other +/// profiles. +/// +/// Figure 256 illustrates default texture mapping with a repeated texture (RepeatS=True and RepeatT=True). The image on the left shows the texture where the S axis points to the right and the T axis points up. The image on the right shows the texture applied to the geometry where the X axis points back to the right, the Y axis points back to the left, and the Z axis points up. For an IfcExtrudedAreaSolid having a profile of IfcIShapeProfileDef, the side texture coordinate origin is the first corner counter-clockwise from the +Y axis, which equals +/// (-0.5*IfcIShapeProfileDef.OverallWidth, +0.5*IfcIShapeProfileDef.OverallDepth), while the top (end cap) +/// texture coordinates start at (-0.5*IfcIShapeProfileDef.OverallWidth, +/// -0.5*IfcIShapeProfileDef.OverallDepth). +/// +/// Figure 256 — Extruded area solid textures +class IFC_PARSE_API IfcExtrudedAreaSolid : public IfcSweptAreaSolid { +public: + /// The direction in which the surface, provided by SweptArea is to be swept. + ::Ifc4x3_add2::IfcDirection* ExtrudedDirection() const; + void setExtrudedDirection(::Ifc4x3_add2::IfcDirection* v); + /// The distance the surface is to be swept along the ExtrudedDirection + /// . + double Depth() const; + void setDepth(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcExtrudedAreaSolid (IfcEntityInstanceData* e); + IfcExtrudedAreaSolid (::Ifc4x3_add2::IfcProfileDef* v1_SweptArea, ::Ifc4x3_add2::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_add2::IfcDirection* v3_ExtrudedDirection, double v4_Depth); + typedef aggregate_of< IfcExtrudedAreaSolid > list; +}; +/// IfcExtrudedAreaSolidTapered is defined by sweeping a cross +/// section along a linear spine. The cross section may change along +/// the sweep from the shape of the start cross section into the +/// shape of the end cross section. The resulting solid is bounded by +/// three or more faces: A start face, an end face (each defined by +/// start and end planes and sections), and one or more lateral +/// faces. Each lateral face is a ruled surface defined by a pair of +/// corresponding edges of the start and end section. +/// NOTE Given that the start and end section is +/// provided by a polygon, the corresponding vertices of the start +/// and end cross section are connected, forming a quadrilateral +/// polygon between each pair of corresponding vertices. The surface +/// defined by the bounding quadrilateral polygon is a ruled surface, +/// that could be approximated by triangulation. +/// The linear spine is defined by: +/// +/// Start point: +/// SELF\IfcSweptAreaSolid.Position.Location +/// Direction: +/// SELF\IfcExtrudedAreaSolid.ExtrudedDirection +/// Distance: SELF\IfcExtrudedAreaSolid.Depth +/// +/// The start cross section is defined by +/// SELF\IfcSweptAreaSolid.SweptArea: +/// +/// A bounded planar surface lying in the XY plane of the +/// position coordinate system defined by +/// SELF\IfcSweptAreaSolid.Position.P[1] and +/// SELF\IfcSweptAreaSolid.Position.P[2] +/// The linear spine starts at the plane of the start cross +/// section. The spine is not necessarily perpendicular to the +/// plane. +/// +/// The end cross section is defined by EndSweptArea: +/// +/// A bounded planar surface lying in the XY plane of the +/// position coordinate system defined by translating the start +/// position coordinates provided by +/// SELF\IfcSweptAreaSolid.Position along the spine direction +/// by the spine distance. The plane of the end cross section is +/// coplanar to the plane of the start cross section. +/// +/// The end cross section is topologically similar to the start +/// cross section (i.e. having the same number of vertices and +/// edges). +/// The end cross section can either be defined by the same +/// paramteric profile using different parameter values, or by a 2D +/// Cartesian transformation of the start profile within the end +/// cross section plane. +/// +/// In case of two parameterized profiles the shape is constructed +/// as follows: +/// +/// The end profile, defined by a cross section based on the same +/// profile paramterization as the start profile, is translated by +/// the spine distance along the spine direction. +/// It may be shifted within the XY plane of the end postion +/// coordinate system and may be twisted using the rotation +/// parameter. +/// The shift and rotation parameter are provided by the end +/// cross section being of type IfcParameterizedProfileDef, +/// where +/// +/// Shift is +/// EndSweptArea\IfcParameterizedProfileDef.Position.Location +/// Rotation is +/// EndSweptArea\IfcParameterizedProfileDef.Position.RefDirection +/// +/// Corresponding vertices of the start and end cross section are +/// connected. Lateral faces are constructed as ruled surfaces +/// between corresponding edges of start and end cross section. +/// +/// In case of Cartesian transformation of the start cross section +/// the shape is constructed as follows: +/// +/// The cross section curve, which starts as a curve in the XY +/// plane of the position coordinate system, is first scaled about +/// the origin by the scale parameter. It is then translated by the +/// spine distance along the spine direction. It maybe twisted by +/// using the rotation parameter. +/// The scale and rotation parameter are provided by the end +/// cross section being of type IfcDerivedProfileDef, where +/// +/// Scale is +/// EndSweptArea\IfcDerivedProfileDef.Operator.Scale +/// Rotation is +/// EndSweptArea\IfcDerivedProfileDef.Operator.Axis1 +/// +/// Corresponding vertices of the start and end cross section are +/// connected. Lateral faces are constructed as ruled surfaces +/// between corresponding edges of start and end cross section. +/// +/// HISTORY New entity in IFC2x4. +/// +/// Informal propositions +/// +/// Mirroring within IfcDerivedProfileDef.Operator shall +/// not be used +class IFC_PARSE_API IfcExtrudedAreaSolidTapered : public IfcExtrudedAreaSolid { +public: + /// The surface defining the end of the swept area. It is given as a profile definition. The position coordinate system of the EndSwptArea is generated by translating the SELF\IfcSweptAreaSolid.Position along the SELF\IfcExtrudedAreaSolid.ExtrudedDirection by the distance of SELF\IfcExtrudedAreaSolid.Depth. + ::Ifc4x3_add2::IfcProfileDef* EndSweptArea() const; + void setEndSweptArea(::Ifc4x3_add2::IfcProfileDef* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcExtrudedAreaSolidTapered (IfcEntityInstanceData* e); + IfcExtrudedAreaSolidTapered (::Ifc4x3_add2::IfcProfileDef* v1_SweptArea, ::Ifc4x3_add2::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_add2::IfcDirection* v3_ExtrudedDirection, double v4_Depth, ::Ifc4x3_add2::IfcProfileDef* v5_EndSweptArea); + typedef aggregate_of< IfcExtrudedAreaSolidTapered > list; +}; +/// Definition from ISO/CD 10303-42:1992: A face based surface model is described by a set of connected face sets of dimensionality 2. The connected face sets shall not intersect except at edges and vertices, except that a face in one connected face set may overlap a face in another connected face set, provided the face boundaries are identical. There shall be at least one connected face set. +/// +/// A connected face set may exist independently of a surface model. +/// +/// NOTE Corresponding STEP entity: face_based_surface_model. Please refer to ISO/IS 10303-42:1994, p. 188 for the final definition of the formal standard. +/// +/// HISTORY: New entity in IFC Release 2x. +/// +/// Informal propositions: +/// +/// The connected face sets shall not overlap or intersect except at common faces, edges or vertices. +/// The fbsm faces have dimensionality 2. +class IFC_PARSE_API IfcFaceBasedSurfaceModel : public IfcGeometricRepresentationItem, public IfcSurfaceOrFaceSurface { +public: + /// The set of connected face sets comprising the face based surface model. + aggregate_of< ::Ifc4x3_add2::IfcConnectedFaceSet >::ptr FbsmFaces() const; + void setFbsmFaces(aggregate_of< ::Ifc4x3_add2::IfcConnectedFaceSet >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFaceBasedSurfaceModel (IfcEntityInstanceData* e); + IfcFaceBasedSurfaceModel (aggregate_of< ::Ifc4x3_add2::IfcConnectedFaceSet >::ptr v1_FbsmFaces); + typedef aggregate_of< IfcFaceBasedSurfaceModel > list; +}; +/// Definition from ISO/CD 10303-46:1992: The fill area style hatching defines a styled pattern of curves for hatching an annotation fill area or a surface. +/// +/// The IfcFillAreaStyleHatching is used to define simple, vector-based hatching patterns, based on styled straight lines. The curve font, color and thickness is given by the HatchLineAppearance, the angle by the HatchLineAngle and the distance to the next hatch line by StartOfNextHatchLine, being either an offset distance or a vector. +/// +/// NOTE  If the hatch pattern involves two (potentially crossing) rows of hatch lines, then two instances of IfcFillAreaStyleHatching should be assigned to the IfcFillAreaStyle. Both share the same (virtual) point of origin of the hatching that is used by the reference hatch line (or the PointOfReferenceHatchLine if there is an offset). +/// +/// For better control of the hatching appearance, when using hatch lines with other fonts then continuous, the PatternStart allows to offset the start of the curve font pattern along the reference hatch line (if not given, the PatternStart is at zero distance from the virtual point of origin). If the reference hatch line does not go through the origin (of the virtual hatching coordinate system), it can be offset by using the PatternStart PointOfReferenceHatchLine. +/// +/// NOTE  The coordinates of the PatternStart and the PointOfReferenceHatchLine are given relative to the assumed 0., 0. virtual point of origin at which the hatch pattern is later positioned by the FillStyleTarget point at IfcAnnotationFillAreaOccurrence. The measure values are given in global drawing length units and apply to the target plot scale for the scale depended representation subcontext. +/// +/// NOTE  The use of PointOfReferenceHatchLine is deprecated. +/// +/// Figure 292 illustrates hatch attributes. +/// +/// Example 1 +/// This example shows simple hatching given by using a curve font "continuous" at HatchLineAppearance. +/// +/// The distance of hatch lines is given by a positive length measure. The +/// angle (here 45' if measures in degree) is provided by HatchLineAngle. +/// +/// The PatternStart is +/// set to NIL ($) in this example. Example 2 +/// This shows hatching from example 1 with using a different curve font at HatchLineAppearance. +/// The distance of hatch lines is given by a positive +/// length measure, therefore the font pattern start is at a point at the +/// next hatch line given by a vector being perpendicular to the point of +/// origin at the reference hatch line. The +/// PatternStart is set to NIL ($) in this example. +/// Example 3 +/// This example uses hatching from example 2 with a vector to determine the pattern start of the next hatch lines. +/// The pattern start is the beginning of the first visual curve font pattern segment at IfcCurveFont.CurveFont. The PatternStart is set to NIL ($) in this example. +/// Example 4 +/// This example uses hatching from example 3 where the pattern start is offset from the point of origin at the reference hatch line. That is, the first visible curve font pattern segment now does not start at the point of origin at the reference hatch line. +/// +/// Example 5 +/// This example uses hatching from example 4 where the hatch pattern is shifted against the underlying coordinate system. +/// The point that is mapped to the insertion point of the IfcAnnotationFillAreaOccurrence now has an X and Y offset from the start of the reference hatch line. That is, the reference hatch line now does not go through the insertion point of the hatching. +/// Example 6 +/// This example shows use of IfcFillAreaStyleHatching attributes for two IfcFillAreaStyleHatching's within one IfcFillAreaStyle. Note that the PatternStart now displaces both the reference hatch line from the point of origin and the start of the curve pattern. This can be used in cases when more than one IfcFillAreaStyleHatching is used in an IfcFillAreaStyle in order to place rows of hatch lines with an offset from each other. +/// +/// Figure 292 — Fill area style hatching +/// +/// NOTE  Corresponding ISO 10303 name: fill_area_style_hatching. Please refer to ISO/IS 10303-46:1994, p. 108 for the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC2x2. +/// +/// IFC2x3 CHANGE  The IfcFillAreaStyleHatching has been changed by making the attributes PatternStart and PointOfReferenceHatchLine OPTIONAL. The attribute StartOfNextHatchLine has changed to a SELECT with the additional choice of IfcPositiveLengthMeasure. Upward compatibility for file based exchange is guaranteed. +class IFC_PARSE_API IfcFillAreaStyleHatching : public IfcGeometricRepresentationItem, public IfcFillStyleSelect { +public: + /// The curve style of the hatching lines. Any curve style pattern shall start at the origin of each hatch line. + ::Ifc4x3_add2::IfcCurveStyle* HatchLineAppearance() const; + void setHatchLineAppearance(::Ifc4x3_add2::IfcCurveStyle* v); + /// A repetition factor that determines the distance between adjacent hatch lines. + /// + /// IFC2x Edition 3 CHANGE  The attribute type of StartOfNextHatchLine has changed to a SELECT of IfcPositiveLengthMeasure (new) and IfcOneDirectionRepeatFactor. + ::Ifc4x3_add2::IfcHatchLineDistanceSelect* StartOfNextHatchLine() const; + void setStartOfNextHatchLine(::Ifc4x3_add2::IfcHatchLineDistanceSelect* v); + /// A Cartesian point which defines the offset of the reference hatch line from the origin of the (virtual) hatching coordinate system. The origin is used for mapping the fill area style hatching onto an annotation fill area or surface. The reference hatch line would then appear with this offset from the fill style target point. + /// If not given the reference hatch lines goes through the origin of the (virtual) hatching coordinate system. + /// + /// IFC2x Edition 3 CHANGE  The usage of the attribute PointOfReferenceHatchLine has changed to not provide the Cartesian point which is the origin for mapping, but to provide an offset to the origin for the mapping. The attribute has been made OPTIONAL. + ::Ifc4x3_add2::IfcCartesianPoint* PointOfReferenceHatchLine() const; + void setPointOfReferenceHatchLine(::Ifc4x3_add2::IfcCartesianPoint* v); + /// A distance along the reference hatch line which is the start point for the curve style font pattern of the reference hatch line. + /// If not given, the start point of the curve style font pattern is at the (virtual) hatching coordinate system. + /// + /// IFC2x Edition 2 Addendum 2 CHANGE The attribute PatternStart has been made OPTIONAL. + ::Ifc4x3_add2::IfcCartesianPoint* PatternStart() const; + void setPatternStart(::Ifc4x3_add2::IfcCartesianPoint* v); + /// A plane angle measure determining the direction of the parallel hatching lines. + double HatchLineAngle() const; + void setHatchLineAngle(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFillAreaStyleHatching (IfcEntityInstanceData* e); + IfcFillAreaStyleHatching (::Ifc4x3_add2::IfcCurveStyle* v1_HatchLineAppearance, ::Ifc4x3_add2::IfcHatchLineDistanceSelect* v2_StartOfNextHatchLine, ::Ifc4x3_add2::IfcCartesianPoint* v3_PointOfReferenceHatchLine, ::Ifc4x3_add2::IfcCartesianPoint* v4_PatternStart, double v5_HatchLineAngle); + typedef aggregate_of< IfcFillAreaStyleHatching > list; +}; +/// Definition from ISO/CD 10303-46:1992: The fill area style tiles defines a two dimensional tile to be used for the filling of annotation fill areas or other closed regions. The content of a tile is defined by the tile set, and the placement of each tile determined by the filling pattern which indicates how to place tiles next to each other. Tiles or parts of tiles outside of the annotation fill area or closed region shall be clipped at the of the area or region. +/// +/// NOTE Corresponding ISO 10303 name: fill_area_style_tiles. Please refer to ISO/IS 10303-46:1994 for the final definition of the formal standard. +/// +/// HISTORY New entity in IFC2x2. +class IFC_PARSE_API IfcFillAreaStyleTiles : public IfcGeometricRepresentationItem, public IfcFillStyleSelect { +public: + /// A two direction repeat factor defining the shape and relative positioning of the tiles. + aggregate_of< ::Ifc4x3_add2::IfcVector >::ptr TilingPattern() const; + void setTilingPattern(aggregate_of< ::Ifc4x3_add2::IfcVector >::ptr v); + /// A set of constituents of the tile. + aggregate_of< ::Ifc4x3_add2::IfcStyledItem >::ptr Tiles() const; + void setTiles(aggregate_of< ::Ifc4x3_add2::IfcStyledItem >::ptr v); + /// The scale factor applied to each tile as it is placed in the annotation fill area. + double TilingScale() const; + void setTilingScale(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFillAreaStyleTiles (IfcEntityInstanceData* e); + IfcFillAreaStyleTiles (aggregate_of< ::Ifc4x3_add2::IfcVector >::ptr v1_TilingPattern, aggregate_of< ::Ifc4x3_add2::IfcStyledItem >::ptr v2_Tiles, double v3_TilingScale); + typedef aggregate_of< IfcFillAreaStyleTiles > list; +}; +/// A fixed reference swept area solid is a type of swept area solid +/// which is the result of sweeping a surface along a +/// Directrix. The orientation of the curve during the +/// sweeping operation is controlled by the FixedReference +/// direction. +/// The SweptArea is required to be a curve bounded surface +/// lying in the plane z = 0 and this is swept along the +/// Directrix in such a way that the origin of the local +/// coordinate system used to define the SweptArea is on the +/// Directrix and the local X axis is in the direction of the +/// projection of FixedReference onto the normal plane to the +/// directrix at this point. The resulting solid has the property that +/// the cross section of the surface by the normal plane to the +/// Directrix at any point is a copy of the +/// SweptArea. +/// +/// NOTE The swept face +/// is given by IfcProfileDef (or subtypes), the profile +/// definition is given within a 2D coordinate system, which is +/// inserted into the XY plane of the Position coordinate +/// system inherited from the supertype +/// IfcSweptAreaSolid. +/// +/// The orientation of the SweptArea as it sweeps along the +/// Directrix is precisely defined by a +/// CartesianTransformationOperator3d with attributes: +/// +/// LocalOrigin as point (0; 0; 0), +/// Axis1 as the FixedReference. +/// Axis3 as the direction of the tangent vector t +/// at the point of the Directrix with parameter +/// u. +/// +/// The remaining attributes are defaulted to define a corresponding +/// transformation matrix T(u), which varies with the +/// Directrix parameter u. +/// +/// NOTE The geometric shape of the +/// solid is not dependent upon the curve parameterization; the volume +/// depends upon the area swept and the length of the +/// Directrix. +/// +/// The attributes of the Cartesian Transformation Operator (as +/// shown above) should apply to the Position coordinate +/// system, in which the profile is inserted. The Directrix +/// and the FixedReference are positioned within the 3D +/// Position coordinate system. +/// +/// NOTE The entity is defined in analogy to the ISO 10303-42 entity: fixed_reference_swept_surface. Please refer to ISO/DIS 10303-42:2003(E) p. 103. +/// +/// HISTORY New entity in IFC2x4. +/// +/// Informal propositions: +/// +/// The SweptArea shall lie in the plane z = 0. +/// The FixedReference shall not be parallel to a tangent +/// vector to the directrix at any point along this curve. +/// The Directrix curve shall be tangent continuous. +class IFC_PARSE_API IfcFixedReferenceSweptAreaSolid : public IfcDirectrixCurveSweptAreaSolid { +public: + /// The direction providing the fixed axis1 (x-axis) direction for orienting the swept area during the sweeping operation along the Directrix. + ::Ifc4x3_add2::IfcDirection* FixedReference() const; + void setFixedReference(::Ifc4x3_add2::IfcDirection* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFixedReferenceSweptAreaSolid (IfcEntityInstanceData* e); + IfcFixedReferenceSweptAreaSolid (::Ifc4x3_add2::IfcProfileDef* v1_SweptArea, ::Ifc4x3_add2::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_add2::IfcCurve* v3_Directrix, ::Ifc4x3_add2::IfcCurveMeasureSelect* v4_StartParam, ::Ifc4x3_add2::IfcCurveMeasureSelect* v5_EndParam, ::Ifc4x3_add2::IfcDirection* v6_FixedReference); + typedef aggregate_of< IfcFixedReferenceSweptAreaSolid > list; +}; +/// Definition from IAI: The +/// IfcFurnishingElementType defines a list of commonly shared +/// property set definitions of an element and an optional set of +/// product representations. It is used to define an element +/// specification (i.e. the specific product information, that is +/// common to all occurrences of that product type). +/// NOTE The product representations are defined +/// as representation maps (at the level of the supertype +/// IfcTypeProduct, which gets assigned by an element +/// occurrence instance through the +/// IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// A furnishing element type is used to define the common +/// properties of a certain type of a furnishing element that may be +/// applied to many instances of that feature type to assign a +/// specific style. Furnishing element types (or the instantiable +/// subtypes) may be exchanged without being already assigned to +/// occurrences. +/// The occurrences of the IfcFurnishingElementType are +/// represented by instances of IfcFurnishingElement (or its +/// subtypes). +/// HISTORYNew entity in +/// Release IFC2x Edition 2. +/// IFC2x3 CHANGE The entity has been +/// made non-abstract +/// IFC2x4 CHANGE The entity is marked +/// as deprecated for instantiation - will be made ABSTRACT after +/// IFC2x4. +class IFC_PARSE_API IfcFurnishingElementType : public IfcElementType { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFurnishingElementType (IfcEntityInstanceData* e); + IfcFurnishingElementType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType); + typedef aggregate_of< IfcFurnishingElementType > list; +}; +/// The furnishing element type IfcFurnitureType defines commonly shared information for occurrences of furnitures. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// applicable assignment of process types +/// +/// It is used to define a furniture specification (i.e. the specific product information, that is common to all occurrences of that product type). Furniture types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcFurnitureType are represented by instances of IfcFurniture. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFurnishingElementType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_FurnitureTypeCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_FurnitureTypeChair (CHAIR) +/// Pset_FurnitureTypeDesk (DESK) +/// Pset_FurnitureTypeFileCabinet (FILECABINET) +/// Pset_FurnitureTypeTable (TABLE) +/// +/// Material Use Definition +/// The material of the IfcFurnitureType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Finish': The finish, typically at visible aspects of the furniture. +/// 'Frame': The frame from which the object is constructed. +/// 'Hardware': Finish hardware such as knobs or handles. +/// 'Padding': Padding such as cushions. +/// 'Panel': Panels such as glass. +/// +/// Composition Use Definition +/// The IfcFurnitureType may be decomposed into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcFurnitureType and RelatedObjects contains one or more components. Components are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Composition use is defined for the following predefined types: +/// +/// (All Types): May contain IfcSystemFurnitureElement components. Modular furniture may be aggregated into components. +class IFC_PARSE_API IfcFurnitureType : public IfcFurnishingElementType { +public: + /// A designation of where the assembly is intended to take place. A selection of alternatives s provided in an enumerated list. + ::Ifc4x3_add2::IfcAssemblyPlaceEnum::Value AssemblyPlace() const; + void setAssemblyPlace(::Ifc4x3_add2::IfcAssemblyPlaceEnum::Value v); + boost::optional< ::Ifc4x3_add2::IfcFurnitureTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcFurnitureTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFurnitureType (IfcEntityInstanceData* e); + IfcFurnitureType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcAssemblyPlaceEnum::Value v10_AssemblyPlace, boost::optional< ::Ifc4x3_add2::IfcFurnitureTypeEnum::Value > v11_PredefinedType); + typedef aggregate_of< IfcFurnitureType > list; +}; +/// Definition from IAI: An +/// IfcGeographicElementType is used to define an +/// element specification of a geographic element (i.e. the +/// specific product information, that is common to all +/// occurrences of that product type).Geographic element types +/// include for different types of element that may be used to +/// represent information within a geographical landscape +/// external to a building. Within the world of geographic +/// information they are referred to generally as 'features'. +/// Geographic element types includes for many possibilities: +/// +/// linear elements such as sections of a roadway +/// (including carriageway/pavement, verge, median, marker +/// line, kerb etc.), path, river, stream +/// +/// connections and junctions including traffic +/// roundabouts, T junctions, 4 way junctions +/// +/// point features such as street lighting, seating, bus +/// shelters, signage, trees +/// +/// linear features such as layby's +/// +/// area features such as ponds, lakes, woods and forests +/// +/// The specification of the specific types are given by the +/// inherited attribute IfcElementType.ElementType given +/// as an IfcLabel. +/// +/// NOTE This is due to the range of choices of +/// element type thyat are available and their expression in +/// different languages. It is not considered possible to +/// create a reasonably full list of types within an +/// enumeration. It is suggested that selection of the +/// relevant type be drawn from an available 'feature +/// catalog'. +/// +/// HISTORY New entity in +/// Release IFC2x Edition 4. +/// +/// Feature Catalog Use Definition +/// +/// Geographic element types are frequently identified in +/// feature catalogs that are produced for particular +/// purposes.The IfcGeographicElementType entity +/// enables the continued use of existing feature catalogs +/// through capture of their identity and attributes. +/// +/// Information from feature catalogs might be captured in +/// various ways: +/// +/// via property sets, some of which will be specifically +/// defined within the IFC property set catalog whilst others +/// will be created for local use; this is the form of capture +/// that is expected to be most widely used +/// +/// through use of the IFC classification model whereby +/// features might be identified through a classification +/// notation and additional description; in which case, any +/// further attributes required would still need to be captured +/// in property sets. +class IFC_PARSE_API IfcGeographicElementType : public IfcElementType { +public: + /// Predefined types to define the particular type of the geographic element. There may be property set definitions available for each predefined type. + ::Ifc4x3_add2::IfcGeographicElementTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcGeographicElementTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcGeographicElementType (IfcEntityInstanceData* e); + IfcGeographicElementType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcGeographicElementTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcGeographicElementType > list; +}; +/// Definition from ISO/CD 10303-42:1992: A geometric curve set is a collection of two or three dimensional points and curves. +/// +/// The IfcGeometricCurveSet is used for the exchange of shape representations consisting of (2D or 3D) points and curves only. +/// +/// NOTE: Corresponding ISO 10303-42 entity: geometric_set. Please refer to ISO/IS 10303-42:1994, p. 190 for the final definition of the formal standard. +/// +/// HISTORY: New entity in IFC2x2. +class IFC_PARSE_API IfcGeometricCurveSet : public IfcGeometricSet { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcGeometricCurveSet (IfcEntityInstanceData* e); + IfcGeometricCurveSet (aggregate_of< ::Ifc4x3_add2::IfcGeometricSetSelect >::ptr v1_Elements); + typedef aggregate_of< IfcGeometricCurveSet > list; +}; +/// IfcIShapeProfileDef +/// defines a section profile that provides the defining parameters of a +/// symmetrical 'I' section to be used by the swept surface geometry or the +/// swept area solid. The I-shape profile has values for its overall depth, +/// width and its web and flange thickness. Additionally a fillet radius +/// may be given. It represents a I-section that is symmetrical about its +/// major and minor axes; and that has both top and bottom flanges being +/// equal and centred on the web. +/// +/// IfcIShapeProfileDef can also be used to model I sections with +/// sloped or rounded flanges. The slope and radius cannot be expressed in +/// explicit attributes, but they may be retrieved by reference to an +/// external document or library. See IfcProfileDef for guidance on +/// external references for profile definitions. +/// +/// HISTORY  New entity in IFC2x. +/// +/// IFC2x4 CHANGE  Type of FilletRadius relaxed to allow for zero radius. +/// +/// Figure 318 illustrates parameters of the I-shape profile definition. +/// +/// Position +/// +/// The parameterized +/// profile defines its own position coordinate system. +/// The underlying +/// coordinate system is defined by the swept area solid +/// that uses the profile definition. It is the xy plane of: +/// +/// IfcSweptAreaSolid.Position +/// +/// by using offsets of the position location, the parameterized profile +/// can be positioned centric (using x,y offsets = 0.), or at any position +/// relative to the profile. Explicit coordinate offsets are used to define +/// cardinal points (e.g. upper-left bound). +/// Parameter +/// +/// The parameterized profile +/// is defined by a set of parameter attributes, see attribute definition +/// below. +/// +/// Note: +/// The black coordinate axes show the +/// underlying coordinate system of the swept surface or swept area solid +/// +/// Position +/// +/// The profile is inserted into the underlying +/// coordinate system of the swept area solid by using the Position +/// attribute. In this example (cardinal point of lower left corner) the +/// attribute values of IfcAxis2Placement2D +/// are: +/// +/// Location +/// = IfcCartesianPoint(,) +/// RefDirection = NIL (defaults to 1.,0.) +/// +/// Parameter +/// If the FilletRadius +/// is given, it is equally applied to all four corners created by the web +/// and flanges. +/// +/// Figure 318 — I-shape profile +class IFC_PARSE_API IfcIShapeProfileDef : public IfcParameterizedProfileDef { +public: + /// Total extent of the width, defined parallel to the x axis of the position coordinate system. + double OverallWidth() const; + void setOverallWidth(double v); + /// Total extent of the depth, defined parallel to the y axis of the position coordinate system. + double OverallDepth() const; + void setOverallDepth(double v); + /// Thickness of the web of the I-shape. The web is centred on the x-axis and the y-axis of the position coordinate system. + double WebThickness() const; + void setWebThickness(double v); + /// Flange thickness of the I-shape. Both, the upper and the lower flanges have the same thickness and they are centred on the y-axis of the position coordinate system. + double FlangeThickness() const; + void setFlangeThickness(double v); + /// The fillet between the web and the flange. + boost::optional< double > FilletRadius() const; + void setFilletRadius(boost::optional< double > v); + boost::optional< double > FlangeEdgeRadius() const; + void setFlangeEdgeRadius(boost::optional< double > v); + boost::optional< double > FlangeSlope() const; + void setFlangeSlope(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcIShapeProfileDef (IfcEntityInstanceData* e); + IfcIShapeProfileDef (::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_OverallWidth, double v5_OverallDepth, double v6_WebThickness, double v7_FlangeThickness, boost::optional< double > v8_FilletRadius, boost::optional< double > v9_FlangeEdgeRadius, boost::optional< double > v10_FlangeSlope); + typedef aggregate_of< IfcIShapeProfileDef > list; +}; + +class IFC_PARSE_API IfcIndexedPolygonalFace : public IfcTessellatedItem { +public: + std::vector< int > /*[3:?]*/ CoordIndex() const; + void setCoordIndex(std::vector< int > /*[3:?]*/ v); + aggregate_of< IfcPolygonalFaceSet >::ptr ToFaceSet() const; // INVERSE IfcPolygonalFaceSet::Faces + aggregate_of< IfcTextureCoordinateIndices >::ptr HasTexCoords() const; // INVERSE IfcTextureCoordinateIndices::TexCoordsOf + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcIndexedPolygonalFace (IfcEntityInstanceData* e); + IfcIndexedPolygonalFace (std::vector< int > /*[3:?]*/ v1_CoordIndex); + typedef aggregate_of< IfcIndexedPolygonalFace > list; +}; + +class IFC_PARSE_API IfcIndexedPolygonalFaceWithVoids : public IfcIndexedPolygonalFace { +public: + std::vector< std::vector< int > > InnerCoordIndices() const; + void setInnerCoordIndices(std::vector< std::vector< int > > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcIndexedPolygonalFaceWithVoids (IfcEntityInstanceData* e); + IfcIndexedPolygonalFaceWithVoids (std::vector< int > /*[3:?]*/ v1_CoordIndex, std::vector< std::vector< int > > v2_InnerCoordIndices); + typedef aggregate_of< IfcIndexedPolygonalFaceWithVoids > list; +}; + +class IFC_PARSE_API IfcIndexedPolygonalTextureMap : public IfcIndexedTextureMap { +public: + aggregate_of< ::Ifc4x3_add2::IfcTextureCoordinateIndices >::ptr TexCoordIndices() const; + void setTexCoordIndices(aggregate_of< ::Ifc4x3_add2::IfcTextureCoordinateIndices >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcIndexedPolygonalTextureMap (IfcEntityInstanceData* e); + IfcIndexedPolygonalTextureMap (aggregate_of< ::Ifc4x3_add2::IfcSurfaceTexture >::ptr v1_Maps, ::Ifc4x3_add2::IfcTessellatedFaceSet* v2_MappedTo, ::Ifc4x3_add2::IfcTextureVertexList* v3_TexCoords, aggregate_of< ::Ifc4x3_add2::IfcTextureCoordinateIndices >::ptr v4_TexCoordIndices); + typedef aggregate_of< IfcIndexedPolygonalTextureMap > list; +}; +/// IfcLShapeProfileDef +/// defines a section profile that provides the defining parameters of an +/// L-shaped section (equilateral L profiles are also covered by this +/// entity) to be used by the swept area +/// solid. Its parameters and orientation relative to the position +/// coordinate system are according to the following illustration. The +/// shorter leg has the same direction as the positive Position.P[1]-axis, the longer +/// or equal leg the same as the positive Position.P[2]-axis. The centre of the +/// position coordinate system is in the profiles centre +/// of the bounding box. +/// +/// HISTORY  New entity in IFC2x2. +/// +/// IFC2x3 CHANGE  All profile origins are now in the center of the bounding box. +/// +/// IFC2x4 CHANGE  Width changed from OPTIONAL to mandatory. The previously informal rule that the longer leg is the Depth has been formalized. Types of FilletRadius and EdgeRadius were relaxed to allow for zero values. Trailing attributes CentreOfGravityInX and CentreOfGravityInY deleted, use respective properties in IfcExtendedProfileProperties instead. WHERE rule which required Width <= Depth removed. +/// +/// Figure 319 illustrates parameters of equal-sided and non-equal sided L-shaped section definitions. +/// +/// Position +/// The parameterized profile defines its own position coordinate system. +/// The underlying coordinate system is defined by the swept area solid +/// that uses the profile definition. It is the xy plane of: +/// +/// IfcSweptAreaSolid.Position +/// +/// by using offsets of the position location, the parameterized profile +/// can be positioned centric (using x,y offsets = 0.), or at any position +/// relative to the profile. +/// +/// In the illustrated example, the 'CentreOfGravityInX' and 'CentreOfGravityInY' properties in IfcExtendedProfileProperties, if provided, are both negative. +/// +/// Note: +/// The black coordinate axes show the +/// underlying coordinate system of the swept surface or swept area solid +/// +/// Position +/// The profile is inserted into the underlying +/// coordinate system of the swept area solid by using the Position +/// attribute. In this example (cardinal point of gravity) the +/// attribute values of IfcAxis2Placement2D +/// are: +/// +/// Location = IfcCartesianPoint( +///               +|CentreOfGravityInX|, +///               +|CentreOfGravityInY|) +/// RefDirection = NIL (defaults to 1.,0.) +/// +/// In the illustrated example, the x and y value of Position.Location, i.e. the measures |CentreOfGravityInX| and |CentreOfGravityInY| are both positive. On the other hand, the properties named 'CentreOfGravityInX' and 'CentreOfGravityInY' in IfcExtendedProfileProperties, if provided, must both be set to 0 now because the centre of gravity of the resulting profile definition is located in the coordinate origin. +/// +/// Figure 319 — L-shape profile +class IFC_PARSE_API IfcLShapeProfileDef : public IfcParameterizedProfileDef { +public: + /// Leg length, see illustration above (= h). Same as the overall depth. + double Depth() const; + void setDepth(double v); + /// Leg length, see illustration above (= b). Same as the overall width. + boost::optional< double > Width() const; + void setWidth(boost::optional< double > v); + /// Constant wall thickness of profile, see illustration above (= ts). + double Thickness() const; + void setThickness(double v); + /// Fillet radius according the above illustration (= r1). + boost::optional< double > FilletRadius() const; + void setFilletRadius(boost::optional< double > v); + /// Edge radius according the above illustration (= r2). + boost::optional< double > EdgeRadius() const; + void setEdgeRadius(boost::optional< double > v); + /// Slope of the inner face of each leg of the profile. + boost::optional< double > LegSlope() const; + void setLegSlope(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLShapeProfileDef (IfcEntityInstanceData* e); + IfcLShapeProfileDef (::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_Depth, boost::optional< double > v5_Width, double v6_Thickness, boost::optional< double > v7_FilletRadius, boost::optional< double > v8_EdgeRadius, boost::optional< double > v9_LegSlope); + typedef aggregate_of< IfcLShapeProfileDef > list; +}; +/// The resource type IfcLaborResourceType defines commonly shared information for occurrences of labor resources. The set of shared information may include: +/// +/// common productivities +/// common cost rates +/// common properties within shared property sets +/// +/// It is used to define a labor resource specification (i.e. the specific resource information that is common to all occurrences of that resource). Resource types may be exchanged without being already assigned to occurrences. +/// +/// Occurrences of the IfcLaborResourceType are represented by instances of IfcLaborResource. +/// +/// HISTORY New entity in IFC2x4. +class IFC_PARSE_API IfcLaborResourceType : public IfcConstructionResourceType { +public: + /// Defines types of labor resources. + ::Ifc4x3_add2::IfcLaborResourceTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcLaborResourceTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLaborResourceType (IfcEntityInstanceData* e); + IfcLaborResourceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ResourceType, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v10_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v11_BaseQuantity, ::Ifc4x3_add2::IfcLaborResourceTypeEnum::Value v12_PredefinedType); + typedef aggregate_of< IfcLaborResourceType > list; +}; +/// Definition from ISO/CD 10303-42:1992: A line is an unbounded curve with constant tangent direction. A line is defined by a point and a direction. The positive direction of the line is in the direction of the Dir vector. The line is parameterized as follows: +/// +/// P = Pnt +/// V = Dir +/// λ(u) = P + uV +/// +/// and the parametric range is: +/// +/// ∞ < u < ∞ +/// +/// NOTE Corresponding ISO 10303 entity: line. Please refer to ISO/IS 10303-42:1994, p.37 for the final definition of the formal standard. The derived attribute Dim has been added at this level and was therefore demoted from the geometric_representation_item. +/// +/// HISTORY New class in IFC Release 1.0 +class IFC_PARSE_API IfcLine : public IfcCurve { +public: + /// The location of the line. + ::Ifc4x3_add2::IfcCartesianPoint* Pnt() const; + void setPnt(::Ifc4x3_add2::IfcCartesianPoint* v); + /// The direction of the line, the magnitude and units of Dir affect the parameterization of the line. + ::Ifc4x3_add2::IfcVector* Dir() const; + void setDir(::Ifc4x3_add2::IfcVector* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLine (IfcEntityInstanceData* e); + IfcLine (::Ifc4x3_add2::IfcCartesianPoint* v1_Pnt, ::Ifc4x3_add2::IfcVector* v2_Dir); + typedef aggregate_of< IfcLine > list; +}; +/// Definition from ISO/CD 10303-42:1992: A manifold solid +/// B-rep is a finite, arcwise connected volume bounded by one or +/// more surfaces, each of which is a connected, oriented, finite, +/// closed 2-manifold. There is no restriction on the genus of the +/// volume, nor on the number of voids within the volume. +/// The Boundary Representation (B-rep) of a manifold solid +/// utilizes a graph of edges and vertices embedded in a connected, +/// oriented, finite, closed two manifold surface. The embedded graph +/// divides the surface into arcwise connected areas known as faces. +/// The edges and vertices, therefore, form the boundaries of the +/// face and the domain of a face does not include its boundaries. +/// The embedded graph may be disconnected and may be a pseudo graph. +/// The graph is labeled; that is, each entity in the graph has a +/// unique identity. The geometric surface definition used to specify +/// the geometry of a face shall be 2-manifold embeddable in the +/// plane within the domain of the face. In other words, it shall be +/// connected, oriented, finite, non-self-intersecting, and of +/// surface genus 0. +/// Faces do not intersect except along their boundaries. Each +/// edge along the boundary of a face is shared by at most one other +/// face in the assemblage. The assemblage of edges in the B-rep do +/// not intersect except at their boundaries (i.e., vertices). The +/// geometry curve definition used to specify the geometry of an edge +/// shall be arcwise connected and shall not self intersect or +/// overlap within the domain of the edge. The geometry of an edge +/// shall be consistent with the geometry of the faces of which it +/// forms a partial bound. The geometry used to define a vertex shall +/// be consistent with the geometry of the faces and edges of which +/// it forms a partial bound. +/// A B-rep is represented by one or more closed shells which +/// shall be disjoint. One shell, the outer, shall completely enclose +/// all the other shells and no other shell may enclose a shell. The +/// facility to define a B-rep with one or more internal voids is +/// provided by a subtype. The following version of the Euler formula +/// shall be satisfied, where V, E, F, Ll and S are the +/// numbers of unique vertices, edges, faces, loop uses and shells in +/// the model and Gs is the sum of the genus of the +/// shells. +/// +/// Instances of type IfcManifoldSolidBrep shall be of type +/// IfcFacetedBrep, using only IfcPolyLoop for the +/// bounds of IfcFaceBound, or of type IfcAdvancedBrep, +/// using only IfcAdvancedFace for the face geometry, and +/// IfcEdgeCurve for the edges. +/// +/// NOTE: Corresponding ISO 10303-42 entity: manifold_solid_brep. Please refer to ISO/IS 10303-42:1994, p. 170 for the final definition of the formal standard. IfcManifoldSolidBrep is defined as ABSTRACT supertype to prevent it from direct instantiation. +/// +/// HISTORY: New entity in IFC Release 1.0 +/// +/// Informal proposition: +/// +/// The dimensionality of a manifold solid brep shall be 3. +/// The extent of the manifold solid brep shall be finite and +/// non-zero. +/// All elements of the manifold solid brep shall have defined +/// associated geometry. +/// The shell normals shall agree with the B-rep normal and point +/// away from the solid represented by the B-rep. +/// Each face shall be referenced only once by the shells of the +/// manifold solid brep. +/// The Euler equation shall be satisfied for the boundary +/// representation, where the genus term "shell term" us the sum of +/// the genus values for the shells of the brep. +class IFC_PARSE_API IfcManifoldSolidBrep : public IfcSolidModel { +public: + /// A closed shell defining the exterior boundary of the solid. The shell normal shall point away from the interior of the solid. + ::Ifc4x3_add2::IfcClosedShell* Outer() const; + void setOuter(::Ifc4x3_add2::IfcClosedShell* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcManifoldSolidBrep (IfcEntityInstanceData* e); + IfcManifoldSolidBrep (::Ifc4x3_add2::IfcClosedShell* v1_Outer); + typedef aggregate_of< IfcManifoldSolidBrep > list; +}; +/// An IfcObject is the +/// generalization of any semantically treated thing or process. +/// Objects are things as they appear - i.e. occurrences. +/// NOTE Examples of IfcObject include +/// physically tangible items, such as wall, beam or covering, +/// physically existing items, such as spaces, or conceptual items, +/// such as grids or virtual boundaries. It also stands for +/// processes, such as work tasks, for controls, such as cost items, +/// for actors, such as persons involved in the design process, +/// etc. +/// Objects can be named, using the inherited Name +/// attribute, which should be a user recognizable label for the +/// object occurrance. Further explanations to the object can be +/// given using the inherited Description attribute. The +/// ObjectType attribute is used: +/// +/// to store the user defined value for all subtypes of +/// IfcObject, where a PredefinedType attribute is +/// given, and its value is set to USERDEFINED. +/// to provide a type information (could be seen as a very +/// lightweight classifier) of the subtype of IfcObject, if no +/// PredefinedType attribute is given. This is often the case, +/// if no comprehensive list of predefined types is available. +/// +/// Objects are independent pieces of information that might +/// contain or reference other pieces of information. There are +/// several relationships in which objects can be involved: +/// +/// Association to external/internal resource information +/// - an association relationship that refers to external/internal +/// sources of information. See supertype IfcObjectDefinition +/// for more information. +/// Assignment of other objects - an assignment +/// relationship that refers to other types of objects. See supertype +/// IfcObjectDefinition for more information. +/// Aggregation of other objects - an aggregation +/// relationship that establishes a whole/part relation. Objects can +/// either be a whole, or a part, or both. See supertype +/// IfcObjectDefinition for more information. +/// +/// Assignment of a type : IsTypedBy - a definition +/// relationship IfcRelDefinesByType that uses a type +/// definition to define the common characteristics of this +/// occurrences, potentially including the common shape +/// representation and common properties of all object occurrences +/// assigned to this type. It is a specific - occurrence relationship +/// with implied dependencies (as the occurrence properties depend on +/// the properties of the type, but may override them). +/// +/// NOTE See IfcRelDefinesByType for an +/// explanatory figure. Also see for how to override type properties +/// by occurrence properties +/// +/// Assignment of a partial type : IsDeclaredBy, +/// Declares - a definition relationship +/// IfcRelDefinesByObject that uses a component of a type +/// definition (a part of a type, called the "declaring part") to +/// define a component of an occurence (part of occurrence, called +/// the "reflected part"). This is also refered to as a "deep copy". +/// The common characteristics of all parts in the occurrence are +/// defined by parts in the type. It is a specific - occurrence +/// relationship with implied dependencies (as the occurrence +/// properties depend on the properties of the type, but may override +/// them). +/// +/// NOTE See IfcRelDefinesByObject for an +/// explanatory figure. +/// +/// Assignment of property sets : IsDefinedBy - a +/// definition relationship IfcRelDefinesByProperties that +/// assignes property set definitions to the object occurrence. +/// +/// HISTORY New Entity in IFC Release 1.0 +/// +/// IFC2x4 CHANGE The inverse relationships Declares, IsDeclaredBy, and IsTypedBy have been added, types are not longer included in the IsDefinesBy relationship. IfcProject has been promoted to be a subtype of IfcObjectDefinition -> IfcContext. +/// +/// Informal Proposition +/// +/// A partial type assignment, i.e. the inverse attribute +/// IsDeclaredBy, or Declares shall only be used, if +/// the object is part of a decomposition, i.e. if either +/// IsDecomposedBy, or Decomposes is exerted. +class IFC_PARSE_API IfcObject : public IfcObjectDefinition { +public: + /// The type denotes a particular type that indicates the object further. The use has to be established at the level of instantiable subtypes. In particular it holds the user defined type, if the enumeration of the attribute PredefinedType is set to USERDEFINED. + boost::optional< std::string > ObjectType() const; + void setObjectType(boost::optional< std::string > v); + aggregate_of< IfcRelDefinesByObject >::ptr IsDeclaredBy() const; // INVERSE IfcRelDefinesByObject::RelatedObjects + aggregate_of< IfcRelDefinesByObject >::ptr Declares() const; // INVERSE IfcRelDefinesByObject::RelatingObject + aggregate_of< IfcRelDefinesByType >::ptr IsTypedBy() const; // INVERSE IfcRelDefinesByType::RelatedObjects + aggregate_of< IfcRelDefinesByProperties >::ptr IsDefinedBy() const; // INVERSE IfcRelDefinesByProperties::RelatedObjects + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcObject (IfcEntityInstanceData* e); + IfcObject (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType); + typedef aggregate_of< IfcObject > list; +}; + +class IFC_PARSE_API IfcOffsetCurve : public IfcCurve { +public: + ::Ifc4x3_add2::IfcCurve* BasisCurve() const; + void setBasisCurve(::Ifc4x3_add2::IfcCurve* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcOffsetCurve (IfcEntityInstanceData* e); + IfcOffsetCurve (::Ifc4x3_add2::IfcCurve* v1_BasisCurve); + typedef aggregate_of< IfcOffsetCurve > list; +}; +/// Definition from ISO/CD 10303-42:1992: An offset curve 2d (IfcOffsetCurve2d) is a curve at a constant distance from a basis curve in two-dimensional space. This entity defines a simple plane-offset curve by offsetting by distance along the normal to basis curve in the plane of basis curve. The underlying curve shall have a well-defined tangent direction at every point. In the case of a composite curve, the transition code between each segment shall be cont same gradient or cont same gradient same curvature. +/// +/// NOTE: The offset curve 2d may differ in nature from the basis curve; the offset of a non self- intersecting curve can be self-intersecting. Care should be taken to ensure that the offset to a continuous curve does not become discontinuous. +/// +/// The offset curve 2d takes its parameterization from the basis curve. The offset curve 2d is parameterized as +/// +/// where T is the unit tangent vector to the basis curve C(u) at parameter value u, and d is distance. The underlying curve shall be two-dimensional. +/// +/// NOTE Corresponding ISO 10303 entity: offset_curve_2d, Please refer to ISO/IS 10303-42:1994, p.65 for the final definition of the formal standard. +/// +/// HISTORY New entity in IFC Release 2.x +class IFC_PARSE_API IfcOffsetCurve2D : public IfcOffsetCurve { +public: + /// The distance of the offset curve from the basis curve. distance may be positive, negative or zero. A positive value of distance defines an offset in the direction which is normal to the curve in the sense of an anti-clockwise rotation through 90 degrees from the tangent vector T at the given point. (This is in the direction of orthogonal complement(T).) + double Distance() const; + void setDistance(double v); + /// An indication of whether the offset curve self-intersects; this is for information only. + boost::logic::tribool SelfIntersect() const; + void setSelfIntersect(boost::logic::tribool v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcOffsetCurve2D (IfcEntityInstanceData* e); + IfcOffsetCurve2D (::Ifc4x3_add2::IfcCurve* v1_BasisCurve, double v2_Distance, boost::logic::tribool v3_SelfIntersect); + typedef aggregate_of< IfcOffsetCurve2D > list; +}; +/// Definition from ISO/CD 10303-42:1992: An offset curve 3d is a curve at a constant distance from a basis curve in three-dimensional space. The underlying curve shall have a well-defined tangent direction at every point. In the case of a composite curve the transition code between each segment shall be cont same gradient or cont same gradient same curvature. The offset curve at any point (parameter) on the basis curve is in the direction V x T where V is the fixed reference direction and T is the unit tangent to the basis curve. For the offset direction to be well defined, T shall not at any point of the curve be in the same, or opposite, direction as V. +/// +/// NOTE: The offset curve 3d may differ in nature from the basis curve; the offset of a non self- intersecting curve can be self-intersecting. Care should be taken to ensure that the offset to a continuous curve does not become discontinuous. +/// +/// The offset curve 3d takes its parameterization from the basis curve. The offset curve 3d is parameterized as +/// +/// where T is the unit tangent vector to the basis curve C(u) at parameter value u, and d is distance. The underlying curve shall be three-dimensional. +/// +/// NOTE Corresponding ISO 10303 entity: offset_curve_3d, Please refer to ISO/IS 10303-42:1994, p.66 for the final definition of the formal standard. +/// +/// HISTORY New entity in IFC Release 2.x +/// +/// Informal propositions: +/// +/// At no point on the curve shall ref direction be parallel, or opposite to, the direction of the tangent vector. +class IFC_PARSE_API IfcOffsetCurve3D : public IfcOffsetCurve { +public: + /// The distance of the offset curve from the basis curve. The distance may be positive, negative or zero. + double Distance() const; + void setDistance(double v); + /// An indication of whether the offset curve self-intersects, this is for information only. + boost::logic::tribool SelfIntersect() const; + void setSelfIntersect(boost::logic::tribool v); + /// The direction used to define the direction of the offset curve 3d from the basis curve. + ::Ifc4x3_add2::IfcDirection* RefDirection() const; + void setRefDirection(::Ifc4x3_add2::IfcDirection* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcOffsetCurve3D (IfcEntityInstanceData* e); + IfcOffsetCurve3D (::Ifc4x3_add2::IfcCurve* v1_BasisCurve, double v2_Distance, boost::logic::tribool v3_SelfIntersect, ::Ifc4x3_add2::IfcDirection* v4_RefDirection); + typedef aggregate_of< IfcOffsetCurve3D > list; +}; + +class IFC_PARSE_API IfcOffsetCurveByDistances : public IfcOffsetCurve { +public: + aggregate_of< ::Ifc4x3_add2::IfcPointByDistanceExpression >::ptr OffsetValues() const; + void setOffsetValues(aggregate_of< ::Ifc4x3_add2::IfcPointByDistanceExpression >::ptr v); + boost::optional< std::string > Tag() const; + void setTag(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcOffsetCurveByDistances (IfcEntityInstanceData* e); + IfcOffsetCurveByDistances (::Ifc4x3_add2::IfcCurve* v1_BasisCurve, aggregate_of< ::Ifc4x3_add2::IfcPointByDistanceExpression >::ptr v2_OffsetValues, boost::optional< std::string > v3_Tag); + typedef aggregate_of< IfcOffsetCurveByDistances > list; +}; +/// Definition from ISO/CD 10303-42:1992: A pcurve is a curve which lies on the basis of a surface and is defined in the parameter space of that surface. The basis curve is a curve defined in the two-dimensional parametric space of a reference basis surface. Although it is defined by a curve in two dimensional space, the variables involved are u and v, which occur in the parametric representation of the referenced surface, rather than the x, y, Cartesian coordinates. +/// +/// The basis curve is only defined within the parametric range of the surface. +/// +/// NOTE Corresponding ISO 10303 entity: pcurve. Please refer to ISO/IS 10303-42:1994, p.59 for the final definition of the formal standard. The definition of IfcPCurve derivates from pcurve. The following changes have been made: The BasisCurve replaces the definition of reference_to_curve since there is no requirement of having same dimensionality within the representation context. +/// +/// HISTORY New class in IFC2x4. +class IFC_PARSE_API IfcPcurve : public IfcCurve, public IfcCurveOnSurface { +public: + ::Ifc4x3_add2::IfcSurface* BasisSurface() const; + void setBasisSurface(::Ifc4x3_add2::IfcSurface* v); + ::Ifc4x3_add2::IfcCurve* ReferenceCurve() const; + void setReferenceCurve(::Ifc4x3_add2::IfcCurve* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPcurve (IfcEntityInstanceData* e); + IfcPcurve (::Ifc4x3_add2::IfcSurface* v1_BasisSurface, ::Ifc4x3_add2::IfcCurve* v2_ReferenceCurve); + typedef aggregate_of< IfcPcurve > list; +}; +/// Definition from ISO/CD 10303-46:1992: A planar box specifies an arbitrary rectangular box and its location in a two dimensional Cartesian coordinate system. +/// +/// NOTE  Corresponding ISO 10303 name: planar_box. Please refer to +/// ISO/IS 10303-46:1994, p. 141 for the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC2x2. +class IFC_PARSE_API IfcPlanarBox : public IfcPlanarExtent { +public: + /// The IfcAxis2Placement positions a local coordinate system for the definition of the rectangle. The origin of this local coordinate system serves as the lower left corner of the rectangular box. + /// NOTE  In case of a 3D placement by IfcAxisPlacement3D the IfcPlanarBox is defined within the xy plane of the definition coordinate system. + ::Ifc4x3_add2::IfcAxis2Placement* Placement() const; + void setPlacement(::Ifc4x3_add2::IfcAxis2Placement* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPlanarBox (IfcEntityInstanceData* e); + IfcPlanarBox (double v1_SizeInX, double v2_SizeInY, ::Ifc4x3_add2::IfcAxis2Placement* v3_Placement); + typedef aggregate_of< IfcPlanarBox > list; +}; +/// Definition from ISO/CD 10303-42:1992: A plane is an unbounded surface with a constant normal. A plane is defined by a point on the plane and the normal direction to the plane. The data is to be interpreted as follows: +/// +/// C = Position.Location +/// x = Position.P[1] +/// y = Position.P[2] +/// z = Position.P[3] => normal to plane +/// +/// and the surface is parameterized as: +/// +/// where the parametric range is -∞ < u,v < +/// ∞. In the above parameterization the length unit for the +/// unit vectors x and y is derived from the context of +/// the plane. +/// +/// The planar surface is an unbounded surface in the direction of x and y. Bounded planar surfaces are defined by using a subtype of IfcBoundedSurface with BasisSurface being a plane. +/// +/// NOTE A rectangular bounded planar surface can +/// be defined by an IfcRectangularTrimmedSurface with +/// BasisSurface being the plane and U1 = left bound in +/// x, U2 = right bound in x, V1 = lower +/// bound in y, V2 = upper bound in y if viewed +/// into the direction of the negative normal. (assuming the +/// Usense and Vsense agree to the sense of the basis +/// surface). +/// The inherited attributes are interpreted as +/// +/// SELF\IfcElementarySurface.Position defines the +/// location and orientation of the planar surface. +/// SELF\IfcElementarySurface.Position.Location defines a +/// point on the planar surface. +/// SELF\IfcElementarySurface.Position.P[3] defines the +/// normal of the planar surface. +/// +/// NOTE Corresponding ISO 10303 entity: plane. Please refer to ISO/IS 10303-42:1994, p.69 for the final definition of the formal standard. +/// +/// HISTORY New class in IFC Release 1.5 +class IFC_PARSE_API IfcPlane : public IfcElementarySurface { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPlane (IfcEntityInstanceData* e); + IfcPlane (::Ifc4x3_add2::IfcAxis2Placement3D* v1_Position); + typedef aggregate_of< IfcPlane > list; +}; + +class IFC_PARSE_API IfcPolynomialCurve : public IfcCurve { +public: + ::Ifc4x3_add2::IfcPlacement* Position() const; + void setPosition(::Ifc4x3_add2::IfcPlacement* v); + boost::optional< std::vector< double > /*[2:?]*/ > CoefficientsX() const; + void setCoefficientsX(boost::optional< std::vector< double > /*[2:?]*/ > v); + boost::optional< std::vector< double > /*[2:?]*/ > CoefficientsY() const; + void setCoefficientsY(boost::optional< std::vector< double > /*[2:?]*/ > v); + boost::optional< std::vector< double > /*[2:?]*/ > CoefficientsZ() const; + void setCoefficientsZ(boost::optional< std::vector< double > /*[2:?]*/ > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPolynomialCurve (IfcEntityInstanceData* e); + IfcPolynomialCurve (::Ifc4x3_add2::IfcPlacement* v1_Position, boost::optional< std::vector< double > /*[2:?]*/ > v2_CoefficientsX, boost::optional< std::vector< double > /*[2:?]*/ > v3_CoefficientsY, boost::optional< std::vector< double > /*[2:?]*/ > v4_CoefficientsZ); + typedef aggregate_of< IfcPolynomialCurve > list; +}; +/// The pre defined colour determines those qualified names which can be used to identify a colour that is in scope of the current data exchange specification (in contrary to colour specification which defines the colour directly by its colour components). +/// +/// NOTE  Corresponding ISO 10303 name: pre_defined_colour. It has been made into an abstract entity in IFC. Please refer to ISO/IS 10303-46:1994, p. 141 for the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC2x2. +class IFC_PARSE_API IfcPreDefinedColour : public IfcPreDefinedItem, public IfcColour, public IfcFillStyleSelect { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPreDefinedColour (IfcEntityInstanceData* e); + IfcPreDefinedColour (std::string v1_Name); + typedef aggregate_of< IfcPreDefinedColour > list; +}; +/// Definition from ISO/CD 10303-46:1992: The predefined curve font type is an abstract supertype provided to define an application specific curve font. The name label shall be constrained in the application protocol to values that are given specific meaning for curve fonts in that application protocol. +/// +/// NOTE: The IfcPreDefinedCurveFont is an abstract entity, subtypes of it provide the predefined curve font by agreement of the values of the inherited Name attribute. Currently the only subtype provided is IfcDraughtingPreDefinedCurveFont. +/// +/// NOTE: Corresponding ISO 10303 name: pre_defined_curve_font. Please refer to ISO/IS 10303-46:1994, p. 103 for the final definition of the formal standard. +/// +/// HISTORY: New entity in IFC2x2. +class IFC_PARSE_API IfcPreDefinedCurveFont : public IfcPreDefinedItem, public IfcCurveFontOrScaledCurveFontSelect, public IfcCurveStyleFontSelect { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPreDefinedCurveFont (IfcEntityInstanceData* e); + IfcPreDefinedCurveFont (std::string v1_Name); + typedef aggregate_of< IfcPreDefinedCurveFont > list; +}; +/// IfcPreDefinedPropertySet +/// is a generalization of all statically defined property sets that +/// are assigned to an object or type object. The statically or +/// pre-defined property sets are entities with a fixed list of +/// attributes having particular defined data types. +/// +/// IfcPreDefinedPropertySet's can be assigned to objects +/// and object types but do not have a defining property set +/// template. +/// +/// HISTORY New Entity in IFC2x4 +/// +/// Relationship use definition +/// Property sets are related to other objects by using the +/// relationship object that refers to the corresponding object: +/// +/// Occurrence Object: IfcRelDefinesByProperties +/// using the inverse attribute DefinesOccurrence. +/// Type Object: using a direct link by inverse attribute +/// DefinesType. +class IFC_PARSE_API IfcPreDefinedPropertySet : public IfcPropertySetDefinition { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPreDefinedPropertySet (IfcEntityInstanceData* e); + IfcPreDefinedPropertySet (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description); + typedef aggregate_of< IfcPreDefinedPropertySet > list; +}; +/// An IfcProcedureType defines a particular type of procedure that may be specified. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// An IfcProcedureType provides for all forms of types of procedure that may be specified. +/// +/// Usage of IfcProcedureType defines the parameters for +/// one or more occurrences of IfcProcedure. Parameters +/// may be specified through property sets that may be +/// enumerated in the IfcProcedureTypeEnum data type or +/// through explict attributes of IfcProcedure. Procedure occurrences +/// (IfcProcedure entities) are linked to the procedure type +/// through the IfcRelDefinesByType relationship. +class IFC_PARSE_API IfcProcedureType : public IfcTypeProcess { +public: + /// Identifies the predefined types of a procedure from which + /// the type required may be set. + ::Ifc4x3_add2::IfcProcedureTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcProcedureTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcProcedureType (IfcEntityInstanceData* e); + IfcProcedureType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ProcessType, ::Ifc4x3_add2::IfcProcedureTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcProcedureType > list; +}; +/// Definition from ISO9000: A process is a set of +/// activities that are interrelated or that interact with one +/// another. Processes use resources to transform inputs into +/// outputs. Processes are interconnected because the output from one +/// process becomes the input for another process. In effect, +/// processes are "glued" together by means of such input output +/// relationships. +/// +/// IfcProcess is defined as +/// one individual activity or event, that is ordered in time, that +/// has sequence relationships with other processes, which transforms +/// input in output, and may connect to other other processes through +/// input output relationships. An IfcProcess can be an +/// activity (or task), or an event. It takes usually place in +/// building construction with the intent of designing, costing, +/// acquiring, constructing, or maintaining products or other and +/// similar tasks or procedures. +/// +/// Figure 2 — Process relationships and the ICON process diagram. +/// +/// HISTORY New entity in IFC Release 1.0. +/// +/// IFC2x PLATFORM CHANGE The attribute Productivity has been removed. +/// +/// IFC2x4 CHANGE The attribute Identification has been promoted from subtypes IfcTask and others. +/// +/// Relationship use definition +/// Process information relates to other objects by establishing the following relationships: +/// +/// Nesting of processes : IfcRelNests - A process can contain sub processes and thereby be nested. +/// Sequencing of processes : IfcRelSequence - Processes can be placed in sequence (including overlapping for parallel tasks), and have predecessors and successors. +/// Assigning process to schedules : IfcRelAssignsToControl - Activities such as tasks, and predominately summary tasks, are assigned to a work schedule. +/// Having a product assigned to the process as input : +/// IfcRelAssignsToProcess - Products can be assigned as input to a process, such as for construction process planning. +/// Having a product assigned to the process as output : +/// IfcRelAssignsToProduct - Products can be assigned as output to a process, such as for construction process planning. +/// Having a control assigned to the process as process control : IfcRelAssignsToProcess - Items that act as a +/// control onto the process can be assigned to a process, such as for cost management (a cost item assigned to a work task). +/// Having a resource assigned to the process as consumed by the process : IfcRelAssignsToProcess - Items that act +/// as a mechanism to a process, such as labor, material and equipment in cost calculations. +class IFC_PARSE_API IfcProcess : public IfcObject, public IfcProcessSelect { +public: + /// An identifying designation given to a process or activity. + /// It is the identifier at the occurrence level. + /// + /// IFC2x4 CHANGE Attribute promoted from subtypes. + boost::optional< std::string > Identification() const; + void setIdentification(boost::optional< std::string > v); + /// An extended description or narrative that may be provided. + /// + /// IFC2x4 CHANGE  New attribute. + boost::optional< std::string > LongDescription() const; + void setLongDescription(boost::optional< std::string > v); + aggregate_of< IfcRelSequence >::ptr IsPredecessorTo() const; // INVERSE IfcRelSequence::RelatingProcess + aggregate_of< IfcRelSequence >::ptr IsSuccessorFrom() const; // INVERSE IfcRelSequence::RelatedProcess + aggregate_of< IfcRelAssignsToProcess >::ptr OperatesOn() const; // INVERSE IfcRelAssignsToProcess::RelatingProcess + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcProcess (IfcEntityInstanceData* e); + IfcProcess (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription); + typedef aggregate_of< IfcProcess > list; +}; +/// Any object that relates to a +/// geometric or spatial context. Subtypes of IfcProduct +/// usually hold a shape representation and a object placement within +/// the project structure. +/// This includes manufactured, supplied or created objects +/// (referred to as elements) for incorporation into an AEC/FM +/// project. This also includes objects that are created indirectly +/// by other products, as spaces are defined by bounding elements. +/// Products can be designated for permanent use or temporary use, an +/// example for the latter is formwork. Products are defined by their +/// properties and representations. +/// In addition to physical products (covered by the subtype +/// IfcElement) and spatial items (covered by the subtype +/// IfcSpatialElement) the IfcProduct also includes +/// non-physical items, that relate to a geometric or spatial +/// contexts, such as grid, port, annotation, structural actions, +/// etc. +/// The inherited ObjectType attribute can be used to +/// designate a particular type of the product instance. If subtypes +/// of IfcProduct have a PredefinedType defined, the +/// ObjectType is used to provide the user defined, particular +/// type of the product instance, if the PredefinedType is set +/// to USERDEFINED. +/// +/// HISTORY New Entity in IFC Release 1.0 +/// +/// Relationship use definition +/// On a generic level products can be assigned to processes, +/// controls, resources, project by using the relationship objects +/// that refer to the corresponding object: +/// +/// Having a control applied: assigned using +/// IfcRelAssignsToControl linking the IfcProduct to an +/// IfcControl +/// +/// An example of this +/// relationship is the assignment of a performance history to a +/// distribution element. +/// +/// Being assigned to a process: assigned using +/// IfcRelAssignsToProcess linking the IfcProduct to an +/// IfcProcess +/// +/// An example of this +/// relationship is the assignment of products like wall, slab, +/// column to a contruction task for construction +/// planning. +/// +/// Being assigned to a resource: assigned using +/// IfcRelAssignsToResource linking the IfcProduct to +/// an IfcResource +/// +/// An example of this +/// relationship is the assignment of products to a construction +/// resource that consumes the product. +/// +/// Type use definition +/// Any instance of IfcProduct defines a particular +/// occurrence of a product, the common type information, that +/// relates to many similar (or identical) occurrences of +/// IfcProduct, is handled by the IfcTypeProduct (and +/// its subtypes), assigned to one or many occurrences of +/// IfcProduct by using the objectified relationship +/// IfcRelDefinesByType. The IfcTypeProduct may +/// provide, in addition to common properties, also a common +/// geometric representation for all occurrences. +/// See IfcTypeProduct for how to use a +/// common geometric representation and IfcRelDefinesByType +/// for using and overriding common properties. +/// +/// Representation use definition +/// An IfcProduct occurs at a specific location in space if +/// it has a geometric representation assigned. It can be placed +/// relatively to other products, but ultimately relative to the +/// world coordinate system defined for this project. The +/// ObjectPlacement attribute establishes the coordinate +/// system in which all points and directions used by the geometric +/// representation items under Representation are +/// founded. The placement can either be: +/// +/// a relative placement: by IfcLocalPlacement with +/// PlacementRelTo pointing to a parent placement +/// an absolute placement: by IfcLocalPlacement +/// with PlacementRelTo being NIL +/// a placement relative to a grid: by +/// IfcGridPlacement +/// +/// The Representation is provided by an +/// IfcProductDefinitionShape being either a geometric shape +/// representation, or a topology representation (with or without +/// underlying geometry of the topological items). +class IFC_PARSE_API IfcProduct : public IfcObject, public IfcProductSelect, public IfcSpatialReferenceSelect { +public: + /// Placement of the product in space, the placement can either be absolute (relative to the world coordinate system), relative (relative to the object placement of another product), or constraint (e.g. relative to grid axes). It is determined by the various subtypes of IfcObjectPlacement, which includes the axis placement information to determine the transformation for the object coordinate system. + ::Ifc4x3_add2::IfcObjectPlacement* ObjectPlacement() const; + void setObjectPlacement(::Ifc4x3_add2::IfcObjectPlacement* v); + /// Reference to the representations of the product, being either a representation (IfcProductRepresentation) or as a special case a shape representations (IfcProductDefinitionShape). The product definition shape provides for multiple geometric representations of the shape property of the object within the same object coordinate system, defined by the object placement. + ::Ifc4x3_add2::IfcProductRepresentation* Representation() const; + void setRepresentation(::Ifc4x3_add2::IfcProductRepresentation* v); + aggregate_of< IfcRelAssignsToProduct >::ptr ReferencedBy() const; // INVERSE IfcRelAssignsToProduct::RelatingProduct + aggregate_of< IfcRelPositions >::ptr PositionedRelativeTo() const; // INVERSE IfcRelPositions::RelatedProducts + aggregate_of< IfcRelReferencedInSpatialStructure >::ptr ReferencedInStructures() const; // INVERSE IfcRelReferencedInSpatialStructure::RelatedElements + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcProduct (IfcEntityInstanceData* e); + IfcProduct (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation); + typedef aggregate_of< IfcProduct > list; +}; +/// IfcProject indicates the undertaking of some design, engineering, construction, or +/// maintenance activities leading towards a product. The project establishes the context for information to be exchanged or shared, and it may represent a construction project but does not have to. The IfcProject's main purpose in an exchange structure is to provide the root instance and the context for all other information items included. +/// The context provided by the IfcProject includes: +/// +/// the default units +/// the geometric representation context for exchange structures including shape representations +/// +/// the world coordinate system +/// the coordinate space dimension +/// the precision used within the geometric representations, and +/// optionally the indication of the true north relative to the world coordinate system +/// +/// HISTORY  New Entity in IFC Release 1.0 +/// +/// IFC2x4 CHANGE  The attributes RepresentationContexts and UnitsInContext are made optional and are promoted to supertype IfcContext. +/// +/// Relationship use definition +/// The IfcProject is used to reference the root of the spatial structure of a building (that serves as the primary project breakdown and is required to be hierarchical). The spatial structure elements are linked together, and to the IfcProject, by using the objectified relationship IfcRelAggregates. The IfcProject references them by its inverse relationship: +/// +/// IfcProject.Decomposes -- it shall be NIL, i.e. the +/// IfcProject shall not be decomposed into any parts. +/// IfcProject.IsDecomposedBy -- referencing +/// (IfcSite || IfcBuilding) by +/// IfcRelAggregates.RelatingObject. The IfcSite or +/// IfcBuilding referenced shall be the root of the spatial +/// structure. +/// +/// The IfcProject is also the context for other information about the construction project such as a work plan. Non-product structures are assigned by their first level object to IfcProject using the IfcRelDeclares relationship. +/// +/// The IfcProject provides the context for spatial elements and the associated products, and for work plans (or other non-product based) descriptions of the construction project. It is handled by two distinct relationship objects as shown in Figure 3. +/// NOTE   The spatial structure and the schedule structure can be decomposed. For example the IfcBuilding can be decomposed into IfcBuildingStorey's, and the IfcWorkPlan can be decomposed into IfcWorkSchedule's. +/// NOTE   The products and tasks can be decomposed further. For example the IfcCurtainWall can be decomposed into IfcMember and IfcPlate, the IfcTask can be decomposed into other IfcTask's. +/// NOTE   The products and tasks can have direct linking relationships. For example the IfcCurtainWall can be assigned to a IfcTask as an input or output for a construction schedule. +/// NOTE   The anomaly to use the composition structure through IfcRelAggregates for assigning the uppermost spatial container to IfcProject is due to upward compatibility reasons with earlier releases of this standard. +/// +/// Figure 3 — Project spatial and work plan structure +/// +/// As shown in Figure 4, the IfcProject provides the context for project libraries that in return provide a context to the library items assigned to it. Product types are an example for items that can be included in a project library. +/// +/// Figure 4 — Project spatial structure, products and product type library +/// +/// Informal propositions: +/// +/// There shall only be one project within the exchange context. This is enforced by the global rule IfcSingleProjectInstance. +class IFC_PARSE_API IfcProject : public IfcContext { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcProject (IfcEntityInstanceData* e); + IfcProject (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_LongName, boost::optional< std::string > v7_Phase, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationContext >::ptr > v8_RepresentationContexts, ::Ifc4x3_add2::IfcUnitAssignment* v9_UnitsInContext); + typedef aggregate_of< IfcProject > list; +}; +/// IfcProjectLibrary collects all library elements that are included within a referenced project data set. +/// +/// Examples for project libraries include: +/// +/// type libraries (also called style or family libraries): a collection of subtypes of IfcTypeObject +/// property definition libraries: a collections of IfcPropertySetTemplate or IfcPropertyTemplates +/// +/// HISTORY New entity in IFC2x4. +/// +/// Attribute use definition +/// +/// SELF\IfcContext.RepresentationContext +/// Context of the representations used within the project library. When the project library includes shape representations for its library type objects, one or several geometric representation contexts need to be included that define the coordinate system, the coordinate space dimensions, and/or the precision factor. +/// +/// SELF\IfcContext.UnitsInContext +/// Units locally assigned to measure types used within the context of this project library. +/// +/// NOTE  It is generally discouraged to use a different length measure and plane angle measure in an included project library compared with the project itself. It may lead to unexpected results for the shape representation of items included in the project library. +/// +/// Relationship use definition +/// +/// Instances of IfcProjectLibrary are assigned to the project context using the IfcRelDeclares relationship and accessible through the inverse attribute HasContext. Individual object types and property (set) templates are assigned to the IfcProjectLibrary using the IfcRelDeclares relationship and are accessible through the inverse attribute Declares. +/// +/// An IfcProjectLibrary may be decomposed into sub libraries using the relationship IfcRelNests. Sub libraries are accessed by the IfcProjectLibrary through the inverse attribute IsNestedBy. +class IFC_PARSE_API IfcProjectLibrary : public IfcContext { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcProjectLibrary (IfcEntityInstanceData* e); + IfcProjectLibrary (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_LongName, boost::optional< std::string > v7_Phase, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationContext >::ptr > v8_RepresentationContexts, ::Ifc4x3_add2::IfcUnitAssignment* v9_UnitsInContext); + typedef aggregate_of< IfcProjectLibrary > list; +}; +/// A property with a bounded +/// value, IfcPropertyBoundedValue, defines a property +/// object which has a maximum of two (numeric or descriptive) +/// values assigned, the first value specifying the upper bound +/// and the second value specifying the lower bound. It defines +/// a property - value bound (min-max) combination for which +/// the property Name, an optional +/// Description,the optional UpperBoundValue +/// with measure type, the optional LowerBoundValue with +/// measure type, and the optional Unit is given. +/// +/// A set point value can be provided in addition to the upper and lower bound values for operational value setting. +/// +/// The unit is handled by the Unit attribute: +/// +/// If the Unit attribute is not given, then the +/// unit is already implied by the type of +/// IfcMeasureValue or IfcDerivedMeasureValue. +/// The associated unit can be found at the +/// IfcUnitAssignment globally defined at the project +/// level (IfcProject.UnitsInContext). +/// +/// If the Unit attribute is given, then the unit +/// assigned by the Unit attribute overrides the +/// globally assigned unit. +/// +/// The IfcPropertyBoundedValue allows for the +/// specification of an interval for the value component of the +/// property description. If either the +/// LowerBoundValue or the UpperBoundValue is not +/// given, then it indicates an open bound (either a minimum +/// value or a maximum value). The interval is by definition +/// inclusive, that is, the value given for the +/// LowerBoundValue or the UpperBoundValue is +/// included in the interval. +/// +/// NOTE  An IfcPropertyBoundedValue may be +/// exchanged with no values assigned yet. In this case the +/// LowerBoundValue and the UpperBoundValue are +/// set to NIL. +/// +/// Examples of a property with bounded value are: +/// +/// Name +/// +/// UpperBoundValue +/// +/// LowerBoundValue +/// +/// SetPointValue +/// +/// Type (through +/// IfcValue, WR1 ensures same type for both +/// values) +/// +/// Unit +/// +/// OverallHeight +/// +/// 1930 +/// +/// 2300 +/// +/// IfcPositiveLengthMeasure +/// +/// - +/// +/// OverallWidth +/// +/// 0.9 +/// +/// 1.25 +/// +/// IfcPositiveLengthMeasure +/// +/// m +/// +/// MaxHeight +/// +/// 20.0 +/// +/// IfcPositiveLengthMeasure +/// +/// - +/// +/// MinWeight +/// +/// 20 +/// +/// IfcMassMeasure +/// +/// kg +/// +/// HISTORY New entity in IFC Release 2x. +/// +/// IFC2x2 CHANGE  The attribute type of the attribute UpperBoundValue and LowerBoundValue has been changed from mandatory to optional with upward compatibility for file based exchange. +/// +/// IFC2x4 CHANGE  The attribute SetPointValue has been added. +/// +/// Informal proposition: +/// +/// If the measure type for the upper and lover bound value +/// is a numeric measure, then the following shall be true: +/// UpperBoundValue > LowerBoundValue. +class IFC_PARSE_API IfcPropertyBoundedValue : public IfcSimpleProperty { +public: + /// Upper bound value for the interval defining the property value. If the value is not given, it indicates an open bound (all values to be greater than or equal to LowerBoundValue). + ::Ifc4x3_add2::IfcValue* UpperBoundValue() const; + void setUpperBoundValue(::Ifc4x3_add2::IfcValue* v); + /// Lower bound value for the interval defining the property value. If the value is not given, it indicates an open bound (all values to be lower than or equal to UpperBoundValue). + ::Ifc4x3_add2::IfcValue* LowerBoundValue() const; + void setLowerBoundValue(::Ifc4x3_add2::IfcValue* v); + /// Unit for the upper and lower bound values, if not given, the default value for the measure type is used as defined by the global unit assignment at IfcProject.UnitInContext. The applicable unit is then selected by the underlying TYPE of the UpperBoundValue, LowerBoundValue, and SetPointValue) + ::Ifc4x3_add2::IfcUnit* Unit() const; + void setUnit(::Ifc4x3_add2::IfcUnit* v); + /// Set point value as typically used for operational value setting. + /// + /// IFC2x4 CHANGE  The attribute has been added at the end of the attribute list. + ::Ifc4x3_add2::IfcValue* SetPointValue() const; + void setSetPointValue(::Ifc4x3_add2::IfcValue* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPropertyBoundedValue (IfcEntityInstanceData* e); + IfcPropertyBoundedValue (std::string v1_Name, boost::optional< std::string > v2_Specification, ::Ifc4x3_add2::IfcValue* v3_UpperBoundValue, ::Ifc4x3_add2::IfcValue* v4_LowerBoundValue, ::Ifc4x3_add2::IfcUnit* v5_Unit, ::Ifc4x3_add2::IfcValue* v6_SetPointValue); + typedef aggregate_of< IfcPropertyBoundedValue > list; +}; +/// A property with an enumerated +/// value, IfcPropertyEnumeratedValue, defines a property +/// object which has a value assigned that is chosen from an +/// enumeration. It defines a property - value combination for which +/// theproperty Name, an optional Description,the +/// optional EnumerationValues +/// with measure type and optionally an Unit is given. +/// +/// NOTE  Multiple choices from the property enumeration are supported. +/// +/// The unit is handled by the Unit attribute of the +/// IfcPropertyEnumeration: +/// +/// If the Unit attribute is not given, then the unit is +/// already implied by the type of IfcMeasureValue or +/// IfcDerivedMeasureValue. The associated unit can be found +/// at the IfcUnitAssignment globally defined at the project +/// level (IfcProject.UnitsInContext). +/// If the Unit attribute is given, then the unit assigned +/// by the unit attribute overrides the globally assigned unit. +/// +/// More precisely: The IfcPropertyEnumeratedValue defines +/// a property, which value is selected from a defined list of +/// enumerators. The enumerators are stored in a dynamic enumeration +/// of values including the type information from IfcValue +/// (see IfcPropertyEnumeration). This enables applications to +/// use an enumeration value as a property within a property set +/// (IfcPropertySet) including the allowed list of +/// values. +/// +/// NOTE  An IfcPropertyEnumeratedValue may be exchanged with no values assigned yet. In this case the EnumerationValues are set to NIL. +/// +/// Examples of a property with enumerated value are: +/// +/// Name +/// Value (EnumerationValue) +/// Type (through +/// IfcValue) +/// ref.IfcPropertyEnumeration +/// (Name) +/// +/// BladeAction +/// Opposed +/// IfcString +/// DamperBladeActionEnum +/// +/// BladeAction +/// Parallel +/// IfcString +/// DamperBladeActionEnum +/// +/// The IfcPropertyEnumeratedValue refers to an +/// IfcPropertyEnumeration, e.g. for the above: +/// +/// Name +/// EnumerationValues +/// Type (through +/// IfcValue) +/// Unit +/// +/// DamperBladeActionEnum +/// (Parallel, Opposed, Other, Unset) +/// IfcString +/// - +/// +/// It is not mandatory to use an instance of +/// IfcPropertyEnumeration to hold the applicable values for +/// IfcPropertyEnumeratedValue, however this is the preferred +/// way. A single instance of IfcPropertyEnumeration can be +/// referenced by multiple instances of +/// IfcPropertyEnumeratedValue. +/// +/// HISTORY New Entity in IFC Release 2.0, capabilities enhanced in IFC2x. The entity has +/// been renamed from IfcEnumeratedProperty in IFC2x. +/// +/// IFC2x4 CHANGE Attribute EnumerationValues has been made OPTIONAL with upward +/// compatibility for file based exchange. +class IFC_PARSE_API IfcPropertyEnumeratedValue : public IfcSimpleProperty { +public: + /// Enumeration values, which shall be listed in the referenced IfcPropertyEnumeration, if such a reference is provided. + /// + /// IFC2x4 CHANGE  The attribute has been made optional with upward compatibility for file based exchange. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > EnumerationValues() const; + void setEnumerationValues(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > v); + /// Enumeration from which a enumeration value has been selected. The referenced enumeration also establishes the unit of the enumeration value. + ::Ifc4x3_add2::IfcPropertyEnumeration* EnumerationReference() const; + void setEnumerationReference(::Ifc4x3_add2::IfcPropertyEnumeration* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPropertyEnumeratedValue (IfcEntityInstanceData* e); + IfcPropertyEnumeratedValue (std::string v1_Name, boost::optional< std::string > v2_Specification, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > v3_EnumerationValues, ::Ifc4x3_add2::IfcPropertyEnumeration* v4_EnumerationReference); + typedef aggregate_of< IfcPropertyEnumeratedValue > list; +}; +/// An IfcPropertyListValue +/// defines a property that has several (numeric or +/// descriptive) values assigned, these values are given by an +/// ordered list.It defines a property - list value +/// combination for which the property Name, an optional +/// Description,the optional ListValues with measure +/// type and optionally an Unit is given. +/// +/// An IfcPropertyListValue is a list of values. The +/// order in which values appear is significant. Each value in +/// the list is unique i.e. no duplicate values are allowed. +/// All list members shall be of the same type. +/// +/// The unit applicable to all values is handled by the +/// Unit attribute: +/// +/// If the Unit attribute is not given, then the +/// unit is already implied by the type of +/// IfcMeasureValue or IfcDerivedMeasureValue. +/// The associated unit can be found at the +/// IfcUnitAssignment globally defined at the project +/// level (IfcProject.UnitsInContext). +/// +/// If the Unit attribute is given, then the unit +/// assigned by the Unit attribute overrides the +/// globally assigned unit. +/// +/// Example of a property with list value is: +/// +/// Name +/// +/// ListValues +/// +/// Type (through +/// IfcValue) +/// +/// Unit +/// +/// ApplicableSizes +/// +/// 1200 +/// +/// IfcPositiveLengthMeasure +/// +/// - +/// +/// - +/// +/// 1600 +/// +/// IfcPositiveLengthMeasure +/// +/// - +/// +/// - +/// +/// 2400 +/// +/// IfcPositiveLengthMeasure +/// +/// - +/// +/// HISTORY  New Entity in Release IFC 2x Edition 2. +/// +/// IFC2x4 CHANGE  Attribute ListValues has been made OPTIONAL with upward compatibility for file based exchange. +class IFC_PARSE_API IfcPropertyListValue : public IfcSimpleProperty { +public: + /// List of property values. + /// + /// IFC2x4 CHANGE  The attribute has been made optional with upward compatibility for file based exchange. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > ListValues() const; + void setListValues(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > v); + /// Unit for the list values, if not given, the default value for the measure type (given by the TYPE of nominal value) is used as defined by the global unit assignment at IfcProject. + ::Ifc4x3_add2::IfcUnit* Unit() const; + void setUnit(::Ifc4x3_add2::IfcUnit* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPropertyListValue (IfcEntityInstanceData* e); + IfcPropertyListValue (std::string v1_Name, boost::optional< std::string > v2_Specification, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > v3_ListValues, ::Ifc4x3_add2::IfcUnit* v4_Unit); + typedef aggregate_of< IfcPropertyListValue > list; +}; +/// IfcPropertyReferenceValue allows a property value to +/// be given by referencing other entities within the resource +/// definitions of IFC. Those other entities are regarded as +/// predefined complex properties and can be aggregated within +/// a property set (IfcPropertySet). The allowable +/// entities to be used as value references are given by the +/// IfcObjectReferenceSelect. +/// +/// HISTORY  New entity in IFC +/// Release 1.5. Entity has been renamed from +/// IfcObjectReference in IFC Release 2x. +/// +/// IFC2x4 CHANGE  Attribute +/// PropertyReference has been made OPTIONAL with upward +/// compatibility for file based exchange. +class IFC_PARSE_API IfcPropertyReferenceValue : public IfcSimpleProperty { +public: + /// Description of the use of the referenced value within the property. + boost::optional< std::string > UsageName() const; + void setUsageName(boost::optional< std::string > v); + /// Reference to another property entity through one of the select types in the IfcObjectReferenceSelect. + /// + /// IFC2x4 CHANGE  The attribute has been made optional with upward compatibility for file based exchange. + ::Ifc4x3_add2::IfcObjectReferenceSelect* PropertyReference() const; + void setPropertyReference(::Ifc4x3_add2::IfcObjectReferenceSelect* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPropertyReferenceValue (IfcEntityInstanceData* e); + IfcPropertyReferenceValue (std::string v1_Name, boost::optional< std::string > v2_Specification, boost::optional< std::string > v3_UsageName, ::Ifc4x3_add2::IfcObjectReferenceSelect* v4_PropertyReference); + typedef aggregate_of< IfcPropertyReferenceValue > list; +}; +/// IfcPropertySet defines all dynamically extensible +/// properties. The property set is a container class that holds +/// properties within a property tree. These properties are interpreted +/// according to their name attribute. +/// The same IfcPropertySet can be assignd to multiple +/// object occurrences, it should then be assigned by a single instance +/// of IfcRelDefinedByProperties to a set of related objects. +/// Those property sets are referred to as shared property sets. It can +/// also be assigned to an object type. +/// The underlying structure, i.e. the required name, the applicable +/// object or object types to which the property set can be attached +/// and the individual properties that maybe included can be assigned +/// using the property set template. +/// +/// NOTE  See IfcRelDefinesByType for how to override property sets assigned to an object type within the object occurrence. +/// +/// HISTORY  New Entity in IFC Release 1.0 +/// +/// IFC2x4 CHANGE  All statically defined property set entities are no longer subtypes of +/// IfcPropertySet. +/// +/// Relationship use definition +/// Property sets are related to other objects by using the +/// relationship object that refers to the corresponding object: +/// +/// Occurrence Object: IfcRelDefinesByProperties +/// using the inverse attribute DefinesOccurrence. +/// Type Object: using a direct link by inverse attribute +/// DefinesType. +/// External reference: subtypes of +/// IfcRelAssociates are used to provide a link to a +/// classification system, or external library providing further +/// reference to the property set. Accessible by inverse attribute +/// HasAssociations. +/// Underlying template: IfcRelDefinesByTemplate +/// using the inverse attribute IsDefinedBy. +/// +/// Attribute use definition +/// Instances of IfcPropertySet are used to assign named +/// sets of individual properties (complex or single properties). Each +/// individual property has a significant name string. Some property +/// sets are included in the IFC specification and have a +/// predefined set of properties indicated by assigning a significant +/// name. These property sets are listed under "property sets" main +/// menu item within this specification and from the object +/// documentation sheet for those object to which they are applicable. +/// The naming convention "Pset_Xxx" applies to all those property sets +/// that are defined as part of the IFC specification and it shall be +/// used as the value of the Name attribute. +/// In addition any user defined property set can be captured. +/// Property sets that are not declared as part of the IFC +/// specification shall have a Name value not including the +/// "Pset_" prefix. +class IFC_PARSE_API IfcPropertySet : public IfcPropertySetDefinition { +public: + /// Contained set of properties. For property sets defined as part of the IFC Object model, the property objects within a property set are defined as part of the standard. If a property is not contained within the set of predefined properties, its value has not been set at this time. + aggregate_of< ::Ifc4x3_add2::IfcProperty >::ptr HasProperties() const; + void setHasProperties(aggregate_of< ::Ifc4x3_add2::IfcProperty >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPropertySet (IfcEntityInstanceData* e); + IfcPropertySet (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcProperty >::ptr v5_HasProperties); + typedef aggregate_of< IfcPropertySet > list; +}; +/// IfcPropertySetTemplate defines the template for all +/// dynamically extensible property sets represented by +/// IfcPropertySet. The property set template is a container +/// of property templates within a property tree. The individual +/// property templates are interpreted according to their Name +/// attribute and shall have no values assigned. +/// NOTE  By +/// convention an IfcPropertySetTemplate can also be used as a +/// template for an IfcElementQuantity, being a particular +/// type of a property set definition. +/// Property set templates can form part of a property library used +/// and declared within a project. Depending on the +/// TemplateType the IfcPropertySetTemplate defines a +/// template for: +/// +/// "Pset_" - occurrences of IfcPropertySet +/// "QTO_" - occurrences of IfcElementQuantity +/// +/// HISTORY New Entity in IFC2x4. +/// +/// Relationship use definition +/// +/// The inherited HasContext inverse relation to IfcRelDeclares is used to declare the IfcPropertySetTemplate within a project library. If included in an exchange data set it can then be traversed through the IfcProjectLibrary. +/// +/// The Defines inverse relation to IfcRelDefinesByTemplate is provided to keep the definition relationship between the IfcPropertySetTemplate and the one to many IfcPropertySet's, for which it provides the template. +/// +/// Between IfcProperty's within the HasProperties set of IfcPropertySet having the same Name attribute value as the IfcPropertyTemplate's within the HasPropertyTemplates set of IfcPropertySetTemplate an implicit definition relationship is established that assigns the template to the individual properties. +/// +/// Figure 5 illustrates relationships used for property set templates. +/// +/// Figure 5 — Property set template relationships +class IFC_PARSE_API IfcPropertySetTemplate : public IfcPropertyTemplateDefinition { +public: + /// Property set type defining whether the property set is applicable to a type (subtypes of IfcTypeObject), to an occurrence (subtypes of IfcObject), or as a special case to a performance history. + /// The attribute ApplicableEntity may further refine the applicability to a single or multiple entity type(s). + boost::optional< ::Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::Value > TemplateType() const; + void setTemplateType(boost::optional< ::Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::Value > v); + /// The attribute optionally defines the data type of the applicable type or occurrence object, to which the assigned property set template can relate. If not present, no instruction is given to which type or occurrence object the property set template is applicable. The following conventions are used: + /// + /// The IFC entity name of the applicable entity using the IFC naming convention, CamelCase with IFC prefix + /// It can be optionally followed by the predefined type after the separator "/" (forward slash), using upper case + /// If a performance history object of a particular distribution object is attributes by the property set template, then the entity name (and potentially amended by the predefined type) is expanded by adding '[PerformanceHistory]' + /// If one property set template is applicable to many type and/or occurrence objects, then those object names should be separate by comma "," forming a comma separated string. + /// + /// EXAMPLE Refering to a boiler type as applicable entity would be expressed as 'IfcBoilerType', refering to a steam boiler type as applicable entity would be expressed as 'IfcBoilerType/STEAM', refering to a wall and wall standard case and a wall type would be expressed as 'IfcWall, IfcWallStandardCase, IfcWallType'. + /// + /// An applicable IfcPerformanceHistory assigned to an occurrence or type object would be indicated by IfcBoilerType[PerformanceHistory], or respectively IfcBoilerType/STEAM[PerformanceHistory]. + boost::optional< std::string > ApplicableEntity() const; + void setApplicableEntity(boost::optional< std::string > v); + /// Set of IfcPropertyTemplate's that are defined within the scope of the IfcPropertySetTemplate. + aggregate_of< ::Ifc4x3_add2::IfcPropertyTemplate >::ptr HasPropertyTemplates() const; + void setHasPropertyTemplates(aggregate_of< ::Ifc4x3_add2::IfcPropertyTemplate >::ptr v); + aggregate_of< IfcRelDefinesByTemplate >::ptr Defines() const; // INVERSE IfcRelDefinesByTemplate::RelatingTemplate + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPropertySetTemplate (IfcEntityInstanceData* e); + IfcPropertySetTemplate (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< ::Ifc4x3_add2::IfcPropertySetTemplateTypeEnum::Value > v5_TemplateType, boost::optional< std::string > v6_ApplicableEntity, aggregate_of< ::Ifc4x3_add2::IfcPropertyTemplate >::ptr v7_HasPropertyTemplates); + typedef aggregate_of< IfcPropertySetTemplate > list; +}; +/// The property with a single value +/// IfcPropertySingleValue defines a property object which has +/// a single (numeric or descriptive) value assigned. It defines a +/// property - single value combination for which the property +/// Name, an optional Description,and an optional +/// NominalValue with measure type is provided. In addition, +/// the default unit as specified within the project unit context can +/// be overriden by assigning an Unit. +/// The unit is handled by the Unit attribute: +/// +/// If the Unit attribute is not given, then the unit is +/// already implied by the type of IfcMeasureValue or +/// IfcDerivedMeasureValue. The associated unit can be found +/// at the IfcUnitAssignment globally defined at the project +/// level (IfcProject.UnitsInContext). +/// If the Unit attribute is given, then the unit assigned +/// by the Unit attribute overrides the globally assigned +/// unit. +/// +/// Examples of a property with single value are: +/// +/// Name +/// NominalValue +/// Type (through IfcValue) +/// Unit +/// +/// Description +/// Manufacturer "A" door +/// IfcLabel +/// - +/// +/// PanelThickness +/// 0.12 +/// IfcPositiveLengthMeasure +/// - +/// +/// ThermalTransmittance +/// 2.6 +/// IfcThermalTransmittanceMeasure +/// W/(m2K) +/// +/// HISTORY New entity in IFC Release 1.0. The entity has been renamed from IfcSimpleProperty in IFC Release 2x. +/// +/// IFC2x3 CHANGE Attribute NominalValue has been made OPTIONAL with upward compatibility for file based exchange. +class IFC_PARSE_API IfcPropertySingleValue : public IfcSimpleProperty { +public: + /// Value and measure type of this property. + /// + /// NOTE  By virtue of the defined data type, that is selected from the SELECT IfcValue, the appropriate unit can be found within the IfcUnitAssignment, defined for the project if no value for the unit attribute is given. + /// + /// IFC2x3 CHANGE  The attribute has been made optional with upward compatibility for file based exchange. + ::Ifc4x3_add2::IfcValue* NominalValue() const; + void setNominalValue(::Ifc4x3_add2::IfcValue* v); + /// Unit for the nominal value, if not given, the default value for the measure type (given by the TYPE of nominal value) is used as defined by the global unit assignment at IfcProject. + ::Ifc4x3_add2::IfcUnit* Unit() const; + void setUnit(::Ifc4x3_add2::IfcUnit* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPropertySingleValue (IfcEntityInstanceData* e); + IfcPropertySingleValue (std::string v1_Name, boost::optional< std::string > v2_Specification, ::Ifc4x3_add2::IfcValue* v3_NominalValue, ::Ifc4x3_add2::IfcUnit* v4_Unit); + typedef aggregate_of< IfcPropertySingleValue > list; +}; +/// A property with a range value +/// (IfcPropertyTableValue) defines a property object +/// which has two lists of (numeric or descriptive) values +/// assigned, the values specifying a table with two columns. +/// The defining values provide the first column and establish +/// the scope for the defined values (the second column). +/// Interpolations are out of scope of the +/// IfcPropertyTableValue. An optional Expression +/// attribute may give the equation used for deriving the range +/// value, which is for information purposes only. +/// +/// The IfcPropertyTableValue defines a defining/defined +/// property value combination for which the property name, the +/// table with defining and defined values with measure type +/// (and optional the units for defining and defined values) +/// are given. +/// +/// The units are handled by the DefiningUnit and +/// DefinedUnit attributes: +/// +/// If the DefiningUnit or DefinedUnit +/// attribute is not given, then the unit is already implied by +/// the type of IfcMeasureValue or +/// IfcDerivedMeasureValue. The associated unit can be +/// found at the IfcUnitAssignment globally defined at +/// the project level (IfcProject.UnitsInContext). +/// +/// If the DefiningUnit or DefinedUnit +/// attribute is given, then the unit assigned by the unit +/// attribute overrides the globally assigned unit. +/// +/// The IfcPropertyTableValue allows for the +/// specification of a table of defining/defined value pairs of +/// the property description. The optional +/// attribute CurveInterpolation allows to determine the +/// interval between two given values. +/// +/// Examples of a property with range value are: +/// +/// Name +/// +/// DefiningValues +/// +/// DefiningValue Type (through IfcValue) +/// +/// DefinedValues +/// +/// DefinedValue Type (through +/// IfcValue) +/// +/// DefingUnit +/// +/// DefinedUnit +/// +/// SoundTransmissionLoss +/// +/// 100 +/// +/// IfcFrequencyMeasure +/// +/// 20 +/// +/// IfcNumericMeasure +/// +/// - +/// +/// dB +/// +/// 200 +/// +/// IfcFrequencyMeasure +/// +/// 42 +/// +/// IfcNumericMeasure +/// +/// 400 +/// +/// IfcFrequencyMeasure +/// +/// 46 +/// +/// IfcNumericMeasure +/// +/// 800 +/// +/// IfcFrequencyMeasure +/// +/// 56 +/// +/// IfcNumericMeasure +/// +/// 1600 +/// +/// IfcFrequencyMeasure +/// +/// 60 +/// +/// IfcNumericMeasure +/// +/// 3200 +/// +/// IfcFrequencyMeasure +/// +/// 65 +/// +/// IfcNumericMeasure +/// +/// HISTORY: New entity in IFC2x. +/// +/// IFC2x4 CHANGE  Attributes DefiningValues and DefinedValues have been made OPTIONAL with upward compatibility for file based exchange. The attribute CurveInterpolation has been added.. +/// +/// Informal propositions: +/// +/// The list of DefinedValues and the list of +/// DefiningValues are corresponding lists. +class IFC_PARSE_API IfcPropertyTableValue : public IfcSimpleProperty { +public: + /// List of defining values, which determine the defined values. This list shall have unique values only. + /// + /// IFC2x4 CHANGE  The attribute has been made optional with upward compatibility for file based exchange. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > DefiningValues() const; + void setDefiningValues(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > v); + /// Defined values which are applicable for the scope as defined by the defining values. + /// + /// IFC2x4 CHANGE  The attribute has been made optional with upward compatibility for file based exchange. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > DefinedValues() const; + void setDefinedValues(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > v); + /// Expression for the derivation of defined values from the defining values, the expression is given for information only, i.e. no automatic processing can be expected from the expression. + boost::optional< std::string > Expression() const; + void setExpression(boost::optional< std::string > v); + /// Unit for the defining values, if not given, the default value for the measure type (given by the TYPE of the defining values) is used as defined by the global unit assignment at IfcProject. + ::Ifc4x3_add2::IfcUnit* DefiningUnit() const; + void setDefiningUnit(::Ifc4x3_add2::IfcUnit* v); + /// Unit for the defined values, if not given, the default value for the measure type (given by the TYPE of the defined values) is used as defined by the global unit assignment at IfcProject. + ::Ifc4x3_add2::IfcUnit* DefinedUnit() const; + void setDefinedUnit(::Ifc4x3_add2::IfcUnit* v); + /// Interpolation of the curve between two defining and defined values that are provided. if not provided a linear interpolation is assumed. + /// + /// IFC2x4 CHANGE  The attribute has been added at the end of the attribute list. + boost::optional< ::Ifc4x3_add2::IfcCurveInterpolationEnum::Value > CurveInterpolation() const; + void setCurveInterpolation(boost::optional< ::Ifc4x3_add2::IfcCurveInterpolationEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPropertyTableValue (IfcEntityInstanceData* e); + IfcPropertyTableValue (std::string v1_Name, boost::optional< std::string > v2_Specification, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > v3_DefiningValues, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcValue >::ptr > v4_DefinedValues, boost::optional< std::string > v5_Expression, ::Ifc4x3_add2::IfcUnit* v6_DefiningUnit, ::Ifc4x3_add2::IfcUnit* v7_DefinedUnit, boost::optional< ::Ifc4x3_add2::IfcCurveInterpolationEnum::Value > v8_CurveInterpolation); + typedef aggregate_of< IfcPropertyTableValue > list; +}; +/// The IfcPropertyTemplate is an abstract supertype +/// comprising the templates for all dynamically extensible properties, +/// either as an IfcComplexPropertyTemplate, or an +/// IfcSimplePropertyTemplate. These templates determine the +/// structure of: +/// +/// in case of IfcComplexPropertyTemplate +/// +/// an IfcComplexProperty +/// an IfcPhysicalComplexQuantity +/// +/// in case of IfcSimplePropertyTemplate +/// +/// a subtype of IfcSimpleProperty +/// a subtype of IfcPhysicalSimpleQuantity +/// +/// The individual property templates are interpreted according to +/// their Name attribute and may have a predefined property +/// type, property unit, and property data type. A template however +/// shall not have measure values, or quantity values assigned. . +/// +/// NOTE Property templates can form part of a property library used and attached as part of a project library. In general the IfcPropertySetTemplate, containing the subtypes of IfcPropertyTemplate would be directly linked to the IfcProjectLibrary. +/// +/// HISTORY New Entity in IFC2x4. +class IFC_PARSE_API IfcPropertyTemplate : public IfcPropertyTemplateDefinition { +public: + aggregate_of< IfcComplexPropertyTemplate >::ptr PartOfComplexTemplate() const; // INVERSE IfcComplexPropertyTemplate::HasPropertyTemplates + aggregate_of< IfcPropertySetTemplate >::ptr PartOfPsetTemplate() const; // INVERSE IfcPropertySetTemplate::HasPropertyTemplates + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPropertyTemplate (IfcEntityInstanceData* e); + IfcPropertyTemplate (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description); + typedef aggregate_of< IfcPropertyTemplate > list; +}; +/// IfcRectangleHollowProfileDef defines a section profile that provides the defining parameters of a rectangular (or square) hollow section to be used by the swept surface geometry or the swept area solid. Its parameters and orientation relative to the position coordinate system are according to the following illustration. A square hollow section can be defined by equal values for h and b. The centre of the position coordinate system is in the profiles centre of the bounding box (for symmetric profiles identical with the centre of gravity). Normally, the longer sides are parallel to the y-axis, the shorter sides parallel to the x-axis. +/// +/// HISTORY  New entity in IFC2x2. +/// +/// IFC2x4 CHANGE  Types of InnerFilletRadius and OuterFilletRadius relaxed to allow for zero values. +/// +/// Figure 322 illustrates parameters of a rectangular or square hollow profile definition. +/// +/// Position +/// The parameterized profile defines its own position coordinate system. +/// The underlying coordinate system is defined by the swept area solid +/// that uses the profile definition. It is the xy plane of: +/// +/// IfcSweptAreaSolid.Position +/// +/// by using offsets of the position location, the parameterized profile +/// can be positioned centric (using x,y offsets = 0.), or at any position +/// relative to the profile. +/// +/// Figure 322 — Rectangle hollow profile +class IFC_PARSE_API IfcRectangleHollowProfileDef : public IfcRectangleProfileDef { +public: + /// Thickness of the material. + double WallThickness() const; + void setWallThickness(double v); + /// Inner corner radius. + boost::optional< double > InnerFilletRadius() const; + void setInnerFilletRadius(boost::optional< double > v); + /// Outer corner radius. + boost::optional< double > OuterFilletRadius() const; + void setOuterFilletRadius(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRectangleHollowProfileDef (IfcEntityInstanceData* e); + IfcRectangleHollowProfileDef (::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_XDim, double v5_YDim, double v6_WallThickness, boost::optional< double > v7_InnerFilletRadius, boost::optional< double > v8_OuterFilletRadius); + typedef aggregate_of< IfcRectangleHollowProfileDef > list; +}; +/// The IfcRectangularPyramid is a Construction Solid +/// Geometry (CSG) 3D primitive. It is a solid with a rectangular base and +/// a point called apex as the top. The tapers from the base to the +/// top. The axis from the center of the base to the apex is +/// perpendicular to the base. The inherited Position +/// attribute defines the IfcAxisPlacement3D and provides the +/// location and orientation of the pyramid: +/// +/// SELF\IfcCsgPrimitive3D.Position: The location and +/// orientation of the axis system for the primitive.  +/// SELF\IfcCsgPrimitive3D.Position.Location: The center +/// of the circular area being the bottom face of the cone. +/// SELF\IfcCsgPrimitive3D.Position.Position[3]: The +/// z-axis of the inherited placement coordinate system provides the +/// center axis of the IfcRightCircularCone, and the apex is +/// at the Height value applied to the positive direction of +/// the z-axis. The BottomRadius defines the circular base at +/// the xy-plane of the placement coordinate system. +/// +/// As shown in Figure 260, the pyramid is positioned within its own placement coordinate system. The origin is the center of the bottom rectangle, that lies in the XY plane. The apex lies on the positive z axis at [0, 0, Height]. +/// +/// Figure 260 — Rectangular pyramid geometry +/// +/// NOTE  Corresponding ISO 10303 entity: right_circular_cone, the position attribute has been promoted to the immediate supertype IfcCsgPrimitive3D. No semi_angle attribute, and the radius defines the bottom radius, since only a non-truncated cone is in scope. Please refer to ISO/IS 10303-42:1994, p. 176 for the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC2x3 +/// +/// Texture use definition +/// +/// On each triangular side face, textures are aligned facing upright. +/// Textures are stretched or repeated to the extent of the base of each face according to RepeatS. +/// Textures are stretched or repeated towards the top point according to Repeat T, +/// where the top point has coordinates of (0.5,1.0) if RepeatT is False. +/// +/// On the bottom face, textures are aligned facing front-to-back. +/// +/// Figure 261 illustrates default texture mapping with a clamped texture (RepeatS=False and RepeatT=False). The image on the left shows the texture where the S axis points to the right and the T axis points up. The image on the right shows the texture applied to the geometry where the X axis points back to the right, the Y axis +/// points back to the left, and the Z axis points up. +/// +/// Side +/// Normal +/// Origin X +/// Origin Y +/// Origin Z +/// S Axis +/// T Axis +/// +/// Left +/// -X +/// 0 +/// +YLength +/// 0 +/// -Y +/// (towards top point) +/// +/// Right +/// +X +/// 0 +/// +YLength +/// 0 +/// +Y +/// (towards top point) +/// +/// Front +/// +X +/// 0 +/// 0 +/// 0 +/// +X +/// (towards top point) +/// +/// Back +/// +Y +/// +XLength +/// +YLength +/// 0 +/// -X +/// (towards top point) +/// +/// Bottom +/// -Z +/// +XLength +/// 0 +/// 0 +/// -X +/// +Y +/// +/// Figure 261 — Right circular cone textures +class IFC_PARSE_API IfcRectangularPyramid : public IfcCsgPrimitive3D { +public: + /// The length of the base measured along the placement X axis. It is provided by the inherited axis placement through SELF\IfcCsgPrimitive3D.Position.P[1]. + double XLength() const; + void setXLength(double v); + /// The length of the base measured along the placement Y axis. It is provided by the inherited axis placement through SELF\IfcCsgPrimitive3D.Position.P[2]. + double YLength() const; + void setYLength(double v); + /// The height of the apex above the plane of the base, measured in the direction of the placement Z axis, the SELF\IfcCsgPrimitive3D.Position.P[2]. + double Height() const; + void setHeight(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRectangularPyramid (IfcEntityInstanceData* e); + IfcRectangularPyramid (::Ifc4x3_add2::IfcAxis2Placement3D* v1_Position, double v2_XLength, double v3_YLength, double v4_Height); + typedef aggregate_of< IfcRectangularPyramid > list; +}; +/// Definition from ISO/CD 10303-42:1992: The trimmed surface is a simple bounded surface in which the boundaries are the constant parametric lines u1 = u1, u2 = u2, v1 = v1 and v2 = v2. All these values shall be within the parametric range of the referenced surface. Cyclic properties of the parameter range are assumed. +/// +/// NOTE 1 For example, 370 degrees is equivalent to 10 degrees, for those surfaces whose parametric form is defined using circular functions (sine and cosine). +/// +/// The rectangular trimmed surface inherits its parameterization directly from the basis surface and has parameter ranges from 0 to |u2 - u1| and 0 to|v2-v1|. +/// +/// NOTE 2 If the surface is closed in a given parametric direction, the values of u2 or v2 may require to be increased by the cyclic range. +/// +/// NOTE Corresponding ISO 10303 name: rectangular_trimmed_surface. Please refer to ISO/IS 10303-42:1994, p.86 for the final definition of the formal standard. +/// +/// HISTORY New class in IFC Release 2x. +/// +/// Informal propositions: +/// +/// The domain of the trimmed surface shall be within the domain of the surface being trimmed. +class IFC_PARSE_API IfcRectangularTrimmedSurface : public IfcBoundedSurface { +public: + /// Surface being trimmed. + ::Ifc4x3_add2::IfcSurface* BasisSurface() const; + void setBasisSurface(::Ifc4x3_add2::IfcSurface* v); + /// First u parametric value. + double U1() const; + void setU1(double v); + /// First v parametric value. + double V1() const; + void setV1(double v); + /// Second u parametric value. + double U2() const; + void setU2(double v); + /// Second v parametric value. + double V2() const; + void setV2(double v); + /// Flag to indicate whether the direction of the first parameter of the trimmed surface agrees with or opposes the sense of u in the basis surface. + bool Usense() const; + void setUsense(bool v); + /// Flag to indicate whether the direction of the second parameter of the trimmed surface agrees with or opposes the sense of v in the basis surface. + bool Vsense() const; + void setVsense(bool v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRectangularTrimmedSurface (IfcEntityInstanceData* e); + IfcRectangularTrimmedSurface (::Ifc4x3_add2::IfcSurface* v1_BasisSurface, double v2_U1, double v3_V1, double v4_U2, double v5_V2, bool v6_Usense, bool v7_Vsense); + typedef aggregate_of< IfcRectangularTrimmedSurface > list; +}; +/// Definition from IAI: An +/// IfcReinforcementDefinitionProperties defines the cross section +/// properties of reinforcement included in reinforced concrete building elements. +/// The property set definition may be used both in conjunction with insitu and +/// precast structures. +/// +/// HISTORY New entity in IFC Release 2x2 +/// IFC 2x4 change: Supertype changed from IfcPropertySetDefinition to IfcPreDefinedPropertySet +/// +/// General usage: +/// This subtype of IfcPropertySetDefinition is used to define the +/// reinforcement properties in early design stages, such as in requirement +/// definition or scheme design. In later design stages explicit instances of +/// subtypes of IfcReinforcingElement are used. The intended usage may be +/// indicated using the DefinitionType attribute value as a designator: +/// recommended values are 'Reinforcement area requirement' or 'Reinforcement +/// configuration requirement'. Other values may be used according to local +/// standards. +/// Only one property set definition of this kind is used for each concrete +/// building element in each intended usage indicated by the DefinitionType +/// attribute value. This set then defines a list of cross section properties in a +/// discrete number of longitudinal sections as instances of +/// IfcSectionReinforcementProperties (one for each structural reinforcement +/// bar role), which in turn have a section cross section property defined as a +/// profile and a number of reinforcement properties, one for each steel grade / +/// bar type. +class IFC_PARSE_API IfcReinforcementDefinitionProperties : public IfcPreDefinedPropertySet { +public: + /// Descriptive type name applied to reinforcement definition properties. + boost::optional< std::string > DefinitionType() const; + void setDefinitionType(boost::optional< std::string > v); + /// The list of section reinforcement properties attached to the reinforcement definition properties. + aggregate_of< ::Ifc4x3_add2::IfcSectionReinforcementProperties >::ptr ReinforcementSectionDefinitions() const; + void setReinforcementSectionDefinitions(aggregate_of< ::Ifc4x3_add2::IfcSectionReinforcementProperties >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcReinforcementDefinitionProperties (IfcEntityInstanceData* e); + IfcReinforcementDefinitionProperties (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_DefinitionType, aggregate_of< ::Ifc4x3_add2::IfcSectionReinforcementProperties >::ptr v6_ReinforcementSectionDefinitions); + typedef aggregate_of< IfcReinforcementDefinitionProperties > list; +}; +/// The assignment relationship, IfcRelAssigns, is a generalization of "link" relationships among instances of IfcObject and its various 1st level subtypes. A link denotes the specific association through which one object (the client) applies the services of other objects (the suppliers), or through which one object may navigate to other objects. +/// +/// The client is denoted as the relating object and is established at the level of the specific, instantiable subtypes of IfcRelAssigns. The suppliers are denoted as the related objects and they are established by the RelatedObjects attribute. +/// +/// NOTE: The terms "client" and "supplier" are used in a general concept and do not imply any meaning for implementations of systems (like client-server). +/// +/// EXAMPLE: A resource may receive information about its nature of representing real building products by establishing a link between IfcResource and IfcBuildingElement (subtype of IfcProduct) through the assignment relationship IfcRelAssignsToResource. The resource is then the client that applies the services of other objects (here building elements) to express the particular view of elements to be consumed as a resource in a process. +/// +/// The assignment relationship establishs a bi-directional relationship among the participating objects and does not imply any dependency. The subtypes of IfcRelAssigns establishes the particular semantic meaning of the assignment relationship. +/// +/// HISTORY: New entity in IFC Release 2x. +class IFC_PARSE_API IfcRelAssigns : public IfcRelationship { +public: + /// Related objects, which are assigned to a single object. The type of the single (or relating) object is defined in the subtypes of IfcRelAssigns. + aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr RelatedObjects() const; + void setRelatedObjects(aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v); + /// Particular type of the assignment relationship. It can constrain the applicable object types, used within the role of RelatedObjects. + /// IFC2x4 CHANGE  The attribute is deprecated and shall no longer be used. A NIL value should always be assigned. + boost::optional< bool > RelatedObjectsType() const; + void setRelatedObjectsType(boost::optional< bool > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelAssigns (IfcEntityInstanceData* e); + IfcRelAssigns (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v5_RelatedObjects, boost::optional< bool > v6_RelatedObjectsType); + typedef aggregate_of< IfcRelAssigns > list; +}; +/// The objectified relationship IfcRelAssignsToActor handles the assignment of objects (subtypes of IfcObject) to an actor (subtypes of IfcActor). +/// +/// The IfcRelAssignsToActor objectified relationship defines a relationship between an IfcActor and one or many objects. A particular role of the actor played in that relationship can be associated. If specified, it takes priority over the role that may be directly assigned to the person or organization. +/// +/// EXAMPLE: An occupant (as an actor) may rent a flat (as a collection of spaces or a zone). This would be an application of this generic relationship. +/// +/// Reference to the objects (or single object) on which the actor acts upon in a certain role (if given) is specified in the inherited RelatedObjects attribute. +/// +/// HISTORY New Entity in IFC Release 2.0. Has been renamed from IfcRelActsUpon in IFC Release 2x. +class IFC_PARSE_API IfcRelAssignsToActor : public IfcRelAssigns { +public: + /// Reference to the information about the actor. It comprises the information about the person or organization and its addresses. + ::Ifc4x3_add2::IfcActor* RelatingActor() const; + void setRelatingActor(::Ifc4x3_add2::IfcActor* v); + /// Role of the actor played within the context of the assignment to the object(s). + ::Ifc4x3_add2::IfcActorRole* ActingRole() const; + void setActingRole(::Ifc4x3_add2::IfcActorRole* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelAssignsToActor (IfcEntityInstanceData* e); + IfcRelAssignsToActor (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v5_RelatedObjects, boost::optional< bool > v6_RelatedObjectsType, ::Ifc4x3_add2::IfcActor* v7_RelatingActor, ::Ifc4x3_add2::IfcActorRole* v8_ActingRole); + typedef aggregate_of< IfcRelAssignsToActor > list; +}; +/// The objectified relationship IfcRelAssignsToControl handles the assignment of a control (represented by subtypes of IfcControl) to other objects (represented by subtypes of IfcObject, with the exception of controls). +/// +/// EXAMPLE The assignment of a performance history (as subtype of IfcControl) for a building service element (as subtype of IfcObject) is an application of this generic relationship. +/// +/// HISTORY New Entity in IFC Release 2.0. Has been renamed from IfcRelControls in IFC Release 2x. +class IFC_PARSE_API IfcRelAssignsToControl : public IfcRelAssigns { +public: + /// Reference to the IfcControl that applies a control upon objects. + ::Ifc4x3_add2::IfcControl* RelatingControl() const; + void setRelatingControl(::Ifc4x3_add2::IfcControl* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelAssignsToControl (IfcEntityInstanceData* e); + IfcRelAssignsToControl (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v5_RelatedObjects, boost::optional< bool > v6_RelatedObjectsType, ::Ifc4x3_add2::IfcControl* v7_RelatingControl); + typedef aggregate_of< IfcRelAssignsToControl > list; +}; +/// The objectified relationship IfcRelAssignsToGroup handles the assignment of object definitions (individual object occurrences as subtypes of IfcObject, and object types as subtypes of IfcTypeObject) to a group (subtypes of IfcGroup). +/// +/// The relationship handles the assignment of group members to the group object. It allows for grouping arbitrary objects within a group, including other groups. The grouping relationship can be applied in a recursive manner. The resulting group is of type IfcGroup. +/// +/// NOTE Examples of groups include zones as a grouping of spaces, distribution systems as a grouping of building service components, or structural analysis models as a grouping of structural items. +/// +/// The inherited attribute RelatedObjects gives the references to the objects, which are the elements within the group. The RelatingGroup is the group that comprises all elements. The same object or object type can be included in zero, one or many groups. Grouping relationships are not hierarchical. +/// +/// Informal proposition: +/// +/// The group assignment relationship shall be acyclic, that is, a group shall not participate in its own grouping relationship. +/// +/// HISTORY New entity in IFC Release 1.0. It has been renamed from IfcRelGroups in IFC Release 2x. +class IFC_PARSE_API IfcRelAssignsToGroup : public IfcRelAssigns { +public: + /// Reference to group that contains all assigned group members. + ::Ifc4x3_add2::IfcGroup* RelatingGroup() const; + void setRelatingGroup(::Ifc4x3_add2::IfcGroup* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelAssignsToGroup (IfcEntityInstanceData* e); + IfcRelAssignsToGroup (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v5_RelatedObjects, boost::optional< bool > v6_RelatedObjectsType, ::Ifc4x3_add2::IfcGroup* v7_RelatingGroup); + typedef aggregate_of< IfcRelAssignsToGroup > list; +}; +/// The objectified relationship IfcRelAssignsToGroupByFactor is a specialization of the general grouping mechanism. It allows to add a factor to define the ratio that applies to the assignment of object definitions (individual object occurrences as subtypes of IfcObject and object types as subtypes of IfcTypeObject) to a group (subtypes of IfcGroup). +/// +/// The ratio can be used to define a percentage assignment. For example, a Factor of 0.8 would indicate that the object is assigned by 80% to the group, or a Factor of 2.5 would indicate the object is assigned with a weight factor of 2.5 to the group. +/// +/// NOTE Examples of factored groups include the assignment of load cases in a load combination in structural analysis, or the assignment of spaces by percentage to different rental zones. +/// +/// The same object or object type may be included with the same or different Factor values to many groups. Grouping relationships are not hierarchical. +/// +/// HISTORY New entity in IFC2x4. +class IFC_PARSE_API IfcRelAssignsToGroupByFactor : public IfcRelAssignsToGroup { +public: + /// Factor provided as a ratio measure that identifies the fraction or weighted factor that applies to the group assignment. + double Factor() const; + void setFactor(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelAssignsToGroupByFactor (IfcEntityInstanceData* e); + IfcRelAssignsToGroupByFactor (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v5_RelatedObjects, boost::optional< bool > v6_RelatedObjectsType, ::Ifc4x3_add2::IfcGroup* v7_RelatingGroup, double v8_Factor); + typedef aggregate_of< IfcRelAssignsToGroupByFactor > list; +}; +/// The objectified relationship IfcRelAssignsToProcess handles the assignment of one or many objects to a process or activity. An object can be a product that is the item the process operates on. Processes and activities can operate on things other than products, and can operate in ways other than input and output. +/// +/// EXAMPLE It may be common to define processes +/// during estimating or scheduling that describe design tasks +/// (resulting in documents), procurement tasks (resulting in +/// construction materials), planning tasks (resulting in processes), +/// etc. Furthermore, the ways in which process can operate on +/// something might include "installs", "finishes", "transports", +/// "removes", etc. The ways are described as operation +/// types. +/// The inherited attribute RelatedObjects gives the +/// references to the objects, or object type, which the process +/// operates on. The RelatingProcess is the process or process +/// type, that operates on the object. The operation types are +/// captured in the inherited attribute Name. +/// NOTE The agreement on valid and recognizable +/// values for the Name attribute is part of view definitions +/// and implementer agreements. +/// +/// HISTORY New entity in IFC Release 1.5. Has been renamed from IfcRelProcessOperatesOn in IFC Release 2x. +/// +/// IFC2x4 CHANGE The data type RelatingProcess has been extended to cover also IfcTypeProcess +class IFC_PARSE_API IfcRelAssignsToProcess : public IfcRelAssigns { +public: + /// Reference to the process to which the objects are assigned to. + /// + /// IFC2x4 CHANGE Datatype expanded to include IfcProcess and IfcTypeProcess. + ::Ifc4x3_add2::IfcProcessSelect* RelatingProcess() const; + void setRelatingProcess(::Ifc4x3_add2::IfcProcessSelect* v); + /// Quantity of the object specific for the operation by this process. + ::Ifc4x3_add2::IfcMeasureWithUnit* QuantityInProcess() const; + void setQuantityInProcess(::Ifc4x3_add2::IfcMeasureWithUnit* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelAssignsToProcess (IfcEntityInstanceData* e); + IfcRelAssignsToProcess (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v5_RelatedObjects, boost::optional< bool > v6_RelatedObjectsType, ::Ifc4x3_add2::IfcProcessSelect* v7_RelatingProcess, ::Ifc4x3_add2::IfcMeasureWithUnit* v8_QuantityInProcess); + typedef aggregate_of< IfcRelAssignsToProcess > list; +}; +/// The objectified relationshipIfcRelAssignsToProduct handles the assignment of objects (subtypes of IfcObject) to a product (subtypes of IfcProduct). The Name attribute should be used to classify the usage of the IfcRelAssignsToProduct objectified relationship. The following Name values are proposed: +/// +/// 'Context' : Assignment of a context specific representation, such as of structural members to a different context representation (with potentially different decomposition breakdown) such as of building elementsfor a specificcontext specific representation. +/// 'View' : Assignment of a product (via RelatingProduct) that is decomposed according to a discipline view, to another product (via RelatedObjects) that is decomposed according to a different discipline view. An example is the assignment of the architectural slab to a different decomposition of the pre manufactured sections of a slab (under a precast concrete discipline view). +/// +/// HISTORY New Entity in IFC Release 2x +/// +/// IFC2x3 CHANGE The reference of a product within a spatial structure is now handled by a new relationship object IfcRelReferencedInSpatialStructure. The IfcRelAssignsToProduct shall not be used to represent this relation from IFC2x3 onwards. +class IFC_PARSE_API IfcRelAssignsToProduct : public IfcRelAssigns { +public: + /// Reference to the product or product type to which the objects are assigned to. + /// + /// IFC2x4 CHANGE Datatype expanded to include IfcProduct and IfcTypeProduct. + ::Ifc4x3_add2::IfcProductSelect* RelatingProduct() const; + void setRelatingProduct(::Ifc4x3_add2::IfcProductSelect* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelAssignsToProduct (IfcEntityInstanceData* e); + IfcRelAssignsToProduct (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v5_RelatedObjects, boost::optional< bool > v6_RelatedObjectsType, ::Ifc4x3_add2::IfcProductSelect* v7_RelatingProduct); + typedef aggregate_of< IfcRelAssignsToProduct > list; +}; +/// The objectified relationship IfcRelAssignsToResource handles the assignment of objects +/// (as subtypes of IfcObject), acting as a resource usage or consumption, to a resource (as subtypes of IfcResource). +/// +/// EXAMPLE The assignment of a resource usage to a construction resource is an application of this generic relationship. It could be an actor, as person or organization assigned to a labor resource, or a raw product assigned to a construction product or material resource). +/// +/// HISTORY New Entity in IFC Release 2x. +class IFC_PARSE_API IfcRelAssignsToResource : public IfcRelAssigns { +public: + /// Reference to the resource to which the objects are assigned to. + /// + /// IFC2x4 CHANGE Datatype expanded to include IfcResource and IfcTypeResource. + ::Ifc4x3_add2::IfcResourceSelect* RelatingResource() const; + void setRelatingResource(::Ifc4x3_add2::IfcResourceSelect* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelAssignsToResource (IfcEntityInstanceData* e); + IfcRelAssignsToResource (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v5_RelatedObjects, boost::optional< bool > v6_RelatedObjectsType, ::Ifc4x3_add2::IfcResourceSelect* v7_RelatingResource); + typedef aggregate_of< IfcRelAssignsToResource > list; +}; +/// The association relationship +/// IfcRelAssociates refers to external sources of +/// information (most notably a classification, library or +/// document). There is no dependency implied by the +/// association. +/// +/// EXAMPLE Further information may be given +/// to the tank equipment (as subtype of IfcProduct) in +/// terms of its classification and instruction documents, the +/// source of the additional information is held external to +/// the IFC project model. +/// +/// Association relationships can be established to objects +/// (occurrences as subtypes of IfcObject) or to types +/// (as subtypes of IfcTypeObject). +/// +/// EXAMPLE 1 The classification information +/// for the storage tank equipment may be associated to the +/// IfcTankType (subtype of IfcTypeObject), +/// defining the specific information for all occurencies of +/// that tank in the project. Therefore the association of the +/// (e.g.) Uniclass notation 'L6814' may be associated by a +/// subtype of IfcRelAssociates to the type +/// information. +/// +/// EXAMPLE 2 The classification information +/// for a particular space within a building may the associated +/// to the IfcSpace object (subtype of +/// IfcObject), defining a particular occurrence of +/// space. Therefore the association of the (e.g.) DIN notation +/// 'HNF 1.5' may be associated by a subtype of +/// IfcRelAssociates to the object. +/// +/// The association relationship establishs a uni-directional +/// association. The subtypes of IfcRelAssociates +/// establishes the particular semantic meaning of the +/// association relationship. +/// +/// HISTORY New entity in IFC Release 2x. +/// +/// IFC2x4 CHANGE Entity has been changed into an ABSTRACT supertype +class IFC_PARSE_API IfcRelAssociates : public IfcRelationship { +public: + /// Set of object or property definitions to which the external references or information is associated. It includes object and type objects, property set templates, property templates and property sets and contexts. + /// + /// IFC2x4 CHANGE  The attribute datatype has been changed from IfcRoot to IfcDefinitionSelect. + aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr RelatedObjects() const; + void setRelatedObjects(aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelAssociates (IfcEntityInstanceData* e); + IfcRelAssociates (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr v5_RelatedObjects); + typedef aggregate_of< IfcRelAssociates > list; +}; +/// The entity IfcRelAssociatesApproval is used to apply approval information defined by IfcApproval, in IfcApprovalResource schema, to subtypes of IfcRoot. +/// +/// HISTORY: New entity in IFC2x2. +class IFC_PARSE_API IfcRelAssociatesApproval : public IfcRelAssociates { +public: + /// Reference to approval that is being applied using this relationship. + ::Ifc4x3_add2::IfcApproval* RelatingApproval() const; + void setRelatingApproval(::Ifc4x3_add2::IfcApproval* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelAssociatesApproval (IfcEntityInstanceData* e); + IfcRelAssociatesApproval (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr v5_RelatedObjects, ::Ifc4x3_add2::IfcApproval* v6_RelatingApproval); + typedef aggregate_of< IfcRelAssociatesApproval > list; +}; +/// The objectified relationship +/// IfcRelAssociatesClassification handles the assignment of a +/// classification item (items of the select +/// IfcClassificationSelect) to objects occurrences (subtypes of +/// IfcObject) or object types (subtypes of +/// IfcTypeObject). +/// The relationship is used to assign a classification item, or a +/// classification system itself to objects. Depending on the type of +/// the RelatingClassification it is either: +/// +/// a reference to an classification item within an external +/// classification system, or +/// a reference to the classification system itself +/// +/// NOTE  The reference to a classification item +/// includes a link to the classification system within which the item +/// is declared. It assigns the meaning of the classification item to +/// the object (ocurrence or type). The reference to the classification +/// system provides the information that the object (occurrence or +/// type) is governed by the classification system but no assignment of +/// a particular items has been done yet. +/// +/// The inherited attribute RelatedObjects define the objects +/// or object types to which the classification is applied. The +/// attribute RelatingClassification is the reference to a +/// classification, applied to the object(s). A single +/// RelatingClassification can thereby be applied to one or +/// multiple objects. +/// +/// HISTORY New entity in IFC Release 2x. +class IFC_PARSE_API IfcRelAssociatesClassification : public IfcRelAssociates { +public: + /// Classification applied to the objects. + ::Ifc4x3_add2::IfcClassificationSelect* RelatingClassification() const; + void setRelatingClassification(::Ifc4x3_add2::IfcClassificationSelect* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelAssociatesClassification (IfcEntityInstanceData* e); + IfcRelAssociatesClassification (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr v5_RelatedObjects, ::Ifc4x3_add2::IfcClassificationSelect* v6_RelatingClassification); + typedef aggregate_of< IfcRelAssociatesClassification > list; +}; +/// The entity IfcRelAssociatesConstraint is used to apply constraint information defined by IfcConstraint, in the IfcConstraintResource schema, to subtypes of IfcRoot. +/// +/// HISTORY: New entity in IFC2x2. +class IFC_PARSE_API IfcRelAssociatesConstraint : public IfcRelAssociates { +public: + /// The intent of the constraint usage with regard to its related IfcConstraint and IfcObjects, IfcPropertyDefinitions or IfcRelationships. Typical values can be e.g. RATIONALE or EXPECTED PERFORMANCE. + boost::optional< std::string > Intent() const; + void setIntent(boost::optional< std::string > v); + /// Reference to constraint that is being applied using this relationship. + ::Ifc4x3_add2::IfcConstraint* RelatingConstraint() const; + void setRelatingConstraint(::Ifc4x3_add2::IfcConstraint* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelAssociatesConstraint (IfcEntityInstanceData* e); + IfcRelAssociatesConstraint (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr v5_RelatedObjects, boost::optional< std::string > v6_Intent, ::Ifc4x3_add2::IfcConstraint* v7_RelatingConstraint); + typedef aggregate_of< IfcRelAssociatesConstraint > list; +}; +/// The objectified relationship (IfcRelAssociatesDocument) handles the assignment of a document information (items of the select IfcDocumentSelect) to objects occurrences (subtypes of IfcObject) or object types (subtypes of IfcTypeObject). +/// +/// The relationship is used to assign a document reference or a more detailed document information to objects. A single document reference can be applied to multiple objects. +/// +/// The inherited attribute RelatedObjects define the objects to which the document association is applied. The attribute RelatingDocument is the reference to a document reference, applied to the object(s). +/// +/// HISTORY: New entity in IFC Release 2x. +class IFC_PARSE_API IfcRelAssociatesDocument : public IfcRelAssociates { +public: + /// Document information or reference which is applied to the objects. + ::Ifc4x3_add2::IfcDocumentSelect* RelatingDocument() const; + void setRelatingDocument(::Ifc4x3_add2::IfcDocumentSelect* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelAssociatesDocument (IfcEntityInstanceData* e); + IfcRelAssociatesDocument (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr v5_RelatedObjects, ::Ifc4x3_add2::IfcDocumentSelect* v6_RelatingDocument); + typedef aggregate_of< IfcRelAssociatesDocument > list; +}; +/// The objectified relationship (IfcRelAssociatesLibrary) handles the assignment of a library item (items of the select IfcLibrarySelect) to subtypes of IfcObjectDefinition or IfcPropertyDefinition. +/// +/// The relationship is used to assign a library reference or a more detailed link to a library information to objects, property sets or types. A single library reference can be applied to multiple items. +/// +/// The inherited attribute RelatedObjects define the items to which the library association is applied. The attribute RelatingLibrary is the reference to a library reference, applied to the item(s). +/// +/// HISTORY: New entity in IFC Release 2x. +class IFC_PARSE_API IfcRelAssociatesLibrary : public IfcRelAssociates { +public: + /// Reference to a library, from which the definition of the property set is taken. + ::Ifc4x3_add2::IfcLibrarySelect* RelatingLibrary() const; + void setRelatingLibrary(::Ifc4x3_add2::IfcLibrarySelect* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelAssociatesLibrary (IfcEntityInstanceData* e); + IfcRelAssociatesLibrary (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr v5_RelatedObjects, ::Ifc4x3_add2::IfcLibrarySelect* v6_RelatingLibrary); + typedef aggregate_of< IfcRelAssociatesLibrary > list; +}; +/// Definition from IAI: Objectified relationship between a +/// material definition and elements or element types to which this +/// material definition applies. +/// The material definition can be: +/// +/// assigned to an element occurrence as a specific usage of a +/// layer set or profile set +/// assigned to an element occurrence or element type as a layer +/// set, profile set, constituent set or a single material +/// +/// Materials can be arranged by layers and applied to layered +/// elements. Typical elements are walls and slabs. +/// +/// An IfcMaterialLayerSet, for layered elements with an +/// indication of the layering direction and individual layer +/// thicknesses +/// An IfcMaterialLayerSetUsage, i.e. a material layer set +/// with positioning information along the reference axis or surface +/// of the element. +/// NOTE As a material layer set usage is an +/// occurrence based information, that applies to each individual +/// element, it cannot be assigned to an element +/// type. +/// +/// Material can be applied to profiles. Typical elements using +/// profile material are beam, column, member +/// +/// An IfcMaterialProfileSet, i.e. a set of material +/// assigned to a set of profiles, with a single material assigned to +/// a single profile as the default. +/// An IfcMaterialProfileSetUsage, i.e. a material profile +/// set with positioning information relative to the element axis, +/// also refered to as cardinal point. +/// NOTE As a material profile set usage is an +/// occurrence based information, that applies to each individual +/// element, it cannot be assigned to an element +/// type. +/// +/// Materials can be arranged by identified parts of a component +/// based element. Typical elements are dorrs/windows (with +/// components such as lining, framing and glazing), or distribution +/// elements. +/// +/// An IfcMaterialConstituentSet, for component based +/// elements with an indication of the component by keyword to which +/// the material consituent applies. +/// NOTE See the material use definitions at each +/// applicable subtype of IfcElement or IfcElementType +/// for a provision of these keywords. +/// +/// As a fallback, or in cases where only a single material +/// information is needed, material information can be directly +/// associated +/// +/// A single IfcMaterial for any element where the +/// material use definition does not prohibits its direct +/// association +/// An IfcMaterialList, e.g. for composite elements, +/// without an information, how the different materials are arranged. +/// NOTE The use of +/// IfcMaterialList is deprecated in IFC2x4 onwards. Use +/// IfcMaterialConstituentSet +/// instead. +/// +/// The IfcRelAssociatesMaterial relationship is a special +/// type of the IfcRelAssociates relationship. It can be +/// applied to subtypes of IfcElement and subtypes of +/// IfcElementType. +/// +/// The IfcElement has an inverse relation to its material +/// definition by the HasAssociations attribute, inherited +/// from IfcObject. +/// The IfcElementType has an inverse relation to its +/// material definition by the HasAssociations attribute, +/// inherited from IfcPropertyDefinition. +/// +/// If both, the element occurrence (by an instance of +/// IfcElement) and the element type (by an instance of +/// IfcElementType, connected through +/// IfcRelDefinesByType) have an associated material, then the +/// material associated to the element occurrence overrides the +/// material associated to the element type. +/// +/// HISTORY New entity in IFC Release +/// 2.x. +/// +/// Informal proposition +/// +/// An IfcMaterialLayerSetUsage shall not be associated +/// with a subtype of IfcElementType, it should only be +/// associated with individual occurrences +/// An IfcMaterialProfileSetUsage shall not be associated +/// with a subtype of IfcElementType, it should only be +/// associated with individual occurrences +class IFC_PARSE_API IfcRelAssociatesMaterial : public IfcRelAssociates { +public: + /// Material definition assigned to the elements or element types. + ::Ifc4x3_add2::IfcMaterialSelect* RelatingMaterial() const; + void setRelatingMaterial(::Ifc4x3_add2::IfcMaterialSelect* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelAssociatesMaterial (IfcEntityInstanceData* e); + IfcRelAssociatesMaterial (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr v5_RelatedObjects, ::Ifc4x3_add2::IfcMaterialSelect* v6_RelatingMaterial); + typedef aggregate_of< IfcRelAssociatesMaterial > list; +}; + +class IFC_PARSE_API IfcRelAssociatesProfileDef : public IfcRelAssociates { +public: + ::Ifc4x3_add2::IfcProfileDef* RelatingProfileDef() const; + void setRelatingProfileDef(::Ifc4x3_add2::IfcProfileDef* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelAssociatesProfileDef (IfcEntityInstanceData* e); + IfcRelAssociatesProfileDef (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr v5_RelatedObjects, ::Ifc4x3_add2::IfcProfileDef* v6_RelatingProfileDef); + typedef aggregate_of< IfcRelAssociatesProfileDef > list; +}; +/// IfcRelConnects is a connectivity relationship that connects objects under some criteria. As a general connectivity it does not imply constraints, however subtypes of the relationship define the applicable object types for the connectivity relationship and the semantics of the particular connectivity. +/// +/// HISTORY: New entity in IFC Release 2x. +class IFC_PARSE_API IfcRelConnects : public IfcRelationship { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelConnects (IfcEntityInstanceData* e); + IfcRelConnects (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description); + typedef aggregate_of< IfcRelConnects > list; +}; +/// Definition from IAI: The +/// IfcRelConnectsElements objectified relationship +/// provides the generalization of the connectivity between +/// elements. It is a 1 to 1 relationship. The concept of two +/// elements being physically or logically connected is +/// described independently from the connecting elements. The +/// connectivity may be related to the shape representation of +/// the connected entities by providing a connection geometry. +/// +/// In this case the geometrical constraints of the +/// connection are provided by the optional relationship to the +/// IfcConnectionGeometry. The connection geometry is +/// provided as a point, curve or surface within the local +/// placement coordinate systems of the connecting elements. +/// +/// If the connection geometry is omitted then the +/// connection is provided as a logical connection. Under this +/// circumstance, the connection point, curve or surface has to +/// be recalculated by the receiving application. +/// +/// HISTORY New entity in IFC +/// Release 1.0. +class IFC_PARSE_API IfcRelConnectsElements : public IfcRelConnects { +public: + /// The geometric shape representation of the connection geometry that is provided in the object coordinate system of the RelatingElement (mandatory) and in the object coordinate system of the RelatedElement (optionally). + ::Ifc4x3_add2::IfcConnectionGeometry* ConnectionGeometry() const; + void setConnectionGeometry(::Ifc4x3_add2::IfcConnectionGeometry* v); + /// Reference to a subtype of IfcElement that is connected by the connection relationship in the role of RelatingElement. + ::Ifc4x3_add2::IfcElement* RelatingElement() const; + void setRelatingElement(::Ifc4x3_add2::IfcElement* v); + /// Reference to a subtype of IfcElement that is connected by the connection relationship in the role of RelatedElement. + ::Ifc4x3_add2::IfcElement* RelatedElement() const; + void setRelatedElement(::Ifc4x3_add2::IfcElement* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelConnectsElements (IfcEntityInstanceData* e); + IfcRelConnectsElements (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcConnectionGeometry* v5_ConnectionGeometry, ::Ifc4x3_add2::IfcElement* v6_RelatingElement, ::Ifc4x3_add2::IfcElement* v7_RelatedElement); + typedef aggregate_of< IfcRelConnectsElements > list; +}; +/// The +/// IfcRelConnectsPathElements relationship provides the connectivity information between two elements, which have path information. +/// +/// The objectified relationship provides the additional +/// information required to describe the connection between two path +/// based elements that might have single or multiple layers of +/// material. The connection type specifies where at the path based +/// element a connection is given (at the start, in the middle or at +/// the end). +/// +/// The connection is described by a connection geometry, given +/// within the object coordinate systems of the +/// RelatingElement and of the RelatedElement. In case +/// of IfcWallStandardCase as the RelatingElement and +/// RelatedElement the connection geometry is provided by the +/// subtype IfcConnectionCurveGeometry. Both curves indicate +/// the so called "end cap", i.e. the curve that trims the wall outer +/// edges (being parallel along the wall axis) at the end. +/// HISTORY New entity in IFC Release 1.5. +/// +/// Figure 115 shows the application of IfcRelConnectsPathElements with the ConnectionGeometry of type IfcConnectionCurveGeometry. The example shows the connection relationship between two instances of IfcWallStandardCase using the IfcRelConnectsPathElements relationship. The ConnectionCurveGeometry defines the CurveOnReleatingElement and CurveOnRelatedElement, both are of type IfcPolyline. +/// +/// Figure 115 — Path connection geometry +/// +/// Figure 116 illustrates using the IfcRelConnectsPathElements for a "T" type connection between two instances of IfcWallStandardCase. +/// Figure 117 illustrates using the IfcRelConnectsPathElements for a "L" type connection between two instances of IfcWallStandardCase. +/// NOTE  The two wall axes connect in each case. +/// +/// Figure 116 — Path connection T-Type +/// Figure 117 — Path connection L-Type +class IFC_PARSE_API IfcRelConnectsPathElements : public IfcRelConnectsElements { +public: + /// Priorities for connection. It refers to the layers of the RelatingObject. + std::vector< int > /*[0:?]*/ RelatingPriorities() const; + void setRelatingPriorities(std::vector< int > /*[0:?]*/ v); + /// Priorities for connection. It refers to the layers of the RelatedObject. + std::vector< int > /*[0:?]*/ RelatedPriorities() const; + void setRelatedPriorities(std::vector< int > /*[0:?]*/ v); + /// Indication of the connection type in relation to the path of the RelatingObject. + ::Ifc4x3_add2::IfcConnectionTypeEnum::Value RelatedConnectionType() const; + void setRelatedConnectionType(::Ifc4x3_add2::IfcConnectionTypeEnum::Value v); + /// Indication of the connection type in relation to the path of the RelatingObject. + ::Ifc4x3_add2::IfcConnectionTypeEnum::Value RelatingConnectionType() const; + void setRelatingConnectionType(::Ifc4x3_add2::IfcConnectionTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelConnectsPathElements (IfcEntityInstanceData* e); + IfcRelConnectsPathElements (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcConnectionGeometry* v5_ConnectionGeometry, ::Ifc4x3_add2::IfcElement* v6_RelatingElement, ::Ifc4x3_add2::IfcElement* v7_RelatedElement, std::vector< int > /*[0:?]*/ v8_RelatingPriorities, std::vector< int > /*[0:?]*/ v9_RelatedPriorities, ::Ifc4x3_add2::IfcConnectionTypeEnum::Value v10_RelatedConnectionType, ::Ifc4x3_add2::IfcConnectionTypeEnum::Value v11_RelatingConnectionType); + typedef aggregate_of< IfcRelConnectsPathElements > list; +}; +/// The objectified relationship +/// IfcRelConnectsPortToElement defines the relationship that +/// is made between a port and the IfcElement, or +/// IfcElementType in which it is contained. It is a 1 to 1 +/// relationship. +/// +/// The +/// IfcRelConnectsPortToElement established a whole part +/// relationship between the element and its port. The port is used as +/// the means to connect to other ports in other elements. Since both, +/// the element-to-port, and the port-to-port relationships are 1:1 +/// relationships, a topological system (or system path or ciruit) can +/// be defined. +/// +/// Ports contained in different elements are connected to each +/// other using the IfcRelConnectsPorts relationship. +/// +/// See relevant subtypes of +/// IfcDistributionElement for examples and port use +/// definition sections. +/// +/// HISTORY  New +/// entity in Release IFC2x Edition 2. +/// IFC2x4 CHANGE  The +/// definition has been extended to include element types. +class IFC_PARSE_API IfcRelConnectsPortToElement : public IfcRelConnects { +public: + /// Reference to an Port that is connected by the objectified relationship. + ::Ifc4x3_add2::IfcPort* RelatingPort() const; + void setRelatingPort(::Ifc4x3_add2::IfcPort* v); + /// Reference to an IfcElement, or IfcElementType that has ports assigned. + /// + /// IFC2x4 CHANGE Data type extended to IfcObjectDefinition to enable elements and element types for the port relationship. + ::Ifc4x3_add2::IfcDistributionElement* RelatedElement() const; + void setRelatedElement(::Ifc4x3_add2::IfcDistributionElement* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelConnectsPortToElement (IfcEntityInstanceData* e); + IfcRelConnectsPortToElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcPort* v5_RelatingPort, ::Ifc4x3_add2::IfcDistributionElement* v6_RelatedElement); + typedef aggregate_of< IfcRelConnectsPortToElement > list; +}; +/// Definition from IAI: An IfcRelConnectsPorts +/// defines the relationship that is made between two ports at +/// their point of connection. It may include the connection +/// geometry between two ports. +/// +/// IfcRelConnectsPorts is required for defining how +/// instances of IfcPort connect together. Each of the +/// port is being logically attached to the IfcElement +/// by using the IfcRelConnectsPortToElement +/// relationship. +/// +/// HISTORY New entity in IFC +/// 2.0, modified in IFC2x. +class IFC_PARSE_API IfcRelConnectsPorts : public IfcRelConnects { +public: + /// Reference to the first port that is connected by the objectified relationship. + ::Ifc4x3_add2::IfcPort* RelatingPort() const; + void setRelatingPort(::Ifc4x3_add2::IfcPort* v); + /// Reference to the second port that is connected by the objectified relationship. + ::Ifc4x3_add2::IfcPort* RelatedPort() const; + void setRelatedPort(::Ifc4x3_add2::IfcPort* v); + /// Defines the element that realizes a port connection relationship. + ::Ifc4x3_add2::IfcElement* RealizingElement() const; + void setRealizingElement(::Ifc4x3_add2::IfcElement* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelConnectsPorts (IfcEntityInstanceData* e); + IfcRelConnectsPorts (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcPort* v5_RelatingPort, ::Ifc4x3_add2::IfcPort* v6_RelatedPort, ::Ifc4x3_add2::IfcElement* v7_RealizingElement); + typedef aggregate_of< IfcRelConnectsPorts > list; +}; +/// Definition from IAI: The IfcRelConnectsStructuralActivity relationship connects a structural activity (either an action or reaction) to a structural member, structural connection, or element. +/// +/// HISTORY: New entity in IFC 2x2. +class IFC_PARSE_API IfcRelConnectsStructuralActivity : public IfcRelConnects { +public: + /// Reference to a structural item or element to which the specified activity is applied. + ::Ifc4x3_add2::IfcStructuralActivityAssignmentSelect* RelatingElement() const; + void setRelatingElement(::Ifc4x3_add2::IfcStructuralActivityAssignmentSelect* v); + /// Reference to a structural activity which is acting upon the specified structural item or element. + ::Ifc4x3_add2::IfcStructuralActivity* RelatedStructuralActivity() const; + void setRelatedStructuralActivity(::Ifc4x3_add2::IfcStructuralActivity* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelConnectsStructuralActivity (IfcEntityInstanceData* e); + IfcRelConnectsStructuralActivity (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcStructuralActivityAssignmentSelect* v5_RelatingElement, ::Ifc4x3_add2::IfcStructuralActivity* v6_RelatedStructuralActivity); + typedef aggregate_of< IfcRelConnectsStructuralActivity > list; +}; +/// The entity IfcRelConnectsStructuralMember defines all needed properties describing the connection between structural members and structural connection objects (nodes or supports). +/// +/// HISTORY  New entity in IFC2x2. +/// +/// Use Definition +/// +/// Point Connection +/// Instances of the entity IfcRelConnectsStructuralMember shall be used to describe a connection between an instance of IfcStructuralPointConnection and either an instance of IfcStructuralCurveMember or IfcStructuralSurfaceMember. The RelatedStructuralConnection for point connections has to be of type IfcStructuralPointConnection. +/// +/// Curve Connection +/// Instances of the entity IfcRelConnectsStructuralMember shall be used to describe a connection between an instance of IfcStructuralCurveConnection and an instance of either IfcStructuralCurveMember or IfcStructuralSurfaceMember. The RelatedStructuralConnection for curve connections has to be of type IfcStructuralCurveConnection. +/// +/// Surface Connection +/// Instances of the entity IfcRelConnectsStructuralMember shall be used to describe a connection between an instance of IfcStructuralSurfaceConnection and an instance of IfcStructuralSurfaceMember. The RelatedStructuralConnection for curve connections has to be of type IfcStructuralSurfaceConnection. +/// +/// Coordinate System for Applied Conditions +/// All values defined by AppliedCondition or AdditionalConditions are given within the coordinate system provided by ConditionCoordinateSystem, which is defined relative to the local coordinate system of the structural member. If the ConditionCoordinateSystem is not defined, the local coordinate system of the structural member is used instead. +/// +/// Supported Length +/// Optionally a supported length can be given, which specifies the length (or width) of the physical connection along a curve connection. +/// +/// Figure 235 illustrates the appropriate definition of support lengths. +/// +/// Figure 235 — Structural member support lengths +class IFC_PARSE_API IfcRelConnectsStructuralMember : public IfcRelConnects { +public: + /// Reference to an instance of IfcStructuralMember (or its subclasses) which is connected to the specified structural connection. + ::Ifc4x3_add2::IfcStructuralMember* RelatingStructuralMember() const; + void setRelatingStructuralMember(::Ifc4x3_add2::IfcStructuralMember* v); + /// Reference to an instance of IfcStructuralConnection (or its subclasses) which is connected to the specified structural member. + ::Ifc4x3_add2::IfcStructuralConnection* RelatedStructuralConnection() const; + void setRelatedStructuralConnection(::Ifc4x3_add2::IfcStructuralConnection* v); + /// Conditions which define the connections properties. Connection conditions are often called "release" but are not only used to define mechanisms like hinges but also rigid, elastic, and other conditions. + ::Ifc4x3_add2::IfcBoundaryCondition* AppliedCondition() const; + void setAppliedCondition(::Ifc4x3_add2::IfcBoundaryCondition* v); + /// Describes additional connection properties. + ::Ifc4x3_add2::IfcStructuralConnectionCondition* AdditionalConditions() const; + void setAdditionalConditions(::Ifc4x3_add2::IfcStructuralConnectionCondition* v); + /// Defines the 'supported length' of this structural connection. See Fig. for more detail. + boost::optional< double > SupportedLength() const; + void setSupportedLength(boost::optional< double > v); + /// Defines a coordinate system used for the description of the connection properties in ConnectionCondition relative to the local coordinate system of RelatingStructuralMember. If left unspecified, the placement IfcAxis2Placement3D((x,y,z), ?, ?) is implied with x,y,z being the local member coordinates where the connection is made and the default axes directions being in parallel with the local axes of RelatingStructuralMember. + ::Ifc4x3_add2::IfcAxis2Placement3D* ConditionCoordinateSystem() const; + void setConditionCoordinateSystem(::Ifc4x3_add2::IfcAxis2Placement3D* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelConnectsStructuralMember (IfcEntityInstanceData* e); + IfcRelConnectsStructuralMember (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcStructuralMember* v5_RelatingStructuralMember, ::Ifc4x3_add2::IfcStructuralConnection* v6_RelatedStructuralConnection, ::Ifc4x3_add2::IfcBoundaryCondition* v7_AppliedCondition, ::Ifc4x3_add2::IfcStructuralConnectionCondition* v8_AdditionalConditions, boost::optional< double > v9_SupportedLength, ::Ifc4x3_add2::IfcAxis2Placement3D* v10_ConditionCoordinateSystem); + typedef aggregate_of< IfcRelConnectsStructuralMember > list; +}; +/// Definition from IAI: The entity IfcRelConnectsWithEccentricity adds the definition of eccentricity to the connection between a structural member and a structural connection (representing either a node or support). +/// +/// NOTE  Another eccentricity model is available independently of eccentric connection specification: The section profile of a curve member may be inserted eccentrically with respect to the member's reference curve, see definitions at IfcStructuralCurveMember. Whether one or the other or both eccentricity models may be used is subject to information requirements and local agreements. +/// +/// HISTORY  New entity in IFC 2x3. +/// Use definitions changed in IFC 2x4 to always require two topology items. +/// +/// Use Definition +/// +/// Point Connection +/// ConnectionConstraint shall be of type IfcConnectionPointGeometry and shall refer to two instances of IfcVertexPoint. +/// +/// Curve Connection +/// ConnectionConstraint shall be of type IfcConnectionCurveGeometry and shall refer to two instances of IfcEdge or subtypes. +/// +/// Surface Connection +/// ConnectionConstraint shall be of type IfcConnectionSurfaceGeometry and shall refer to two instances of IfcFaceSurface. +class IFC_PARSE_API IfcRelConnectsWithEccentricity : public IfcRelConnectsStructuralMember { +public: + /// The connection constraint explicitly states the eccentricity between a structural member and a structural connection by means of two topological objects (vertex and vertex, or edge and edge, or face and face). + ::Ifc4x3_add2::IfcConnectionGeometry* ConnectionConstraint() const; + void setConnectionConstraint(::Ifc4x3_add2::IfcConnectionGeometry* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelConnectsWithEccentricity (IfcEntityInstanceData* e); + IfcRelConnectsWithEccentricity (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcStructuralMember* v5_RelatingStructuralMember, ::Ifc4x3_add2::IfcStructuralConnection* v6_RelatedStructuralConnection, ::Ifc4x3_add2::IfcBoundaryCondition* v7_AppliedCondition, ::Ifc4x3_add2::IfcStructuralConnectionCondition* v8_AdditionalConditions, boost::optional< double > v9_SupportedLength, ::Ifc4x3_add2::IfcAxis2Placement3D* v10_ConditionCoordinateSystem, ::Ifc4x3_add2::IfcConnectionGeometry* v11_ConnectionConstraint); + typedef aggregate_of< IfcRelConnectsWithEccentricity > list; +}; +/// Definition from IAI: +/// IfcRelConnectsWithRealizingElements defines a +/// generic relationship that is made between two elements that +/// require the realization of that relationship by means of +/// further realizing elements. +/// +/// An IfcRelConnectsWithRealizingElements is a +/// specialization of IfcRelConnectsElement where the +/// connecting operation has the additional attribute of (one +/// or many) realizing elements that may be used to realize or +/// further qualify the relationship. It is defined as a +/// ternary relationship. +/// +/// EXAMPLE: It may be used to describe the +/// attachment of one element to another where the attachment +/// is realized by a 'fixing' element such as a bracket. It +/// may also be used to describe the mounting of one element +/// onto another such as the requirement for the mounting +/// major plant items onto builders work bases and/or +/// anti-vibration isolators. +/// +/// HISTORY: New entity in +/// Release IFC2x Edition 2. +class IFC_PARSE_API IfcRelConnectsWithRealizingElements : public IfcRelConnectsElements { +public: + /// Defines the elements that realize a connection relationship. + aggregate_of< ::Ifc4x3_add2::IfcElement >::ptr RealizingElements() const; + void setRealizingElements(aggregate_of< ::Ifc4x3_add2::IfcElement >::ptr v); + /// The type of the connection given for informal purposes, it may include labels, like 'joint', 'rigid joint', 'flexible joint', etc. + boost::optional< std::string > ConnectionType() const; + void setConnectionType(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelConnectsWithRealizingElements (IfcEntityInstanceData* e); + IfcRelConnectsWithRealizingElements (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcConnectionGeometry* v5_ConnectionGeometry, ::Ifc4x3_add2::IfcElement* v6_RelatingElement, ::Ifc4x3_add2::IfcElement* v7_RelatedElement, aggregate_of< ::Ifc4x3_add2::IfcElement >::ptr v8_RealizingElements, boost::optional< std::string > v9_ConnectionType); + typedef aggregate_of< IfcRelConnectsWithRealizingElements > list; +}; +/// This objectified relationship, +/// IfcRelContainedInSpatialStructure, is used to assign +/// elements to a certain level of the spatial project +/// structure. Any element can only be assigned once to a +/// certain level of the spatial structure. The question, which +/// level is relevant for which type of element, can only be +/// answered within the context of a particular project and +/// might vary within the various regions. +/// +/// EXAMPLE A multi-storey space is contained (or +/// belongs to) the building storey at which its ground level +/// is, but it is referenced by all the other building +/// storeys, in which it spans. A lift shaft might be +/// contained by the basement, but referenced by all storeys, +/// through which it spans. +/// +/// The containment relationship of an element within a +/// spatial structure has to be a hierarchical relationship, an +/// element can only be contained within a single spatial +/// structure element. The reference relationship between an +/// element and the spatial structure may not be hierarchical, +/// i.e. an element can reference many spatial structure +/// elements. +/// +/// NOTE The reference relationship is expressed by +/// IfcRelReferencedInSpatialStructure. +/// +/// Predefined spatial structure elements to which elements can +/// be assigned are +/// +/// site as IfcSite +/// +/// building as IfcBuilding +/// +/// storey as IfcBuildingStorey +/// +/// space as IfcSpace +/// +/// Occurrences of the same element type can be assigned to +/// different spatial structure elements depending on the +/// context of the occurrence. +/// +/// EXAMPLE A wall might be normally assigned +/// to a storey, however the curtain wall might be assigned +/// to the building and the retaining wall in the terrain +/// might be assigned to the site. +/// +/// HISTORY New entity in IFC +/// Release 2x. +/// +/// IFC2x PLATFORM CHANGE: The +/// data type of the attribute RelatedElements has been +/// changed from IfcElement to its supertype +/// IfcProduct with upward compatibility for file based +/// exchange. +/// +/// Containment Use Definition +/// Figure 39 shows the use of IfcRelContainedInSpatialStructure to assign a stair and two walls to two different levels within the spatial structure. +/// +/// Figure 39 — Relationship for spatial structure containment +class IFC_PARSE_API IfcRelContainedInSpatialStructure : public IfcRelConnects { +public: + /// Set of elements products, which are contained within this level of the spatial structure hierarchy. + /// + /// IFC2x PLATFORM CHANGE  The data type has been changed from IfcElement to IfcProduct with upward compatibility + aggregate_of< ::Ifc4x3_add2::IfcProduct >::ptr RelatedElements() const; + void setRelatedElements(aggregate_of< ::Ifc4x3_add2::IfcProduct >::ptr v); + /// Spatial structure element, within which the element is contained. Any element can only be contained within one element of the project spatial structure. + ::Ifc4x3_add2::IfcSpatialElement* RelatingStructure() const; + void setRelatingStructure(::Ifc4x3_add2::IfcSpatialElement* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelContainedInSpatialStructure (IfcEntityInstanceData* e); + IfcRelContainedInSpatialStructure (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcProduct >::ptr v5_RelatedElements, ::Ifc4x3_add2::IfcSpatialElement* v6_RelatingStructure); + typedef aggregate_of< IfcRelContainedInSpatialStructure > list; +}; +/// Definition from IAI: The +/// IfcRelCoversBldgElements is an objectified relationship +/// between an element and one to many coverings, which cover the +/// building element. +/// +/// IfcRelCoversBldgElements, this relationship, expresses +/// the primary relation to the element, +/// IfcRelCoversSpaces expresses the primary relation to +/// the space. +/// +/// HISTORY New Entity in +/// IFC Release 1.5 +/// IFC2x4 CHANGE: The data +/// type of the attribute RelatingElement has been changed +/// from IfcElement to its subtype +/// IfcBuildingElement. +class IFC_PARSE_API IfcRelCoversBldgElements : public IfcRelConnects { +public: + /// Relationship to the building element that is covered. + /// + /// IFC2x4 CHANGE: The attribute type has been changed from IfcElement to IfcBuildingElement. + ::Ifc4x3_add2::IfcElement* RelatingBuildingElement() const; + void setRelatingBuildingElement(::Ifc4x3_add2::IfcElement* v); + /// Relationship to the set of coverings at this element. + aggregate_of< ::Ifc4x3_add2::IfcCovering >::ptr RelatedCoverings() const; + void setRelatedCoverings(aggregate_of< ::Ifc4x3_add2::IfcCovering >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelCoversBldgElements (IfcEntityInstanceData* e); + IfcRelCoversBldgElements (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcElement* v5_RelatingBuildingElement, aggregate_of< ::Ifc4x3_add2::IfcCovering >::ptr v6_RelatedCoverings); + typedef aggregate_of< IfcRelCoversBldgElements > list; +}; +/// Definition from IAI: The objectified relationship, +/// IfcRelCoversSpace, relatesa space object to one or +/// many coverings, which faces (or is assigned to) the space. +/// +/// NOTE Particularly floorings, ceilings and wall +/// coverings, such as claddings or tiling are often +/// considered as space coverings, rather then wall or slab +/// coverings. In some life cycle phases, such as the +/// operation phase, the relationship is always made to the +/// space. +/// +/// The IFC specification provides two relationships: +/// +/// IfcRelCoversBldgElements to assign coverings to +/// elements, and +/// +/// IfcRelCoversSpaces to assign coverings to spaces +/// +/// Which relationship should be applied has to be determined +/// by the context of the project or application . +/// +/// NOTE View definition may determine the necessity +/// to use either of the two relationship elements +/// +/// HISTORY New Entity in Release +/// IFC 2x Edition 3. +class IFC_PARSE_API IfcRelCoversSpaces : public IfcRelConnects { +public: + /// Relationship to the space object that is covered. + /// + /// IFC2x4 CHANGE: The attribute name has been changed from RelatedSpace to RelatingSpace with upward compatibility for file based exchange. + ::Ifc4x3_add2::IfcSpace* RelatingSpace() const; + void setRelatingSpace(::Ifc4x3_add2::IfcSpace* v); + /// Relationship to the set of coverings covering this space. + aggregate_of< ::Ifc4x3_add2::IfcCovering >::ptr RelatedCoverings() const; + void setRelatedCoverings(aggregate_of< ::Ifc4x3_add2::IfcCovering >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelCoversSpaces (IfcEntityInstanceData* e); + IfcRelCoversSpaces (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcSpace* v5_RelatingSpace, aggregate_of< ::Ifc4x3_add2::IfcCovering >::ptr v6_RelatedCoverings); + typedef aggregate_of< IfcRelCoversSpaces > list; +}; +/// The objectified relationship IfcRelDeclares handles the declaration of objects (subtypes of IfcObject) or properties (subtypes of IfcPropertyDefinition) to a project or project library (represented by IfcProject, or IfcProjectLibrary). +/// +/// The relationship handles the assignment of other objects, like IfcActor, or IfcTypeObject to the project, or project libary. The attribute RelatedDefinitions provides the references to the first level objects, that are the elements within the context. All other objects that relate to the first level objects are also defined in the context. +/// +/// NOTE 1  Every object (as subtype of IfcObject) has to be declared within the context of a single IfcProject, or of a IfcProjectLibrary assigned to a single IfcProject. This declaration is transitive. For example: the IfcWorkPlan as first level object is declared within the context of IfcProject via IfcRelDeclares, all related IfcWorkSchedule's are related to the context in a transitive way through IfcWorkPlan. +/// +/// NOTE 2  The assignment excludes subtypes of IfcProduct's, these are assigned to the IfcProject using the spatial structure approach through IfcSpatialStructureElement(s), where the outer container element such as IfcSite or IfcBuilding has an IfcRelAggregates relationship with the IfcProject. +/// +/// The RelatingContext is the project, or project library that comprises all elements. The unit assignments and the presentation contexts defined at IfcProject or IfcProjectLibrary apply to all these elements. +/// +/// HISTORY New entity in Release IFC2x4. +class IFC_PARSE_API IfcRelDeclares : public IfcRelationship { +public: + /// Reference to the IfcProject to which additional information is assigned. + ::Ifc4x3_add2::IfcContext* RelatingContext() const; + void setRelatingContext(::Ifc4x3_add2::IfcContext* v); + /// Set of object or property definitions that are assigned to a context and to which the unit and representation context definitions of that context apply. + aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr RelatedDefinitions() const; + void setRelatedDefinitions(aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelDeclares (IfcEntityInstanceData* e); + IfcRelDeclares (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcContext* v5_RelatingContext, aggregate_of< ::Ifc4x3_add2::IfcDefinitionSelect >::ptr v6_RelatedDefinitions); + typedef aggregate_of< IfcRelDeclares > list; +}; +/// The decomposition relationship, +/// IfcRelDecomposes, defines the general concept of elements +/// being composed or decomposed. The decomposition relationship +/// denotes a whole/part hierarchy with the ability to navigate from +/// the whole (the composition) to the parts and vice versa. +/// Decompositions may be constrained by requiring both, the whole +/// and its parts, to be of the same type - thus establishing a +/// nesting relationship. Or they may require some form of physical +/// containment, thus establishing special types of aggregation +/// relationships. +/// NOTE There are two special names for +/// decomposition, which are linguistically distinguished, nesting +/// and aggregation. The subtypes of IfcRelDecomposes will +/// introduce either the nesting or aggregation convention (see +/// IfcRelNests and +/// IfcRelAggregates). +/// EXAMPLE A cost element is a nest of other cost +/// elements. Or a structural frame is an aggregation of beams and +/// columns. Both are applications of decomposition +/// relationship. +/// Decompositions imply a dependency, i.e. the definition of the +/// whole depends on the definition of the parts and the parts depend +/// on the existence of the whole. The decomposition relationship can +/// be applied in a recursive manner, i.e. a decomposed element can +/// be part in another decomposition. Cyclic references have to be +/// prevented at application level. +/// +/// HISTORY New entity in IFC Release 1.5, it is a generalisation of the IFC2.0 entity IfcRelNests. +/// +/// IFC2x4 CHANGE The differentiation between the aggregation and nesting is determined to be a non-ordered or an ordered collection of parts. The attributes RelatingObject and RelatedObjects have been demoted to the subtypes. +class IFC_PARSE_API IfcRelDecomposes : public IfcRelationship { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelDecomposes (IfcEntityInstanceData* e); + IfcRelDecomposes (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description); + typedef aggregate_of< IfcRelDecomposes > list; +}; +/// A generic and abstract relationship which subtypes are used to: +/// +/// assign a object type to an object occurrence +/// assign a property set to an object instance +/// assign a property set template to a property set +/// +/// EXAMPLE Several instances of windows within +/// the IFC project model may be of the same (catalogue or +/// manufacturer) type. Thereby they share the same properties. This +/// relationship is established by the subtype +/// IfcRelDefinesByType of IfcRelDefines relationship +/// assigning an IfcWindowStyle to multiple occurrences +/// IfcWindow. +/// +/// EXAMPLE The (same) property set, e.g. +/// Pset_ProductManufacturerInfo, keeping the manufacturer name, +/// label and production year of a product, can be assigned to one, +/// or many instances of furnishing. This relationship is established +/// by the subtype IfcRelDefinesByProperties of +/// IfcRelDefines relationship assigning an +/// IfcPropertySet to one or more instances of +/// IfcFurnishingElement. +/// +/// HISTORY New entity in IFC2x. +/// +/// IFC2x4 CHANGE The attribute RelatedObjects had been demoted to the subtypes IfcRelDefinesByProperties and +/// IfcRelDefinesByType. +class IFC_PARSE_API IfcRelDefines : public IfcRelationship { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelDefines (IfcEntityInstanceData* e); + IfcRelDefines (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description); + typedef aggregate_of< IfcRelDefines > list; +}; +/// The objectified relationship IfcRelDefinesByObject defines the relationship between an object taking part in an object type decomposition and an object occurrences taking part in an occurrence decomposition of that type. +/// The IfcRelDefinesByObject is a 1-to-N relationship, as it allows for the assignment of one declaring object information to a single or to many reflected objects. Those objects then share the same object property sets and, for subtypes of IfcProduct, the eventually assigned representation maps. +/// Only objects that take part in a type decomposition and in an occurrence decomposition of the same type can be connected by the IfcRelDefinesByObject relationship. +/// +/// HISTORY New entity in IFC2x4. +/// +/// Relationship use definition +/// +/// The IfcRelDefinesByObject links the decomposed object type part, also called the "declaring part" with the occurrence of that part inside the occurrence of the decomposed type, also called the "reflected part", as shown in Figure 6. +/// +/// Figure 6 — Part definition relationships +/// +/// The IfcRelDefinesByObject can be used together with the shape representations of the product type as shown in Figure 7. The IfcShapeRepresentation of the "declaring part" is referenced by the "reflected part". The IfcObjectPlacement of the model occurrence (the whole) determines the position within the project context. +/// +/// Figure 7 — Part definition relationships with shape representation +class IFC_PARSE_API IfcRelDefinesByObject : public IfcRelDefines { +public: + /// Objects being part of an object occurrence decomposition, acting as the "reflecting parts" in the relationship. + aggregate_of< ::Ifc4x3_add2::IfcObject >::ptr RelatedObjects() const; + void setRelatedObjects(aggregate_of< ::Ifc4x3_add2::IfcObject >::ptr v); + /// Object being part of an object type decomposition, acting as the "declaring part" in the relationship. + ::Ifc4x3_add2::IfcObject* RelatingObject() const; + void setRelatingObject(::Ifc4x3_add2::IfcObject* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelDefinesByObject (IfcEntityInstanceData* e); + IfcRelDefinesByObject (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcObject >::ptr v5_RelatedObjects, ::Ifc4x3_add2::IfcObject* v6_RelatingObject); + typedef aggregate_of< IfcRelDefinesByObject > list; +}; +/// The objectified relationship +/// IfcRelDefinesByProperties defines the relationships +/// between property set definitions and objects. Properties are +/// aggregated in property sets. Property sets can be either directly +/// assigned to occurrence objects using this relationship, or +/// assigned to an object type and assigned via that type to +/// occurrence objects. +/// The IfcRelDefinesByProperties is a 1-to-N relationship, +/// as it allows for the assignment of one property set to a single +/// or to many objects. Those objects then share the same property +/// definition. +/// +/// HISTORY New Entity in IFC Release 2.0. Has been renamed from IfcRelAssignsProperties in IFC Release 2x. +/// +/// IFC2x4 CHANGE The attribute RelatedObjects had been demoted from the supertype IfcRelDefines to IfcRelDefinesByProperties. +class IFC_PARSE_API IfcRelDefinesByProperties : public IfcRelDefines { +public: + /// Reference to the objects (or single object) to which the property definition applies. + aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr RelatedObjects() const; + void setRelatedObjects(aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v); + /// Reference to the property set definition for that object or set of objects. + ::Ifc4x3_add2::IfcPropertySetDefinitionSelect* RelatingPropertyDefinition() const; + void setRelatingPropertyDefinition(::Ifc4x3_add2::IfcPropertySetDefinitionSelect* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelDefinesByProperties (IfcEntityInstanceData* e); + IfcRelDefinesByProperties (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v5_RelatedObjects, ::Ifc4x3_add2::IfcPropertySetDefinitionSelect* v6_RelatingPropertyDefinition); + typedef aggregate_of< IfcRelDefinesByProperties > list; +}; +/// The objectified relationship +/// IfcRelDefinesByTemplate defines the relationships between +/// property set template and property sets. Common information about +/// property sets, e.g. the applicable name, description, contained +/// properties, is defined by the property set template and assigned +/// to all property sets. +/// The IfcRelDefinesByTemplate is a 1-to-N relationship, +/// as it allows for the assignment of one property set template to a +/// single or to many property sets. Those property sets then share +/// the same property set template definition. +/// +/// HISTORY New Entity in IFC2x4. +class IFC_PARSE_API IfcRelDefinesByTemplate : public IfcRelDefines { +public: + /// One or many property sets defined by a single property set template. + aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr RelatedPropertySets() const; + void setRelatedPropertySets(aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr v); + /// Property set template that provides the common definition of related property sets. + ::Ifc4x3_add2::IfcPropertySetTemplate* RelatingTemplate() const; + void setRelatingTemplate(::Ifc4x3_add2::IfcPropertySetTemplate* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelDefinesByTemplate (IfcEntityInstanceData* e); + IfcRelDefinesByTemplate (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr v5_RelatedPropertySets, ::Ifc4x3_add2::IfcPropertySetTemplate* v6_RelatingTemplate); + typedef aggregate_of< IfcRelDefinesByTemplate > list; +}; +/// The objectified relationship +/// IfcRelDefinesByType defines the relationship between an +/// object type and object occurrences. +/// The IfcRelDefinesByType is a 1-to-N relationship, as it +/// allows for the assignment of one type information to a single or +/// to many objects. Those objects then share the same object type, +/// and the property sets and properties assigned to the object +/// type. +/// +/// HISTORY New entity in IFC2x. +/// +/// IFC2x4 CHANGE The attribute RelatedObjects had been demoted from the supertype IfcRelDefines to IfcRelDefinesByType. +/// +/// Relationship use definition +/// +/// The IfcRelDefinesByType links the object type +/// definition with the object occurrence. Both may define properties +/// by assigning an IfcPropertySet, including one or many +/// subtypes of IfcProperty to either the object type or +/// object occurrence, as shown in Figure 8. +/// There are several scenarios to define the same property +/// set on the object type definition and object occurrence +/// side: +/// +/// All properties for all object occurrences of a common +/// object type have the same value - then only the object type +/// definition has a property set assigned. +/// All properties for all object occurrences are +/// different, that is there are no common property values for the +/// object type definition - then each of the object occurrence has a +/// property set assigned. +/// Some properties within the same property set have +/// common values and are assigned to the object type definition and +/// some are occurrence specific and assigned (with potentially +/// different values) to the object occurrences - then: +/// +/// The sum of all properties within a given property set +/// applicable to an object occurrence is the union of properties +/// assigned to the object type definition plus the properties +/// assigned to the object occurrence. +/// If the object occurrence has a property with the same +/// IfcProperty.Name in an IfcPropertySet, as the +/// corresponding object type definition, then the occurrence +/// property value overrides the type property value. +/// +/// Figure 8 — Type definition relationships +/// +/// The following table provides an example of assigning +/// +/// properties assigned to +/// IfcWall +/// properties assigned to +/// IfcWallType +/// resulting property value for individual +/// wall +/// +/// Pset_WallCommon +/// Pset_WallCommon +/// +/// -ExtendToStructure = TRUE +/// +/// TRUE +/// +/// -ThermalTransmittance = 0.375 +/// 0.375 +/// +/// -ExtendToStructure = FALSE +/// -ExtendToStructure = TRUE +/// FALSE +class IFC_PARSE_API IfcRelDefinesByType : public IfcRelDefines { +public: + aggregate_of< ::Ifc4x3_add2::IfcObject >::ptr RelatedObjects() const; + void setRelatedObjects(aggregate_of< ::Ifc4x3_add2::IfcObject >::ptr v); + /// Reference to the type (or style) information for that object or set of objects. + ::Ifc4x3_add2::IfcTypeObject* RelatingType() const; + void setRelatingType(::Ifc4x3_add2::IfcTypeObject* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelDefinesByType (IfcEntityInstanceData* e); + IfcRelDefinesByType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcObject >::ptr v5_RelatedObjects, ::Ifc4x3_add2::IfcTypeObject* v6_RelatingType); + typedef aggregate_of< IfcRelDefinesByType > list; +}; +/// IfcRelFillsElement is an objectified relationship between an opening element and an element that fills (or partially fills) the opening element. It is an one-to-one relationship. +/// +/// NOTE view definitions or implementer agreements may restrict an opening to be filled by one filling element only. +/// +/// HISTORY New entity in IFC Release 1.0 +/// +/// As shown in Figure 40, the insertion of a door into a wall is represented by two separate relationships. First the door opening is created within the wall by IfcWall(StandardCase) o-- IfcRelVoidsElement --o IfcOpeningElement, then the door is inserted within the opening by IfcOpeningElement o-- IfcRelFillsElement --o IfcDoor. +/// +/// Figure 40 — Relationships for element filling +class IFC_PARSE_API IfcRelFillsElement : public IfcRelConnects { +public: + /// Opening Element being filled by virtue of this relationship. + ::Ifc4x3_add2::IfcOpeningElement* RelatingOpeningElement() const; + void setRelatingOpeningElement(::Ifc4x3_add2::IfcOpeningElement* v); + /// Reference to building element that occupies fully or partially the associated opening. + /// + /// IFC2x PLATFORM CHANGE: The data type has been changed from IfcBuildingElement to IfcElement with upward compatibility for file based exchange. + ::Ifc4x3_add2::IfcElement* RelatedBuildingElement() const; + void setRelatedBuildingElement(::Ifc4x3_add2::IfcElement* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelFillsElement (IfcEntityInstanceData* e); + IfcRelFillsElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcOpeningElement* v5_RelatingOpeningElement, ::Ifc4x3_add2::IfcElement* v6_RelatedBuildingElement); + typedef aggregate_of< IfcRelFillsElement > list; +}; +/// Objectified relationship between a distribution flow element occurrence instance and one-to-many control element occurrence instances indicating that the control element(s) sense or control some aspect of the flow element. It is applied to IfcDistributionFlowElement and IfcDistributionControlElement. +/// +/// This relationship may be used to indicate an operation relationship such as an actuator operating a valve, damper, or switch. It may also be used to indicate a sensing relationship such as a sensor detecting conditions of fluid flow. +/// +/// This relationship implies a sensing or controlling relationship; if elements are merely connected without any control relationship, then IfcRelConnectsElements should be used. +/// +/// HISTORY: New entity in IFC R2x. +class IFC_PARSE_API IfcRelFlowControlElements : public IfcRelConnects { +public: + /// References control elements which may be used to impart control on the Distribution Element. + aggregate_of< ::Ifc4x3_add2::IfcDistributionControlElement >::ptr RelatedControlElements() const; + void setRelatedControlElements(aggregate_of< ::Ifc4x3_add2::IfcDistributionControlElement >::ptr v); + /// Relationship to a distribution flow element + ::Ifc4x3_add2::IfcDistributionFlowElement* RelatingFlowElement() const; + void setRelatingFlowElement(::Ifc4x3_add2::IfcDistributionFlowElement* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelFlowControlElements (IfcEntityInstanceData* e); + IfcRelFlowControlElements (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcDistributionControlElement >::ptr v5_RelatedControlElements, ::Ifc4x3_add2::IfcDistributionFlowElement* v6_RelatingFlowElement); + typedef aggregate_of< IfcRelFlowControlElements > list; +}; +/// Definition from IAI: The +/// IfcRelInterferesElements objectified relationship +/// indicates that two elements interfere. Interference is a spatial +/// overlap between the two elements. It is a 1 to 1 relationship. +/// The concept of two elements interfering physically or logically +/// is described independently from the elements. The interference +/// may be related to the shape representation of the entities by +/// providing an interference geometry. +/// +/// When the interference geometry is available it can be passed +/// by the optional attribute InterferenceGeometry pointing to +/// IfcConnectionGeometry. The connection geometry is provided +/// as a point, curve, surface, or volume within the local placement +/// coordinate systems of the connecting elements. The +/// IfcConnectionVolumeGeometry is the default type to be used +/// for interference in 3D space, as indicated in e.g. clash +/// detections. +/// If the interference geometry is omitted then the interference +/// is provided as a logical relationship. Under this circumstance, +/// the connection point, curve, surface, or solid has to be +/// recalculated by the receiving application. +/// +/// The RelatingElement and RelatedElement define +/// the two elements in the relationship, that may have different +/// roles. This is controlled by the attribute +/// ImpliedOrder. +/// +/// ImpliedOrder=TRUE The RelatingElement +/// constitutes the primary element of the interference relationship. +/// If the interference is to be resolved by subtracting the +/// overlapping part, it should be subtracted from the +/// RelatingElement. The net result would be the +/// RelatingElement subtracted by the +/// InterferenceGeometry. This would be the case in +/// interference relationships where the RelatedElement +/// creates a void in the RelatingElement dynamically. +/// ImpliedOrder=FALSE The RelatingElement and +/// RelatedElement have no priority among each other. If the +/// interference is to be resolved then no information about whether +/// the InterferenceGeometry should be subtracted from the +/// RelatingElement or thed RelatedElement can be +/// traced. This would be the case for clash detection results. +/// ImpliedOrder=UNKNOW No information about the +/// priorities is provided. +/// +/// HISTORY New entity in +/// IFC2x4. +class IFC_PARSE_API IfcRelInterferesElements : public IfcRelConnects { +public: + /// Reference to a subtype of IfcElement that is the RelatingElement in the interference relationship. Depending on the value of ImpliedOrder the RelatingElement may carry the notion to be the element from which the interference geometry should be subtracted. + ::Ifc4x3_add2::IfcInterferenceSelect* RelatingElement() const; + void setRelatingElement(::Ifc4x3_add2::IfcInterferenceSelect* v); + /// Reference to a subtype of IfcElement that is the RelatedElement in the interference relationship. Depending on the value of ImpliedOrder the RelatedElement may carry the notion to be the element from which the interference geometry should not be subtracted. + ::Ifc4x3_add2::IfcInterferenceSelect* RelatedElement() const; + void setRelatedElement(::Ifc4x3_add2::IfcInterferenceSelect* v); + /// The geometric shape representation of the interference geometry that is provided in the object coordinate system of the RelatingElement (mandatory) and in the object coordinate system of the RelatedElement (optionally). + ::Ifc4x3_add2::IfcConnectionGeometry* InterferenceGeometry() const; + void setInterferenceGeometry(::Ifc4x3_add2::IfcConnectionGeometry* v); + /// Optional identifier that describes the nature of the interference. Examples could include 'Clash', 'ProvisionForVoid', etc. + boost::optional< std::string > InterferenceType() const; + void setInterferenceType(boost::optional< std::string > v); + /// Logical value indicating whether the interference geometry should be subtracted from the RelatingElement (if TRUE), or whether it should be either subtracted from the RelatingElement or the RelatedElement (if FALSE), or whether no indication can be provided (if UNKNOWN). + boost::logic::tribool ImpliedOrder() const; + void setImpliedOrder(boost::logic::tribool v); + ::Ifc4x3_add2::IfcSpatialZone* InterferenceSpace() const; + void setInterferenceSpace(::Ifc4x3_add2::IfcSpatialZone* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelInterferesElements (IfcEntityInstanceData* e); + IfcRelInterferesElements (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcInterferenceSelect* v5_RelatingElement, ::Ifc4x3_add2::IfcInterferenceSelect* v6_RelatedElement, ::Ifc4x3_add2::IfcConnectionGeometry* v7_InterferenceGeometry, boost::optional< std::string > v8_InterferenceType, boost::logic::tribool v9_ImpliedOrder, ::Ifc4x3_add2::IfcSpatialZone* v10_InterferenceSpace); + typedef aggregate_of< IfcRelInterferesElements > list; +}; +/// The nesting relationship +/// IfcRelNests is a special type of the general +/// composition/decomposition (or whole/part) relationship +/// IfcRelDecomposes. The nesting relationship can be applied +/// to all non physical subtypes of object and object types, namely +/// processes, controls (like cost items), and resources. The nesting +/// implies an order among the nested parts. +/// EXAMPLE1 A nesting of costs items in a cost +/// schedule is the composition of complex cost items from other cost +/// items. The order of the nested cost items underneath the parent +/// cost item is determined by the order of the list of +/// RelatedObjects. +/// EXAMPLE2 A nesting of work tasks within a work +/// schedule is the composition of a parent work task from more +/// specific sub work tasks. The order of the sub tasks underneath +/// the parent task is determined by the order of the list of +/// RelatedObjects.. +/// Decompositions imply a dependency, i.e. the definition of the +/// whole depends on the definition of the parts and the parts depend +/// on the existence of the whole. The behaviour that is implied from +/// the dependency has to be established inside the applications. +/// +/// HISTORY New entity in IFC Release 2.0 +/// +/// IFC2x4 CHANGE The attributes RelatingObject and RelatedObjects are demoted from the supertype IfcRelDecomposes, and RelatedObjects is refined to be a list. The use of IfcRelNests is repurposed to be a nesting of an ordered collections of parts. +class IFC_PARSE_API IfcRelNests : public IfcRelDecomposes { +public: + /// The object definition, either an non-product object type or a non-product object occurrence, that represents the nest. It is the whole within the whole/part relationship. + /// + /// IFC2x4 CHANGE  The attribute has been demoted from the supertype IfcRelDecomposes and defines the ordered nesting relationship. + ::Ifc4x3_add2::IfcObjectDefinition* RelatingObject() const; + void setRelatingObject(::Ifc4x3_add2::IfcObjectDefinition* v); + /// The object definitions, either non-product object occurrences or non-product object types, that are being nestes. They are defined as the parts in the ordered whole/part relationship - i.e. there is an implied order among the parts expressed by the position within the list of RelatedObjects. + /// + /// IFC2x4 CHANGE  The attribute has been demoted from the supertype IfcRelDecomposes and defines the ordered set of parts within the nest. + aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr RelatedObjects() const; + void setRelatedObjects(aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelNests (IfcEntityInstanceData* e); + IfcRelNests (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcObjectDefinition* v5_RelatingObject, aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v6_RelatedObjects); + typedef aggregate_of< IfcRelNests > list; +}; + +class IFC_PARSE_API IfcRelPositions : public IfcRelConnects { +public: + ::Ifc4x3_add2::IfcPositioningElement* RelatingPositioningElement() const; + void setRelatingPositioningElement(::Ifc4x3_add2::IfcPositioningElement* v); + aggregate_of< ::Ifc4x3_add2::IfcProduct >::ptr RelatedProducts() const; + void setRelatedProducts(aggregate_of< ::Ifc4x3_add2::IfcProduct >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelPositions (IfcEntityInstanceData* e); + IfcRelPositions (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcPositioningElement* v5_RelatingPositioningElement, aggregate_of< ::Ifc4x3_add2::IfcProduct >::ptr v6_RelatedProducts); + typedef aggregate_of< IfcRelPositions > list; +}; +/// The IfcRelProjectsElement is an objectified relationship +/// between an element and one projection element that creates a +/// modifier to the shape of the element. The relationship is defined +/// to be a 1:1 relationship, if an element has more than one +/// projection, several relationship objects have to be used, each +/// pointing to a different projection element. The +/// IfcRelProjectsElement establishes an aggregation +/// relationship between the main element and a sub ordinary addition +/// feature. +/// +/// NOTE  In contrary the +/// IfcRelAggregates relationship established an aggregation +/// of equal parts to a whole. +/// +/// The IfcRelProjectsElement implies a Boolean operation of +/// addition for the geometric bodies of the element and the feature +/// element. As with all decomposition relationships it determines: +/// +/// existence dependency - the RelatedFeatureElement +/// cannot exist without the RelatingElement +/// hierarchical and non-cyclical relationship - the +/// IfcRelProjectsElement can only alter a single +/// IfcElement +/// no spatial containment - the IfcFeatureElementAddition +/// as related element never participates in the hiearchical spatial +/// containment relationship +/// IfcRelContainedInSpatialStructure +/// +/// HISTORY New entity in +/// Release IFC2x Edition 2. +/// IFC2x4 CHANGE  +/// Supertype changed to IfcRelDecomposes. +class IFC_PARSE_API IfcRelProjectsElement : public IfcRelDecomposes { +public: + /// Element at which a projection is created by the associated IfcProjectionElement. + ::Ifc4x3_add2::IfcElement* RelatingElement() const; + void setRelatingElement(::Ifc4x3_add2::IfcElement* v); + /// Reference to the IfcFeatureElementAddition that defines an addition to the volume of the element, by using a Boolean addition operation. An example is a projection at the associated element. + ::Ifc4x3_add2::IfcFeatureElementAddition* RelatedFeatureElement() const; + void setRelatedFeatureElement(::Ifc4x3_add2::IfcFeatureElementAddition* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelProjectsElement (IfcEntityInstanceData* e); + IfcRelProjectsElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcElement* v5_RelatingElement, ::Ifc4x3_add2::IfcFeatureElementAddition* v6_RelatedFeatureElement); + typedef aggregate_of< IfcRelProjectsElement > list; +}; +/// The objectified relationship, +/// IfcRelReferencedInSpatialStructure is used to +/// assign elements in addition to those levels of the project +/// spatialstructure, in which they are referenced, but not +/// primarily contained. +/// +/// NOTE The primary containment relationship between +/// an element and the spatial structure is handled +/// byIfcRelContainsInSpatialStructure. +/// +/// Any element can be referencedto zero, one or several +/// levels of the spatial structure. Whereas the +/// IfcRelContainsInSpatialStructure relationship is +/// required to be hierarchical (an element can only be +/// contained in exactly one spatial structure element), the +/// IfcRelReferencedInSpatialStructure is not restricted +/// to be hierarchical. +/// +/// EXAMPLE A wall might be normally contained within +/// a storey, and since it does not span through several +/// stories, it is not referenced in any additional storey. +/// However a curtain wall might span through several +/// stories, in this case it can be contained within the +/// ground floor, but it would be referenced by all +/// additional stories, it spans. +/// +/// Predefined spatial structure elements to which elements can +/// be assigned are +/// +/// site as IfcSite +/// +/// building as IfcBuilding +/// +/// storey as IfcBuildingStorey +/// +/// space as IfcSpace +/// +/// Elements can also be references in a spatial zone that is provided as IfcSpatialZone. +/// +/// The same element can be assigned to different spatial +/// structure elements depending on the context. +/// +/// HISTORY New entity +/// inRelease IFC2x Edition 3. +/// +/// Use Definition +/// Figure 41 shows the use of IfcRelContainedInSpatialStructure and IfcRelReferencedInSpatialStructure to assign an IfcCurtainWallto two different levels within the spatial structure. It is primarily contained within the ground floor, and additionally referenced within the first and second floor. +/// +/// Figure 41 — Relationship for spatial structure referencing +class IFC_PARSE_API IfcRelReferencedInSpatialStructure : public IfcRelConnects { +public: + /// Set of products, which are referenced within this level of the spatial structure hierarchy. + /// NOTE  Referenced elements are contained elsewhere within the spatial structure, they are referenced additionally by this spatial structure element, e.g., because they span several stories. + aggregate_of< ::Ifc4x3_add2::IfcSpatialReferenceSelect >::ptr RelatedElements() const; + void setRelatedElements(aggregate_of< ::Ifc4x3_add2::IfcSpatialReferenceSelect >::ptr v); + /// Spatial structure element, within which the element is referenced. Any element can be contained within zero, one or many elements of the project spatial and zoning structure. + /// + /// IFC2x Edition 4 CHANGE  The attribute relatingStructure as been promoted to the new supertype IfcSpatialElement with upward compatibility for file based exchange. + ::Ifc4x3_add2::IfcSpatialElement* RelatingStructure() const; + void setRelatingStructure(::Ifc4x3_add2::IfcSpatialElement* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelReferencedInSpatialStructure (IfcEntityInstanceData* e); + IfcRelReferencedInSpatialStructure (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, aggregate_of< ::Ifc4x3_add2::IfcSpatialReferenceSelect >::ptr v5_RelatedElements, ::Ifc4x3_add2::IfcSpatialElement* v6_RelatingStructure); + typedef aggregate_of< IfcRelReferencedInSpatialStructure > list; +}; +/// IfcRelSequence is a +/// sequential relationship between processes where one process +/// must occur before the other in time and where the timing of +/// the relationship may be described as a type of sequence. +/// The relating process +/// (IfcRelSequence.RelatingProcess) is considered to be +/// the predecessor in the relationship (has precedence) whilst +/// the related process (IfcRelSequence.RelatedProcess) +/// is the successor. +/// +/// IfcRelSequence is defined as one-to-one +/// relationship; therefore it assigns one predecessor to one +/// successor. +/// +/// HISTORY  New entity in IFC 1.0. +/// +/// IFC2x4 CHANGE  Relocated to IfcProcessExtension schema. +/// TimeLag and SequenceType made optional. +/// USERDEFINED added to the IfcSequenceType +/// enumeration. UserDefinedSequenceType attribute +/// added. WHERE rule controlling use of the USERDEFINED +/// enumeration added. +/// +/// Use definitions +/// +/// IfcRelSequence is used to describe the logical +/// sequence relationship that exists between two processes. +/// This logical relationship identifies that there is a +/// predecessor or relating process and a successor or related +/// process. In IFC, there may be one predecessor and one +/// successor in the relationship. Many occurrences of +/// IfcRelSequence may exist to describe the sequence +/// relationships of a predecessor task with many successor +/// tasks or of many predecessor tasks with one successor task, +/// thus enabling a m:n sequence relationship between tasks. +/// Please note that sequence relationships always should stay +/// within the limits of a directed, non-cyclic graph. +/// +/// A sequence type may be set for a sequence. For tasks +/// assigned to a work schedule, it is expected that the +/// sequence type will be asserted. For a process map, where +/// the sequence relationship between processes is simply a +/// logical flow, it need not be asserted. +/// +/// A time lag may be assigned to a sequence, and the sequence +/// type defines the way in which the time lag applies to the +/// sequence either as a ratio or percentage of time duration +/// (e.g. start successor task when predecessor is 50% +/// complete) or as a time measure (e.g. start successor task 1 +/// week after commencement of the predecessor task). Care +/// should be used when assigning a time lag to a sequence +/// depending on the setting of the sequence type since there +/// is no checking that the time lag value is in keeping with +/// the sequence type set. +class IFC_PARSE_API IfcRelSequence : public IfcRelConnects { +public: + /// Reference to the process, that is the predecessor. + ::Ifc4x3_add2::IfcProcess* RelatingProcess() const; + void setRelatingProcess(::Ifc4x3_add2::IfcProcess* v); + /// Reference to the process, that is the successor. + ::Ifc4x3_add2::IfcProcess* RelatedProcess() const; + void setRelatedProcess(::Ifc4x3_add2::IfcProcess* v); + /// Time duration of the sequence, it is the time lag between the + /// predecessor and the successor as specified by the + /// SequenceType. + ::Ifc4x3_add2::IfcLagTime* TimeLag() const; + void setTimeLag(::Ifc4x3_add2::IfcLagTime* v); + /// The way in which the time lag applies to the sequence. + boost::optional< ::Ifc4x3_add2::IfcSequenceEnum::Value > SequenceType() const; + void setSequenceType(boost::optional< ::Ifc4x3_add2::IfcSequenceEnum::Value > v); + /// Allows for specification of user defined type of the sequence + /// beyond the enumeration values (START_START, START_FINISH, + /// FINISH_START, FINISH_FINISH) provided by SequenceType + /// attribute of type IfcSequenceEnum. When a value is + /// provided for attribute UserDefinedSequenceType in + /// parallel the attribute SequenceType shall have + /// enumeration value USERDEFINED. + /// + /// Added in IFC 2x4 + boost::optional< std::string > UserDefinedSequenceType() const; + void setUserDefinedSequenceType(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelSequence (IfcEntityInstanceData* e); + IfcRelSequence (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcProcess* v5_RelatingProcess, ::Ifc4x3_add2::IfcProcess* v6_RelatedProcess, ::Ifc4x3_add2::IfcLagTime* v7_TimeLag, boost::optional< ::Ifc4x3_add2::IfcSequenceEnum::Value > v8_SequenceType, boost::optional< std::string > v9_UserDefinedSequenceType); + typedef aggregate_of< IfcRelSequence > list; +}; +/// Definition from IAI: An objectified relationship +/// that defines the relationship between a system and the +/// sites, buildings, storeys or spaces, it serves. Examples of +/// systems are: +/// +/// building service systems (heating, cooling, waste water +/// system) represented by instances of IfcSystem +/// +/// idealized structural analysis systems represented by +/// instances of IfcStructuralAnalysisSystem +/// +/// HISTORY New entity in IFC +/// Release 1.0 +/// +/// IFC2x PLATFORM CHANGE The +/// data type of the attributeRelatedBuildings has been +/// changed from IfcBuilding to its supertype +/// IfcSpatialStructureElement with upward compatibility +/// for file based exchange. The name +/// IfcRelServicesBuildings is a knownanomaly, as the +/// relationship is not restricted to buildings anymore. +class IFC_PARSE_API IfcRelServicesBuildings : public IfcRelConnects { +public: + /// System that services the Buildings. + ::Ifc4x3_add2::IfcSystem* RelatingSystem() const; + void setRelatingSystem(::Ifc4x3_add2::IfcSystem* v); + /// Spatial structure elements (including site, building, storeys) that are serviced by the system. + /// + /// IFC2x PLATFORM CHANGE  The data type has been changed from IfcBuilding to IfcSpatialStructureElement with upward compatibility for file based exchange. + /// + /// IFC2x Edition 4 CHANGE  The data type has been changed from IfcSpatialStructureElement to IfcSpatialElement with upward compatibility for file based exchange. + aggregate_of< ::Ifc4x3_add2::IfcSpatialElement >::ptr RelatedBuildings() const; + void setRelatedBuildings(aggregate_of< ::Ifc4x3_add2::IfcSpatialElement >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelServicesBuildings (IfcEntityInstanceData* e); + IfcRelServicesBuildings (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcSystem* v5_RelatingSystem, aggregate_of< ::Ifc4x3_add2::IfcSpatialElement >::ptr v6_RelatedBuildings); + typedef aggregate_of< IfcRelServicesBuildings > list; +}; +/// The space boundary defines the +/// physical or virtual delimiter of a space by the relationship +/// IfcRelSpaceBoundary to the surrounding elements. +/// +/// In the case of a physical space boundary, the placement and +/// shape of the boundary may be given, and the building element, +/// providing the boundary, is referenced, +/// In the case of a virtual space boundary, the placement and +/// shape of the boundary may be given, but no building element is +/// referenced and a virtual element is +/// referenced instead. +/// +/// The IfcRelSpaceBoundary is defined as an objectified +/// relationship that handles the element to space relationship by +/// objectifying the relationship between an element and the space it +/// bounds. It is given as a one-to-one relationship, but allows each +/// element (including virutal elements and openings) to define many +/// such relationship and each space to be defined by many such +/// relationships. +/// Space boundaries are always defined as seen from the space. In +/// general two basic types of space boundaries are +/// distinguished: +/// +/// 1st level space boundary: defined +/// as boundaries of the space, not taking into account any change in +/// building element or spaces on the other side. +/// 2nd level space boundary: defined +/// as boundary taking any change in building element or spaces on +/// the other side into account. It can be further distinguished into +/// +/// 2nd level type A: There is a space +/// on the other side. +/// 2nd level type B: There is a +/// building element on the other side. +/// +/// The exact definition of how space boundaries +/// are broken down depends on the view definition, more detailed +/// conventions on how space boundaries are decomposed can only be +/// given at the domain or application type level. +/// +/// In an architectural or FM related view, a space +/// boundary is defined totally from inside the space. This is a +/// 1st level space boundary. +/// In a thermal view, the decomposition of the space +/// boundary depends on the material of the providing building +/// element and the adjacent spaces behind. This is a +/// 2nd level space boundary. +/// +/// Figure 42 — Space boundary at first level +/// Figure 43 — Space boundary at second level +/// +/// Figure 44 — Space boundary at second level type A +/// Figure 45 — Space boundary at second level type B +/// +/// HISTORY New entity in IFC Release 1.5, the entity has been modified in IFC Release +/// 2x. +/// IFC2x CHANGE The data type of the attributeRelatedBuildingElement has +/// been changed from IfcBuildingElement to its supertype IfcElement. The data type of the attribute +/// ConnectionGeometry has been changed from IfcConnectionSurfaceGeometry to its supertype +/// IfcConnectionGeometry. +/// IFC2x4 CHANGE The attribute RelatedBuildingElement has been made mandatory. For virtual boundaries the reference to IfcVirtualElement is now mandatory. +/// +/// Attribute Use Definitions +/// The differences between the 1st and +/// 2nd level space boundaries is +/// identified by: +/// +/// 1st level: +/// SELF\IfcRoot.Name = "1stLevel" +/// SELF\IfcRootDescription = NIL +/// 2nd level: +/// SELF\IfcRoot.Name = "2ndLevel" +/// SELF\IfcRootDescription = "2a", or "2b" +/// +/// Differentiation between physical and virtual space boundary is illustrated in Figure 46 and Figure 47. +/// +/// As shown in Figure 46, if the IfcRelSpaceBoundary is used to express a virtual boundary, the attribute PhysicalOrVirtualBoundary has to be set to VIRTUAL. The attribute RelatedBuildingElement shall point to an instance of IfcVirtualElement. If the correct location is of interest, the attribute ConnectionGeometry is required. +/// NOTE The connection geometry, either by a 2D curve or a 3D surface, is used to describe the portion of the "virtual wall" that separates the two spaces. All instances of IfcRelSpaceBoundary given at the adjacent spaces share the same instance of IfcVirtualElement. Each instance of IfcRelSpaceBoundary provides in addition the ConnectionGeometry given within the local placement of each space. +/// +/// Figure 46 — Space boundary of virtual element +/// +/// As shown in Figure 47, if the IfcRelSpaceBoundary is used to express a physical boundary between two spaces, the attribute PhysicalOrVirtualBoundary has to be set to PHYSICAL. The attribute RelatedBuildingElement has to be given and points to the element providing the space boundary. The attribute ConnectionGeometry may be inserted, in this case it describes the physical space boundary geometically, or it may be omited, in that case it describes a physical space boundary logically. +/// +/// Figure 47 — Space boundary of physical element +/// +/// Geometry Use Definitions +/// The IfcRelSpaceBoundary may have geometry attached. If +/// geometry is not attached, the relationship between space and +/// building element is handled only on a logical level. If geometry +/// is attached, it is given within the local coordinate systems of +/// the space. +/// NOTE: The attributes +/// CurveOnRelatingElement at +/// IfcConnectionCurveGeometry or +/// SurfaceOnRelatingElement at +/// IfcConnectionSurfaceGeometry provide the geometry within +/// the local coordinate system of the IfcSpace, whereas the +/// attributes CurveOnRelatedElement at +/// IfcConnectionCurveGeometry or +/// SurfaceOnRelatedElement at +/// IfcConnectionSurfaceGeometry provide the geometry within +/// the local coordinate system of the subtype of +/// IfcElement. +/// NOTE In most view definitions the connection geometry for +/// the related IfcElement is not +/// provided. +/// The geometric representation (through the +/// ConnectionGeometry attribute) is defined using either 2D +/// curve geometry or 3D surface geometry for space boundaries. In +/// most view definitions the 3D connection surface geometry is +/// required. +/// +/// 1st level space boundary: +/// +/// only connection geometry for related space shall be +/// provided +/// only surface connection geometry shall be provided +/// only the following surface representations are supported: +/// +/// IfcSurfaceOfLinearExtrusion +/// IfcCurveBoundedPlane +/// IfcCurveBoundedSurface +/// IfcFaceBasedSurfaceModel +/// +/// 2nd level space boundary: +/// +/// only connection geometry for related space shall be +/// provided +/// only surface connection geometry shall be provided +/// only the following surface representations are supported: +/// +/// IfcCurveBoundedPlane with restrictions to have +/// polygonal boundaries only +/// IfcFaceBasedSurfaceModel +/// +/// Surface connection geometry +/// The following constraints apply to the surface connection +/// geometry representation: +/// +/// planar boundaries: +/// +/// IfcSurfaceOfLinearExtrusion defined by a +/// SweptCurve being an IfcArbitraryOpenProfileDef with +/// straight segements, or +/// IfcCurveBoundedPlane +/// +/// curved boundaries +/// +/// IfcSurfaceOfLinearExtrusion defined by a +/// SweptCurve being an IfcArbitraryOpenProfileDef with +/// curves segements, or +/// IfcCurveBoundedSurface with a BasisSurface +/// being a non planar surface, such as IfcCylindricalSurface, +/// or +/// IfcFaceBasedSurfaceModel if already faceted. +/// +/// Curve connection geometry +/// The following constraints apply to the 2D curve +/// representation: +/// +/// Curve: IfcPolyline, IfcTrimmedCurve or +/// IfcCompositeCurve +class IFC_PARSE_API IfcRelSpaceBoundary : public IfcRelConnects { +public: + /// Reference to one spaces that is delimited by this boundary. + ::Ifc4x3_add2::IfcSpaceBoundarySelect* RelatingSpace() const; + void setRelatingSpace(::Ifc4x3_add2::IfcSpaceBoundarySelect* v); + /// Reference to Building Element, that defines the Space Boundaries. + /// + /// IFC2x PLATFORM CHANGE  The data type has been changed from IfcBuildingElement to IfcElement with upward compatibility for file based exchange. + /// + /// IFC2x4 CHANGE  The attribute has been changed to be mandatory. + ::Ifc4x3_add2::IfcElement* RelatedBuildingElement() const; + void setRelatedBuildingElement(::Ifc4x3_add2::IfcElement* v); + /// Physical representation of the space boundary. Provided as a curve or surface given within the LCS of the space. + /// + /// IFC2x PLATFORM CHANGE  The data type has been changed from IfcConnectionSurfaceGeometry to IfcConnectionGeometry with upward compatibility for file based exchange. + ::Ifc4x3_add2::IfcConnectionGeometry* ConnectionGeometry() const; + void setConnectionGeometry(::Ifc4x3_add2::IfcConnectionGeometry* v); + /// Defines, whether the Space Boundary is physical (Physical) or virtual (Virtual). + ::Ifc4x3_add2::IfcPhysicalOrVirtualEnum::Value PhysicalOrVirtualBoundary() const; + void setPhysicalOrVirtualBoundary(::Ifc4x3_add2::IfcPhysicalOrVirtualEnum::Value v); + /// Defines, whether the Space Boundary is internal (Internal), or external, i.e. adjacent to open space (that can be an partially enclosed space, such as terrace (External). + ::Ifc4x3_add2::IfcInternalOrExternalEnum::Value InternalOrExternalBoundary() const; + void setInternalOrExternalBoundary(::Ifc4x3_add2::IfcInternalOrExternalEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelSpaceBoundary (IfcEntityInstanceData* e); + IfcRelSpaceBoundary (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcSpaceBoundarySelect* v5_RelatingSpace, ::Ifc4x3_add2::IfcElement* v6_RelatedBuildingElement, ::Ifc4x3_add2::IfcConnectionGeometry* v7_ConnectionGeometry, ::Ifc4x3_add2::IfcPhysicalOrVirtualEnum::Value v8_PhysicalOrVirtualBoundary, ::Ifc4x3_add2::IfcInternalOrExternalEnum::Value v9_InternalOrExternalBoundary); + typedef aggregate_of< IfcRelSpaceBoundary > list; +}; +/// The 1st level space boundary +/// defines the physical or virtual delimiter of a space by the +/// relationship IfcRelSpaceBoundary1stLevel to the +/// surrounding elements. 1st level space boundaries are +/// characterizeda by: +/// +/// 1st level space boundaries are the boundaries of a space +/// defined by the surfaces of building elements bounding this space +/// (physical space boundaries) or by virtual surfaces provided by an +/// adjacent space with no dividing wall. +/// 1st level space boundaries do not consider any change of +/// material in the bounding building elements, or different +/// spaces/zones behind a wall or slab (floor or ceiling). +/// 1st level space boundaries are differentiated in two ways: +/// virtual or physical and internal,external, or undefined (internal +/// and external) e.g. for a wall that is partially inside and +/// outside. +/// 1st level space boundaries form a closed shell around the +/// space (so long as the space is completely enclosed) and include +/// overlapping boundaries representing openings (filled or not) in +/// the building elements (see implementers agreement below). +/// +/// 1st level space boundaries define a space by its boundary +/// surfaces without taking anything on the other side of the +/// bounding elements into account. +/// NOTE 1st level space boundaries are used e.g. +/// in quantity take-off and facility management as they describe the +/// surfaces for finishes. They cannot be directly used for thermal +/// analysis. However 1st level space boundaries can provide the +/// input to preprocessors to thermal analysis software that take 1st +/// level space boundaries and perform the necessary transformation +/// into 2nd level space boundaries that are required for energy +/// analysis. +/// +/// HISTORY New entity in IFC2x4. +/// +/// Relationship Use Definitions +/// +/// As shown in Figure 48, the attribute ParentBoundary with inverse InnerBoundaries is provided to link the space boundaries of doors, windows, and openings to the parent boundary, such as of a wall or slab. +/// NOTE The space boundary of the parent is not cut by the inner boundary - both overlap. +/// +/// Figure 48 — Space boundary first level relationships +/// +/// Geometry Use Definitions +/// See the definition at the supertype IfcRelSpaceBoundary for +/// guidance on using the connection geometry for first level space +/// boundaries. +class IFC_PARSE_API IfcRelSpaceBoundary1stLevel : public IfcRelSpaceBoundary { +public: + /// Reference to the host, or parent, space boundary within which this inner boundary is defined. + ::Ifc4x3_add2::IfcRelSpaceBoundary1stLevel* ParentBoundary() const; + void setParentBoundary(::Ifc4x3_add2::IfcRelSpaceBoundary1stLevel* v); + aggregate_of< IfcRelSpaceBoundary1stLevel >::ptr InnerBoundaries() const; // INVERSE IfcRelSpaceBoundary1stLevel::ParentBoundary + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelSpaceBoundary1stLevel (IfcEntityInstanceData* e); + IfcRelSpaceBoundary1stLevel (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcSpaceBoundarySelect* v5_RelatingSpace, ::Ifc4x3_add2::IfcElement* v6_RelatedBuildingElement, ::Ifc4x3_add2::IfcConnectionGeometry* v7_ConnectionGeometry, ::Ifc4x3_add2::IfcPhysicalOrVirtualEnum::Value v8_PhysicalOrVirtualBoundary, ::Ifc4x3_add2::IfcInternalOrExternalEnum::Value v9_InternalOrExternalBoundary, ::Ifc4x3_add2::IfcRelSpaceBoundary1stLevel* v10_ParentBoundary); + typedef aggregate_of< IfcRelSpaceBoundary1stLevel > list; +}; +/// The 2nd level space boundary defines the physical or virtual delimiter of a space by the relationship IfcRelSpaceBoundary2ndLevel to the surrounding elements. 2nd level space boundaries are characterized by: +/// +/// 2nd level space boundaries still represent building elements that bound the space, but are more granular in that they are subdivided in any of the following cases: +/// +/// Differences in materials and/or material assemblies (for example, a wainscot or paneling on the lower portion of a wall). +/// Differences in spaces or zones on the other side of the building element (or virtual boundary) represented by the space boundary (for example, two different spaces on the other side of a wall) +/// +/// 2nd level space boundaries are differentiated in two ways: virtual or physical and internal or external, whereby any space boundary that is both internal and external has to be split into segments being either or. +/// 2nd level space boundaries represent both sides of a heat transfer surface separated by the thickness of the building element. They can be further differentiated in: +/// +/// Type 2a that occurs when there is a space on the opposite side of the building element providing the space boundary +/// Type 2b occurs if there is a building element on the opposite side of the building element providing the space boundary. +/// +/// The connection geometry of 2nd level space boundaries is restricted to planar surfaces only. This means that curved surfaces must be segmented. +/// +/// 2nd level space boundaries define the heat transfer surfaces on both sides of building elements that separate spaces. The generation of 2nd level space boundaries has to take building elements and spaces on the other side into account. +/// NOTE 2nd level space boundaries are used by many analysis packages that require a surface view of the building that can be transformed into the various simple topological models. Examples of such analysis packages include: (1) energy analysis, (2) lighting analysis, (3) fluid dynamics +/// +/// HISTORY New entity in IFC2x4. +/// +/// Relationship Use Definitions +/// As shown in Figure 49, the attribute ParentBoundary with inverse InnerBoundaries is provided to link the space boundaries of doors, windows, and openings to the parent boundary, such as of a wall or slab. +/// NOTE The space boundary of the parent is not cut by the inner boundary - both overlap. +/// The attribute CorrespondingBoundary with inverse Corresponds is provided to link the pair of space boundaries on the opposite sides of the building element. +/// NOTE Only 2nd level space boundaries of type A have corresponding boundaries. +/// +/// Figure 49 — Space boundary second level relationships +/// +/// Geometry Use Definitions +/// See the definition at the supertype IfcRelSpaceBoundary +/// for guidance on using the connection geometry for second level +/// space boundaries. +class IFC_PARSE_API IfcRelSpaceBoundary2ndLevel : public IfcRelSpaceBoundary1stLevel { +public: + /// Reference to the other space boundary of the pair of two space boundaries on either side of a space separating thermal boundary element. + ::Ifc4x3_add2::IfcRelSpaceBoundary2ndLevel* CorrespondingBoundary() const; + void setCorrespondingBoundary(::Ifc4x3_add2::IfcRelSpaceBoundary2ndLevel* v); + aggregate_of< IfcRelSpaceBoundary2ndLevel >::ptr Corresponds() const; // INVERSE IfcRelSpaceBoundary2ndLevel::CorrespondingBoundary + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelSpaceBoundary2ndLevel (IfcEntityInstanceData* e); + IfcRelSpaceBoundary2ndLevel (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcSpaceBoundarySelect* v5_RelatingSpace, ::Ifc4x3_add2::IfcElement* v6_RelatedBuildingElement, ::Ifc4x3_add2::IfcConnectionGeometry* v7_ConnectionGeometry, ::Ifc4x3_add2::IfcPhysicalOrVirtualEnum::Value v8_PhysicalOrVirtualBoundary, ::Ifc4x3_add2::IfcInternalOrExternalEnum::Value v9_InternalOrExternalBoundary, ::Ifc4x3_add2::IfcRelSpaceBoundary1stLevel* v10_ParentBoundary, ::Ifc4x3_add2::IfcRelSpaceBoundary2ndLevel* v11_CorrespondingBoundary); + typedef aggregate_of< IfcRelSpaceBoundary2ndLevel > list; +}; +/// IfcRelVoidsElement is an objectified relationship between a building element and one opening element that creates a void in the element. It is a one-to-one relationship. This relationship implies a Boolean operation of subtraction between the geometric bodies of the element and the opening. +/// +/// As shown in Figure 50, the insertion of a void into a wall is represented by the relationship IfcRelVoidsElement. The opening is created within the wall by IfcWall(StandardCase) o-- IfcRelVoidsElement --o IfcOpeningElement. +/// +/// Figure 50 — Relationship for element voiding +/// +/// HISTORY New entity in IFC Release 1.0 +class IFC_PARSE_API IfcRelVoidsElement : public IfcRelDecomposes { +public: + ::Ifc4x3_add2::IfcElement* RelatingBuildingElement() const; + void setRelatingBuildingElement(::Ifc4x3_add2::IfcElement* v); + ::Ifc4x3_add2::IfcFeatureElementSubtraction* RelatedOpeningElement() const; + void setRelatedOpeningElement(::Ifc4x3_add2::IfcFeatureElementSubtraction* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelVoidsElement (IfcEntityInstanceData* e); + IfcRelVoidsElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcElement* v5_RelatingBuildingElement, ::Ifc4x3_add2::IfcFeatureElementSubtraction* v6_RelatedOpeningElement); + typedef aggregate_of< IfcRelVoidsElement > list; +}; +/// Definition from ISO/CD 10303-42:1992: The +/// reparametrised composite curve segment is a special type of +/// composite curve segment which provides the capability to +/// re-define its parametric length without changing its +/// geometry. +/// +/// Let l = ParamLength. +/// +/// If t0 ≤ t ≤ +/// t1 is the parameter range of +/// ParentCurve, the new parameter . for the +/// reparametrised composite curve segment is given by the +/// equation: +/// +/// if SameSense = TRUE; +/// +/// or by the equation: +/// +/// if SameSense = FALSE; +/// +/// NOTE Corresponding STEP entity: reparametrised_composite_curve_segment. Please refer to ISO/IS 10303-42:1994, p.59 for the final definition of the formal standard. +/// +/// HISTORY New class in IFC2x4 +class IFC_PARSE_API IfcReparametrisedCompositeCurveSegment : public IfcCompositeCurveSegment { +public: + double ParamLength() const; + void setParamLength(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcReparametrisedCompositeCurveSegment (IfcEntityInstanceData* e); + IfcReparametrisedCompositeCurveSegment (::Ifc4x3_add2::IfcTransitionCode::Value v1_Transition, bool v2_SameSense, ::Ifc4x3_add2::IfcCurve* v3_ParentCurve, double v4_ParamLength); + typedef aggregate_of< IfcReparametrisedCompositeCurveSegment > list; +}; +/// IfcResource contains the information needed to represent the costs, schedule, and other impacts from the use of a thing in a process. It is not intended to use IfcResource to model the general properties of the things themselves, while an optional linkage from IfcResource to the things to be used can be specified (specifically, the relationship from subtypes of IfcResource to IfcProduct through the IfcRelAssignsToResource relationship). +/// +/// There are two basic intended uses of IfcResource. First, if the attributes of the thing are not needed for the purpose of the use of IfcResource, or the types of things are not explicitly modeled in IFC yet, then the linkage between the resource and the thing doesn't have to be instantiated in the system. That is, the attributes of IfcResource (or its subtypes) alone are sufficient to represent the use of the thing as a resource for the purpose of the project. +/// +/// EXAMPLE: construction equipment such as earth-moving vehicles or tools are not currently modeled within the IFC. For the purpose of estimating and scheduling, these can be represented using subtypes of IfcResource alone. +/// +/// Second, if the attributes of the thing are needed for the use of IfcResource objects, and they are modeled explicitly as objects, then the IfcResource instances can be linked to the instances of the type of the things being referenced. Things that might be used as resources and that are already modeled in the IFC include physical products, people and organizations, and materials. The relationship object IfcRelAssignsToResource is provided for this approach. +/// +/// The inherited attribute ObjectType is used as a textual code that identifies the resource type. +/// +/// HISTORY New entity in IFC Release 1.0 +/// +/// IFC2x PLATFORM CHANGE: The attributes BaseUnit and ResourceConsumption have been removed from the abstract entity; they are reintroduced at a lower level in the hierarchy. +class IFC_PARSE_API IfcResource : public IfcObject, public IfcResourceSelect { +public: + /// An identifying designation given to a resource. + /// It is the identifier at the occurrence level. + /// + /// IFC2x4 CHANGE Attribute promoted from subtype IfcConstructionResource. + boost::optional< std::string > Identification() const; + void setIdentification(boost::optional< std::string > v); + /// A detailed description of the resource (e.g. the skillset for a labor resource). + /// + /// IFC2x4 NOTE:  The attribute LongDescription is added replacing the ResourceGroup attribute at subtype IfcConstructionResource. + boost::optional< std::string > LongDescription() const; + void setLongDescription(boost::optional< std::string > v); + aggregate_of< IfcRelAssignsToResource >::ptr ResourceOf() const; // INVERSE IfcRelAssignsToResource::RelatingResource + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcResource (IfcEntityInstanceData* e); + IfcResource (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription); + typedef aggregate_of< IfcResource > list; +}; +/// An IfcRevolvedAreaSolid is a solid created by revolving +/// a cross section provided by a profile definition about an axis. The +/// axis and the cross section shall be in the same plane. +/// NOTE Both the axis and the cross section are +/// required to lie in the xy plane of the object position coordinate +/// system. +/// The following definitions from ISO 10303-42 apply: +/// +/// A revolved area solid +/// is a solid formed by revolving a planar bounded surface about an +/// axis. The axis shall be in the plane of the surface and the axis +/// shall not intersect the interior of the bounded surface. The +/// bounded surface may have holes which will sweep into holes in the +/// solid. The direction of revolution is clockwise when viewed along +/// the axis in the positive direction. More precisely if A is +/// the axis location and d is the axis direction and C +/// is an arc on the surface of revolution generated by an arbitrary +/// point p on the boundary of the swept area, then C +/// leaves p in direction d x (p - A) as +/// the area is revolved. +/// +/// Figure 262 illustrates geometric parameters of the revolved solid. The revolved area solid defines the revolution of a 2D area (given by a profile definition) by an axis and angle. The result is a solid. The swept area is given by a profile definition. This profile is defined: +/// +/// as a 2D bounded curve within the xy plane of the position coordinate system, +/// as a 2D bounded curve with holes within the xy plane of the position coordinate system, +/// or as a 2D primitive, defined within a 2D position coordinate system, that is placed relative to the xy plane of the position coordinate system +/// +/// The AxisLine can have any orientation within the XY plane, it does not have to be parallel to the y-axis as shown in the illustration. +/// +/// Figure 262 — Revolved area solid geometry +/// +/// NOTE  Corresponding ISO 10303-42 entity: revolved_area_solid. Please refer to ISO/IS 10303-42:1994, p. 184 for the final definition of the formal standard. The data type of the inherited SweptArea attribute is different, i.e. of type IfcProfileDef. The position attribute has been added to position the cross section used for the revolution. +/// +/// HISTORY  New entity in IFC Release 1.5, capabilities of this entity have been enhanced in IFC Release 2x. +/// +/// Informal propositions: +/// +/// The AxisLine shall lie in the plane of the +/// SweptArea (as defined at supertype +/// IfcSweptAreaSolid). +/// The AxisLine shall not intersect the interior of the +/// SweptArea (as defined at supertype +/// IfcSweptAreaSolid). +/// The Angle shall be between 0° and 360°, or 0 +/// and 2Ï€ (depending on the unit type for +/// IfcPlaneAngleMeasure). +/// +/// Texture Use Definition +/// For side faces, textures are aligned facing upright along the +/// sides with origin at the first point of an arbitrary profile, and +/// following the outer bound of the profile counter-clockwise (as seen +/// from above). For parameterized profiles, the origin is defined at +/// the +Y extent for rounded profiles (having no sharp edge) and the +/// first sharp edge counter-clockwise from the +Y extent for all other +/// profiles. Textures are stretched or repeated on each side along the +/// outer boundary of the profile according to RepeatS. +/// Textures are stretched or repeated on each side along the outermost +/// (longest) revolution path according to RepeatT, where +/// coordinates are compressed towards the axis of revolution. +/// For top and bottom caps, textures are aligned facing +/// front-to-back, with the origin at the minimum X and Y extent. +/// Textures are stretched or repeated on the top and bottom to the +/// extent of each face according to RepeatS and +/// RepeatT. +/// For profiles with voids, textures are aligned facing upright +/// along the inner side with origin at the first point of an arbitrary +/// profile, and following the inner bound of the profile clockwise (as +/// seen from above). For parameterized profiles, the origin of inner +/// sides is defined at the +Y extent for rounded profiles (having no +/// sharp edge such as hollow ellipses or rounded rectangles) and the +/// first sharp edge clockwise from the +Y extent for all other +/// profiles. +/// +/// Figure 263 illustrates default texture mapping with a repeated texture (RepeatS=True and RepeatT=True). The image on the left shows the texture where the S axis points to the right and the T axis points up. The image on the right shows the texture applied to the geometry where the X axis points back to the right, the Y axis points back to the left, and the Z axis points up. For an IfcRevolvedAreaSolid having a profile of IfcTShapeProfileDef and revolved at 22.5 degrees, the side texture coordinate origin is the first corner counter-clockwise from the +Y axis, which equals (-0.5*IfcTShapeProfileDef.OverallWidth, +0.5*IfcTShapeProfileDef.OverallDepth), while the top (end cap) texture coordinates start at (-0.5*IfcTShapeProfileDef.OverallWidth, -0.5*IfcTShapeProfileDef.OverallDepth). +/// +/// Figure 263 — Revolved area solid textures +class IFC_PARSE_API IfcRevolvedAreaSolid : public IfcSweptAreaSolid { +public: + /// Axis about which revolution will take place. + ::Ifc4x3_add2::IfcAxis1Placement* Axis() const; + void setAxis(::Ifc4x3_add2::IfcAxis1Placement* v); + /// The angle through which the sweep will be made. This angle is measured from the plane of the swept area provided by the XY plane of the position coordinate system. + double Angle() const; + void setAngle(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRevolvedAreaSolid (IfcEntityInstanceData* e); + IfcRevolvedAreaSolid (::Ifc4x3_add2::IfcProfileDef* v1_SweptArea, ::Ifc4x3_add2::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_add2::IfcAxis1Placement* v3_Axis, double v4_Angle); + typedef aggregate_of< IfcRevolvedAreaSolid > list; +}; +/// IfcRevolvedAreaSolidTapered is defined by revolving a +/// cross section along a circular arc. The cross section may change +/// along the revolving sweep from the shape of the start cross +/// section into the shape of the end cross section. Corresponding +/// vertices of the start and end cross sections are then connected. +/// The bounded surface may have holes which will sweep into holes in +/// the solid. +/// The rotation axis is defined by: +/// +/// Start point: +/// SELF\IfcSweptAreaSolid.Position.Location +/// Direction: SELF\IfcRevolvedAreaSolid.Axis +/// Rotation axis: SELF\IfcRevolvedAreaSolid.AxisLine, +/// created from start point and direction by appying a 1 unit +/// magnitude. +/// Orientation: Positive angles are applied clockwise when +/// looking into the positive direction of the rotation axis. +/// +/// The start cross section is defined by +/// SELF\IfcSweptAreaSolid.SweptArea: +/// +/// A bounded planar surface lying in the XY plane of the +/// position coordinate system defined by +/// SELF\IfcSweptAreaSolid.Position.P[1] and +/// SELF\IfcSweptAreaSolid.Position.P[2] +/// The rotation axis lies in the plane of the start cross +/// section but shall not intersect the interior of the start cross +/// section. +/// +/// The end cross section is defined by EndSweptArea: +/// +/// A bounded planar surface lying in the XY plane of the +/// position coordinate system defined by rotating the start position +/// coordinates provided by SELF\IfcSweptAreaSolid.Position +/// around the rotation axis by the angle given by +/// SELF\IfcRevolvedAreaSolid.Angle. +/// +/// The end cross section is topologically similar to the start +/// cross section (having the same number of vertices and edges). +/// The end cross section can either be defined by the same +/// paramteric profile using different parameter values, or by a 2D +/// Cartesian transformation of the start profile within the end +/// cross section plane. +/// +/// The solid is generated by transforming the start cross section +/// into to end cross section. A start face, an end face (each +/// defined by start and end cross sections), and one or more lateral +/// faces. Each lateral face is a ruled surface defined by a pair of +/// corresponding edges of the start and end section. The ruled +/// surfaces are constructed in the cylindrical coordinate space +/// defined by the supertype IfcRevolvedAreaSolid." +/// +/// HISTORY New entity in IFC2x4. +/// +/// Informal propositions +/// +/// Mirroring within IfcDerivedProfileDef.Operator shall +/// not be used +class IFC_PARSE_API IfcRevolvedAreaSolidTapered : public IfcRevolvedAreaSolid { +public: + ::Ifc4x3_add2::IfcProfileDef* EndSweptArea() const; + void setEndSweptArea(::Ifc4x3_add2::IfcProfileDef* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRevolvedAreaSolidTapered (IfcEntityInstanceData* e); + IfcRevolvedAreaSolidTapered (::Ifc4x3_add2::IfcProfileDef* v1_SweptArea, ::Ifc4x3_add2::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_add2::IfcAxis1Placement* v3_Axis, double v4_Angle, ::Ifc4x3_add2::IfcProfileDef* v5_EndSweptArea); + typedef aggregate_of< IfcRevolvedAreaSolidTapered > list; +}; +/// The IfcRightCircularCone is a Construction Solid +/// Geometry (CSG) 3D primitive. It is a solid with a circular base and +/// a point called apex as the top. The tapers from the base to the +/// top. The axis from the center of the circular base to the apex is +/// perpendicular to the base. The inherited Position +/// attribute defines the IfcAxisPlacement3D and provides the +/// location and orientation of the cone: +/// +/// SELF\IfcCsgPrimitive3D.Position: The location and +/// orientation of the axis system for the primitive.  +/// SELF\IfcCsgPrimitive3D.Position.Location: The center +/// of the circular area being the bottom face of the cone. +/// SELF\IfcCsgPrimitive3D.Position.Position[3]: The +/// z-axis of the inherited placement coordinate system provides the +/// center axis of the IfcRightCircularCone, and the apex is +/// at the Height value applied to the positive direction of +/// the z-axis. The BottomRadius defines the circular base at +/// the xy-plane of the placement coordinate system. +/// +/// Figure 264 illustrates geometric parameters of the cone. The cone is positioned within its own placement coordinate system. The origin is the center of the bottom circular disk, that lies in the XY plane. The apex lies on the positive z axis at [0, 0, Height]. +/// +/// Figure 264 — Right circular cone geometry +/// +/// NOTE  Corresponding ISO 10303 entity: right_circular_cone, the position attribute has been promoted to the immediate supertype IfcCsgPrimitive3D. No semi_angle attribute, and the radius defines the bottom radius, since only a non-truncated cone is in scope. Please refer to ISO/IS 10303-42:1994, p. 176 for the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC2x3 +/// +/// Texture use definition +/// On the circular side, textures are aligned facing upright with +/// origin at the back (+Y direction) revolving counter-clockwise. +/// Textures are stretched or repeated to the extent of the base +/// circumference according to RepeatS. Textures are compressed +/// linearly going upwards towards the top point according to +/// RepeatT. +/// On the bottom face, textures are aligned facing front-to-back, +/// with the center of the circle aligned to the center of the +/// texture. +/// +/// Figure 265 illustrates default texture mapping with a clamped texture (RepeatS=False and RepeatT=False). The image on the left shows the texture where the S axis points to the right and the T axis points up. The image on the right shows the texture applied to the geometry where the X axis points back to the right, the Y axis points back to the left, and the Z axis points up. +/// +/// Side +/// Normal +/// Origin X +/// Origin Y +/// Origin Z +/// S Axis +/// T Axis +/// +/// Side +/// -Y +/// 0 +/// +Radius +/// 0 +/// -X +/// (towards top point) +/// +/// Bottom +/// -Z +/// 0 +/// 0 +/// 0 +/// -X +/// +Y +/// +/// Figure 265 — Right circular cone textures +class IFC_PARSE_API IfcRightCircularCone : public IfcCsgPrimitive3D { +public: + /// The distance between the base of the cone and the apex. + double Height() const; + void setHeight(double v); + /// The radius of the cone at the base. + double BottomRadius() const; + void setBottomRadius(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRightCircularCone (IfcEntityInstanceData* e); + IfcRightCircularCone (::Ifc4x3_add2::IfcAxis2Placement3D* v1_Position, double v2_Height, double v3_BottomRadius); + typedef aggregate_of< IfcRightCircularCone > list; +}; +/// The IfcRightCircularCylinder is a Construction Solid +/// Geometry (CSG) 3D primitive. It is a solid with a circular base and +/// top. The cylindrical surface between if formed by points at a fixed +/// distance from the axis of the cylinder. The inherited +/// Position attribute defines the IfcAxisPlacement3D +/// and provides: +/// +/// SELF\IfcCsgPrimitive3D.Position: The location and +/// orientation of the axis system for the primitive. +/// SELF\IfcCsgPrimitive3D.Position.Location: The center +/// of the circular area being the bottom face of the cylinder. +/// SELF\IfcCsgPrimitive3D.Position.Position[3]: The z +/// axis provides the center axis and the height is measured from the +/// origin along the positive direction of the z axis. +/// +/// The following definitions from ISO 10303-42 apply: +/// +/// A right circular +/// cylinder is a CSG primitive in the form of a solid cylinder of +/// finite height. It is defined by an axis point at the centre of one +/// planar circular face, an axis, a height, and a radius. The faces +/// are perpendicular to the axis and are circular discs with the +/// specified radius. The height is the distance from the first +/// circular face centre in the positive direction of the axis to the +/// second circular face centre. +/// +/// Figure 266 illustrates geometric parameters of the cylinder. The cylinder is positioned within its own placement coordiante system. The origin is the center of the bottom circular disk, that lies in the XY plane. The center of the top circular disk is on the positive z axis at [0, 0, Height]. +/// +/// Figure 266 — Right circular cylinder geometry +/// +/// NOTE  Corresponding ISO 10303 entity: right_circular_cyclinder, the position attribute has been promoted to the immediate supertype IfcCsgPrimitive3D. Please refer to ISO/IS 10303-42:1994, p. 177 for the definition in the international standard. +/// +/// HISTORY  New entity in IFC2x3. +/// +/// Texture use definition +/// On the circular side, textures are aligned facing upright with +/// origin at the back (+Y direction) revolving counter-clockwise. +/// Textures are stretched or repeated to the extent of the +/// circumference according to RepeatS. Textures are stretched or +/// repeated to the extent of the Height according to +/// RepeatT. +/// On the top and bottom faces, textures are aligned facing +/// front-to-back, with the center of the circle aligned to the center +/// of the texture. +/// +/// Figure 267 illustrates default texture mapping with a clamped texture (RepeatS=False and RepeatT=False). The image on the left shows the texture where the S axis points to the right and the T axis points up. The image on the right shows the texture applied to the geometry where the X axis points back to the right, the Y axis +/// points back to the left, and the Z axis points up. +/// +/// Side +/// Normal +/// Origin X +/// Origin Y +/// Origin Z +/// S Axis +/// T Axis +/// +/// Side +/// -Y +/// 0 +/// +Radius +/// 0 +/// -X +/// +Z +/// +/// Bottom +/// -Z +/// 0 +/// 0 +/// 0 +/// -X +/// +Y +/// +/// Top +/// +Z +/// 0 +/// 0 +/// +Height +/// +X +/// +Y +/// +/// Figure 267 — Right circular cylinder textures +class IFC_PARSE_API IfcRightCircularCylinder : public IfcCsgPrimitive3D { +public: + /// The distance between the planar circular faces of the cylinder. + double Height() const; + void setHeight(double v); + /// The radius of the cylinder. + double Radius() const; + void setRadius(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRightCircularCylinder (IfcEntityInstanceData* e); + IfcRightCircularCylinder (::Ifc4x3_add2::IfcAxis2Placement3D* v1_Position, double v2_Height, double v3_Radius); + typedef aggregate_of< IfcRightCircularCylinder > list; +}; + +class IFC_PARSE_API IfcSectionedSolid : public IfcSolidModel { +public: + ::Ifc4x3_add2::IfcCurve* Directrix() const; + void setDirectrix(::Ifc4x3_add2::IfcCurve* v); + aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr CrossSections() const; + void setCrossSections(aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSectionedSolid (IfcEntityInstanceData* e); + IfcSectionedSolid (::Ifc4x3_add2::IfcCurve* v1_Directrix, aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr v2_CrossSections); + typedef aggregate_of< IfcSectionedSolid > list; +}; + +class IFC_PARSE_API IfcSectionedSolidHorizontal : public IfcSectionedSolid { +public: + aggregate_of< ::Ifc4x3_add2::IfcAxis2PlacementLinear >::ptr CrossSectionPositions() const; + void setCrossSectionPositions(aggregate_of< ::Ifc4x3_add2::IfcAxis2PlacementLinear >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSectionedSolidHorizontal (IfcEntityInstanceData* e); + IfcSectionedSolidHorizontal (::Ifc4x3_add2::IfcCurve* v1_Directrix, aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr v2_CrossSections, aggregate_of< ::Ifc4x3_add2::IfcAxis2PlacementLinear >::ptr v3_CrossSectionPositions); + typedef aggregate_of< IfcSectionedSolidHorizontal > list; +}; + +class IFC_PARSE_API IfcSectionedSurface : public IfcSurface { +public: + ::Ifc4x3_add2::IfcCurve* Directrix() const; + void setDirectrix(::Ifc4x3_add2::IfcCurve* v); + aggregate_of< ::Ifc4x3_add2::IfcAxis2PlacementLinear >::ptr CrossSectionPositions() const; + void setCrossSectionPositions(aggregate_of< ::Ifc4x3_add2::IfcAxis2PlacementLinear >::ptr v); + aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr CrossSections() const; + void setCrossSections(aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSectionedSurface (IfcEntityInstanceData* e); + IfcSectionedSurface (::Ifc4x3_add2::IfcCurve* v1_Directrix, aggregate_of< ::Ifc4x3_add2::IfcAxis2PlacementLinear >::ptr v2_CrossSectionPositions, aggregate_of< ::Ifc4x3_add2::IfcProfileDef >::ptr v3_CrossSections); + typedef aggregate_of< IfcSectionedSurface > list; +}; +/// The IfcSimplePropertyTemplate defines the template for +/// all dynamically extensible properties, either the subtypes of +/// IfcSimpleProperty, or the subtypes of +/// IfcPhysicalSimpleQuantity. The individual property +/// templates are interpreted according to their Name +/// attribute and may have a predefined template type, property units, +/// and property data types. The correct interpretation of the +/// attributes: +/// +/// PrimaryUnit +/// SecondaryUnit +/// PrimaryDataType +/// SecondaryDataType +/// +/// is determined by the TemplateType. The +/// TemplateType also controls, which subtype of either +/// IfcSimpleProperty or IfcPhysicalSimpleQuantity +/// shall be used for property occurrences corresponding to this +/// template. +/// +/// HISTORY  New entity in IFC2x4. +/// +/// Relationship use definition +/// The IfcSimplePropertyTemplate is part of the set of +/// templates included in the IfcPropertySetTemplate. The +/// template can be accessed throught the inverse attribute +/// PartOfPsetTemplate The IfcPropertySetTemplate may +/// define one or several instances of IfcPropertySet (or +/// IfcElementQuantity). The definition assignment is +/// established by the objectified relationship +/// IfcRelDefinesByTemplate. +/// There is no direct link between an +/// IfcSimplePropertyTemplate and a subtype of either +/// IfcSimpleProperty or IfcPhysicalSimpleQuantity. +/// The definition relationship between the template and the individual +/// properties (or quantities) is established by the Name +/// attributes. +/// +/// Constraints at +/// IfcPropertySetTemplate and IfcPropertySet (and +/// IfcElementQuantity) guarantee that the Name +/// attributes of included property templates and individual properties +/// are unique. +/// +/// Figure 9 — Property template relationships +class IFC_PARSE_API IfcSimplePropertyTemplate : public IfcPropertyTemplate { +public: + /// Property type defining whether the property template defines a property with a single value, a bounded value, a list value, a table value, an enumerated value, or a reference value. Or the quantity type defining whether the template defines a quantity with a length, area, volume, weight or time value. + /// + /// NOTE the value of this property determines the correct use of the PrimaryUnit, SecondaryUnit, PrimaryDataType, SecondaryDataType, and Expression attributes. + boost::optional< ::Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::Value > TemplateType() const; + void setTemplateType(boost::optional< ::Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::Value > v); + boost::optional< std::string > PrimaryMeasureType() const; + void setPrimaryMeasureType(boost::optional< std::string > v); + boost::optional< std::string > SecondaryMeasureType() const; + void setSecondaryMeasureType(boost::optional< std::string > v); + ::Ifc4x3_add2::IfcPropertyEnumeration* Enumerators() const; + void setEnumerators(::Ifc4x3_add2::IfcPropertyEnumeration* v); + /// Primary unit assigned to the definition of the property. It should be provided, if the PropertyType is set to: + /// + /// P_SINGLEVALUE: determining the IfcPropertySingleValue.Unit + /// P_ENUMERATEDVALUE: determining the IfcPropertyEnumeration.Unit + /// P_BOUNDEDVALUE: determining the IfcPropertyBoundedValue.Unit + /// P_LISTVALUE: determining the IfcPropertyListValue.Unit + /// P_TABLEVALUE: determining the IfcPropertyTableValue.DefiningUnit + ::Ifc4x3_add2::IfcUnit* PrimaryUnit() const; + void setPrimaryUnit(::Ifc4x3_add2::IfcUnit* v); + /// Secondary unit assigned to the definition of the property. It should be provided, if the PropertyType is set to: + /// + /// P_TABLEVALUE: determining the IfcPropertyTableValue.DefinedUnit + ::Ifc4x3_add2::IfcUnit* SecondaryUnit() const; + void setSecondaryUnit(::Ifc4x3_add2::IfcUnit* v); + /// The expression used to store additional information for the property template depending on the PropertyType. It should the following definitions, if the PropertyType is set to: + /// + /// P_TABLEVALUE: the expression that could be evaluated to define the correlation between the defining values and the defined values. + /// Q_LENGTH, Q_AREA, Q_VOLUME, Q_COUNT, Q_WEIGTH, Q_TIME: the formula to be used to calculate the quantity + /// + /// NOTE No value shall be asserted if the PropertyType is not listed above. + boost::optional< std::string > Expression() const; + void setExpression(boost::optional< std::string > v); + /// Information about the access state of the property. It determines whether a property be viewed and/or modified by any receiving application without specific knowledge of it. + /// Attribute use definition for IfcStateEnum + /// + /// READWRITE: Properties of this template are readable and writable. They may be viewed and modified by users of any application. These are typical informational properties set by a user. + /// + /// READONLY: Properties of this template are read-only. They may be viewed but not modified by users of any application. (Applications may generate such values). These are typical automatically generated properties that should be displayed only, but not written back. + /// + /// LOCKED: Properties of this template are locked. They may only be accessed by the owning application (the publisher of the property set template). These are typically application depended, internal properties that should not be published. + /// + /// READWRITELOCKED: Properties of this template are locked, readable, and writable. They may only be accessed by the owning application. + /// + /// READONLYLOCKED: Properties of this template are locked and read-only. They may only be accessed by the owning application. + boost::optional< ::Ifc4x3_add2::IfcStateEnum::Value > AccessState() const; + void setAccessState(boost::optional< ::Ifc4x3_add2::IfcStateEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSimplePropertyTemplate (IfcEntityInstanceData* e); + IfcSimplePropertyTemplate (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< ::Ifc4x3_add2::IfcSimplePropertyTemplateTypeEnum::Value > v5_TemplateType, boost::optional< std::string > v6_PrimaryMeasureType, boost::optional< std::string > v7_SecondaryMeasureType, ::Ifc4x3_add2::IfcPropertyEnumeration* v8_Enumerators, ::Ifc4x3_add2::IfcUnit* v9_PrimaryUnit, ::Ifc4x3_add2::IfcUnit* v10_SecondaryUnit, boost::optional< std::string > v11_Expression, boost::optional< ::Ifc4x3_add2::IfcStateEnum::Value > v12_AccessState); + typedef aggregate_of< IfcSimplePropertyTemplate > list; +}; +/// Definition from IAI: A spatial element is the +/// generalization of all spatial elements that might be used +/// to define a spatial structure or to define spatial zones. +/// +/// a hierarchical spatial structure element as +/// IfcSpatialStructureElement +/// +/// a spatial structure is a hiearchical decomposition +/// of the project. That spatial structure is often used to +/// provide a project structure to organize a building +/// project. +/// +/// A spatial project structure might define as many +/// levels of decomposition as necessary for the building +/// project. Elements within the spatial project structure +/// are site, building, storey, and space +/// +/// a spatial zone as IfcSpatialZone +/// +/// a spatial zone is a non-hierarchical and +/// potentially overlapping decomposition of the project +/// under some functional consideration. +/// +/// a spatial zone might be used to represent a thermal +/// zone, a lighting zone, a usable area zone. +/// +/// a spatial zone might have its independent placement +/// and shape representation. +/// +/// HISTORY New entity in IFC +/// Release 2x Edition 4. +class IFC_PARSE_API IfcSpatialElement : public IfcProduct, public IfcInterferenceSelect { +public: + /// Long name for a spatial structure element, used for informal purposes. It should be used, if available, in conjunction with the inherited Name attribute. + /// + /// NOTE In many scenarios the Name attribute refers to the short name or number of a spacial element, and the LongName refers to the full name. + boost::optional< std::string > LongName() const; + void setLongName(boost::optional< std::string > v); + aggregate_of< IfcRelContainedInSpatialStructure >::ptr ContainsElements() const; // INVERSE IfcRelContainedInSpatialStructure::RelatingStructure + aggregate_of< IfcRelServicesBuildings >::ptr ServicedBySystems() const; // INVERSE IfcRelServicesBuildings::RelatedBuildings + aggregate_of< IfcRelReferencedInSpatialStructure >::ptr ReferencesElements() const; // INVERSE IfcRelReferencedInSpatialStructure::RelatingStructure + aggregate_of< IfcRelInterferesElements >::ptr IsInterferedByElements() const; // INVERSE IfcRelInterferesElements::RelatedElement + aggregate_of< IfcRelInterferesElements >::ptr InterferesElements() const; // INVERSE IfcRelInterferesElements::RelatingElement + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSpatialElement (IfcEntityInstanceData* e); + IfcSpatialElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName); + typedef aggregate_of< IfcSpatialElement > list; +}; +/// Definition from IAI: The IfcSpatialElementType +/// defines a list of commonly shared property set definitions of a +/// spatial structure element and an optional set of product +/// representations. It is used to define a spatial element +/// specification (i.e. the specific element information, that is +/// common to all occurrences of that element type). +/// +/// NOTE The product representations are defined as +/// representation maps (at the level of the supertype +/// IfcTypeProduct, which gets assigned by an element +/// occurrence instance through the +/// IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// +/// A spatial element type is used to define the common properties +/// of a certain type of a spatial structure element that may be +/// applied to many instances of thattype to assign a specific +/// style. Spatial element types (i.e. the instantiable subtypes) may +/// be exchanged without being already assigned to occurrences. +/// +/// NOTE The spatial element types are often used to +/// represent catalogues of predefined spatial types for shared +/// attributes, less so for sharing a common representation +/// map. +/// +/// The occurrences of subtypes of the abstract +/// IfcSpatialElementType are represented by instances of +/// subtypes of the abstract IfcSpatialElement. +/// +/// HISTORY New entity in Release +/// IFC2x Edition 4. +class IFC_PARSE_API IfcSpatialElementType : public IfcTypeProduct { +public: + /// The type denotes a particular type that indicates the object further. The use has to be established at the level of instantiable subtypes. In particular it holds the user defined type, if the enumeration of the attribute 'PredefinedType' is set to USERDEFINED. + boost::optional< std::string > ElementType() const; + void setElementType(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSpatialElementType (IfcEntityInstanceData* e); + IfcSpatialElementType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType); + typedef aggregate_of< IfcSpatialElementType > list; +}; +/// A spatial structure element +/// (IfcSpatialStructureElement) is the generalization of all +/// spatial elements that might be used to define a spatial +/// structure. That spatial structure is often used to provide a +/// project structure to organize a building project. +/// A spatial project structure might define as many levels of +/// decomposition as necessary for the building project. Elements +/// within the spatial project structure are: +/// +/// site as IfcSite +/// building as IfcBuilding +/// storey as IfcBuildingStorey +/// space as IfcSpace +/// +/// or aggregations or parts thereof. The composition type +/// declares an element to be either an element itself, or an +/// aggregation (complex) or a decomposition (part). The +/// interpretation of these types is given at each subtype of +/// IfcSpatialStructureElement. +/// The IfcRelAggregates is defined as an 1-to-many +/// relationship and used to establish the relationship between +/// exactly two levels within the spatial project structure. Finally +/// the highest level of the spatial structure is assigned to +/// IfcProject using the IfcRelAggregates. +/// Informal proposition: +/// +/// The spatial project structure, established by the +/// IfcRelAggregates, shall be acyclic. +/// A site should not be (directly or indirectly) associated to a +/// building, storey or space. +/// A building should not be (directly or indirectly) associated +/// to a storey or space. +/// A storey should not be (directly or indirectly) associated to +/// a space. +/// +/// HISTORY New entity in IFC Release 2x. +/// +/// Relationship Use Definition +/// The subtypes of IfcSpatialStructureElement relate to +/// other elements and systems by establishing the following +/// relationships: +/// +/// Containment of elements : +/// IfcRelContainedInSpatialStructure by inverse attribute +/// ContainsElements, used to assign any element, like +/// building elements, MEP elements, etc. to the spatial structure +/// element in which they are primarily contained. +/// +/// NOTE This relationship is +/// mandatory for elements in several view definitions and +/// implementer agreements. +/// +/// Reference of elements : +/// IfcRelReferencedInSpatialStructure by inverse attribute +/// ReferencesElements, used to reference any element, like +/// building elements, MEP elements, etc. in spatial structure +/// elements, other then the one, where it is contained. +/// Reference of systems : IfcRelServicesBuildings +/// by inverse attribute ServicedBySystems, used to reference +/// a sytem, like a building service or electrical distribution +/// system, a zonal system, or a structural analysis system, that is +/// assigned to this spatial structure element. +/// +/// NOTE Elements within the +/// referenced system may be directly contained (or referenced) by +/// other spatial structure elements. +/// +/// The subtypes of IfcSpatialStructureElement relate to +/// each other by using the IfcRelAggregates relationship to +/// build the project spatial structure. +/// +/// Figure 62 shows the use of IfcRelAggregates to establish a spatial structure including site, building, building section and storey. More information is provided at the level of the subtypes. +/// +/// Figure 62 — Spatial structure element composition +class IFC_PARSE_API IfcSpatialStructureElement : public IfcSpatialElement { +public: + /// Denotes, whether the predefined spatial structure element represents itself, or an aggregate (complex) or a part (part). The interpretation is given separately for each subtype of spatial structure element. If no CompositionType is asserted, the dafault value 'ELEMENT' applies. + /// + /// IFC2x4 CHANGE  + /// Attribute made optional. + boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > CompositionType() const; + void setCompositionType(boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSpatialStructureElement (IfcEntityInstanceData* e); + IfcSpatialStructureElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType); + typedef aggregate_of< IfcSpatialStructureElement > list; +}; +/// Definition from IAI: The element type +/// (IfcSpatialStructureElementType) defines a list of +/// commonly shared property set definitions of a spatial +/// structure element and an optional set of product +/// representations. It is used to define an element +/// specification (i.e. the specific element information, that +/// is common to all occurrences of that element type). +/// +/// NOTE The product representations are defined as +/// representation maps (at the level of the supertype +/// IfcTypeProduct, which gets assigned by an element +/// occurrence instance through the +/// IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// +/// A spatial structure element type is used to define the +/// common properties of a certain type of a spatial structure +/// element that may be applied to many instances of thattype +/// to assign a specific style. Spatial structure element types +/// (i.e. the instantiable subtypes) may be exchanged without +/// being already assigned to occurrences. +/// +/// NOTE The spatial structure element types are +/// often used to represent catalogues of predefined spatial +/// types for shared attributes, less so for sharing a common +/// representation map. +/// +/// The occurrences of subtypes of the +/// abstractIfcSpatialStructureElementType are +/// represented by instances of subtypes of +/// IfcSpatialStructureElement. +/// +/// HISTORY New entity in +/// Release IFC2x Edition 3. +class IFC_PARSE_API IfcSpatialStructureElementType : public IfcSpatialElementType { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSpatialStructureElementType (IfcEntityInstanceData* e); + IfcSpatialStructureElementType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType); + typedef aggregate_of< IfcSpatialStructureElementType > list; +}; +/// Definition from IAI: A spatial element is the +/// generalization of all spatial elements that might be used to +/// define a spatial structure or to define spatial zones. +/// +/// a hierarchical spatial structure element as +/// IfcSpatialStructureElement +/// +/// a spatial structure is a hiearchical decomposition of the +/// project. That spatial structure is often used to provide a +/// project structure to organize a building project. +/// a spatial project structure might define as many levels of +/// decomposition as necessary for the building project. Elements +/// within the spatial project structure are site, building, storey, +/// and space +/// +/// a spatial zone as IfcSpatialZone +/// +/// a spatial zone is a non-hierarchical and potentially +/// overlapping decomposition of the project under some functional +/// consideration. +/// a spatial zone might be used to represent a thermal zone, a +/// construction zone, a lighting zone, a usable area zone. +/// a spatial zone might have its independent placement and shape +/// representation. +/// +/// NOTE The IfcSpatialZone is different to +/// the IfcZone entity by allowing an own placement and shape +/// representation, whereas IfcZone is only a grouping of +/// IfcSpace's. +/// Attribute Use Definition +/// The IfcSpatialZone inherits and declares these +/// attributes that shall have the following meaning: +/// +/// Name: A number or designator provided by the user or +/// system for the spatial element, e.g. a space number "1-003", +/// could also be a running number provided by default by the +/// application +/// LongName: Name of the spatial element provided by the +/// user, e.g. a space name "Office". +/// Description: Any additional description provided by +/// the user, e.g. a space description "Corner office with habour +/// view". +/// ObjectType: reserved for typing of spatial elements in +/// case of PredefinedType = .USERDEFINED., restrictions on +/// applicable values might be published in view definitions or +/// implementer agreements. +/// +/// HISTORY New entity in +/// IFC Release 2x Edition 4. +class IFC_PARSE_API IfcSpatialZone : public IfcSpatialElement { +public: + /// Predefined types to define the particular type of the spatial zone. There may be property set definitions available for each predefined type. + boost::optional< ::Ifc4x3_add2::IfcSpatialZoneTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSpatialZoneTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSpatialZone (IfcEntityInstanceData* e); + IfcSpatialZone (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcSpatialZoneTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcSpatialZone > list; +}; +/// Definition from IAI: The IfcSpatialZoneType +/// defines a list of commonly shared property set definitions of a +/// space and an optional set of product representations. It is used +/// to define a space specification (i.e. the specific space +/// information, that is common to all occurrences of that space +/// type). +/// +/// NOTE The product representations are defined as +/// representation maps (at the level of the supertype +/// IfcTypeProduct, which gets assigned by an element +/// occurrence instance through the +/// IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// +/// A spatial zone type is used to define the common properties of +/// a certain type of space that may be applied to many instances of +/// that type to assign a specific style. Space types may be +/// exchanged without being already assigned to occurrences. +/// +/// NOTE The spatial zone types are often used to +/// represent space catalogues, less so for sharing a common +/// representation map. Spatial zone types in a space catalogue share +/// same space classification and a common set of space requirement +/// properties. +/// +/// The occurrences of IfcSpatialZoneType are represented +/// by instances of IfcSpatialZone. +/// +/// HISTORY New entity in Release +/// IFC2x Edition 4. +class IFC_PARSE_API IfcSpatialZoneType : public IfcSpatialElementType { +public: + /// Predefined types to define the particular type of the spatial zone. There may be property set definitions available for each predefined type. + ::Ifc4x3_add2::IfcSpatialZoneTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcSpatialZoneTypeEnum::Value v); + boost::optional< std::string > LongName() const; + void setLongName(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSpatialZoneType (IfcEntityInstanceData* e); + IfcSpatialZoneType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcSpatialZoneTypeEnum::Value v10_PredefinedType, boost::optional< std::string > v11_LongName); + typedef aggregate_of< IfcSpatialZoneType > list; +}; +/// The IfcSphere is a Construction Solid Geometry (CSG) 3D +/// primitive. It is a solid where all points at the surface have the +/// same distance from the center point. The inherited +/// Position attribute defines the IfcAxisPlacement3D +/// and provides: +/// +/// SELF\IfcCsgPrimitive3D.Position: The location and +/// orientation of the axis system for the primitive.  +/// SELF\IfcCsgPrimitive3D.Position.Location: The center +/// of the sphere. +/// SELF\IfcCsgPrimitive3D.Position.Position[3]: The z +/// axis points at its positve direction towards the north pole, and by +/// its negative directions towards the south pole. +/// +/// The following definitions from ISO 10303-42 apply: +/// +/// A sphere is a CSG +/// primitive with a spherical shape defined by a centre and a +/// radius. +/// +/// Figure 270 illustrates geometric parameters of the sphere. The sphere is positioned within its own placement coordiante system. The origin is the center of the sphere. +/// +/// Figure 270 — Sphere geometry +/// +/// NOTE  Corresponding STEP entity: sphere, the position attribute, including the centre point,  has been promoted to the immediate supertype IfcCsgPrimitive3D. Please refer to ISO/IS 10303-42:1994, p. 175 for the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC2x3. +/// +/// Texture Use Definition +/// Textures are aligned facing upright with origin at the back (+Y direction) revolving counter-clockwise. Textures are stretched or repeated to the extent of the circumference at the equator according to RepeatS and RepeatT. +/// +/// Figure 271 illustrates default texture mapping with a clamped texture (RepeatS=False and RepeatT=False). The image on the left shows the texture where the S axis points to the right and the T axis points up. The image on the right shows the texture applied to the geometry where the X axis points back to the right, the Y axis points back to the left, and the Z axis points up. +/// +/// Side +/// Normal +/// Origin X +/// Origin Y +/// Origin Z +/// S Axis +/// T Axis +/// +/// Side +/// -Y +/// 0 +/// +Radius +/// 0 +/// (-X, then curving counter-clockwise) +/// (+Y, then curving towards top) +/// +/// Figure 271 — Sphere textures +class IFC_PARSE_API IfcSphere : public IfcCsgPrimitive3D { +public: + /// The radius of the sphere. + double Radius() const; + void setRadius(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSphere (IfcEntityInstanceData* e); + IfcSphere (::Ifc4x3_add2::IfcAxis2Placement3D* v1_Position, double v2_Radius); + typedef aggregate_of< IfcSphere > list; +}; + +class IFC_PARSE_API IfcSphericalSurface : public IfcElementarySurface { +public: + double Radius() const; + void setRadius(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSphericalSurface (IfcEntityInstanceData* e); + IfcSphericalSurface (::Ifc4x3_add2::IfcAxis2Placement3D* v1_Position, double v2_Radius); + typedef aggregate_of< IfcSphericalSurface > list; +}; + +class IFC_PARSE_API IfcSpiral : public IfcCurve { +public: + ::Ifc4x3_add2::IfcAxis2Placement* Position() const; + void setPosition(::Ifc4x3_add2::IfcAxis2Placement* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSpiral (IfcEntityInstanceData* e); + IfcSpiral (::Ifc4x3_add2::IfcAxis2Placement* v1_Position); + typedef aggregate_of< IfcSpiral > list; +}; +/// Definition from IAI: The abstract entity IfcStructuralActivity combines the definition of actions (such as forces, displacements, etc.) and reactions (support reactions, internal forces, deflections, etc.) which are specified by using the basic load definitions from the IfcStructuralLoadResource. +/// +/// The differentiation between actions and reactions is realized by instantiating objects either from subclasses of IfcStructuralAction or IfcStructuralReaction respectively. They inherit commonly needed attributes from the abstract superclass IfcStructuralActivity, notably the relationship which connects actions or reactions with connections, analysis members, or elements (subtypes of IfcStructuralItem or IfcElement). +/// +/// NOTE  Instances of IfcStructuralActivity which are connected with an IfcElement are subject to agreements outside the scope of this specification. +/// +/// NOTE  The semantics of IfcStructuralActivity are only fully defined +/// if an activity instance is connected with exactly one structural item. The inverse attribute +/// AssignedToStructuralItem can only be empty in incomplete models or in conceptual models +/// which are not yet ready for analysis. +/// +/// HISTORY: New entity in IFC 2x2. +/// +/// IFC 2x4 change: Cardinality of attribute +/// AssignedToStructuralItem relaxed from 1 to 0..1 in order to allow for schema-compliant +/// incomplete models as well as conceptual models without load—item relationships. +/// +/// Coordinate Systems: +/// +/// The following coordinate systems are distinguished: +/// +/// The so-called global coordinate system is the coordinate system shared by all items and activities which are grouped in a common IfcStructuralAnalysisModel. This coordinate system is established by an ObjectPlacement. (This coordinate system is not necessarily the same as the IfcProject's world coordinate system.) +/// The so-called local coordinate system is a coordinate system local to a structural item (connection or member). This coordinate system is established by a Representation in conjunction with further use definitions and attributes of subtypes of IfcStructuralItem. +/// +/// Representation items in topology representations are always given within the ObjectPlacement, i.e. in so-called global coordinates (global with respect to the IfcStructuralAnalysisModel to which this activity belongs). +/// +/// Locations of the load objects in the AppliedLoad attribute (if of type IfcStructuralLoadConfiguration) are always given in local coordinates. +/// +/// Directions of the load objects in the AppliedLoad attribute refer to global or local coordinates according to the GlobalOrLocal attribute. +/// +/// The ObjectPlacement and Representation are sometimes not explicitly instantiated; instead they may be implied as described below. Global and local coordinate systems are then determined in the same way as with explicit placement and representation. +/// +/// Topology Use Definitions: +/// +/// Instances of IfcStructuralActivity which are connected with a structural item of same dimensionality, i.e. +/// +/// a point action or reaction connected with a point item (IfcStructuralPointConnection), +/// a curve action or reaction connected with a curve item (IfcStructuralCurveConnection, IfcStructuralCurveMember), or +/// a surface action or reaction connected with a surface item (IfcStructuralSurfaceConnection, IfcStructuralSurfaceMember) and which acts on the entire surface of the item and is not specified by isocontours +/// +/// shall not have an ObjectPlacement nor a Representation. It is implied that the placement and representation of the IfcStructuralActivity is the same as the ones of the IfcStructuralItem. +/// +/// Instances of IfcStructuralActivity which are connected with +/// +/// a curve item (IfcStructuralCurveConnection, IfcStructuralCurveMember) and act on a point of the item, or +/// a surface item (IfcStructuralSurfaceConnection, IfcStructuralSurfaceMember) and act on a point or on a curve or on a part of the surface of the item +/// +/// shall have a topology representation as specified below. It includes a placement and a product representation. The IfcProductRepresentation shall be given by an item in a Representation of type IfcTopologyRepresentation. +/// +/// Instances of IfcStructuralActivity which are connected with +/// +/// a surface item (IfcStructuralSurfaceConnection, IfcStructuralSurfaceMember) and are specified by isocontours +/// +/// shall have a shape representation as specified below. It includes a placement and a product representation. The IfcProductRepresentation shall be given by items in a Representation of type IfcShapeRepresentation. Shape representation and topology representation may be combined. +/// +/// Local Placement +/// +/// The local placement for IfcStructuralActivity is defined in its supertype IfcProduct. It is defined by the IfcLocalPlacement, which establishes a global coordinate system which shall be common to all items and activities in an IfcStructuralAnalysisModel. +/// +/// Topology Representation +/// +/// Instances of IfcStructuralActivity which act on parts of a surface item shall have a topology representation given by a face with underlying surface geometry, IfcFaceSurface, which should be the single item of IfcTopologyRepresentation.Items. The surface establishes a local coordinate system of the activity: +/// +/// The origin of surface parameters u,v is the origin of the local coordinate system. +/// The local x and y directions follow the tangents on the surface and are in parallel with and directed like u and v respectively. +/// The local z direction is in parallel with and directed like the surface normal. +/// +/// RepresentationIdentifier: 'Reference' +/// RepresentationType: 'Face' +/// +/// Instances of IfcStructuralActivity which act on a curve on a surface item shall have a topology representation given by an edge (IfcEdge or subtype), which should be the single item of IfcTopologyRepresentation.Items. The curve geometry shall be compatible with the surface geometry of the connected item. In conjunction with this surface, the curve establishes a local coordinate system of the activity: +/// +/// The origin of the curve parameter u is the origin of the local coordinate system. +/// The local x direction follows the tangent on the curve and is directed like u. +/// The local z direction is in parallel with and directed like the surface normal of the connected surface item. +/// The local x,y,z directions form a right-handed Cartesian coordinate system. +/// +/// RepresentationIdentifier: 'Reference' +/// RepresentationType: 'Edge' +/// +/// NOTE  While an IfcEdge (or IfcOrientedEdge with underlying IfcEdge) does not provide an explicit underlying curve geometry, it may be used to imply an underlying straight line as reference curve with the origin of the curve parameter at the start vertex point. +/// +/// Instances of IfcStructuralActivity which act on a single point on a curve or surface item shall have a topology representation given by an IfcVertexPoint, which should be the single item of IfcTopologyRepresentation.Items. The point geometry shall be compatible with the curve or surface geometry of the connected item. The local coordinate system of the activity is oriented by the curve or surface geometry of the connected item as described above for activities with edge or face topology. +/// +/// RepresentationIdentifier: 'Reference' +/// RepresentationType: 'Vertex' +/// +/// Shape Representation +/// +/// Instances of IfcStructuralActivity which act on a surface item and are specified by isocontours (level sets) shall have a shape representation given by a set of curves on a surface, IfcPCurve. The basis surface shall comply with or preferably be identical with the surface of the structural item to which the activity is connected. The representation identifier and type of this geometric representation is: +/// +/// RepresentationIdentifier: 'Level set' +/// RepresentationType: 'GeometricCurveSet' +class IFC_PARSE_API IfcStructuralActivity : public IfcProduct { +public: + /// Load or result resource object which defines the load type, direction, and load values. + /// + /// In case of activities which are variably distributed over curves or surfaces, IfcStructuralLoadConfiguration is used which provides a list of load samples and their locations within the load distribution, measured in local coordinates of the curve or surface on which this activity acts. The contents of this load or result distribution may be further restricted by definitions at subtypes of IfcStructuralActivity. + ::Ifc4x3_add2::IfcStructuralLoad* AppliedLoad() const; + void setAppliedLoad(::Ifc4x3_add2::IfcStructuralLoad* v); + /// Indicates whether the load directions refer to the global coordinate system (global to + /// the analysis model, i.e. as established by IfcStructuralAnalysisModel.SharedPlacement) + /// or to the local coordinate system (local to the activity or connected item, as established by + /// an explicit or implied representation and its parameter space). + /// + /// NOTE, the informal definition of + /// IfcRepresentationResource.IfcGlobalOrLocalEnum doe s not distinguish between + /// "global coordinate system" and "world coordinate system". + /// On the other hand, this distinction is necessary in the IfcStructuralAnalysisDomain + /// where the shared "global" coordinate system of an analysis model may very well + /// not be the same as the project-wide world coordinate system. + /// + /// In the scope of IfcStructuralActivity.GlobalOrLocal, + /// the meaning of GLOBAL_COORDS is therefore not to be taken as world coordinate system + /// but as the analysis model specific shared coordinate system. In contrast, LOCAL_COORDS + /// is to be taken as coordinates which are local to individual structural items and activities, + /// as established by subclass-specific geometry use definitions. + ::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value GlobalOrLocal() const; + void setGlobalOrLocal(::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value v); + aggregate_of< IfcRelConnectsStructuralActivity >::ptr AssignedToStructuralItem() const; // INVERSE IfcRelConnectsStructuralActivity::RelatedStructuralActivity + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralActivity (IfcEntityInstanceData* e); + IfcStructuralActivity (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal); + typedef aggregate_of< IfcStructuralActivity > list; +}; +/// Definition from IAI: The abstract entity IfcStructuralItem is the generalization of structural members and structural connections, i.e. analysis idealizations of elements in the building model. It defines the relation between structural members and connections with structural activities (actions and reactions). +/// +/// Relationships between elements in the building model and structural items as their idealizations can be expressed by instances of IfcRelAssignsToProduct. +/// +/// HISTORY: New entity in IFC 2x2. +/// IFC 2x4 change: Use definitions and informal proposition added. +/// +/// Coordinate Systems: +/// +/// The following coordinate systems are distinguished: +/// +/// The so-called global coordinate system is the coordinate system shared by all items and activities which are grouped in a common IfcStructuralAnalysisModel. This coordinate system is established by SELF\IfcProduct.ObjectPlacement. (This coordinate system is not necessarily the same as the IfcProject's world coordinate system.) +/// The so-called local coordinate system is a coordinate system local to a structural item (connection or member). This coordinate system is established by a Representation (attribute inherited from IfcProduct) in conjunction with further use definitions and attributes of subtypes of IfcStructuralItem. +/// +/// Representation items in topology representations are always given within the ObjectPlacement, i.e. in so-called global coordinates (global with respect to the IfcStructuralAnalysisModel to which this item belongs). +/// +/// The usage of local coordinate systems is further defined in subtypes. +/// +/// Topology Use Definitions: +/// +/// Instances of IfcStructuralItem shall have a topology representation. It includes a placement and a product representation. The IfcProductRepresentation shall be given by an item in a Representation of type IfcTopologyRepresentation. +/// +/// Local Placement +/// +/// The local placement for IfcStructuralActivity is defined in its supertype IfcProduct. It is defined by the IfcLocalPlacement, which establishes a global coordinate system which shall be common to all items and activities in an IfcStructuralAnalysisModel. +/// +/// Topology Representation +/// +/// Instances of IfcStructuralItem shall have a topology representation given by an instance of a subtype of IfcTopologicalRepresentationItem, which should be the single item of IfcTopologyRepresentation.Items. Depending on the dimensionality of the structural item, one of the following types of toplogical representation items shall be used: +/// +/// Point connections shall be represented by an IfcVertexPoint with an underlying IfcCartesianPoint. +/// The Cartesian point is the reference point of the connection in the so-called global coordinate system. +/// The following labels are used in the IfcTopologyRepresentation: +/// +/// RepresentationIdentifier: 'Reference' +/// RepresentationType: 'Vertex' +/// +/// Curve members and curve connections shall either be represented by an IfcOrientedEdge, +/// IfcEdgeCurve, or IfcEdge. The curve to which the IfcEdgeCurve (or an +/// IfcOrientedEdge's underlying IfcEdgeCurve) refers to is the reference curve of the structural +/// item in the global coordinate system. Start and end vertex of the edge shall be IfcVertexPoints +/// with underlying IfcCartesianPoints. +/// The following labels are used in the IfcTopologyRepresentation: +/// +/// RepresentationIdentifier: 'Reference' +/// RepresentationType: 'Edge' +/// +/// NOTE  While an IfcEdge (or IfcOrientedEdge with underlying +/// IfcEdge) does not provide an explicit underlying curve geometry, it may be used to imply an +/// underlying straight line as reference curve with the origin of the curve parameter at the start vertex +/// point. +/// +/// Surface members and surface connections shall be represented by an IfcFaceSurface. +/// The underlying surface defeines the reference surface of the structural surface item in the global +/// coordiante system. All edges in the bounds of the face shall conform to the rules for edge +/// representations of structural curve item. +/// The following labels are used in the IfcTopologyRepresentation: +/// +/// RepresentationIdentifier: 'Reference' +/// RepresentationType: 'Face' +/// +/// The reference point, reference curve, or reference surface partially or completely defines the local coordinate system of the represented structural item according to the following rules. In all cases, The local x,y,z directions form a right-handed Cartesian coordinate system. +/// +/// Structural point items +/// +/// The reference point in the representation is the origin of the local coordinate system of the structural item. +/// The axes of the local coordiante system are either parallel with and directed like the so-called global coordinate axes, or are oriented according to definitions at the respective subtype of IfcStructuralItem. +/// +/// Structural curve items +/// +/// The u parameter origin of the reference curve in the representation is the origin of the local coordinate system of the structural item. +/// The local x axis is parallel with the tangent on the curve and directed like the u parameter direction. +/// The local y and z axes are oriented according to definitions at the respective subtypes of IfcStructuralItem. +/// +/// Structural surface items +/// +/// The u,v parameter origin of the reference surface in the representation is the origin of the local coordinate system of the structural item. +/// The local x and y directions follow the tangents on the surface and are in parallel with and directed like u and v respectively. +/// The local z direction is in parallel with and directed like the surface normal. +/// +/// Informal propositions: +/// +/// The ObjectPlacements of all structural items which are grouped into the same instance of IfcStructuralAnalysisModel shall refer to the same instance of IfcObjectPlacement. +/// +/// NOTE  This rule is necessary to achieve consistent topology representations. The topology representations of structural items in an analysis model are meant to share vertices and edges und must therefore have the same object placement. +/// +/// NOTE  A structural item may be grouped into more than one analysis model. In this case, all these models must use the same instance of IfcObjectPlacement. +class IFC_PARSE_API IfcStructuralItem : public IfcProduct, public IfcStructuralActivityAssignmentSelect { +public: + aggregate_of< IfcRelConnectsStructuralActivity >::ptr AssignedStructuralActivity() const; // INVERSE IfcRelConnectsStructuralActivity::RelatingElement + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralItem (IfcEntityInstanceData* e); + IfcStructuralItem (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation); + typedef aggregate_of< IfcStructuralItem > list; +}; +/// Definition from IAI: The abstract entity IfcStructuralMember is the superclass of all structural items which represent the idealized structural behavior of building elements. +/// +/// HISTORY: New entity in IFC 2x2. +/// IFC 2x4 change: Use definitions moved to supertype and subtypes. +class IFC_PARSE_API IfcStructuralMember : public IfcStructuralItem { +public: + aggregate_of< IfcRelConnectsStructuralMember >::ptr ConnectedBy() const; // INVERSE IfcRelConnectsStructuralMember::RelatingStructuralMember + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralMember (IfcEntityInstanceData* e); + IfcStructuralMember (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation); + typedef aggregate_of< IfcStructuralMember > list; +}; +/// Definition from IAI: A structural reaction is a structural activity that results from a +/// structural action imposed to a structural item or building element. Examples are support reactions, +/// internal forces, and deflections. +/// +/// HISTORY  New entity in IFC 2x2. +/// +/// IFC 2x4 change: Inverse attribute Causes deleted; use IfcRelAssignsToProduct via HasAssignments instead. +/// +/// Structural reactions are grouped into IfcStructuralResultGroups via the inverse +/// relationship HasAssignments and an IfcRelAssignsToGroup relationship object. +/// IfcStructuralResultGroup.ResultGroupFor finally refers to the structural analysis model +/// in which the results occur. +/// +/// It is furthermore possible to establish relationships between reactions in one analysis model +/// and actions which they cause in another analysis model. For example, a support reaction from one +/// structural system may be taken over as a load onto another supporting structural system. This is +/// expressed by means of the inverse relationship HasAssignments of the reaction and an +/// IfcRelAssignsToProduct relationship object. IfcRelAssignsToProduct.Name is set to +/// 'Causes' and IfcRelAssignsToProduct.RelatingProduct refers to an instance of a subtype of +/// IfcStructuralAction. +class IFC_PARSE_API IfcStructuralReaction : public IfcStructuralActivity { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralReaction (IfcEntityInstanceData* e); + IfcStructuralReaction (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal); + typedef aggregate_of< IfcStructuralReaction > list; +}; +/// Definition from IAI: Instances of IfcStructuralSurfaceMember describe face members, i.e. structural analysis idealizations of slabs, walls, shells, etc.. Surface members may be planar or curved. +/// +/// HISTORY: New entity in IFC 2x2. +/// IFC 2x4 change: Use definitions changed, WHERE rule added. +/// +/// Coordinate Systems: +/// +/// See definitions at IfcStructuralItem. The local coordinate system is established by the reference surface given by topology representation. +/// +/// Material Use Definition +/// +/// The material of direct instances IfcStructuralSurfaceMember (in contrast to instances of the subtype IfcStructuralSurfaceMemberVarying) is defined by IfcMaterial and attached by the IfcRelAssociatesMaterial.RelatingMaterial. It is accessible by the inverse HasAssociations relationship. +/// +/// The material is specified minimally by a name which corresponds with an agreed upon standardized structural material designation. An external reference to the source which specifies the material designation should be provided. Alternatively, structural material properties may be provided by means of IfcMechanicalMaterialProperties and IfcExtendedMaterialProperties. +/// +/// Direct instances of IfcStructuralSurfaceMember are assumed to be located centrically relative to their reference surface. Their depth is provided in the attribute Thickness. +/// +/// Topology Use Definitions: +/// +/// Direct instances of IfcStructuralSurfaceMember shall have a topology representation which consists of one IfcFaceSurface, representing the reference surface of the surface member. See definitions at IfcStructuralItem for further specifications. +class IFC_PARSE_API IfcStructuralSurfaceMember : public IfcStructuralMember { +public: + /// Type of member with respect to its load carrying behavior in this analysis idealization. + ::Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::Value v); + /// Defines the typically understood thickness of the structural surface member, measured normal to its reference surface. + boost::optional< double > Thickness() const; + void setThickness(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralSurfaceMember (IfcEntityInstanceData* e); + IfcStructuralSurfaceMember (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::Value v8_PredefinedType, boost::optional< double > v9_Thickness); + typedef aggregate_of< IfcStructuralSurfaceMember > list; +}; +/// Definition from IAI: Describes surface members with varying section properties. The properties are provided by means of a property set and IfcRelDefinesByProperties or by means of aggregation: An instance of IfcStructuralSurfaceMemberVarying may be composed of two or more instances of IfcStructuralSurfaceMember with differing section properties. These subordinate members relate to the instance of IfcStructuralSurfaceMemberVarying by IfcRelAggregates. +/// +/// NOTE  It is recommended that structural activities (actions or reactions) are not connected with aggregated IfcStructuralSurfaceMemberVarying but only with the IfcStructuralSurfaceMembers in the aggregation. That way, difficulties in interpretation of local coordinates are avoided. +/// +/// HISTORY: New entity in IFC 2x2. +/// Use definition changed and attributes deleted in IFC 2x4. +/// +/// Coordinate Systems: +/// +/// See definitions at IfcStructuralItem and IfcStructuralSurfaceMember. The local coordinates of an aggregate are generally undefined since continuity of local coordinates of the parts is not ensured. +/// +/// Material Use Definition +/// +/// In case of aggregation, only the individual parts (direct instances of IfcStructuralSurfaceMember) carry material and thickness information. Otherwise, definitions at IfcStructuralSurfaceMember apply. +/// +/// Topology Use Definitions: +/// +/// In case of aggregation, instances of IfcStructuralSurfaceMemberVarying may have a topology representation which contains a single IfcConnectedFaceSet, based upon the faces of the parts. Otherwise, definitions at IfcStructuralSurfaceMember apply. +class IFC_PARSE_API IfcStructuralSurfaceMemberVarying : public IfcStructuralSurfaceMember { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralSurfaceMemberVarying (IfcEntityInstanceData* e); + IfcStructuralSurfaceMemberVarying (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralSurfaceMemberTypeEnum::Value v8_PredefinedType, boost::optional< double > v9_Thickness); + typedef aggregate_of< IfcStructuralSurfaceMemberVarying > list; +}; +/// Definition from IAI: Defines a reaction which occurs distributed over a surface. A surface reaction may be connected with a surface member or surface connection. +/// +/// HISTORY: New entity in IFC 2x4. +/// +/// Coordinate Systems: +/// +/// See definitions at IfcStructuralActivity. +/// +/// Topology Use Definitions: +/// +/// See definitions at IfcStructuralActivity. +/// +/// Informal propositions: +/// +/// If the surface reaction is of the predefined type CONST, SELF\IfcStructuralActivity.AppliedLoad must not be of type IfcStructuralLoadConfiguration. +/// If the surface reaction is of the predefined type BILINEAR, SELF\IfcStructuralActivity.AppliedLoad shall be of type IfcStructuralLoadConfiguration and shall contain three items with two-dimensional IfcStructuralLoadConfiguration.Locations, defining the location of the result samples in local coordinates of the surface reaction. +/// If the surface reaction is of the predefined type DISCRETE, SELF\IfcStructuralActivity.AppliedLoad shall be of type IfcStructuralLoadConfiguration and shall contain two or more items with two-dimensional locations. +/// If the surface reaction is of the predefined type ISOCONTOUR, SELF\IfcStructuralActivity.AppliedLoad shall be of type IfcStructuralLoadConfiguration and shall contain the same number of items as the set SELF.IfcProduct.Representation.Representations[?].Items. Each item in the load configuration shall have a two-dimensional location, defining the location of the result samples in local coordinates of the surface reaction. Each item in SELF\IfcStructuralActivity.AppliedLoad shall be located at exactly one of the isocontours. +/// NOTE  The set of representation items is unordered, hence result locations are required to correlate result values and isocontours. +/// NOTE  Isocontours are represented as IfcPCurves which are defined in terms of surface parameters u,v, while result locations are given in local surface item coordinates x,y. It is strongly recommended that the surface parameterization u,v is scaled 1:1 in order to avoid different scales of u,v versus x,y. If u,v are scaled 1:1 and the IfcPCurve's base surface is identical with the surface item's base surface, u,v and local x,y are identical. +/// +/// All items in SELF\IfcStructuralActivity.AppliedLoad\IfcStructuralLoadConfiguration.Values shall be of the same entity type. +class IFC_PARSE_API IfcStructuralSurfaceReaction : public IfcStructuralReaction { +public: + /// Type of reaction according to its distribution of load values. + ::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralSurfaceReaction (IfcEntityInstanceData* e); + IfcStructuralSurfaceReaction (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal, ::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcStructuralSurfaceReaction > list; +}; +/// The resource type IfcSubContractResourceType defines commonly shared information for occurrences of subcontract resources. The set of shared information may include: +/// +/// common productivities +/// common cost rates +/// common properties within shared property sets +/// +/// It is used to define a subcontract resource specification (the specific resource information that is common to all +/// occurrences of that resource). Resource types may be exchanged without being already assigned to occurrences. +/// Occurrences of the IfcSubContractResourceType are represented by instances of IfcSubContractResource. +/// +/// HISTORY New entity in IFC2x4. +class IFC_PARSE_API IfcSubContractResourceType : public IfcConstructionResourceType { +public: + /// Defines types of subcontract resources. + ::Ifc4x3_add2::IfcSubContractResourceTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcSubContractResourceTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSubContractResourceType (IfcEntityInstanceData* e); + IfcSubContractResourceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ResourceType, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v10_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v11_BaseQuantity, ::Ifc4x3_add2::IfcSubContractResourceTypeEnum::Value v12_PredefinedType); + typedef aggregate_of< IfcSubContractResourceType > list; +}; + +class IFC_PARSE_API IfcSurfaceCurve : public IfcCurve, public IfcCurveOnSurface { +public: + ::Ifc4x3_add2::IfcCurve* Curve3D() const; + void setCurve3D(::Ifc4x3_add2::IfcCurve* v); + aggregate_of< ::Ifc4x3_add2::IfcPcurve >::ptr AssociatedGeometry() const; + void setAssociatedGeometry(aggregate_of< ::Ifc4x3_add2::IfcPcurve >::ptr v); + ::Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::Value MasterRepresentation() const; + void setMasterRepresentation(::Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSurfaceCurve (IfcEntityInstanceData* e); + IfcSurfaceCurve (::Ifc4x3_add2::IfcCurve* v1_Curve3D, aggregate_of< ::Ifc4x3_add2::IfcPcurve >::ptr v2_AssociatedGeometry, ::Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::Value v3_MasterRepresentation); + typedef aggregate_of< IfcSurfaceCurve > list; +}; +/// The IfcSurfaceCurveSweptAreaSolid is the result of +/// sweeping an area along a directrix that lies on a reference +/// surface. The swept area is provided by an IfcProfileDef +/// (or subtypes). The profile definition is based on a 2D coordinate +/// system, which is inserted into the XY plane of the 3D +/// Position coordinate system inherited from the supertype +/// IfcSweptAreaSolid. +/// The following definitions from ISO 10303-42 apply: +/// +/// A surface curve swept +/// area solid is a type of swept area solid which is the result of +/// sweeping a face along a Directrix lying on a +/// ReferenceSurface. The orientation of the +/// SweptArea is related to the direction of the surface +/// normal. +/// The +/// SweptArea is required to be a curve bounded surface lying +/// in the plane z = 0 and this is swept along the Directrix +/// in such a way that the origin of the local coordinate system used +/// to define the SweptArea is on the Directrix and +/// the local x-axis is in the direction of the normal to the +/// ReferenceSurface at the current point. The resulting solid +/// has the property that the cross section of the surface by the +/// normal plane to the Directrix at any point is a copy of +/// the SweptArea. +/// The orientation of +/// the SweptArea as it sweeps along the Directrix is +/// precisely defined by a Cartesian Transformation Operator 3D with +/// attributes: +/// +/// LocalOrigin +/// as point (0; 0; 0), +/// Axis1 as +/// the normal N to the ReferenceSurface at the point of the +/// Directrix with parameter u. +/// Axis3 as +/// the direction of the tangent vector t at the point of the +/// Directrix with parameter u. +/// The remaining attributes are defaulted to define a corresponding +/// transformation matrix T(u), which varies with the +/// Directrix parameter u. +/// +/// NOTE  The +/// geometric shape of the solid is not dependent upon the curve +/// parameterization; the volume depends upon the area swept and the +/// length of the Directrix. +/// +/// The attributes of the Cartesian Transformation Operator (as +/// shown above) should apply to the Position coordinate +/// system, in which the profile is inserted. The Directrix +/// and the ReferenceSurface are positioned within the 3D +/// Position coordinate system. +/// +/// NOTE  Corresponding ISO 10303-42 entity: surface_curve_swept_area_solid. Please refer to ISO 10303-42 ed.2:1999, p. 274 for the definition in the international standard. +/// +/// HISTORY  New entity in IFC2x2. +/// +/// Informal propositions: +/// +/// The SweptArea shall lie in the plane z = 0. +/// The Directrix shall lie on the +/// ReferenceSurface. +class IFC_PARSE_API IfcSurfaceCurveSweptAreaSolid : public IfcDirectrixCurveSweptAreaSolid { +public: + /// The surface containing the Directrix. + ::Ifc4x3_add2::IfcSurface* ReferenceSurface() const; + void setReferenceSurface(::Ifc4x3_add2::IfcSurface* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSurfaceCurveSweptAreaSolid (IfcEntityInstanceData* e); + IfcSurfaceCurveSweptAreaSolid (::Ifc4x3_add2::IfcProfileDef* v1_SweptArea, ::Ifc4x3_add2::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_add2::IfcCurve* v3_Directrix, ::Ifc4x3_add2::IfcCurveMeasureSelect* v4_StartParam, ::Ifc4x3_add2::IfcCurveMeasureSelect* v5_EndParam, ::Ifc4x3_add2::IfcSurface* v6_ReferenceSurface); + typedef aggregate_of< IfcSurfaceCurveSweptAreaSolid > list; +}; +/// Definition from ISO/CD 10303-42:1992: This surface is a simple swept surface or a generalized cylinder obtained by sweeping a curve in a given direction. The parameterization is as follows where the curve has a parameterization l(u): +/// +/// V = ExtrusionAxis +/// +/// The parameterization range for v is -Â¥ < v < Â¥ and for u it is defined by the curve parameterization. +/// +/// NOTE: Corresponding ISO 10303 entity: surface_of_linear_extrusion. Please refer to ISO/IS 10303-42:1994, p.76 for the final definition of the formal standard. The following adaption has been made. The ExtrusionAxis and the Direction are defined as two separate attributes in correlation to the definition of the extruded_area_solid, and not as a single vector attribute. The vector is derived as ExtrusionAxis. +/// +/// HISTORY: New entity in IFC Release 2x. +/// +/// Informal propositions: +/// +/// The surface shall not self-intersect +class IFC_PARSE_API IfcSurfaceOfLinearExtrusion : public IfcSweptSurface { +public: + /// The direction of the extrusion. + ::Ifc4x3_add2::IfcDirection* ExtrudedDirection() const; + void setExtrudedDirection(::Ifc4x3_add2::IfcDirection* v); + /// The depth of the extrusion, it determines the parameterization. + double Depth() const; + void setDepth(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSurfaceOfLinearExtrusion (IfcEntityInstanceData* e); + IfcSurfaceOfLinearExtrusion (::Ifc4x3_add2::IfcProfileDef* v1_SweptCurve, ::Ifc4x3_add2::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_add2::IfcDirection* v3_ExtrudedDirection, double v4_Depth); + typedef aggregate_of< IfcSurfaceOfLinearExtrusion > list; +}; +/// Definition from ISO/CD 10303-42:1992: A surface of revolution (IfcSurfaceOfRevolution) is the surface obtained by rotating a curve one complete revolution about an axis. The data shall be interpreted as below. +/// +/// The parameterization is as follows where the curve has a parameterization l(u): +/// +/// C = AxisPosition.LocationV = AxisPosition.Z +/// +/// In order to produce a single-value surface the a complete revolution, the curve shall be such that when expressed in a cylindrical coordinate system the curve shall be such that when expressed in a cylindrical coordinate system (r,φ ,z) centred at C with an axis V no two distinct parametric points on the curve shall have the same values for (r, z). +/// For a surface of revolution the parametric range is 0 < u < 360 degree. The parameterization range for v is defined by referenced curve. +/// +/// NOTE: Corresponding ISO 10303 entity: surface_of_revolution. Please refer to ISO/IS 10303-42:1994, p.76 for the final definition of the formal standard. +/// +/// HISTORY: New entity in IFC2x. +/// +/// Informal propositions: +/// +/// The surface shall not self-intersect +/// The swept curve shall not be coincident with the axis line for any finite part of its legth. +class IFC_PARSE_API IfcSurfaceOfRevolution : public IfcSweptSurface { +public: + /// A point on the axis of revolution and the direction of the axis of revolution. + ::Ifc4x3_add2::IfcAxis1Placement* AxisPosition() const; + void setAxisPosition(::Ifc4x3_add2::IfcAxis1Placement* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSurfaceOfRevolution (IfcEntityInstanceData* e); + IfcSurfaceOfRevolution (::Ifc4x3_add2::IfcProfileDef* v1_SweptCurve, ::Ifc4x3_add2::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_add2::IfcAxis1Placement* v3_AxisPosition); + typedef aggregate_of< IfcSurfaceOfRevolution > list; +}; +/// The furnishing element type IfcSystemFurnitureElementType defines commonly shared information for occurrences of furniture elements. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// applicable assignment of process types +/// +/// It is used to define a furniture element specification (i.e. the specific product information, that is common to all occurrences of that product type). Furniture Element types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcSystemFurnitureElementType are represented by instances of IfcSystemFurnitureElement. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFurnishingElementType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_SystemFurnitureElementTypeCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_SystemFurnitureElementTypePanel (PANEL) +/// Pset_SystemFurnitureElementTypeWorkSurface (WORKSURFACE) +/// +/// Material Use Definition +/// The material of the IfcSystemFurnitureElementType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Finish': The finish, typically at visible aspects of the furniture. +/// 'Frame': The frame from which the object is constructed. +/// 'Hardware': Finish hardware such as knobs or handles. +/// 'Padding': Padding such as cushions. +/// 'Panel': Panels such as glass. +class IFC_PARSE_API IfcSystemFurnitureElementType : public IfcFurnishingElementType { +public: + boost::optional< ::Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSystemFurnitureElementType (IfcEntityInstanceData* e); + IfcSystemFurnitureElementType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, boost::optional< ::Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::Value > v10_PredefinedType); + typedef aggregate_of< IfcSystemFurnitureElementType > list; +}; +/// An IfcTask is an identifiable unit of work to be +/// carried out in a construction project. +/// +/// A task is typically used to describe an activity for the +/// construction or installation of products, but is not +/// limited to these types. For example it might be used to +/// describe design processes, move operations and other +/// design, construction and operation related activities as +/// well. +/// +/// HISTORY  New entity in IFC 1.0. Renamed from IfcWorkTask in IFC 2x. +/// +/// IFC2x4 CHANGE  Attributes TaskTime and PredefinedType added. IfcMove and IfcOrderRequest has been removed in IFC2x4 and are now represented by IfcTask. Further information can be found in the description below. +/// +/// Type use definition +/// +/// IfcTask defines the anticipated or actual occurrence +/// of any task; common information about task types is handled +/// by IfcTaskType. The IfcTaskType (if present) +/// may establish the common type name, usage (or predefined) +/// type, common set of properties, and common product +/// assignment using IfcRelAssignsToProduct. The +/// IfcTaskType is attached using the +/// IfcRelDefinesByType.RelatingType objectified +/// relationship and is accessible by the inverse +/// IsTypedBy attribute. Special type information +/// relating to a task occurrence is asserted using +/// IfcTask.ObjectType (inherited from +/// IfcObject). Examples that may be used include fixed +/// duration, fixed unit or fixed work. IfcTask can be +/// aggregated to a task type in order to specify a task +/// sequence or any time related information, e.g. the duration +/// of a task. Please see the documentation of +/// IfcTaskType for further information. +/// +/// Attribute use definition +/// +/// Each occurrence of IfcTask is given a name that is +/// indicative of its content (IfcRoot.Name). A textual +/// description of the task may be provided and this may be +/// further elaborated by a narrative long description +/// (IfcProcess.LongDescription). A work method may be +/// declared for the method of work used in carrying out a +/// task. A task is identified as being either a milestone task +/// or not. A milestone task is defined by the marker +/// IsMilestone. and has no duration. A status and +/// priority for each task may also be set. +/// +/// Property set use definition +/// +/// The property sets relating to IfcTask are defined by +/// IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. They are +/// accessible by the inverse IsDefinedBy relationship. +/// Such property sets may define task parameters. No property +/// sets for IfcTask are currently defined by IFC. +/// +/// Connectivity Use Definition +/// +/// The relationship IfcRelSequence is used to indicate +/// control flow. An IfcTask as a successor to an +/// IfcTask indicates logical sequence how these tasks +/// should be performed. IfcTask's can be triggered or +/// can trigger IfcEvent's, which is also defined +/// through the relationship IfcRelSequence. +/// +/// Composition use definition +/// +/// IfcTask may be contained within an IfcTask +/// using the IfcRelNests relationship. An +/// IfcTask may in turn nest other IfcTask, +/// IfcProcedure or IfcEvent entities. Such +/// nesting indicates decomposed level of detail. From IFC2x4 +/// onwards it is required to have a summary task (root of all +/// tasks), which is used to define a link to the work plan or +/// work schedule. All subtasks of the summary tasks are then +/// implicitly linked to this work plan or work schedule. +/// Please note that the summary task is used for data +/// organization and not meant to store typical task +/// information as defined by the user. It is therefore +/// recommended that the summary task is hidden from the user +/// to avoid confusion. Please also note that +/// IfcRelNests is used to show the dependency between +/// regular tasks and recurring task definitions (please see +/// the section about time and duration use definitions). +/// +/// As shown in Figure 13, the installation of a number of items of equipment within a +/// particular space may be the subject of a single task which +/// is identified as 'fix equipment in space 123'. +/// IfcTask represents the occurrence of a work +/// performance of a type of process in a construction plan. +/// +/// Figure 13 — Task visualization +/// +/// A task may nest other tasks as sub-items; the nesting +/// relationship is modeled by IfcRelNests as shown in Figure 14. For example, +/// the construction of a stud wall may be designated as a +/// nesting task named 'install wall #1' including other tasks +/// such as 'install dry wall', 'install studs', 'wall taping', +/// and 'erect wall' as sub-processes. A value that indicates +/// the relative tree view position of the task (in comparison +/// to the tree view position of other tasks and the task +/// hierarchy defined by IfcRelNests). +/// The task order information that is used for viewing +/// purposes is derived from the order defined by the +/// IfcRelNests relationship and thus is independent of +/// the logical task order defined through +/// IfcRelSequence. The hierarchy and order defined +/// through IfcRelNests enables to order the tasks in a +/// tree view or list view structure. +/// +/// Figure 14 — Task nesting relationships +/// +/// Time and duration use definition +/// +/// Compared to previous IFC releases, basic task time +/// information (scheduled start time, scheduled finish +/// time, duration) is now directly attached to IfcTask +/// through the TaskTime attribute. Regular tasks are +/// defined through IfcTaskTime. Recurring tasks are +/// defined through IfcTaskTimeRecurring. In case a +/// regular task is derived from a recurring task both tasks +/// should be linked together through a IfcRelNests +/// relationship, where IfcRelNests.IsNestedBy points to +/// the recurring task and IfcRelNests.Nests points to +/// all regular tasks that have been derived from the recurring +/// task. +/// +/// Assignment use definition +/// +/// Occurrences of IfcTask may be assigned to an +/// IfcWorkControl (either a work plan or a work +/// schedule) through IfcRelAssignsToControl. From +/// IFC2x4 onwards it is suggested to use the 'summary task' +/// (root element of the task hierarchy that is required for +/// task management purposes) to assign all subtask to a work +/// plan or work schedule. Resources used by tasks are assigned +/// by IfcRelAssignsToProcess. Quantities of resources +/// consumed by the task are dealt with by defining the +/// IfcElementQuantity for the resource and not at the +/// instance of IfcTask. Please note that the +/// IfcRelAssignsTasks relationship class has been +/// removed in IFC2x4 and is no longer available. +/// +/// An IfcTask may be assigned a Work Breakdown +/// Structure (WBS) code. A WBS code is dealt with as a +/// classification of task and is associated to a task +/// occurrence using the IfcRelAssociatesClassification +/// relationship class. As well as being to designate the code, +/// the classification structure of the IFC model also enables +/// the source of the work breakdown structure classification +/// to be identified. +/// +/// Constraint use definition +/// +/// Constraints may be applied to a task to indicate fixed task +/// duration, fixed start or fixed finish (see Figure 15). The relationship +/// IfcRelAssociatesConstraint is used where +/// RelatingConstraint points to an IfcMetric and +/// RelatedObjects includes the IfcTask. +/// IfcRelAssociatesConstraint.Name identifies the +/// attribute to be constrained using a period (".") to +/// dereference; for example, "TaskTime.ScheduleStart" refers +/// to the ScheduleStart attribute on the +/// IfcTaskTime entity referenced on the TaskTime +/// attribute. The following attributes may be constrained: +/// +/// 'TaskTime.ScheduleDuration': Indicate fixed +/// duration of task with ConstraintGrade=HARD and +/// Benchmark=EQUALTO such that changes to an assigned +/// IfcConstructionResource.ResourceTime.ScheduleWork +/// should impact +/// IfcConstructionResource.ResourceTime.ScheduleUsage, +/// and vice-versa. +/// +/// 'TaskTime.ScheduleStart': Indicate constrained +/// start date with ConstraintGrade=HARD and Benchmark of +/// EQUALTO, GREATERTHANOREQUALTO, or LESSTHANOREQUALTO to +/// indicate "must start on", "start no earlier than" or +/// "start no later than" respectively where +/// IfcMetric.DataValue indicates the specific +/// IfcDateTime. Use SOFT constraint having LESSTHAN +/// benchmark to indicate "start as soon as possible". +/// +/// 'TaskTime.ScheduleFinish': Indicate constrained +/// finish date with ConstraintGrade=HARD and Benchmark of +/// EQUALTO, GREATERTHANOREQUALTO, or LESSTHANOREQUALTO to +/// indicate "must finish on", "finish no earlier than" or +/// "finish no later than" respectively where +/// IfcMetric.DateValue indicates the specific +/// IfcDateTime. Use SOFT constraint having +/// GREATERTHAN benchmark to indicate "finish as late as +/// possible". +/// +/// A "manual scheduled task" is indicated with +/// ConstraintGrade=HARD and Benchmark=EQUALTO for both +/// TaskTime.ScheduleStart and +/// TaskTime.ScheduleFinish. +/// +/// Figure 15 — Task constraints +/// +/// Use Definition to represent other activities +/// +/// The use definitions for IfcTask have been generalised to +/// represent other activities as well, including actitities +/// that had been defined by own entities in previous IFC +/// releases. This includes +/// +/// Order actions +/// Move operations +/// +/// IfcTask represents an order that might be carried +/// out by a Helpdesk acting the role of interface for the +/// organization between the facility user and the functional +/// requirement of fulfilling their needs. The actual task +/// represented by the IfcTask entity is turning a +/// request into an order and initiating the action that will +/// enable the order to be completed. The +/// IfcProjectOrder or one of its subtypes including +/// maintenance work order, is related to the IfcTask +/// using IfcRelAssignsToControl. +/// +/// IfcTask can also be used to describe an activity +/// that moves people, groups within an organization or +/// complete organizations together with their associated +/// furniture and equipment from one place to another. It thus +/// replaces the previous IFC entity IfcMove. The functionality +/// is represented in IfcTask as follows: +/// +/// Move from: The place from which actors and their +/// associated equipment are moving. +/// Use IfcRelAssignsToProcess where +/// RelatingProcess points to the task and +/// RelatedObjects holds the location(s) from which to +/// move. +/// Move to: The place to which actors and their +/// associated equipment are moving. +/// Use IfcRelAssignsToProduct where +/// RelatedObjects points to the task(s) and +/// RelatingProduct points to the location to which to +/// move. +/// Punch list: A list of points concerning a move that +/// require attention. +/// Use LongDescription or else identify sub-tasks to +/// track punch list items individually via IfcRelNests. +class IFC_PARSE_API IfcTask : public IfcProcess { +public: + /// Current status of the task. + /// + /// NOTE: Particular values for status are not + /// specified, these should be determined and agreed by local + /// usage. Examples of possible status values include 'Not Yet + /// Started', 'Started', 'Completed'. + boost::optional< std::string > Status() const; + void setStatus(boost::optional< std::string > v); + /// The method of work used in carrying out a task. + /// + /// NOTE: This attribute should + /// not be used if the work method is specified for the + /// IfcTaskType + boost::optional< std::string > WorkMethod() const; + void setWorkMethod(boost::optional< std::string > v); + /// Identifies whether a task is a milestone task (=TRUE) or not + /// (= FALSE). + /// + /// NOTE: In small project planning applications, + /// a milestone task may be understood to be a task having no + /// duration. As such, it represents a singular point in + /// time. + bool IsMilestone() const; + void setIsMilestone(bool v); + /// A value that indicates the relative priority of the task (in + /// comparison to the priorities of other tasks). + boost::optional< int > Priority() const; + void setPriority(boost::optional< int > v); + /// Time related information for the task. + /// + /// Added in IFC 2x4 + ::Ifc4x3_add2::IfcTaskTime* TaskTime() const; + void setTaskTime(::Ifc4x3_add2::IfcTaskTime* v); + /// Identifies the predefined types of a task from which + /// the type required may be set. + /// + /// Added in IFC 2x4 + boost::optional< ::Ifc4x3_add2::IfcTaskTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcTaskTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTask (IfcEntityInstanceData* e); + IfcTask (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, boost::optional< std::string > v8_Status, boost::optional< std::string > v9_WorkMethod, bool v10_IsMilestone, boost::optional< int > v11_Priority, ::Ifc4x3_add2::IfcTaskTime* v12_TaskTime, boost::optional< ::Ifc4x3_add2::IfcTaskTypeEnum::Value > v13_PredefinedType); + typedef aggregate_of< IfcTask > list; +}; +/// An IfcTaskType defines a +/// particular type of task that may be specified for use +/// within a work control. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// An IfcTaskType provides for all forms of types of +/// task that may be specified. +/// +/// Usage of IfcTaskType defines the parameters for one +/// or more occurrences of IfcTask. Parameters may be +/// specified through property sets that may be enumerated in +/// the IfcTaskTypeEnum data type or through explict +/// attributes of IfcTaskType. Task occurrences +/// (IfcTask entities) are linked to the task type +/// through the IfcRelDefinesByType relationship. +/// +/// Composition use definition +/// +/// IfcTaskType may nest other IfcTaskType or +/// IfcTask entities using the IfcRelNests +/// relationship. Such nesting indicates decomposed level of +/// detail. Nesting of IfcTask entities is used if a +/// task type shall be detailed by a sequence of tasks or if +/// there is a need to include additional time information such +/// as the duration of subtasks. Please note that +/// IfcTask entities being contained within an +/// IfcTaskType are linked with their task occurrences +/// via IfcRelDefinesByObject relationships. It is also +/// possible to define a task type for these IfcTask +/// entities via IfcRelDefinesByType relationships. For +/// further information please see the documentation of +/// IfcRelDefinesByObject. +/// +/// Figure 16 shows the definition of a task type that is part +/// of a task template library. Please note that in this +/// example the task type is further subdivided into tasks that +/// define task times (for example, duration) and/or a task sequence. +/// +/// Figure 16 — Task type relationships +class IFC_PARSE_API IfcTaskType : public IfcTypeProcess { +public: + /// Identifies the predefined types of a task type from which + /// the type required may be set. + ::Ifc4x3_add2::IfcTaskTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcTaskTypeEnum::Value v); + /// The method of work used in carrying out a task. + boost::optional< std::string > WorkMethod() const; + void setWorkMethod(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTaskType (IfcEntityInstanceData* e); + IfcTaskType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ProcessType, ::Ifc4x3_add2::IfcTaskTypeEnum::Value v10_PredefinedType, boost::optional< std::string > v11_WorkMethod); + typedef aggregate_of< IfcTaskType > list; +}; + +class IFC_PARSE_API IfcTessellatedFaceSet : public IfcTessellatedItem, public IfcBooleanOperand { +public: + ::Ifc4x3_add2::IfcCartesianPointList3D* Coordinates() const; + void setCoordinates(::Ifc4x3_add2::IfcCartesianPointList3D* v); + aggregate_of< IfcIndexedColourMap >::ptr HasColours() const; // INVERSE IfcIndexedColourMap::MappedTo + aggregate_of< IfcIndexedTextureMap >::ptr HasTextures() const; // INVERSE IfcIndexedTextureMap::MappedTo + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTessellatedFaceSet (IfcEntityInstanceData* e); + IfcTessellatedFaceSet (::Ifc4x3_add2::IfcCartesianPointList3D* v1_Coordinates); + typedef aggregate_of< IfcTessellatedFaceSet > list; +}; + +class IFC_PARSE_API IfcThirdOrderPolynomialSpiral : public IfcSpiral { +public: + double CubicTerm() const; + void setCubicTerm(double v); + boost::optional< double > QuadraticTerm() const; + void setQuadraticTerm(boost::optional< double > v); + boost::optional< double > LinearTerm() const; + void setLinearTerm(boost::optional< double > v); + boost::optional< double > ConstantTerm() const; + void setConstantTerm(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcThirdOrderPolynomialSpiral (IfcEntityInstanceData* e); + IfcThirdOrderPolynomialSpiral (::Ifc4x3_add2::IfcAxis2Placement* v1_Position, double v2_CubicTerm, boost::optional< double > v3_QuadraticTerm, boost::optional< double > v4_LinearTerm, boost::optional< double > v5_ConstantTerm); + typedef aggregate_of< IfcThirdOrderPolynomialSpiral > list; +}; + +class IFC_PARSE_API IfcToroidalSurface : public IfcElementarySurface { +public: + double MajorRadius() const; + void setMajorRadius(double v); + double MinorRadius() const; + void setMinorRadius(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcToroidalSurface (IfcEntityInstanceData* e); + IfcToroidalSurface (::Ifc4x3_add2::IfcAxis2Placement3D* v1_Position, double v2_MajorRadius, double v3_MinorRadius); + typedef aggregate_of< IfcToroidalSurface > list; +}; + +class IFC_PARSE_API IfcTransportationDeviceType : public IfcElementType { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTransportationDeviceType (IfcEntityInstanceData* e); + IfcTransportationDeviceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType); + typedef aggregate_of< IfcTransportationDeviceType > list; +}; + +class IFC_PARSE_API IfcTriangulatedFaceSet : public IfcTessellatedFaceSet { +public: + boost::optional< std::vector< std::vector< double > > > Normals() const; + void setNormals(boost::optional< std::vector< std::vector< double > > > v); + boost::optional< bool > Closed() const; + void setClosed(boost::optional< bool > v); + std::vector< std::vector< int > > CoordIndex() const; + void setCoordIndex(std::vector< std::vector< int > > v); + boost::optional< std::vector< int > /*[1:?]*/ > PnIndex() const; + void setPnIndex(boost::optional< std::vector< int > /*[1:?]*/ > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTriangulatedFaceSet (IfcEntityInstanceData* e); + IfcTriangulatedFaceSet (::Ifc4x3_add2::IfcCartesianPointList3D* v1_Coordinates, boost::optional< std::vector< std::vector< double > > > v2_Normals, boost::optional< bool > v3_Closed, std::vector< std::vector< int > > v4_CoordIndex, boost::optional< std::vector< int > /*[1:?]*/ > v5_PnIndex); + typedef aggregate_of< IfcTriangulatedFaceSet > list; +}; + +class IFC_PARSE_API IfcTriangulatedIrregularNetwork : public IfcTriangulatedFaceSet { +public: + std::vector< int > /*[1:?]*/ Flags() const; + void setFlags(std::vector< int > /*[1:?]*/ v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTriangulatedIrregularNetwork (IfcEntityInstanceData* e); + IfcTriangulatedIrregularNetwork (::Ifc4x3_add2::IfcCartesianPointList3D* v1_Coordinates, boost::optional< std::vector< std::vector< double > > > v2_Normals, boost::optional< bool > v3_Closed, std::vector< std::vector< int > > v4_CoordIndex, boost::optional< std::vector< int > /*[1:?]*/ > v5_PnIndex, std::vector< int > /*[1:?]*/ v6_Flags); + typedef aggregate_of< IfcTriangulatedIrregularNetwork > list; +}; + +class IFC_PARSE_API IfcVehicleType : public IfcTransportationDeviceType { +public: + ::Ifc4x3_add2::IfcVehicleTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcVehicleTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcVehicleType (IfcEntityInstanceData* e); + IfcVehicleType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcVehicleTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcVehicleType > list; +}; +/// The window lining is the outer +/// frame which enables the window to be fixed in position. The +/// window lining is used to hold the window panels or other +/// casements. The parameter of the IfcWindowLiningProperties +/// define the geometrically relevant parameter of the lining. +/// +/// NOTE The IfcWindowLiningProperties +/// shall only be applied to construct the 3D shape of a window, if +/// the attribute IfcWindowStyle.ParameterTakesPrecedence is +/// set TRUE. +/// +/// The IfcWindowLiningProperties are included in the set +/// of properties of IfcWindowStyle.HasPropertySets. More +/// information about the window lining can be included in the same +/// set of the IfcWindowStyle using another +/// IfcPropertySet for dynamic extensions. +/// +/// HISTORY New Entity in IFC Release 2.0. Has been renamed from IfcWindowLining in +/// IFC Release 2x. +/// +/// IFC2x4 CHANGE The following attributes have been added LiningOffset, +/// LiningToPanelOffsetX, LiningToPanelOffsetY. The +/// attribute ShapeAspectStyle is deprecated and shall no +/// longer be used. Supertype changed to new +/// IfcPreDefinedPropertySet. +/// +/// Geometry use definitions +/// The IfcWindowLiningProperties does not hold a geometric representation. However it defines parameters which can be used to create the shape of the window style (which is inserted by the IfcWindow into the spatial context of the project) as shown in Figure 175. +/// The parameters at the IfcWindowLiningProperties define a standard window lining, including (if given) a mullion and a transom (for horizontal and vertical splits). The outer boundary of the lining is determined by the occurrence parameter assigned to the IfcWindow, which inserts the IfcWindowStyle. +/// +/// The lining is applied to all faces +/// of the opening reveal. The parameter are: +/// +/// LiningDepth +/// LiningThickness +/// LiningOffset +/// LiningToPanelOffsetX +/// LiningToPanelOffsetY +/// +/// NOTE Parameters added in +/// IFC2x4. +/// +/// Inner side is defined as the direction of the window panel +/// opening operation. +/// +/// If the OperationType of the +/// window style is +/// +/// DoublePanelVertical (shown) +/// TriplePanelBottom +/// TriplePanelTop +/// TriplePanelLeft +/// TriplePanelRight +/// +/// the following additional parameter apply: +/// +/// MullionThickness +/// FirstMullionOffset - measured as offset to the Z axis +/// (in XZ plane) +/// +/// If the OperationType of the +/// window style is +/// +/// DoublePanelHorizontal +/// TriplePanelBottom +/// TriplePanelTop +/// TriplePanelLeft +/// TriplePanelRight +/// +/// the following additional parameter apply +/// +/// TransomThickness +/// FirstTransomOffset measured as offset to the X axis +/// (in XZ plane) +/// +/// If the OperationType of the +/// window style is +/// +/// TriplePanelVertical +/// +/// the following additional parameter apply +/// +/// SecondMullionOffset +/// +/// If the OperationType of the +/// window style is +/// +/// TriplePanelHorizontal +/// +/// the following additional parameter apply +/// +/// SecondTransomOffset +/// +/// Figure 175 — Window lining properties +/// +/// NOTE +/// +/// All offsets are given as a normalized ratio measure. +class IFC_PARSE_API IfcWindowLiningProperties : public IfcPreDefinedPropertySet { +public: + /// Depth of the window lining (dimension measured perpendicular to window elevation plane). + boost::optional< double > LiningDepth() const; + void setLiningDepth(boost::optional< double > v); + /// Thickness of the window lining (measured parallel to the window elevation plane). + boost::optional< double > LiningThickness() const; + void setLiningThickness(boost::optional< double > v); + /// Thickness of the transom (horizontal separator of window panels within a window), measured parallel to the window elevation plane. The transom is part of the lining and the transom depth is assumed to be identical to the lining depth. + boost::optional< double > TransomThickness() const; + void setTransomThickness(boost::optional< double > v); + /// Thickness of the mullion (vertical separator of window panels within a window), measured parallel to the window elevation plane. The mullion is part of the lining and the mullion depth is assumed to be identical to the lining depth. + boost::optional< double > MullionThickness() const; + void setMullionThickness(boost::optional< double > v); + /// Offset of the transom centerline, measured along the z-axis of the window placement co-ordinate system. An offset value = 0.5 indicates that the transom is positioned in the middle of the window. + boost::optional< double > FirstTransomOffset() const; + void setFirstTransomOffset(boost::optional< double > v); + /// Offset of the transom centerline for the second transom, measured along the x-axis of the window placement co-ordinate system. An offset value = 0.666 indicates that the second transom is positioned at two/third of the window. + boost::optional< double > SecondTransomOffset() const; + void setSecondTransomOffset(boost::optional< double > v); + /// Offset of the mullion centerline, measured along the x-axis of the window placement co-ordinate system. An offset value = 0.5 indicates that the mullion is positioned in the middle of the window. + boost::optional< double > FirstMullionOffset() const; + void setFirstMullionOffset(boost::optional< double > v); + /// Offset of the mullion centerline for the second mullion, measured along the x-axis of the window placement co-ordinate system. An offset value = 0.666 indicates that the second mullion is positioned at two/third of the window. + boost::optional< double > SecondMullionOffset() const; + void setSecondMullionOffset(boost::optional< double > v); + /// Optional link to a shape aspect definition, which points to the part of the geometric representation of the window style, which is used to represent the lining. + /// + /// IFC2x4 CHANGE The attribute is deprecated and shall no longer be used, i.e. the value shall be NIL ($). + ::Ifc4x3_add2::IfcShapeAspect* ShapeAspectStyle() const; + void setShapeAspectStyle(::Ifc4x3_add2::IfcShapeAspect* v); + /// Offset of the window lining. The offset is given as distance along the y axis of the local placement (perpendicular to the window plane). + /// + /// IFC2x4 CHANGE: New attribute added at the end of the entity definition. + boost::optional< double > LiningOffset() const; + void setLiningOffset(boost::optional< double > v); + /// Offset between the lining and the window panel measured along the x-axis of the local placement. Should be smaller or equal to the LiningThickness. + /// + /// IFC2x4 CHANGE: New attribute added at the end of the entity definition. + boost::optional< double > LiningToPanelOffsetX() const; + void setLiningToPanelOffsetX(boost::optional< double > v); + /// Offset between the lining and the window panel measured along the y-axis of the local placement. Should be smaller or equal to the IfcWindowPanelProperties.PanelThickness. + /// + /// IFC2x4 CHANGE: New attribute added at the end of the entity definition. + boost::optional< double > LiningToPanelOffsetY() const; + void setLiningToPanelOffsetY(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcWindowLiningProperties (IfcEntityInstanceData* e); + IfcWindowLiningProperties (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< double > v5_LiningDepth, boost::optional< double > v6_LiningThickness, boost::optional< double > v7_TransomThickness, boost::optional< double > v8_MullionThickness, boost::optional< double > v9_FirstTransomOffset, boost::optional< double > v10_SecondTransomOffset, boost::optional< double > v11_FirstMullionOffset, boost::optional< double > v12_SecondMullionOffset, ::Ifc4x3_add2::IfcShapeAspect* v13_ShapeAspectStyle, boost::optional< double > v14_LiningOffset, boost::optional< double > v15_LiningToPanelOffsetX, boost::optional< double > v16_LiningToPanelOffsetY); + typedef aggregate_of< IfcWindowLiningProperties > list; +}; +/// A window panel is a casement, that is, a component, fixed or opening, +/// consisting essentially of a frame and the infilling. The +/// infilling of a window panel is normally glazing. The way of +/// operation is defined in the operation type. +/// The IfcWindowPanelProperties are used to parametrically +/// describe the shape and operation of window panels. The parametric +/// definition can be added solely or additionally to the explicit +/// shape representation of the window. +/// The IfcWindowStyle can define windows consisting of +/// more then one panel. In this case, one instance of +/// IfcWindowPanelProperties has to be included for each +/// window panel. The PanelPosition attribute, in conjunction +/// with the IfcWindowStyle.OperationType attribute, +/// determines to which panel the IfcWindowPanelProperties +/// apply. +/// The IfcWindowPanelProperties are included in the list +/// of properties (HasPropertySets) of the +/// IfcWindowStyle. More information about the window panel +/// can be included in the same list of the IfcWindowStyle +/// using the IfcPropertySet for dynamic extensions. +/// +/// HISTORY New entity in +/// IFC Release 2.0, it had been renamed from IfcWindowPanel in IFC +/// Release 2x. +/// +/// IFC2x4 CHANGE Supertype changed to +/// new IfcPreDefinedPropertySet. +/// +/// Geometry use definitions +/// The IfcWindowPanelProperties does not hold an own +/// geometric representation. However it defines parameter, which can +/// be used to create the shape of the IfcWindowStyle (which +/// is inserted by the IfcWindow into the spatial context of +/// the project). +/// The parameters at the IfcWindowPanelProperties define a +/// standard window panel. The outer boundary of the panel is +/// determined by the occurrence parameter assigned to the IfcWindow, +/// which inserts the IfcWindowStyle. It has to take the lining +/// parameter into account as well. The position of the window panel +/// within the overall window is determined by the +/// PanelPosition attribute. +/// +/// As shown in Figure 176, the panel is applied to the position within the lining as defined by the panel position attribute. The following parameter apply to that panel: FrameDepth, FrameThickness. +/// +/// Figure 176 — Window panel properties +class IFC_PARSE_API IfcWindowPanelProperties : public IfcPreDefinedPropertySet { +public: + /// Types of window panel operations. Also used to assign standard symbolic presentations according to national building standards. + ::Ifc4x3_add2::IfcWindowPanelOperationEnum::Value OperationType() const; + void setOperationType(::Ifc4x3_add2::IfcWindowPanelOperationEnum::Value v); + /// Position of this panel within the overall window style. + ::Ifc4x3_add2::IfcWindowPanelPositionEnum::Value PanelPosition() const; + void setPanelPosition(::Ifc4x3_add2::IfcWindowPanelPositionEnum::Value v); + /// Depth of panel frame, measured from front face to back face horizontally (i.e. perpendicular to the window (elevation) plane. + boost::optional< double > FrameDepth() const; + void setFrameDepth(boost::optional< double > v); + /// Width of panel frame, measured from inside of panel (at glazing) to outside of panel (at lining), i.e. parallel to the window (elevation) plane. + boost::optional< double > FrameThickness() const; + void setFrameThickness(boost::optional< double > v); + /// Optional link to a shape aspect definition, which points to the part of the geometric representation of the window style, which is used to represent the panel. + /// + /// IFC2x4 CHANGE The attribute is deprecated and shall no longer be used, i.e. the value shall be NIL ($). + ::Ifc4x3_add2::IfcShapeAspect* ShapeAspectStyle() const; + void setShapeAspectStyle(::Ifc4x3_add2::IfcShapeAspect* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcWindowPanelProperties (IfcEntityInstanceData* e); + IfcWindowPanelProperties (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcWindowPanelOperationEnum::Value v5_OperationType, ::Ifc4x3_add2::IfcWindowPanelPositionEnum::Value v6_PanelPosition, boost::optional< double > v7_FrameDepth, boost::optional< double > v8_FrameThickness, ::Ifc4x3_add2::IfcShapeAspect* v9_ShapeAspectStyle); + typedef aggregate_of< IfcWindowPanelProperties > list; +}; +/// The IfcActor defines all actors or human agents involved in a project during its full life cycle. It facilitates the use of person and organization definitions in the resource part of the IFC object model. This includes name, address, telecommunication addresses, and roles. +/// +/// HISTORY New Entity in IFC Release 2.0 +/// +/// Relationship use definition +/// Actors are assigned (such as to a process or a resource) by the relationship object that refers to the corresponding object: +/// +/// Process: assigned using IfcRelAssignsToProcess +/// Resource: assigned using IfcRelAssignsToResource +/// +/// Property set use definition +/// The property sets relating to the IfcActor are defined by IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. They are accessible by the inverse IsDefinedBy relationship. The following property set definitions specific to IfcActor are part of this IFC release: +/// +/// Pset_ActorCommon: common property set for all actor occurrences +class IFC_PARSE_API IfcActor : public IfcObject { +public: + /// Information about the actor. + ::Ifc4x3_add2::IfcActorSelect* TheActor() const; + void setTheActor(::Ifc4x3_add2::IfcActorSelect* v); + aggregate_of< IfcRelAssignsToActor >::ptr IsActingUpon() const; // INVERSE IfcRelAssignsToActor::RelatingActor + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcActor (IfcEntityInstanceData* e); + IfcActor (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcActorSelect* v6_TheActor); + typedef aggregate_of< IfcActor > list; +}; +/// An advanced B-rep is a boundary +/// representation model in which all faces, edges and vertices are +/// explicitly represented. It is a solid with explicit topology and +/// elementaty or free-form geometry. The faces of the B-rep are of +/// type IfcAdvancedFace. An advanced B-rep has to meet the +/// same topological constraints as the manifold solid B-rep. +/// NOTE The advanced B-rep has been introduced in +/// order to support the increasing number of applications that can +/// define and exchange B-rep models based on NURBS or other b-spline +/// surfaces. +/// +/// NOTE Corresponding ISO 10303-42 entity: advanced_brep_shape_representation. Please refer to ISO/IS 10303-514:1999 for the final definition of the formal standard. There is no explicit entity in ISO 10303-42 for an advanced B-rep, the advanced_brep_shape_representation only ensures that only such kind of manifold B-rep's are used in a shape representation. +/// +/// HISTORY New entity in IFC2x4 +/// +/// Informal proposition: +/// +/// each face is a face surface; +/// each face surface has its geometry defined by an elementary +/// surface, swept surface or a b-spline surface; +/// the edges used to define the boundaries of the face shall all +/// reference an edge curve +/// each curve used to define the geometry of the faces and face +/// bounds shall be either a conic, or a line or a polyline or a +/// b-spline curve +/// the edges used to define the face boundaries shall all be +/// trimmed by vertices of type vertex point +/// no loop used to define a face bound shall be of the oriented +/// subtype +/// +/// Figure 249 illustrates use of IfcAdvancedBrep for boundary representation models with b-spline surfaces. The diagram shows the topological and geometric representation items that are used for advanced B-reps, based on IfcAdvancedFace. +/// +/// Figure 249 — Advanced Brep +class IFC_PARSE_API IfcAdvancedBrep : public IfcManifoldSolidBrep { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAdvancedBrep (IfcEntityInstanceData* e); + IfcAdvancedBrep (::Ifc4x3_add2::IfcClosedShell* v1_Outer); + typedef aggregate_of< IfcAdvancedBrep > list; +}; +/// The IfcAdvancedBrepWithVoids is a specialization of an +/// advanced B-rep which contains one or more voids in its interior. +/// The voids are represented as closed shells which are defined so +/// that the shell normal point into the void. +/// +/// NOTE Corresponding ISO 10303-42 entity: brep_with_voids (see note above). Please refer to ISO/IS 10303-42:1994, p. 173 for the final definition of the formal standard. In IFC advanced B-rep with voids is represented by this subtype IfcAdvancedBrepWithVoids and not defined via an implicit ANDOR supertype constraint as in ISO/IS 10303-42:1994 between an instance of manifold_solid_brep AND brep_with_voids. This change has been made due to the fact, that only ONEOF supertype constraint is allowed within the IFC object model. +/// +/// HISTORY New entity in IFC2x4 +/// +/// Informal propositions: +/// +/// Each void shell shall be disjoint from the outer shell and +/// from every other void shell +/// Each void shell shall be enclosed within the outer shell but +/// not within any other void shell. In particular the outer shell is +/// not in the set of void shells +/// Each shell in the IfcManifoldSolidBrep shall be +/// referenced only once. +/// All the faces of all the shells in the IfcAdvancedBrep +/// and the IfcAdvancedBrepWithVoids.Voids shall be of type +/// IfcAdvancedFace. +class IFC_PARSE_API IfcAdvancedBrepWithVoids : public IfcAdvancedBrep { +public: + aggregate_of< ::Ifc4x3_add2::IfcClosedShell >::ptr Voids() const; + void setVoids(aggregate_of< ::Ifc4x3_add2::IfcClosedShell >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAdvancedBrepWithVoids (IfcEntityInstanceData* e); + IfcAdvancedBrepWithVoids (::Ifc4x3_add2::IfcClosedShell* v1_Outer, aggregate_of< ::Ifc4x3_add2::IfcClosedShell >::ptr v2_Voids); + typedef aggregate_of< IfcAdvancedBrepWithVoids > list; +}; +/// Definition from IAI: An annotation is a graphical +/// representation within the geometric (and spatial) context +/// of a project, that adds a note or meaning to the objects +/// which constitutes the project model. Annotations include +/// additional line drawings, text, dimensioning, hatching and +/// other forms of graphical notes. +/// +/// NOTE Additional presentation information (often +/// 2D) such as tag number, hatching, etc., that is directly +/// related to a particular product representation is +/// included within the IfcProductDefinitionShape +/// having various IfcShapeRepresentation's of the +/// IfcElement (and its subtypes). Only those +/// presentation information, that cannot be directly related +/// to a single product, have to be wrapped within the +/// IfcAnnotation. +/// +/// If available, the annotation should be related to the +/// spatial context of the project, by containing the +/// annotation within the appropriate level of the building +/// structure (site, building, storey, or space). This is +/// handled by the IfcRelContainedInSpatialStructure +/// relationship. +/// +/// HISTORY: New entity in +/// Release IFC2x Edition 2. +/// +/// Use definition +/// +/// The IfcAnnotation can provide specific 0D, 1D, and +/// 2D geometric items as representation of the annotation, +/// offering annotation point, curves, and surfaces. +/// +/// 'Annotation point' is an annotation provided by a +/// point that has additional semantic. The inherited +/// attribute ObjectType should be used to capture the +/// type of point annotation, some predefined values are: +/// +/// 'Survey': A survey point has a set of +/// cartesian coordinates determined by its location at +/// point. These coordinates are determined relative to the +/// coordinates of a reference point, which acts as the +/// datum for the survey. The difference in elevation of +/// the survey points enables terrain to be determined. +/// +/// 'Annotation curve' is an annotation provided by a +/// curve that has additional semantic. The inherited +/// attribute ObjectType should be used to capture the +/// type of curve annotation, some predefined values are: +/// +/// 'ContourLine': A line of constant +/// elevation typically used on geographic maps where the +/// spacing of lines at constant intervals of elevation may +/// be used as an indication of slope. +/// +/// 'IsoBar': A line of constant pressure +/// typically used on weather maps or to show pressure +/// gradient in spaces, chambers or externally. +/// +/// 'IsoLux': A line of constant illumination +/// typically used to show the distribution of illumination +/// levels and/or daylighting in a space or externally. +/// +/// 'IsoTherm': A line of constant temperature +/// typically used to show the distribution and effect of +/// heating or cooling within a space or to show +/// temperature distribution on a geographic map. +/// +/// 'Annotation surface' is an annotation provided by +/// a surface that has additional semantic. The inherited +/// attribute ObjectType should be used to capture the +/// type of surface annotation, some predefined values are: +/// +/// 'SurveyArea': A surface patch based on +/// survey points. +/// +/// Geometry Use Definitions +/// +/// The geometric representation of any IfcAnnotation is +/// given by the IfcProductDefinitionShape and +/// IfcLocalPlacement allowing multiple geometric +/// representations. +/// +/// Local Placement +/// +/// The local placement for any IfcAnnotation is defined +/// in its supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local +/// coordinate system that is referenced by all geometric +/// representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if given) to the +/// local placement of the same +/// IfcSpatialStructureElement, which is used in the +/// ContainedInStructure inverse attribute, or to a +/// spatial structure element at a higher level, referenced +/// by that. +/// +/// If the relative placement is not used, the absolute +/// placement is defined within the world coordinate system. +/// +/// Geometric Representations +/// +/// The standard representation of IfcAnnotation is +/// defined using 'Annotation2D', when using 2D geometry, +/// hatching and text, 'GeometricCurveSet' when using points +/// and curves, or, when including als surfaces, the +/// 'GeometricSet' geometry. Geometric representation items may +/// be styled items by adding the style information. +/// +/// Annotation2D Representation +/// This representation is used, when the representation of the +/// IfcAnnotation includes specific drafting +/// representation elements. The Annotation may have: +/// +/// subtypes of IfcPoint, IfcCurve being 2D +/// +/// directly as Items, or +/// within an IfcGeometricCurveSet +/// +/// subtypes of IfcAnnotationFillArea for hatches +/// +/// subtypes of IfcDefinedSymbol for symbols +/// +/// subtypes of IfcTextLiteral for text +/// +/// subtypes of IfcDraughtingCallout for dimensions +/// +/// The following attribute values for the +/// IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'Annotation' +/// +/// RepresentationType : 'Annotation2D' +/// +/// Annotation Curve Representation +/// This representation is used, when the representation of the +/// IfcAnnotation does not includes specific drafting +/// representation elements. The Annotation may have: +/// +/// subtypes of IfcPoint, IfcCurve being 2D +/// +/// directly as Items, or +/// within an IfcGeometricCurveSet +/// +/// The following attribute values for the +/// IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'Annotation' +/// +/// RepresentationType : 'GeometricCurveSet' +/// +/// Annotation Surface Representation +/// This representation is used, when the representation of the +/// IfcAnnotation does includes surfaces. The Annotation +/// may have: +/// +/// subtypes of IfcPoint, IfcCurve, or +/// IfcSurface +/// +/// directly as Items, or +/// within an IfcGeometricCurveSet +/// +/// The following attribute values for the +/// IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'Annotation' +/// +/// RepresentationType : 'GeometricSet' +class IFC_PARSE_API IfcAnnotation : public IfcProduct { +public: + boost::optional< ::Ifc4x3_add2::IfcAnnotationTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcAnnotationTypeEnum::Value > v); + aggregate_of< IfcRelContainedInSpatialStructure >::ptr ContainedInStructure() const; // INVERSE IfcRelContainedInSpatialStructure::RelatedElements + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAnnotation (IfcEntityInstanceData* e); + IfcAnnotation (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< ::Ifc4x3_add2::IfcAnnotationTypeEnum::Value > v8_PredefinedType); + typedef aggregate_of< IfcAnnotation > list; +}; +/// Definition from ISO/CD 10303-42:1992: A b_spline_surface is a general form of rational or polynomial parametric surface which is represented by control points, basis functions, and possibly, weights. As with the corresponding curve entity it has some special subtypes where some of the data can be derived. +/// +/// The symbology used here is: +/// +/// K1 +/// = upper_index_on_u_control_points +/// +/// K2 +/// = upper_index_on_v_control_points +/// +/// Pij +/// = control_points +/// +/// wij +/// = weights +/// +/// d1 +/// = u_degree +/// +/// d2 +/// = v_degree +/// +/// The control points are ordered as +/// P00, P01, P02, +/// ......, PK1(K2-1), +/// PK1K2 +/// The weights, in the case of the rational subtype, are ordered +/// similarly. +/// +/// For each parameter, s = u or v, if +/// k is the upper index on the control points and d is +/// the degree for s, the knot array is an array of (k +/// + d + 2) real numbers [s-d, ...., +/// sk+1], such that for all indices j in +/// [-d, k]; sj ≤ +/// sj+1. This array is obtained from the +/// appropriate u_knots or v_knots list by repeating each multiple +/// knot according to the multiplicity. +/// +/// Nid, the ith +/// normalised B-spline basis function of degree d, is defined +/// on the subset [si-d, ...., +/// si+1] of this array. +/// +/// Let L denote the number of distinct values amongst the +/// knots in the knot list; L will be referred to as the +/// ‘upper index on knots’. Let +/// mj denote the multiplicity (i.e., number +/// of repetitions) of the jth distinct knot value. Then: +/// +/// All knot multiplicities except the first and the last shall be in +/// the range 1, ...., d; the first and last may have a +/// maximum value of d+1. In evaluating the basis functions, a +/// knot u of, e.g., multiplicity 3 is interpreted as a +/// sequence u, u, u, in the knot array. +/// +/// The surface form is used to identify specific quadric surface +/// types (which shall have degree two), ruled surfaces and surfaces +/// of revolution. As with the b-spline curve, the surface form is +/// informational only and the spline data takes precedence. +/// +/// The surface is to be interpreted as follows: In the +/// polynomial case the surface is given by the equation: +/// +/// In the rational case the surface equation is: +/// +/// NOTE Corresponding ISO 10303 entity: b_spline_surface. Please refer to ISO/IS 10303-42:1994, p. 78 for the final definition of the formal standard. +/// +/// HISTORY New entity in IFC2x4. +class IFC_PARSE_API IfcBSplineSurface : public IfcBoundedSurface { +public: + /// Algebraic degree of basis functions in u. + int UDegree() const; + void setUDegree(int v); + /// Algebraic degree of basis functions in v. + int VDegree() const; + void setVDegree(int v); + /// This is a list of lists of control points. + aggregate_of_aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr ControlPointsList() const; + void setControlPointsList(aggregate_of_aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr v); + /// Indicator of special surface types. + ::Ifc4x3_add2::IfcBSplineSurfaceForm::Value SurfaceForm() const; + void setSurfaceForm(::Ifc4x3_add2::IfcBSplineSurfaceForm::Value v); + /// Indication of whether the surface is closed in the u direction; this is for information only. + boost::logic::tribool UClosed() const; + void setUClosed(boost::logic::tribool v); + /// Indication of whether the surface is closed in the v direction; this is for information only. + boost::logic::tribool VClosed() const; + void setVClosed(boost::logic::tribool v); + /// Flag to indicate whether, or not, surface is self-intersecting; this is for information only. + boost::logic::tribool SelfIntersect() const; + void setSelfIntersect(boost::logic::tribool v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBSplineSurface (IfcEntityInstanceData* e); + IfcBSplineSurface (int v1_UDegree, int v2_VDegree, aggregate_of_aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr v3_ControlPointsList, ::Ifc4x3_add2::IfcBSplineSurfaceForm::Value v4_SurfaceForm, boost::logic::tribool v5_UClosed, boost::logic::tribool v6_VClosed, boost::logic::tribool v7_SelfIntersect); + typedef aggregate_of< IfcBSplineSurface > list; +}; +/// Definition from ISO 10303:42:1994: This is a B-spline surface in which the knot values are explicitly given. This subtype shall be used to represent non-uniform B-spline surfaces, and may also be used for other knot types. +/// +/// All knot multiplicities except the first and the last shall be in the range 1,....,d; the first and last may have a maximum value of d + 1. In evaluating the basis functions, a knot u of, e.g., multiplicity 3 is interpreted as a sequence u, u, u, in the knot array. +/// +/// NOTE Corresponding ISO 10303 entity: b_spline_surface_with_knots. Please refer to ISO/IS 10303-42:1994, p. 81 for the final definition of the formal standard. +/// +/// HISTORY New entity in IFC2x4. +class IFC_PARSE_API IfcBSplineSurfaceWithKnots : public IfcBSplineSurface { +public: + /// The multiplicities of the knots in the u parameter direction. + std::vector< int > /*[2:?]*/ UMultiplicities() const; + void setUMultiplicities(std::vector< int > /*[2:?]*/ v); + /// The multiplicities of the knots in the v parameter direction. + std::vector< int > /*[2:?]*/ VMultiplicities() const; + void setVMultiplicities(std::vector< int > /*[2:?]*/ v); + /// The list of the distinct knots in the u parameter direction. + std::vector< double > /*[2:?]*/ UKnots() const; + void setUKnots(std::vector< double > /*[2:?]*/ v); + /// The list of the distinct knots in the v parameter direction. + std::vector< double > /*[2:?]*/ VKnots() const; + void setVKnots(std::vector< double > /*[2:?]*/ v); + /// The description of the knot type. + ::Ifc4x3_add2::IfcKnotType::Value KnotSpec() const; + void setKnotSpec(::Ifc4x3_add2::IfcKnotType::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBSplineSurfaceWithKnots (IfcEntityInstanceData* e); + IfcBSplineSurfaceWithKnots (int v1_UDegree, int v2_VDegree, aggregate_of_aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr v3_ControlPointsList, ::Ifc4x3_add2::IfcBSplineSurfaceForm::Value v4_SurfaceForm, boost::logic::tribool v5_UClosed, boost::logic::tribool v6_VClosed, boost::logic::tribool v7_SelfIntersect, std::vector< int > /*[2:?]*/ v8_UMultiplicities, std::vector< int > /*[2:?]*/ v9_VMultiplicities, std::vector< double > /*[2:?]*/ v10_UKnots, std::vector< double > /*[2:?]*/ v11_VKnots, ::Ifc4x3_add2::IfcKnotType::Value v12_KnotSpec); + typedef aggregate_of< IfcBSplineSurfaceWithKnots > list; +}; +/// The IfcBlock is a Construction Solid Geometry (CSG) 3D +/// primitive. It is defined by a position and a positve distance along +/// the three orthogonal axes. The inherited Position +/// attribute has the IfcAxisPlacement3D type and +/// provides: +/// +/// SELF\IfcCsgPrimitive3D.Position: The location and +/// orientation of the axis system for the primitive. +/// SELF\IfcCsgPrimitive3D.Position.Location: The block +/// has one vertex at location and the edges are aligned with the +/// placement axes in the positive sense. +/// +/// The XLength, YLength, and ZLength +/// attributes define the size of the IfcBlock along the three +/// axes. +/// The following definitions from ISO 10303-42 apply: +/// +/// A block is a solid +/// rectangular parallelepiped, defined with a location and placement +/// coordinate system. The block is specified by the positive lengths +/// x, y, and z along the axes of the placement coordinate system, and +/// has one vertex at the origin of the placement coordinate +/// system. +/// +/// Figure 250 illustrates geometric parameters of a block where the block positioned within its own placement coordinate system. The values for XLength, YLength, and ZLength are applied to the positive direction of the X, Y, and Z axis. +/// +/// Figure 250 — Block geometry +/// +/// NOTE  Corresponding ISO 10303-42 entity: block, the position attribute has been promoted to the immediate supertype IfcCsgPrimitive3D. Please refer to ISO 10303-42:1994, p. 244 for the definition in the international standard. +/// +/// HISTORY  New entity in IFC2x3. +/// +/// Texture use definition +/// On each side face, textures are aligned facing upright. On the +/// top and bottom faces, textures are aligned facing front-to-back. +/// Textures are stretched or repeated to the extent of each face +/// according to RepeatS and RepeatT. +/// +/// Figure 251 illustrates default texture mapping with a clamped texture (RepeatS=False and RepeatT=False). The image on the left shows the texture where the S axis points to the right and the T axis points up. The image on the right shows the texture applied to the geometry where the X axis points back to the right, the Y axis points back to the left, and the Z axis points up. +/// +/// Side +/// Normal +/// Origin X +/// Origin Y +/// Origin Z +/// S Axis +/// T Axis +/// +/// Left +/// -X +/// 0 +/// +YLength +/// 0 +/// -Y +/// +Z +/// +/// Right +/// +X +/// 0 +/// +YLength +/// 0 +/// +Y +/// +Z +/// +/// Front +/// +X +/// 0 +/// 0 +/// 0 +/// +X +/// +Z +/// +/// Back +/// +Y +/// +XLength +/// +YLength +/// 0 +/// -X +/// +Z +/// +/// Bottom +/// -Z +/// +XLength +/// 0 +/// 0 +/// -X +/// +Y +/// +/// Top +/// +Z +/// 0 +/// 0 +/// +ZLength +/// +X +/// +Y +/// +/// Figure 251 — Block textures +class IFC_PARSE_API IfcBlock : public IfcCsgPrimitive3D { +public: + /// The size of the block along the placement X axis. It is provided by the inherited axis placement through SELF\IfcCsgPrimitive3D.Position.P[1]. + double XLength() const; + void setXLength(double v); + /// The size of the block along the placement Y axis. It is provided by the inherited axis placement through SELF\IfcCsgPrimitive3D.Position.P[2]. + double YLength() const; + void setYLength(double v); + /// The size of the block along the placement Z axis. It is provided by the inherited axis placement through SELF\IfcCsgPrimitive3D.Position.P[3]. + double ZLength() const; + void setZLength(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBlock (IfcEntityInstanceData* e); + IfcBlock (::Ifc4x3_add2::IfcAxis2Placement3D* v1_Position, double v2_XLength, double v3_YLength, double v4_ZLength); + typedef aggregate_of< IfcBlock > list; +}; +/// A clipping result is defined as a special subtype of the general Boolean result (IfcBooleanResult). It constrains the operands and the operator of the Boolean result. +/// +/// A clipping result is the Boolean difference between a solid (restricted to swept area solid) and a half space solid, whereas more than one difference operation can be applied to the Boolean result. +/// +/// NOTE The IfcBooleanClippingResult is defined as a special case of the boolean_result, as defined in ISO 10303-42:1994, p. 175. It has been added to apply further constraints to the CSG representation type. +/// +/// HISTORY New entity in IFC Release 2.x. +class IFC_PARSE_API IfcBooleanClippingResult : public IfcBooleanResult { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBooleanClippingResult (IfcEntityInstanceData* e); + IfcBooleanClippingResult (::Ifc4x3_add2::IfcBooleanOperator::Value v1_Operator, ::Ifc4x3_add2::IfcBooleanOperand* v2_FirstOperand, ::Ifc4x3_add2::IfcBooleanOperand* v3_SecondOperand); + typedef aggregate_of< IfcBooleanClippingResult > list; +}; +/// Definition from ISO/CD 10303-42:1992: A bounded curve is a curve of finite arc length with identifiable end points. +/// +/// NOTE Corresponding ISO 10303 name: bounded_curve, only the following subtypes have been incorporated into IFC: polyline as IfcPolyline, trimmed_curve as IfcTrimmedCurve, composite_curve as IfcCompositeCurve. Please refer to ISO/IS 10303-42:1994, p.44 for the final definition of the formal standard. +/// +/// HISTORY New class in IFC Release 1.0 +/// +/// Informal propositions: +/// +/// A bounded curve has finite arc length. +/// A bounded curve has a start point and an end point. +class IFC_PARSE_API IfcBoundedCurve : public IfcCurve, public IfcCurveOrEdgeCurve { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBoundedCurve (IfcEntityInstanceData* e); + IfcBoundedCurve (); + typedef aggregate_of< IfcBoundedCurve > list; +}; +/// The building storey has an +/// elevation and typically represents a (nearly) horizontal +/// aggregation of spaces that are vertically bound. +/// A storey is (if specified) associated to a building. A storey +/// may span over several connected storeys. Therefore storey complex +/// provides for a collection of storeys included in a building. A +/// storey can also be decomposed in (horizontical) parts, where each +/// part defines a partial storey. This is defihned by the composition +/// type attribute of the supertype +/// IfcSpatialStructureElements which is interpreted as +/// follow: +/// +/// COMPLEX = building storey complex +/// ELEMENT = building storey +/// PARTIAL = partial building storey +/// +/// EXAMPLE In split level houses, a storey is split into two or more partial storeys, each with a different elevation. It can be handled by defining a storey, which includes two or more partial storeys with the individual elevations. +/// HISTORY New entity in IFC Release 1.0 +/// +/// Property Set Use Definition +/// The property sets relating to the IfcBuildingStorey are +/// defined by the IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// property set definitions specific to the IfcBuildingStorey +/// are part of this IFC release: +/// +/// Pset_BuildingStoreyCommon: common property +/// set for all types of building stories +/// +/// Quantity Use Definition +/// The quantities relating to the IfcBuildingStorey are +/// defined by the IfcElementQuantity and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// base quantities are defined and should be exchanged with the +/// IfcElementQuantity.Name = 'BaseQuantities'. Other +/// quantities, being subjected to local standard of measurement, can +/// be defined with another string value assigned to Name. In +/// this case a valid value for MethodOfMeasurement has to be +/// provided. +/// +/// Qto_BuildingStoreyBaseQuantities: base +/// quantities for all building storey occurrences. +/// +/// Spatial Structure Use Definition +/// The IfcBuildingStorey is used to build the spatial +/// structure of a building (that serves as the primary project +/// breakdown and is required to be hierarchical). The spatial +/// structure elements are linked together by using the objectified +/// relationship IfcRelAggregates. The +/// IfcBuildingStoreyreferences them by its inverse +/// relationships: +/// +/// IfcBuildingStorey.Decomposes -- referencing +/// (IfcBuilding || IfcBuildingStorey) by +/// IfcRelAggregates.RelatingObject, If it refers to another +/// instance ofIfcBuildingStorey, the referenced +/// IfcBuildingStorey needs to have a different and higher +/// CompositionType, i.e. COMPLEX (if the other +/// IfcBuildingStorey has ELEMENT), or ELEMENT (if the other +/// IfcBuildingStorey has PARTIAL). +/// IfcBuildingStorey.IsDecomposedBy -- referencing +/// (IfcBuildingStorey || IfcSpace) by +/// IfcRelAggregates.RelatedObjects. If it refers to another +/// instance ofIfcBuildingStorey, the referenced +/// IfcBuildingStorey needs to have a different and lower +/// CompositionType, i.e. ELEMENT (if the other +/// IfcBuildingStorey has COMPLEX), or PARTIAL (if the other +/// IfcBuildingStorey has ELEMENT). +/// +/// If there are building elements and/or other elements directly +/// related to the IfcBuildingStorey (like most building +/// elements, such as walls, columns, etc.), they are associated with +/// the IfcBuildingStorey by using the objectified +/// relationship IfcRelContainedInSpatialStructure. The +/// IfcBuildingStorey references them by its inverse +/// relationship: +/// +/// IfcBuildingStorey.ContainsElements -- referencing any +/// subtype of IfcProduct (with the exception of other spatial +/// structure element) by +/// IfcRelContainedInSpatialStructure.RelatedElements. +/// +/// Figure 25 shows the IfcBuildingStorey as part of the +/// spatial structure. It also serves as the spatial container for +/// building and other elements. +/// NOTE Detailed requirements on mandatory element +/// containment and placement structure relationships are given in +/// view definitions and implementer agreements. +/// +/// Figure 25 — Building storey composition +/// +/// Elements can also be referenced in an +/// IfcBuildingStorey, for example, if they span through several +/// storeys. This is expressed by using the objectified relationship +/// IfcRelReferencedInSpatialStructure. Systems, such as +/// building service or electrical distribution systems, zonal +/// systems, or structural analysis systems, relate to +/// IfcBuildingStorey by using the objectified relationship +/// IfcRelServicesBuildings. +/// +/// Attribute Use Definition +/// +/// Figure 26 describes the heights and elevations of the IfcBuildingStorey. +/// +/// elevation of storey provided by: IfcBuildingStorey.Elevation as a local height value +/// relative to IfcBuilding.ElevationOfRefHeight, it is usually the top of construction slab +/// net height of storey, also referred to as total height or system height (top of construction slab to top of construction slab above): provided by BaseQuantity with Name="GrossHeight" +/// net height of storey (top of construction slab to bottom of construction slab above): provided by BaseQuantity with Name="NetHeight" +/// +/// Figure 26 — Building storey elevations +/// +/// Geometry Use Definitions +/// The geometric representation of IfcBuildingStorey is +/// given by the IfcProductDefinitionShape and +/// IfcLocalPlacement, allowing multiple geometric +/// representation. +/// Local Placement +/// The local placement for IfcBuildingStorey is defined in +/// its supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate +/// system that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if relative placement is +/// used) to the IfcSpatialStructureElement of type +/// IfcBuilding, or of type IfcBuildingStorey (e.g. to +/// position a building storey relative to a building storey complex, +/// or a partial building storey to a building storey). +/// If the relative placement is not used, the absolute placement +/// is defined within the world coordinate system. +/// +/// Geometric Representations +/// Currently, the use of a 2D 'FootPrint' representation of type +/// 'GeometricCurveSet' and a 3D 'Body' representation of type 'Brep' +/// is supported. +/// +/// NOTE The independent geometric representation of +/// IfcBuildingStorey may not be required or allowed in +/// certain view definitions. In those cases only the contained +/// elements and spaces have an independent geometric +/// representation. +/// +/// Foot Print Representation +/// The foot print representation of IfcBuildingStorey is +/// given by either a single 2D curve (such as IfcPolyline or +/// IfcCompositeCurve), or by a list of 2D curves (in case of +/// inner boundaries), if the building storey has an independent +/// geometric representation. +/// The representation identifier and type of this geometric +/// representation of IfcBuildingStorey is: +/// +/// IfcShapeRepresentation.RepresentationIdentifier = +/// 'FootPrint' +/// IfcShapeRepresentation.RepresentationType = +/// 'GeometricCurveSet' +/// +/// Body Representation +/// The body (or solid model) geometric representation (if the +/// building storey has an independent geometric representation) of +/// IfcBuildingStorey is defined using faceted B-Rep +/// capabilities (with or without voids), based on the +/// IfcFacetedBrep or on the +/// IfcFacetedBrepWithVoids. +/// The representation identifier and type of this representation +/// of IfcBuildingStorey is: +/// +/// IfcShapeRepresentation.RepresentationIdentifier = +/// 'Body' +/// IfcShapeRepresentation.RepresentationType = +/// 'Brep' +/// +/// Since the building storey shape is usually described by the +/// exterior building elements, an independent shape representation +/// shall only be given, if the building storey is exposed +/// independently from its constituting elements. +class IFC_PARSE_API IfcBuildingStorey : public IfcSpatialStructureElement { +public: + /// Elevation of the base of this storey, relative to the 0,00 internal reference height of the building. The 0.00 level is given by the absolute above sea level height by the ElevationOfRefHeight attribute given at IfcBuilding. + boost::optional< double > Elevation() const; + void setElevation(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBuildingStorey (IfcEntityInstanceData* e); + IfcBuildingStorey (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, boost::optional< double > v10_Elevation); + typedef aggregate_of< IfcBuildingStorey > list; +}; + +class IFC_PARSE_API IfcBuiltElementType : public IfcElementType { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBuiltElementType (IfcEntityInstanceData* e); + IfcBuiltElementType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType); + typedef aggregate_of< IfcBuiltElementType > list; +}; +/// Definition from IAI: The IfcChimneyType +/// defines a list of commonly shared property set definitions +/// of a chimney element and an optional set of product +/// representations. It is used to define a chimney +/// specification (i.e. the specific product information, that +/// is common to all occurrences of that product type). +/// +/// NOTE: The product representations are defined as +/// representation maps (at the level of the supertype +/// IfcTypeProduct, which gets assigned by an element +/// occurrence instance through the +/// IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// +/// A chimney type is used to define the common properties of a +/// certain type of chimney that may be applied to many +/// instances of that type to assign a specific style. Chimney +/// types may be exchanged without being already assigned to +/// occurrences. +/// +/// The occurrences of the IfcChimneyType are +/// represented by instances of IfcChimney. +/// +/// HISTORY New entity in Release +/// IFC2x4. +class IFC_PARSE_API IfcChimneyType : public IfcBuiltElementType { +public: + /// Identifies the predefined types of a chimney element from which the type required may be set. + ::Ifc4x3_add2::IfcChimneyTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcChimneyTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcChimneyType (IfcEntityInstanceData* e); + IfcChimneyType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcChimneyTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcChimneyType > list; +}; +/// IfcCircleHollowProfileDef +/// defines a section profile that provides the defining parameters of a +/// circular hollow section (tube) to be used by the swept area solid. Its +/// parameters and orientation relative to the +/// position coordinate system are according to the following +/// illustration.The centre of the position coordinate system is in the +/// profile's centre of the bounding box (for symmetric profiles identical +/// with the centre of gravity). +/// +/// HISTORY  New entity in IFC2x2. +/// +/// Figure 312 illustrates parameters of the circular hollow profile definition. The parameterized profile defines its own position coordinate system. The underlying coordinate system is defined by the swept area solid that uses the profile definition. It is the xy plane of: +/// +/// IfcSweptAreaSolid.Position +/// +/// By using offsets of the position location, the parameterized profile can be positioned centric (using x,y offsets = 0.), or at any position relative to the profile. Explicit coordinate offsets are used to define cardinal points (for example, upper-left bound). The parameterized profile is defined by a set of parameter attributes. +/// +/// Figure 312 — Circle hollow profile +class IFC_PARSE_API IfcCircleHollowProfileDef : public IfcCircleProfileDef { +public: + /// Thickness of the material, it is the difference between the outer and inner radius. + double WallThickness() const; + void setWallThickness(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCircleHollowProfileDef (IfcEntityInstanceData* e); + IfcCircleHollowProfileDef (::Ifc4x3_add2::IfcProfileTypeEnum::Value v1_ProfileType, boost::optional< std::string > v2_ProfileName, ::Ifc4x3_add2::IfcAxis2Placement2D* v3_Position, double v4_Radius, double v5_WallThickness); + typedef aggregate_of< IfcCircleHollowProfileDef > list; +}; + +class IFC_PARSE_API IfcCivilElementType : public IfcElementType { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCivilElementType (IfcEntityInstanceData* e); + IfcCivilElementType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType); + typedef aggregate_of< IfcCivilElementType > list; +}; + +class IFC_PARSE_API IfcClothoid : public IfcSpiral { +public: + double ClothoidConstant() const; + void setClothoidConstant(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcClothoid (IfcEntityInstanceData* e); + IfcClothoid (::Ifc4x3_add2::IfcAxis2Placement* v1_Position, double v2_ClothoidConstant); + typedef aggregate_of< IfcClothoid > list; +}; +/// Definition from IAI: The element type +/// IfcColumnType defines commonly shared information for +/// occurrences of columns. The set of shared information may +/// include: +/// +/// common properties within shared property sets +/// common material information +/// common profile definitions +/// common shape representations +/// +/// It is used to define a column specification, or column style +/// (i.e. the specific product information that is common to all +/// occurrences of that column type). Column types may be exchanged +/// without being already assigned to occurrences. +/// Occurrences of the IfcColumnType within building models +/// are represented by instances of IfcColumnStandardCase if +/// the IfcColumnType has a single associated +/// IfcMaterialProfileSet; otherwise they are represented by +/// instances of IfcColumn. Occurrences of the +/// IfcColumnType within structural analysis models are +/// represented by instances of IfcStructuralCurveMember, or +/// its applicable subtypes. +/// HISTORY New entity in +/// Release IFC2x Edition 2. +/// Material Use Definition +/// The material of the IfcColumnType is defined by the +/// IfcMaterialProfileSet or as fall back by +/// IfcMaterial and attached by the +/// IfcRelAssociatesMaterial.RelatingMaterial. It is +/// accessible by the inverse HasAssociations +/// relationship. +/// Note: It is illegal to assign an +/// IfcMaterial to an IfcColumnType, if there is at +/// least one occurrences of IfcColumnStandardCase for this +/// type. +/// Property Set Use Definition: +/// The shared property sets relating to the IfcColumnType +/// are defined by the IfcPropertySet and are attached by the +/// HasPropertySets attribute. The following property set +/// definitions specific to the IfcColumnType are part of this +/// IFC release: +/// NOTE There is no differentiation between +/// properties within the property set that are only assignable to +/// IfcColumnType and those that are only assignable to +/// IfcColumn. If the same property is assigned to the +/// IfcColumnType and the IfcColumn being an occurrence +/// of the IfcColumnType, then the occurrence property +/// overrides the type property. +/// +/// Pset_ColumnCommon: common property set for all +/// column types. +/// +/// Profile Use Definition: +/// The shared profile definition is defined by assigning an +/// IfcMaterialProfileSet (see material use definition above). +/// The IfcMaterialProfile refers to the subtype of +/// IfcProfileDef that is the common profile for all column +/// occurrence, if used. It is only applicable if the +/// IfcColumnType has only occurrences of type +/// IfcColumnStandardCase (see definition of +/// IfcColumnStandardCase for further information). +/// NOTE The attribute ProfileName of the +/// IfcProfileDef subtype, referenced in +/// IfcMaterialProfile should contain a standardized profile +/// name according to local standards. However, an additional +/// geometric representation of the profile is necessary (e.g. as +/// IfcExtrudedAreaSolid). An importing application is allowed +/// to check for the existence of the profile name: in case of +/// identifying it as a standardized name, the corresponding profile +/// geometry and possibly other cross sectional properties can be +/// read from a library. Otherwise the geometric representation and +/// possible non geometric IfcProfileProperties have to be +/// used. +/// Geometry Use Definition: +/// The IfcColumnType may define the shared geometric +/// representation for all column occurrences. The +/// RepresentationMaps attribute refers to a list of +/// IfcRepresentationMap's, that allow for multiple geometric +/// representations (e.g. with IfcShaperepresentation's having +/// an RepresentationIdentifier 'Box', 'Axis', or 'Body'). It +/// is only applicable if the IfcColumnType has only +/// occurrences of type IfcColumn (See geometric use +/// definition of IfcColumn for further information). +/// NOTE If the IfcColumnType has an +/// associated IfcMaterialProfileSet, then no shared geometric +/// representation shall be provided. +/// NOTE The product shape representations are +/// defined as RepresentationMaps (attribute of the supertype +/// IfcTypeProduct), which get assigned by an element +/// occurrence instance through the +/// IfcShapeRepresentation.Item[n] being an +/// IfcMappedItem. See IfcTypeProduct for further +/// information. +/// NOTE The values of attributes +/// RepresentationIdentifier and RepresentationType of +/// IfcShapeRepresentation are restricted in the same way as +/// those for IfcColumn and +/// IfcColumnStandardCase +class IFC_PARSE_API IfcColumnType : public IfcBuiltElementType { +public: + /// Identifies the predefined types of a column element from which the type required may be set. + ::Ifc4x3_add2::IfcColumnTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcColumnTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcColumnType (IfcEntityInstanceData* e); + IfcColumnType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcColumnTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcColumnType > list; +}; +/// The IfcComplexPropertyTemplate defines the template for +/// all complex properties, either the IfcComplexProperty's, +/// or the IfcPhysicalComplexQuantity's. The individual +/// complex property templates are interpreted according to their +/// Name attribute and and optional UsageName +/// attribute. +/// +/// HISTORY  New entity in IFC2x4. +class IFC_PARSE_API IfcComplexPropertyTemplate : public IfcPropertyTemplate { +public: + boost::optional< std::string > UsageName() const; + void setUsageName(boost::optional< std::string > v); + boost::optional< ::Ifc4x3_add2::IfcComplexPropertyTemplateTypeEnum::Value > TemplateType() const; + void setTemplateType(boost::optional< ::Ifc4x3_add2::IfcComplexPropertyTemplateTypeEnum::Value > v); + /// Reference to a set of property templates. It should only be provided, if the PropertyType is set to COMPLEX. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertyTemplate >::ptr > HasPropertyTemplates() const; + void setHasPropertyTemplates(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertyTemplate >::ptr > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcComplexPropertyTemplate (IfcEntityInstanceData* e); + IfcComplexPropertyTemplate (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_UsageName, boost::optional< ::Ifc4x3_add2::IfcComplexPropertyTemplateTypeEnum::Value > v6_TemplateType, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertyTemplate >::ptr > v7_HasPropertyTemplates); + typedef aggregate_of< IfcComplexPropertyTemplate > list; +}; +/// Definition from ISO/CD 10303-42:1992: A composite +/// curve is a collection of curves joined end-to-end. The +/// individual segments of the curve are themselves defined as +/// composite curve segments. The parameterization of the +/// composite curve is an accumulation of the parametric ranges +/// of the referenced bounded curves. The first segment is +/// parameterized from 0 to +/// l1 and for i +/// ≤ 2, the +/// ith segment is +/// parameterized from: +/// +/// where lk is the parametric +/// length (i.e., difference between maximum and minimum +/// parameter values) of the curve underlying the +/// kth segment. +/// +/// Let T denote the parameter for the composite curve. +/// Then, if the ith segment is not a reparameterised +/// composite curve segment, T is related to the +/// parameter ti; ti0 +/// ≤ ti ≤ +/// ti1; for the ith segment by the +/// equation: +/// +/// if Segments[i].SameSense = +/// TRUE; +/// +/// or by the equation: +/// +/// if Segments[i].SameSense = +/// FALSE; +/// +/// If the segments[i] is of type reparameterised composite +/// curve segment, +/// +/// where Ï„ is defined at +/// reparameterized composite curve segment (see +/// IfcReparameterizedCompositeCurveSegment). +/// +/// Figure 279 illustrates an example of a composite curve. +/// +/// Figure 279 — Composite curve +/// +/// Consider an IfcCompositeCurve having line segment and an arc segment. The line should be parameterized: +/// +/// IfcPolyline with start= 0.,0. end= 0.,1., SameSense= TRUE, parametric length = 1. +/// +/// The arch should be parameterized: +/// +/// IfcTrimmedCurve with start= 180', end= 90', SameSense= FALSE, parametric length = 90. +/// +/// Then the parameterization of the composite curve is: +/// +/// IfcCompositeCurve with 0. ≤ T ≤ 1. (line segment) and 1. ≤ T ≤ 91. (arc segment), parametric length = 91. +/// +/// NOTE Corresponding ISO 10303 entity: composite_curve, please refer to ISO/IS 10303-42:1994, p. 56 for the final definition of the formal standard. The WR2 is added to ensure consistent Dim at all segments. +/// +/// HISTORY New class in IFC Release 1.0 +/// +/// Informal Propositions: +/// +/// The SameSense attribute of each segment +/// correctly specifies the senses of the component curves. +/// When traversed in the direction indicated by +/// SameSense, the segments shall join end-to-end. +class IFC_PARSE_API IfcCompositeCurve : public IfcBoundedCurve { +public: + /// The component bounded curves, their transitions and senses. The transition attribute for the last segment defines the transition between the end of the last segment and the start of the first; this transition attribute may take the value discontinuous, which indicates an open curve. + aggregate_of< ::Ifc4x3_add2::IfcSegment >::ptr Segments() const; + void setSegments(aggregate_of< ::Ifc4x3_add2::IfcSegment >::ptr v); + /// Indication of whether the curve intersects itself or not; this is for information only. + boost::logic::tribool SelfIntersect() const; + void setSelfIntersect(boost::logic::tribool v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCompositeCurve (IfcEntityInstanceData* e); + IfcCompositeCurve (aggregate_of< ::Ifc4x3_add2::IfcSegment >::ptr v1_Segments, boost::logic::tribool v2_SelfIntersect); + typedef aggregate_of< IfcCompositeCurve > list; +}; +/// Definition from ISO/CD 10303-42:1992 A composite curve on surface is a collection of segments which are curves on a surface. Each segment shall lie on the basis surface. +/// +/// There shall be at least positional continuity between adjacent segments. The parameterization of the composite curve is obtained from the accumulation of the parametric ranges of the segments. The first segment is parameterized from 0 to l1, and, for i ≥ 2, the ith segment is parameterized from +/// +/// where lk is the parametric length (that is, the difference between maximum and minimum parameter values) of the kth curve segment. +/// +/// The IfcCompositeCurveOnSurface is a collection of segments, based on p-curves. i.e. a curve which lies on the basis of a surface and is defined in the parameter space of that surface. The p-curve segment is a special type of a composite curve segment and shall only be used to bound a surface. +/// +/// NOTE Corresponding ISO 10303 entity: composite_curve_on_surface. Please refer to ISO/IS 10303-42:1994, p.64 for the final definition of the formal standard. +/// +/// HISTORY New entity in IFC2x4. +class IFC_PARSE_API IfcCompositeCurveOnSurface : public IfcCompositeCurve, public IfcCurveOnSurface { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCompositeCurveOnSurface (IfcEntityInstanceData* e); + IfcCompositeCurveOnSurface (aggregate_of< ::Ifc4x3_add2::IfcSegment >::ptr v1_Segments, boost::logic::tribool v2_SelfIntersect); + typedef aggregate_of< IfcCompositeCurveOnSurface > list; +}; +/// Definition from ISO/CD 10303-42:1992: A conic (IfcConic) is a planar curve which could be produced by intersecting a plane with a cone. A conic is defined in terms of its intrinsic geometric properties rather than being described in terms of other geometry. A conic class always has a placement coordinate system defined by a two or three dimensional placement. The parametric representation is defined in terms of this placement coordinate system. +/// +/// NOTE Corresponding ISO 10303 entity: conic, only the following subtypes have been incorporated into IFC 1.0, 1.5 & 2.0: circle as IfcCircle, ellipse as IfcEllipse. The derived attribute Dim has been added at this level and was therefore demoted from the geometric_representation_item. Please refer to ISO/IS 10303-42:1994, p. 38 for the final definition of the formal standard. +/// +/// HISTORY New class in IFC Release 1.0 +class IFC_PARSE_API IfcConic : public IfcCurve { +public: + /// The location and orientation of the conic. Further details of the interpretation of this attribute are given for the individual subtypes." + ::Ifc4x3_add2::IfcAxis2Placement* Position() const; + void setPosition(::Ifc4x3_add2::IfcAxis2Placement* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcConic (IfcEntityInstanceData* e); + IfcConic (::Ifc4x3_add2::IfcAxis2Placement* v1_Position); + typedef aggregate_of< IfcConic > list; +}; +/// The resource type IfcConstructionEquipmentType defines commonly shared information for occurrences of construction equipment resources. The set of shared information may include: +/// +/// common productivities +/// common cost rates +/// common properties within shared property sets +/// +/// It is used to define a construction equipment resource specification (the specific resource information that is common to all occurrences of that resource). Resource types may be exchanged without being already assigned to occurrences. +/// Occurrences of the IfcConstructionEquipmentResourceType are represented by instances of IfcConstructionEquipmentResource. +/// +/// HISTORY New entity in IFC2x4. +/// +/// Assignment use definition +/// In addition to assignments specified at the base class IfcConstructionResourceType, a construction equipment resource type may have assignments of its own using IfcRelAssignsToResource where RelatingResource refers to the IfcConstructionEquipmentResourceType and RelatedObjects contains one or more IfcTypeProduct subtypes. Such relationship indicates the type of equipment to be used as input, which is instantiated as an occurrence assigned for each resource occurrence. There may be multiple chains of production where such product type may have its own task and resource types assigned indicating how to assemble such equipment. +class IFC_PARSE_API IfcConstructionEquipmentResourceType : public IfcConstructionResourceType { +public: + /// Defines types of construction equipment resources. + ::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcConstructionEquipmentResourceType (IfcEntityInstanceData* e); + IfcConstructionEquipmentResourceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ResourceType, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v10_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v11_BaseQuantity, ::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::Value v12_PredefinedType); + typedef aggregate_of< IfcConstructionEquipmentResourceType > list; +}; +/// The resource type IfcConstructionMaterialType defines commonly shared information for occurrences of construction material resources. The set of shared information may include: +/// +/// common productivities +/// common cost rates +/// common properties within shared property sets +/// +/// It is used to define a construction material resource specification (i.e. the specific resource information that is common to all occurrences of that resource). Resource types may be exchanged without being already assigned to occurrences. +/// Occurrences of the IfcConstructionMaterialResourceType are represented by instances of IfcConstructionMaterialResource. +/// +/// HISTORY New entity in IFC2x4. +/// +/// Assignment Use Definition +/// In addition to assignments specified at the base class IfcConstructionResourceType, a construction material resource type may have assignments of its own using IfcRelAssignsToResource where RelatingResource refers to the IfcConstructionMaterialResourceType and RelatedObjects contains one or more IfcTypeProduct subtypes. Such relationship indicates material specifications to be used as input, which is instantiated as an occurrence assigned for each resource occurrence. The IfcGeographicElementType product type may be used to hold the material representation (via IfcRelAssociatesMaterial. There may be multiple chains of production where such product type may have its own task and resource types assigned indicating how to transport or extract such material. +class IFC_PARSE_API IfcConstructionMaterialResourceType : public IfcConstructionResourceType { +public: + /// Defines types of construction material resources. + ::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcConstructionMaterialResourceType (IfcEntityInstanceData* e); + IfcConstructionMaterialResourceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ResourceType, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v10_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v11_BaseQuantity, ::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::Value v12_PredefinedType); + typedef aggregate_of< IfcConstructionMaterialResourceType > list; +}; +/// The resource type IfcConstructionProductType defines commonly shared information for occurrences of construction product resources. The set of shared information may include: +/// +/// common productivities +/// common cost rates +/// common properties within shared property sets +/// +/// It is used to define a construction product resource specification (i.e. the specific resource information that is common to all occurrences of that resource). Resource types may be exchanged without being already assigned to occurrences. +/// Occurrences of the IfcConstructionProductResourceType are represented by instances of IfcConstructionProductResource. +/// +/// HISTORY New entity in IFC2x4. +/// +/// Assignment use definition +/// In addition to assignments specified at the base class IfcConstructionResourceType, a construction product resource type may have assignments of its own using IfcRelAssignsToResource where RelatingResource refers to the IfcConstructionProductResourceType and RelatedObjects contains one or more IfcTypeProduct subtypes. Such relationship indicates the type of product to be used as input, which is instantiated as an occurrence assigned for each resource occurrence. There may be multiple chains of production where such product type may have its own task and resource types assigned. +class IFC_PARSE_API IfcConstructionProductResourceType : public IfcConstructionResourceType { +public: + /// Defines types of construction product resources. + ::Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcConstructionProductResourceType (IfcEntityInstanceData* e); + IfcConstructionProductResourceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< std::string > v7_Identification, boost::optional< std::string > v8_LongDescription, boost::optional< std::string > v9_ResourceType, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v10_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v11_BaseQuantity, ::Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::Value v12_PredefinedType); + typedef aggregate_of< IfcConstructionProductResourceType > list; +}; +/// IfcConstructionResource is an abstract generalization of the different resources used in +/// construction projects, mainly labor, material, equipment and product resources, plus subcontracted resources and aggregations such as a crew resource. +/// +/// A resource represents "use of something" and does not necessarily correspond to a single item such as a person or vehicle, but +/// represents a pool of items having limited availability such as general labor or an equipment fleet. A resource can represent either a generic resource pool (not having any task assignment) or a task-specific resource allocation (having an IfcTask +/// assignment). +/// +/// HISTORY  New entity in IFC2x2. +/// +/// IFC2x4 CHANGE  Modified in to promote ResourceIdentifer and ResourceGroup (renamed to LongDescription) to supertype IfcResource and add attributes as described. +/// +/// Type use definition +/// IfcConstructionResource defines the occurrence of any construction resource; common information about construction resource types is handled by IfcConstructionResourceType. The IfcConstructionResourceType (if present) may establish the common type name, common properties, common cost rates, and common productivities applied to specific task types. The IfcConstructionResourceType is attached using the IfcRelDefinesByType.RelatingType objectified relationship and is accessible by the inverse IsTypedBy attribute as shown in Figure 186. +/// The resource type may provide shared productivity and cost information, allowing tasks and resources to be selected according to lowest cost and/or shortest duration. Given an IfcProduct of a particular IfcTypeProduct type, an IfcTypeProcess may be selected from those assigned to the product type using IfcRelAssignsToProduct, and an IfcTypeResource may be selected from those assigned to the process type using IfcRelAssignsToProcess. Then IfcTask and IfcConstructionResource occurrences may be instantiated from the type definitions, applying productivitity and rate information to assigned quantities to calculate ResourceTime.ScheduleWork. Task durations can then be calculated by dividing ResourceTime.ScheduleWork by ResourceTime.ScheduleUsage. +/// +/// Figure 186 — Construction resource type use +/// +/// Composition use definition +/// Resources may be decomposed into allocation pools using the IfcRelNests relationship as shown in Figure 187. For example, an IfcLaborResource for "Electrician" may be decomposed into three task-specific IfcLaborResource objects: "Electrical Rough-in", "First Floor Circuits", and "Second Floor Circuits". Both relating and related sides may represent the same ResourceTime.ScheduleUsage quantity (for example, 6 workers time-shared), or the related side may break out ResourceTime.ScheduleUsage quantities for reserved use (for example, 4 workers and 2 workers). +/// A common scenario is two nesting levels where the first-level resources have no task assignments; while second-level resources have specific task assignments indicating that the resource is subdivided into allocations for specific tasks. While the model allows unlimited nesting of resources, implementer agreements may restrict to two nesting levels with task assignments specifically at the second level. +/// +/// Figure 187 — Construction resource composition use +/// +/// Declaration use definition +/// A root-level resource (specifically IfcCrewResource or IfcSubContractResource) is declared within the project by IfcRelDeclares where RelatingContext refers to the single IfcProject and RelatedObjects refers to one or more IfcConstructionResource, and other root-level objects within the project. +/// +/// Assignment use definition +/// A resource may be assigned to an actor by IfcRelAssignsToActor where RelatingActor refers to an IfcActor and RelatedObjects refers to one or more IfcConstructionResource or other objects. Such relationship indicates the actor responsible for allocating the resource such as partitioning into task-specific allocations, delegating to other actors, and/or scheduling over time. Note that this assignment does not indicate the person or organization performing the work; that is indicated by IfcRelAssignsToResource. The actor responsible for the resource may or may not be the same as any actor(s) performing work. +/// A resource may be assigned to a control by IfcRelAssignsToControl where RelatingProduct refers to an IfcControl and RelatedObjects refers to one or more IfcConstructionResource or other objects. Most commonly an IfcWorkCalendar is assigned indicating availability of the resource, where such calendar is nested within a base calendar or an IfcWorkPlan which in turn is assigned to the IfcProject. +/// A resource may be assigned to a group by IfcRelAssignsToGroup where RelatingGroup refers to an IfcGroup and RelatedObjects refers to one or more IfcConstructionResource or other objects. Most commonly an IfcAsset is assigned indicating the asset to be tracked, where such asset is nested within an IfcInventory which in turn is assigned to the IfcProject. +/// A resource may be assigned to a product by IfcRelAssignsToProduct where RelatingProduct refers to an IfcProduct and RelatedObjects refers to one or more IfcConstructionResource or other objects. Most commonly an IfcElement subtype is assigned indicating the product to be constructed, where such product is connected to a spatial +/// structure which in turn is aggregated within the IfcProject. +/// A resource may be assigned to a process by IfcRelAssignsToProcess where RelatingProcess refers to an IfcProcess and RelatedObjects refers to one or more IfcConstructionResource or other objects. Most commonly an IfcTask is assigned indicating the task to be performed by the resource, where such task is nested within a summary task which in turn is assigned to the IfcProject. +/// A resource may have assignments of other objects using IfcRelAssignsToResource where RelatingResource refers to the IfcConstructionResource and RelatedObjects refers to one or more objects such as IfcActor or IfcProduct subtypes. This relationship indicates specific objects assigned to fulfill resource usage. +/// Figure 188 illustrates resource assignment. +/// +/// Figure 188 — Construction resource assignment use +/// +/// Constraint use definition +/// Constraints may be applied to a resource to indicate fixed work (such as total person-hours) or fixed usage (such as simultaneous workers). The relationship IfcRelAssociatesConstraint is used where RelatingConstraint points to an IfcMetric and RelatedObjects includes the IfcConstructionResource as shown in Figure 189. IfcRelAssociatesConstraint.Name identifies the attribute to be constrained using a period (".") to dereference; for example, "ResourceTime.ScheduleWork" refers to the ScheduleWork attribute on the IfcResourceTime entity referenced on the ResourceTime attribute. The following attributes may be constrained: +/// +/// 'ResourceTime.ScheduleUsage': Indicate fixed usage (e.g. +/// simultaneous workers) with ConstraintGrade=HARD and +/// Benchmark=EQUALTO such that changes to +/// ResourceTime.ScheduleWork should impact the assigned +/// IfcTask.TaskTime.ScheduleDuration and vice-versa +/// 'ResourceTime.ScheduleWork': Indicate fixed work (e.g. +/// total person-hours) with ConstraintGrade=HARD and +/// Benchmark=EQUALTO such that changes to +/// ResourceTime.ScheduleUsage should impact the assigned +/// IfcTask.TaskTime.ScheduleDuration and vice-versa. +/// +/// Figure 189 — Construction resource constraint use +/// +/// Time series use definition +/// Time series may be applied to a resource to indicate the break-out of attribute values over time. The relationship IfcRelAssociatesTimeSeries is used where RelatingTimeSeries points to an IfcTimeSeries (either IfcRegularTimeSeries or IfcIrregularTimeSeries) and RelatedObjects includes the IfcConstructionResource as shown in Figure 190. IfcRelAssociatesTimeSeries.Name identifies the attribute to be constrained using a period (".") to dereference; for example, "ResourceTime.ScheduleWork" refers to the ScheduleWork attribute on the IfcResourceTime entity referenced on the ResourceTime attribute. Refer to attribute descriptions on IfcResourceTime for attribute-specific usage. +/// Each IfcTimeSeriesValue indicates a LIST of values, where the sequence of the value corresponds to the IfcCostValue at IfcConstructionResource.CostRatesConsumed. For example, if CostRatesConsumed has two IfcCostValue items in the LIST, "Standard" and "Overtime", then IfcTimeSeriesValue(IfcDuration('T8H0M0S'),IfcDuration('T2H0M0S')) would indicate 8 hours at Standard rate and 2 hours at Overtime rate. If the list of values at IfcTimeSeriesValue.ListValues is less than the size of CostRatesConsumed, then subsequent values are considered to be zero. +/// +/// Figure 190 — Construction resource time series use +/// +/// Document use definition +/// Documents may be published for work plans consisting of schedules, calendars, tasks, and resources. The relationship IfcRelAssociatesDocument may be used to preserve mappings to such document where RelatingDocument points to an IfcDocumentReference and RelatedObjects includes the IfcConstructionResource as shown in Figure 191. +/// IfcDocumentReference.ItemReference identifies the resource within the scope of the document, such as an integer or guid. The IfcDocumentReference.ReferencedDocument corresponds to the document which is uniquely identified by IfcDocumentInformation.DocumentId and/or IfcDocumentInformation.PublicationLocation. Such document mapping allows items in the document to be updated from the building information model and vice-versa. +/// +/// Figure 191 — Construction resource document use +/// +/// Baseline use definition +/// A resource may have any number of baselines defined using the relationship IfcRelDefinesByObject where RelatingObject is the "current" resource and RelatedObjects consists of multiple "baseline" resources, each representing a copy of the resource as it existed at an earlier point in time as shown in Figure 192. Each baseline IfcConstructionResource is identified by its nested IfcRelAssignsToControl relationship to an IfcWorkSchedule having +/// PredefinedType=BASELINE, IfcWorkSchedule.CreationDate indicating the date of the baseline, and +/// IfcWorkSchedule.Name indicating the name of the baseline. +/// +/// Figure 192 — Construction resource baseline use +class IFC_PARSE_API IfcConstructionResource : public IfcResource { +public: + ::Ifc4x3_add2::IfcResourceTime* Usage() const; + void setUsage(::Ifc4x3_add2::IfcResourceTime* v); + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > BaseCosts() const; + void setBaseCosts(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v); + ::Ifc4x3_add2::IfcPhysicalQuantity* BaseQuantity() const; + void setBaseQuantity(::Ifc4x3_add2::IfcPhysicalQuantity* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcConstructionResource (IfcEntityInstanceData* e); + IfcConstructionResource (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, ::Ifc4x3_add2::IfcResourceTime* v8_Usage, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v9_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v10_BaseQuantity); + typedef aggregate_of< IfcConstructionResource > list; +}; +/// IfcControl is the abstract generalization of all concepts that control or constrain the utilization of products, processes, or resources in general. It can be seen as a regulation, cost schedule, request or order, or other requirements applied to a product, process or resource whose requirements and provisions must be fulfilled. +/// +/// EXAMPLE Controls include action requests, cost schedules, project orders, work plans, and work calendars. +/// +/// HISTORY New entity in IFC Release 1.0. +/// +/// IFC2x4 CHANGE Attribute Identification added. +/// +/// Relationship use definition +/// Controls have assignments from products, processes, or other objects by using the relationship object IfcRelAssignsToControl. +class IFC_PARSE_API IfcControl : public IfcObject { +public: + /// An identifying designation given to a control + /// It is the identifier at the occurrence level. + /// + /// IFC2x4 CHANGE Attribute unified by promoting from various subtypes of IfcControl. + boost::optional< std::string > Identification() const; + void setIdentification(boost::optional< std::string > v); + aggregate_of< IfcRelAssignsToControl >::ptr Controls() const; // INVERSE IfcRelAssignsToControl::RelatingControl + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcControl (IfcEntityInstanceData* e); + IfcControl (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification); + typedef aggregate_of< IfcControl > list; +}; + +class IFC_PARSE_API IfcCosineSpiral : public IfcSpiral { +public: + double CosineTerm() const; + void setCosineTerm(double v); + boost::optional< double > ConstantTerm() const; + void setConstantTerm(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCosineSpiral (IfcEntityInstanceData* e); + IfcCosineSpiral (::Ifc4x3_add2::IfcAxis2Placement* v1_Position, double v2_CosineTerm, boost::optional< double > v3_ConstantTerm); + typedef aggregate_of< IfcCosineSpiral > list; +}; +/// An IfcCostItem describes a cost or financial value together with descriptive information that describes its context in a form that enables it to be used within a cost schedule. An IfcCostItem can be used to represent the cost of goods and services, the execution of works by a process, lifecycle cost and more. +/// +/// Each instance of IfcCostItem may have a name and a description. Depending on the use for which the cost is intended, these values should be asserted on the basis of agreement. For instance, the Name attribute could be used to provide a common value that enables distinct instances to be brought together in a nesting arrangement (see below) while the Description attribute may be used to provide text used for item description in a costing schedule. +/// +/// An IfcCostItem can link one or many IfcCostValue's representing a unit cost, total cost, or a unit cost with one or many quantities used to generate the total cost. The quantities can be given as individual quantities, or those quantities are provided as element quantities by one or many building elements. The IfcCostValue.CostType attribute indicates the category of cost, which may be used to present the value in a particular column. For nested cost items (having IfcRelNests relationship), IfcCostValue.CostType is significant such that IfcCostValue.AppliedValue is calculated as the sum of all nested costs having the same IfcCostValue.CostType or if set to an asterisk ('*'), then the sum of all nested costs of all cost types. An IfcCostValue may represent an original value or a value derived from formulas using IfcAppliedValueRelationship. For example, taxes may be calculated as a percentage of a subtotal. +/// +/// HISTORY New Entity in IFC Release 2.0. +/// IFC2x4 CHANGE Attribute PredefinedType, CostValues, and CostQuantities added. +/// +/// Classification Use Definition +/// +/// Instances of IfcCostItem are used for cost estimates, budgets, and other forms, where a variety of identification codes are used extensively to identify the meaning of the cost. Examples include project phase codes, CSI codes, takeoff sequence numbers, and cost accounts. The model allows for all classes that are ultimately subtypes of IfcObject to inherit the ability to have one or more instances of IfcClassificationReference to be assigned. Where identification codes are required, the generic IfcRelAssociatesClassification facility should be used. +/// +/// Composition Use Definition +/// +/// An IfcCostItem can nest other instances of IfcCostItem through its relationships to IfcRelNests. This can be used to enable the development of complex groups of costs as may be found in cost schedules through to pages, sections and complete cost schedules. +/// +/// There is always a summary cost item as the root item of the tree representing the cost item nesting. Subsequent instances of IfcCostItem are assigned to the summary cost item using IfcRelNests. The summary cost item itself is assigned to IfcCostSchedule through the IfcRelAssignsToControl relationship. +/// +/// Figure 157 illustrates a cost item composition used for a cost schedule. Each line item has a quantity and separate unit costs where IfcCostValue.CostType indicates the category of cost. The summary item has a hierarchy of costs calculated according to IfcAppliedValueRelationship.ArithmeticOperator, where IfcCostValue.CostType identifies the category to be totalled. The Tax component has IfcCostValue.CostType set to 'Material' which indicates it is the sum of all nested values of the 'Material' category ($3 x 3000 + $118 x 100 = $20800). The Subtotal component has IfcCostValue.CostType set to an asterisk ('*') which indicates it is the sum of all nested values of all categories. +/// +/// Figure 157 — Cost composition +/// +/// Assignment Use Definition +/// +/// An IfcCostItem can be calculated based on quantities from objects through its relationship to IfcRelAssignsToControl. +/// +/// For quantity-based costing, IfcElement, IfcTask, or IfcResource occurrence subtypes may be used. Multiple elements may be assigned of the same or different types, using IfcPhysicalQuantity entities defined at each object. Each IfcPhysicalQuantity type must be identical (for example, all values are IfcAreaQuantity) such that they can be added together. +/// +/// For rate-based costing (specifically for IfcCostScheduleTypeEnum.SCHEDULEOFRATES), a single IfcTypeProduct, IfcTypeProcess, or IfcTypeResource subtype may be used to reflect rates for occurrences of such types. This enables the possibility to generate a quantity-based cost schedule for occurrences based on types with rate-based cost schedules. +/// +/// IfcRelAssignsToControl is also used in the opposite direction to link the root IfcCostItem to an IfcCostSchedule where RelatingControl is the IfcCostSchedule. +/// +/// Figure 158 illustrates cost item assignment derived from building elements. The IfcRelAssignsToControl relationship indicates building elements for which quantities are derived. Not shown, costs may also be derived from building elements by traversing assignment relationships from the assigned IfcProduct to IfcProcess to IfcResource, where all costs ultimately originate at resources. It is also possible for cost items to have assignments from processes or resources directly. +/// +/// Figure 168 — Cost assignment +class IFC_PARSE_API IfcCostItem : public IfcControl { +public: + /// Predefined generic type for a cost item that is specified in an enumeration. There may be a property set given specificly for the predefined types. + /// + /// IFC2x4 CHANGE The attribute has been added. + boost::optional< ::Ifc4x3_add2::IfcCostItemTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCostItemTypeEnum::Value > v); + /// Component costs for which the total cost for the cost item is calculated, and then multiplied by the total CostQuantities if provided. + /// + /// If CostQuantities is provided then values indicate unit costs, otherwise values indicate total costs. + /// + /// For calculation purposes, the cost values may be directly added unless they have qualifications. Cost values with qualifications (e.g. IfcCostValue.ApplicableDate, IfcCostValue.FixedUntilDate) should be excluded from such calculation if they do not apply. + /// + /// IFC2x4 CHANGE The attribute has been added. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcCostValue >::ptr > CostValues() const; + void setCostValues(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcCostValue >::ptr > v); + /// Component quantities of the same type for which the total quantity for the cost item is calculated as the sum. + /// + /// IFC2x4 CHANGE The attribute has been added. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPhysicalQuantity >::ptr > CostQuantities() const; + void setCostQuantities(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPhysicalQuantity >::ptr > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCostItem (IfcEntityInstanceData* e); + IfcCostItem (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< ::Ifc4x3_add2::IfcCostItemTypeEnum::Value > v7_PredefinedType, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcCostValue >::ptr > v8_CostValues, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPhysicalQuantity >::ptr > v9_CostQuantities); + typedef aggregate_of< IfcCostItem > list; +}; +/// An IfcCostSchedule brings together instances of IfcCostItem either for the purpose of identifying purely cost information as in an estimate for constructions costs or for including cost information within another presentation form such as a work order. +/// +/// HISTORY New Entity in IFC Release 2.0. Modified in IFC 2x2 +/// IFC2x4 CHANGE Attribute 'ID' changed to Identification and promoted to supertype IfcControl, PredefinedType made optional, attributes PreparedBy, SubmittedBy, TargetUsers removed. +/// +/// Declaration Use Definition +/// The IfcCostSchedule may be declared within the project using the IfcRelDeclares relationship where RelatingContext refers to the single IfcProject and RelatedDefinitions contains the IfcCostSchedule. Alternatively, if the IfcCostSchedule is aggregated within another IfcControl object, then it shall not have a direct declaration relationship (whereas the containing object may have a declaration relationship). +/// +/// Assignment Use Definition +/// The IfcCostSchedule may be assigned to the following entities using relationships as indicated: +/// +/// IfcActor (IfcRelAssignsToActor): Persons and organizations involved in the preparation, submittal, and as target users. +/// +/// The IfcCostSchedule may have assignments of its own using the IfcRelAssignsToControl relationship where RelatingControl refers to the IfcCostSchedule and RelatedObjects contains one or more objects of the following types: +/// IfcCostItem: Indicates costs published within this cost schedule, typically a single root cost item forming a hierarchy of nested cost items. +/// +/// Classification Use Definition +/// Classifications may be applied using IfcRelAssociatesClassification where RelatedObjects contains the IfcCostSchedule and RelatingClassification refers to an IfcClassification or IfcClassificationReference. +/// +/// IfcClassification: Classifications to be used for cost items within the cost schedule. +/// +/// Approval Use Definition +/// Approvals may be associated to indicate the status of acceptance or rejection using the IfcRelAssociatesApproval relationship where RelatingApproval refers to an IfcApproval and RelatedObjects contains the IfcCostSchedule. Approvals may be split into sub-approvals using IfcApprovalRelationship to track approval status separately for each party where RelatingApproval refers to the higher-level approval and RelatedApprovals contains one or more lower-level approvals. The hierarchy of approvals implies sequencing such that a higher-level approval is not executed until all of its lower-level approvals have been accepted. +class IFC_PARSE_API IfcCostSchedule : public IfcControl { +public: + /// Predefined generic type for a cost schedule that is specified in an enumeration. There may be a property set given specifically for the predefined types. + /// + /// IFC2x4 CHANGE The attribute has been made optional. + boost::optional< ::Ifc4x3_add2::IfcCostScheduleTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCostScheduleTypeEnum::Value > v); + /// The current status of a cost schedule. Examples of status values that might be used for a cost schedule status include: + /// + /// PLANNED + /// APPROVED + /// AGREED + /// ISSUED + /// STARTED + boost::optional< std::string > Status() const; + void setStatus(boost::optional< std::string > v); + /// The date and time on which the cost schedule was submitted. + /// + /// IFC2x4 CHANGE Type changed from IfcDateTimeSelect. + boost::optional< std::string > SubmittedOn() const; + void setSubmittedOn(boost::optional< std::string > v); + /// The date and time that this cost schedule is updated; this allows tracking the schedule history. + /// + /// IFC2x4 CHANGE Type changed from IfcDateTimeSelect. + boost::optional< std::string > UpdateDate() const; + void setUpdateDate(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCostSchedule (IfcEntityInstanceData* e); + IfcCostSchedule (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< ::Ifc4x3_add2::IfcCostScheduleTypeEnum::Value > v7_PredefinedType, boost::optional< std::string > v8_Status, boost::optional< std::string > v9_SubmittedOn, boost::optional< std::string > v10_UpdateDate); + typedef aggregate_of< IfcCostSchedule > list; +}; + +class IFC_PARSE_API IfcCourseType : public IfcBuiltElementType { +public: + ::Ifc4x3_add2::IfcCourseTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcCourseTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCourseType (IfcEntityInstanceData* e); + IfcCourseType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCourseTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcCourseType > list; +}; +/// Definition from IAI: The element type +/// IfcCoveringType defines commonly shared information for +/// occurrences of coverings. The set of shared information may +/// include: +/// +/// common properties within shared property sets +/// common material (layer set) information +/// common shape representations +/// +/// It is used to define an covering specification or covering +/// style (i.e. the specific product information, that is common to +/// all occurrences of that product type). Covering types may be +/// exchanged without being already assigned to occurrences. +/// The occurrences of the IfcCoveringType are represented +/// by instances of IfcCovering +/// +/// HISTORY New entity in Release +/// IFC2x Edition 2. +/// +/// Informal proposition +/// +/// The material assignment, if provided using the +/// IfcRelAssociatesMaterial relationship, shall not reference +/// the IfcMaterialLayerSetUsage. +/// +/// Material Use Definition +/// The material of the IfcCoveringType is defined by the +/// IfcMaterialLayerSet or as fall back by IfcMaterial +/// and attached by the +/// IfcRelAssociatesMaterial.RelatingMaterial. It is +/// accessible by the inverse HasAssociations +/// relationship. +/// Property Set Use Definition: +/// The shared property sets relating to the +/// IfcCoveringType are defined by the IfcPropertySet +/// and are attached by the HasPropertySets attribute. The +/// following property set definitions specific to the +/// IfcCoveringType are part of this IFC release: +/// NOTE There is no differentiation between +/// properties within the property set that are only assignable to +/// IfcCoveringType and those that are only assignable to +/// IfcCovering. If the same property is assigned to the +/// IfcCoveringType and the IfcCovering being an +/// occurrence of the IfcCoveringType, then the occurrence +/// property overrides the type property. +/// +/// Pset_CoveringCommon: common property set for all +/// covering types +/// +/// Pset_CoveringCeiling: specific property set +/// for all occurrences of covering types with the PredefinedType: +/// CEILING +/// Pset_CoveringFlooring: specific property set +/// for all occurrences of coverings with the PredefinedType: +/// FLOORING +/// +/// Geometry Use Definition: +/// The IfcCoveringType may define the shared geometric +/// representation for all covering occurrences. The +/// RepresentationMaps attribute refers to a list of +/// IfcRepresentationMap's, that allow for multiple geometric +/// representations (e.g. with IfcShaperepresentation's having +/// an RepresentationIdentifier 'Box', 'Surface', or 'Body'). +/// (See geometric use definition of IfcCovering for further +/// information). +/// NOTE If the IfcCoveringType has an +/// associated IfcMaterialLayerSet, then no shared geometric +/// representation shall be provided. +/// NOTE The product shape representations are +/// defined as RepresentationMaps (attribute of the supertype +/// IfcTypeProduct), which get assigned by an element +/// occurrence instance through the +/// IfcShapeRepresentation.Item[n] being an +/// IfcMappedItem. See IfcTypeProduct for further +/// information. +/// NOTE The values of attributes +/// RepresentationIdentifier and RepresentationType of +/// IfcShapeRepresentation are restricted in the same way as +/// those for IfcCoveringType. +class IFC_PARSE_API IfcCoveringType : public IfcBuiltElementType { +public: + /// Predefined types to define the particular type of the covering. There may be property set definitions available for each predefined type. + ::Ifc4x3_add2::IfcCoveringTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcCoveringTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCoveringType (IfcEntityInstanceData* e); + IfcCoveringType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCoveringTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcCoveringType > list; +}; +/// IfcCrewResource represents a collection of internal resources used in construction processes. +/// +/// HISTORY: New Entity in IFC Release 2.0. Base type and documentation extended in IFC2x4 +/// +/// Identification of people and equipment of a crew is achieved through their specification at the level of the component. Therefore, knowing which persons are within a crew is achieved through identifying the persons assigned to each IfcLaborResource within the IfcCrewResource. Similarly, identifying that a screwing machine for pipe fitting forms part of the crew is achieved by relating an appropriate instance of IfcElementComponent to the IfcConstructionEquipmentResource forming an element of the IfcCrewResource. +/// +/// Use definitions for composition, assignment, constraints, time series, and baselines are described at the base type IfcConstructionResource. +/// +/// Type use definition +/// IfcCrewResource defines the occurrence of any crew resource; common information about crew resource types is handled by IfcCrewResourceType. The IfcCrewResourceType (if present) may establish the common type name, common properties, and common productivities for various task types using IfcRelAssignsToProcess. The IfcCrewResourceType is attached using the IfcRelDefinesByType.RelatingType objectified relationship and is accessible by the inverse IsTypedBy attribute. +class IFC_PARSE_API IfcCrewResource : public IfcConstructionResource { +public: + /// Defines types of crew resources. + /// IFC2x4 New attribute + boost::optional< ::Ifc4x3_add2::IfcCrewResourceTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCrewResourceTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCrewResource (IfcEntityInstanceData* e); + IfcCrewResource (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, ::Ifc4x3_add2::IfcResourceTime* v8_Usage, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v9_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v10_BaseQuantity, boost::optional< ::Ifc4x3_add2::IfcCrewResourceTypeEnum::Value > v11_PredefinedType); + typedef aggregate_of< IfcCrewResource > list; +}; +/// Definition from IAI: The element type (IfcCurtainWallType) +/// defines a list of commonly shared property set definitions of a curtain +/// wall element and an optional set of product representations. It is used +/// to define a curtain wall specification (i.e. the specific product +/// information, that is common to all occurrences of that product type). +/// +/// NOTE: The product +/// representations are defined as representation maps (at the level of the +/// supertype IfcTypeProduct, which gets assigned by an +/// element occurrence instance through the IfcShapeRepresentation.Item[1] +/// being an IfcMappedItem. +/// +/// A curtain wall type is used to define the common properties of +/// a certain type of curtain wall that may be applied to many instances of +/// that type to assign a specific style. Curtain wall types may be +/// exchanged without being already assigned to occurrences. +/// The occurrences of the IfcCurtainWallType +/// are represented by instances of IfcCurtainWall. +/// +/// HISTORY +/// New entity in Release IFC2x Editon 3. +class IFC_PARSE_API IfcCurtainWallType : public IfcBuiltElementType { +public: + /// Identifies the predefined types of a curtain wall element from which the type required may be set. + ::Ifc4x3_add2::IfcCurtainWallTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcCurtainWallTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCurtainWallType (IfcEntityInstanceData* e); + IfcCurtainWallType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCurtainWallTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcCurtainWallType > list; +}; +/// Definition from ISO/CD 10303-42:1992: A cylindrical surface is a surface at a constant distance (the radius) from a straight line. A cylindrical surface is defined by its radius and its orientation and location. The data is to be interpreted as follows: +/// +/// C = Position.Location +/// x = Position.P[1] +/// y = Position.P[2] +/// z = Position.P[3] +/// R = Radius +/// +/// and the surface is parameterized as: +/// +/// where the parametric range is -∞ < u,v < +/// ∞ . +/// In the above parameterization the length unit for the unit +/// vectors z is equal to that of the radius R. +/// In the placement coordinate system defined above, the surface is +/// represented by the equation S = 0, where +/// +/// The positive direction of the normal to the surface at any +/// point on the surface is given by +/// +/// , or as unit normal by +/// +/// The direction of the normal is away from the axis of the cylinder. +/// +/// The cylindrical surface is a surface unbounded in the direction of z. Bounded cylindrical surfaces are defined by using a subtype of IfcBoundedSurface with BasisSurface being a cylindrical surface. +/// +/// NOTE A bounded cylindrical surface can be +/// defined by an IfcRectangularTrimmedSurface with +/// BasisSurface being the cylindrical surface and U1 = +/// 0°, U2 = 360° and V1 = lower bound in +/// z, V2 = upper bound in z (if the plane angle +/// measure is degree). A bounded cylindrical arc surface is provided +/// with |U1 - U2| < 360° (assuming the Usense and Vsense +/// agree to the sense of the basis surface). +/// NOTE A non-rectangular bounded cylindrical +/// surface, e.g. the surface of a round wall underneath a sloped +/// roof, cab be defined by an IfcCurveBoundedSurface with +/// IfcBoundaryCurve's, being a collection of p-curve +/// segments. A p-curve is curve which lies on the basis of a surface +/// and is defined in the parameter space of that +/// surface. +/// +/// The inherited attributes are interpreted as +/// +/// SELF\IfcElementarySurface.Position defines the +/// location and orientation of the cylindrical surface. +/// SELF\IfcElementarySurface.Position.Location definesd a +/// point on the axis of the cylindrical surface. +/// SELF\IfcElementarySurface.Position.P[3] defines the +/// direction of the axis of the cylindrical surface. +/// +/// NOTE Corresponding ISO 10303 entity: plane. Please refer to ISO/IS 10303-42:1994, p.70 for the final definition of the formal standard. +/// +/// HISTORY New class in IFC2x4. +class IFC_PARSE_API IfcCylindricalSurface : public IfcElementarySurface { +public: + /// The radius of the cylindrical surface. + double Radius() const; + void setRadius(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCylindricalSurface (IfcEntityInstanceData* e); + IfcCylindricalSurface (::Ifc4x3_add2::IfcAxis2Placement3D* v1_Position, double v2_Radius); + typedef aggregate_of< IfcCylindricalSurface > list; +}; + +class IFC_PARSE_API IfcDeepFoundationType : public IfcBuiltElementType { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDeepFoundationType (IfcEntityInstanceData* e); + IfcDeepFoundationType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType); + typedef aggregate_of< IfcDeepFoundationType > list; +}; + +class IFC_PARSE_API IfcDirectrixDerivedReferenceSweptAreaSolid : public IfcFixedReferenceSweptAreaSolid { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDirectrixDerivedReferenceSweptAreaSolid (IfcEntityInstanceData* e); + IfcDirectrixDerivedReferenceSweptAreaSolid (::Ifc4x3_add2::IfcProfileDef* v1_SweptArea, ::Ifc4x3_add2::IfcAxis2Placement3D* v2_Position, ::Ifc4x3_add2::IfcCurve* v3_Directrix, ::Ifc4x3_add2::IfcCurveMeasureSelect* v4_StartParam, ::Ifc4x3_add2::IfcCurveMeasureSelect* v5_EndParam, ::Ifc4x3_add2::IfcDirection* v6_FixedReference); + typedef aggregate_of< IfcDirectrixDerivedReferenceSweptAreaSolid > list; +}; +/// Definition from IAI: The +/// IfcDistributionElementType defines a list of commonly +/// shared property set definitions of an element and an optional set +/// of product representations. It is used to define an element +/// specification (i.e. the specific product information, that is +/// common to all occurrences of that product type). +/// NOTE The product representations are defined +/// as representation maps (at the level of the supertype +/// IfcTypeProduct, which gets assigned by an element +/// occurrence instance through the +/// IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// A distribution element type is used to define the common +/// properties of a certain type of a distribution element that may +/// be applied to many instances of that feature type to assign a +/// specific style. Distribution element types (or the instantiable +/// subtypes) may be exchanged without being already assigned to +/// occurrences. +/// The occurrences of the IfcDistributionElementType are +/// represented by instances of IfcDistributionElement (or its +/// subtypes). +/// HISTORY New entity in +/// Release IFC2x Edition 2. +/// IFC2x3 CHANGE The entity has been made +/// non-abstract +/// IFC2x4 CHANGE The entity is marked +/// as deprecated for instantiation - will be made ABSTRACT after +/// IFC2x4. +class IFC_PARSE_API IfcDistributionElementType : public IfcElementType { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDistributionElementType (IfcEntityInstanceData* e); + IfcDistributionElementType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType); + typedef aggregate_of< IfcDistributionElementType > list; +}; +/// The element type IfcDistributionFlowElementType defines a list of commonly shared property set definitions of an element and an optional set of product representations. It is used to define an element specification (the specific product information that is common to all occurrences of that product type). +/// +/// Distribution flow element types (orthe instantiable subtypes) may be exchanged without being already assigned to occurrences. +/// +/// The occurrences of the IfcDistributionFlowElementType are represented by instances of IfcDistributionFlowElement or its subtypes. +/// +/// HISTORY: New entity in IFC Release 2x2. +/// +/// Declaration Use Definition +/// The IfcDistributionFlowElementType may be declared within a project or project library using IfcRelDeclares where RelatingContext refers to the project or library and RelatedDefinitions includes the element type. Inclusion within IfcProject indicates the type is editable within the direct project and may be available to other referencing projects that may incorporate the type. Inclusion within IfcProjectLibrary indicates the type is incorporated from a referenced project. Default units and coordinate systems (used for representations, materials, and property sets) are indicated by the declaring project or library. +/// +/// Classification Use Definition +/// The IfcDistributionFlowElementType may be classified using IfcRelAssociatesClassification where RelatingClassification refers to an IfcClassificationReference indicating a classification notation. Classifications may refer to industry standards such as MasterFormat, OmniFormat, or UniFormat. Classifications may also refer to organization-specific, project-specific, or system-specific designations. Classification reference identification schemes are described by IfcClassification.ReferenceTokens. +/// +/// Document Use Definition +/// The IfcDistributionFlowElementType may be documented using IfcRelAssociatesDocument where RelatingDocument refers to an IfcDocumentReference indicating content within a document, or IfcDocumentInformation indicating an entire document. Document information may refer to arbitrary attachments such as text or multimedia, while document references may refer to items within particular formats (such as XML element IDs) where there is need to synchronize document information with model information. Document reference identification schemes depend on the particular document format. +/// +/// Library Use Definition +/// The IfcDistributionFlowElementType may be published to a model server using IfcRelAssociatesLibrary where RelatingLibrary refers to an IfcLibraryReference indicating the unique identification within the published project. If the published project is IFC format, then IfcLibraryReference.Identification shall match IfcRoot.GlobalID of the published (master) project, using the same encoding as described for IfcGloballyUniqueId. Multiple library references may be provided to indicate alternate names and descriptions for particular languages. If the element type is declared within IfcProject, then IfcLibraryInformation.Location and IfcLibraryInformation.Version indicate the URL and version as last published. If the element type is declared within IfcProjectLibrary, then the library information indicates the location and version of the definition as last retrieved. +/// +/// Figure 148 illustrates a project containing a light fixture in a building, where the definition of the light fixture is obtained from an external project. +/// +/// Figure 148 — Distribution flow element library +/// +/// Composition Use Definition +/// The IfcDistributionFlowElementType may be decomposed into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcDistributionFlowElementType and RelatedObjects contains one or more components. For example, a cable type may be decomposed into wires. Standard types for composition are defined at occurrences for subtypes. +/// +/// Connection Use Definition +/// The IfcDistributionFlowElementType may be connected to other objects as follows using the indicated relationship: +/// +/// IfcDistributionPort (IfcRelConnectsPortToElement) : Indicates port definitions on the element to be instantiated at occurrences. Standard port names, types, and directions are defined at occurrences for subtypes. +/// +/// Assignment Use Definition +/// The IfcDistributionFlowElementType may have assignments of its own using the IfcRelAssignsToProduct relationship where RelatingProduct refers to the IfcDistributionFlowElementType and RelatedObjects contains one or more objects of the following types: +/// +/// IfcTaskType: Indicates task types available to purchase, install, renovate, demolish, operate, or otherwise act upon occurrences of the element type. Such task types may be instantiated as task occurrences assigned to occurrences of the element type. Prices (such as for purchasing or shipping) may be established by resource types assigned to task types. +/// IfcProcedureType: Indicates procedure types available to operate occurrences of the element type. Such procedure types may be instantiated as procedure occurrences assigned to occurrences of the element type. +/// IfcEventType: Indicates event types available to be raised by occurrences of the element, sequenced by procedures to be followed. Such event types may be instantiated as event occurrences assigned to occurrences of the element type. +/// +/// Material Use Definition +/// The material of the IfcDistributionFlowElementType is defined using one of the following entities: +/// +/// IfcMaterialProfileSet: For elements having a constant cross-section, this defines the material profile which may be used to generate the 'Body' representation at occurrences (for parametric definitions not having representation), or for analysis purposes. +/// IfcMaterialConstituentSet: For elements containing multiple materials, this indicates materials at named aspects. +/// +/// IfcMaterial: For elements comprised of a single material, this indicates the material. +/// +/// The material is attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. +/// +/// Representation Use Definition +/// The following shape representations are supported for subtypes of IfcDistributionFlowElementType, distinguished by IfcShapeRepresentation.RepresentationIdentifier: +/// +/// 'Axis': Represents the 3D flow path of the item having IfcShapeRepresentation.RepresentationType of 'Curve3D' and containing a single IfcBoundedCurve subtype such as IfcPolyline, IfcTrimmedCurve, or IfcCompositeCurve. For elements containing directional ports (IfcDistributionPort with FlowDirection of SOURCE or SINK), the direction of the curve indicates direction of flow where a SINK port is positioned at the start of the curve and a SOURCE port is positioned at the end of the curve. This representation is most applicable to flow segment types (pipes, ducts, cables), however may be used at other elements to define a primary flow path if applicable. +/// +/// 'Footprint': Represents the 2D footprint outline of the item having IfcShapeRepresentation.RepresentationType of 'GeometricCurveSet' and containing a single IfcGeometricCurveSet consisting of one or more IfcCurve subtypes such as IfcPolyline, IfcTrimmedCurve, IfcCompositeCurve, or IfcCircle. +/// +/// 'Body': Represents the 3D shape of the item having IfcShapeRepresentation.RepresentationType of 'SurfaceModel', 'SolidModel', or any solid model specializations including 'Brep', 'AdvancedBrep', 'SweptSolid', 'AdvancedSweptSolid', 'CSG', 'Clipping', or 'SectionedSpine'). +/// +/// 'Clearance': Represents the 3D clearance volume of the item having RepresentationType of 'Surface3D'. Such clearance region indicates space that should not intersect with the 'Body' representation between element occurrences, though may intersect with the 'Clearance' representation of other element occurrences. The particular use of clearance space may be for safety, maintenance, or other purpose. +/// +/// 'Lighting': Represents the light emission of the item having IfcShapeRepresentation.RepresentationType of 'LightSource' and containing one or more IfcLightSource subtypes. This representation is most applicable to lamps and light fixtures, however may be used at other elements that emit light. +/// +/// If an element type is defined parametrically (such as a flow segment type defining common material profile but no particular length or path), then no representations shall be asserted at the type. +/// +/// NOTE: The product representations are defined as representation maps (at the level of the supertype IfcTypeProduct, which get assigned by an element occurrence instance through the IfcShapeRepresentation.Item[1] being an IfcMappedItem. +class IFC_PARSE_API IfcDistributionFlowElementType : public IfcDistributionElementType { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDistributionFlowElementType (IfcEntityInstanceData* e); + IfcDistributionFlowElementType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType); + typedef aggregate_of< IfcDistributionFlowElementType > list; +}; +/// The door lining is the frame which +/// enables the door leaf to be fixed in position. The door lining is +/// used to hang the door leaf. The parameters of the door lining +/// (IfcDoorLiningProperties) define the geometrically +/// relevant parameter of the lining. +/// +/// NOTE The IfcDoorLiningProperties +/// shall only be applied to construct the 3D shape of a door, if the +/// attribute IfcDoorStyle.ParameterTakesPrecedence is set +/// TRUE. +/// +/// The IfcDoorLiningProperties are included in the list of +/// properties of IfcDoorStyle.HasPropertySets. More +/// information about the door lining can be included in the same +/// list of the IfcDoorStyle using another +/// IfcPropertySet for dynamic extensions. +/// +/// HISTORY New entity in IFC Release 2.0. Has been renamed from IfcDoorLining in IFC Release 2x. +/// +/// IFC2x4 CHANGE The following attributes have been added LiningToPanelOffsetX, LiningToPanelOffsetY. The attribute ShapeAspectStyle is deprecated and shall no longer be used. Supertype changed to new IfcPreDefinedPropertySet. +/// +/// Geometry use definitions +/// The IfcDoorLiningProperties does not hold its own +/// geometric representation. However it defines parameters which can +/// be used to create the shape of the door style (which is inserted +/// by the IfcDoor into the spatial context of the +/// project) as shown in Figure 172. +/// The parameters of the IfcDoorLiningProperties define a +/// standard door lining, including (if given) a threshold and a +/// transom. The outer boundary of the lining is determined by the +/// occurrence parameter assigned to the IfcDoor, which +/// inserts the IfcDoorStyle. +/// +/// The lining is applied to the left, +/// right and upper side of the opening reveal. The parameters are: +/// +/// LiningDepth, if omited, equal to +/// wall thickness - this only takes effect if a value for +/// LiningThickness is given. If both parameters are not +/// given, then there is no lining. +/// LiningThickness +/// LiningToPanelOffsetX +/// LiningToPanelOffsetY +/// +/// NOTE Parameters added in +/// IFC2x4. +/// +/// The lining can only cover part of +/// the opening reveal. +/// +/// LiningOffset : given if lining edge has an offset to +/// the x axis of the local placement. +/// +/// NOTE In addition to theLiningOffset, +/// the local placement of the IfcDoor can already have an +/// offset to the wall edge and thereby shift the lining along the y +/// axis. The actual position of the lining is calculated from the +/// origin of the local placement along the positive y axis with the +/// distance given by LiningOffset. +/// +/// The lining may include a casing, +/// which covers part of the wall faces around the opening. The +/// casing covers the left, right and upper side of the lining on +/// both sides of the wall. The parameters are: +/// +/// CasingDepth +/// CasingThickness +/// +/// The lining may include a threshold, +/// which covers the bottom side of the opening. The parameters are: +/// +/// ThresholdDepth +/// if omited, equal to wall thickness - this +/// only takes effect if a value for ThresholdThickness is +/// given. If both parameters are not given, then there is no +/// threshold. +/// ThresholdThickness +/// ThresholdOffset (not shown in figure): given, if the +/// threshold edge has an offset to the x axis of the local +/// placement. +/// +/// The lining may have a transom which +/// separates the door panel from a window panel. The transom, if +/// given, is defined by: +/// +/// TransomOffset : a parallel edge to the x axis of the +/// local placement +/// TransomThickness +/// +/// The depth of the transom is identical to the depth of the +/// lining and not given as separate parameter. +/// +/// Figure 172 — Door lining properties +/// +/// NOTE LiningDepth describes the length of the lining along the reveal of the door opening. It can be given by an absolute value if the door lining has a specific depth depending on the door style. However often it is equal to the wall thickness. If the same door style is used (like the same type of single swing door), but inserted into different walls with different thicknesses, it would be necessary to create a special door style for each wall thickness. Therefore several CAD systems allow to set the value to "automatically aligned" to wall thickness. This should be exchanged by leaving the optional attribute LiningDepth unassigned. The same agreement applies to ThresholdDepth. +class IFC_PARSE_API IfcDoorLiningProperties : public IfcPreDefinedPropertySet { +public: + /// Depth of the door lining, measured perpendicular to the plane of the door lining. If omitted (and with a given value to lining thickness) it indicates an adjustable depth (i.e. a depth that adjusts to the thickness of the wall into which the occurrence of this door style is inserted). + boost::optional< double > LiningDepth() const; + void setLiningDepth(boost::optional< double > v); + /// Thickness (width in plane parallel to door leaf) of the door lining. + boost::optional< double > LiningThickness() const; + void setLiningThickness(boost::optional< double > v); + /// Depth (dimension in plane perpendicular to door leaf) of the door threshold. Only given if the door lining includes a threshold. If omitted (and with a given value to threshold thickness) it indicates an adjustable depth (i.e. a depth that adjusts to the thickness of the wall into which the occurrence of this door style is inserted). + boost::optional< double > ThresholdDepth() const; + void setThresholdDepth(boost::optional< double > v); + /// Thickness (width in plane parallel to door leaf) of the door threshold. Only given if the door lining includes a threshold and the parameter is known. + boost::optional< double > ThresholdThickness() const; + void setThresholdThickness(boost::optional< double > v); + /// Thickness (width in plane parallel to door leaf) of the transom (if given) which divides the door leaf from a glazing (or window) above. + boost::optional< double > TransomThickness() const; + void setTransomThickness(boost::optional< double > v); + /// Offset of the transom (if given) which divides the door leaf from a glazing (or window) above. The offset is given from the bottom of the door opening. + boost::optional< double > TransomOffset() const; + void setTransomOffset(boost::optional< double > v); + /// Offset (dimension in plane perpendicular to door leaf) of the door lining. The offset is given as distance to the x axis of the local placement. + boost::optional< double > LiningOffset() const; + void setLiningOffset(boost::optional< double > v); + /// Offset (dimension in plane perpendicular to door leaf) of the door threshold. The offset is given as distance to the x axis of the local placement. Only given if the door lining includes a threshold and the parameter is known. + boost::optional< double > ThresholdOffset() const; + void setThresholdOffset(boost::optional< double > v); + /// Thickness of the casing (dimension in plane of the door leaf). If given it is applied equally to all four sides of the adjacent wall. + boost::optional< double > CasingThickness() const; + void setCasingThickness(boost::optional< double > v); + /// Depth of the casing (dimension in plane perpendicular to door leaf). If given it is applied equally to all four sides of the adjacent wall. + boost::optional< double > CasingDepth() const; + void setCasingDepth(boost::optional< double > v); + /// Pointer to the shape aspect, if given. The shape aspect reflects the part of the door shape, which represents the door lining. + /// + /// IFC2x4 CHANGE The attribute is deprecated and shall no longer be used, i.e. the value shall be NIL ($). + ::Ifc4x3_add2::IfcShapeAspect* ShapeAspectStyle() const; + void setShapeAspectStyle(::Ifc4x3_add2::IfcShapeAspect* v); + /// Offset between the lining and the window panel measured along the x-axis of the local placement. + /// + /// IFC2x4 CHANGE: New attribute added at the end of the entity definition. + boost::optional< double > LiningToPanelOffsetX() const; + void setLiningToPanelOffsetX(boost::optional< double > v); + /// Offset between the lining and the door panel measured along the y-axis of the local placement. + /// + /// IFC2x4 CHANGE: New attribute added at the end of the entity definition. + boost::optional< double > LiningToPanelOffsetY() const; + void setLiningToPanelOffsetY(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDoorLiningProperties (IfcEntityInstanceData* e); + IfcDoorLiningProperties (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< double > v5_LiningDepth, boost::optional< double > v6_LiningThickness, boost::optional< double > v7_ThresholdDepth, boost::optional< double > v8_ThresholdThickness, boost::optional< double > v9_TransomThickness, boost::optional< double > v10_TransomOffset, boost::optional< double > v11_LiningOffset, boost::optional< double > v12_ThresholdOffset, boost::optional< double > v13_CasingThickness, boost::optional< double > v14_CasingDepth, ::Ifc4x3_add2::IfcShapeAspect* v15_ShapeAspectStyle, boost::optional< double > v16_LiningToPanelOffsetX, boost::optional< double > v17_LiningToPanelOffsetY); + typedef aggregate_of< IfcDoorLiningProperties > list; +}; +/// A door panel is normally a door leaf that opens to allow people or +/// goods to pass. The parameters of the door panel define the +/// geometrically relevant parameter of the panel, +/// +/// The IfcDoorPanelProperties are used to parametrically +/// describe the shape and operation of door panels. The parametric +/// definition can be added solely or additionally to the explicit +/// shape representation of the door. +/// +/// The IfcDoorStyle can define doors consisting of more +/// then one panel. In this case, one instance of +/// IfcDoorPanelProperties has to be included for each door +/// panel. The PanelPosition attribute, in conjunction with +/// the IfcDoorStyle.OperationType attribute, determines to +/// which panel the IfcDoorPanelProperties apply. +/// The IfcDoorPanelProperties are included in the list of +/// properties , given by attribute HasPropertySets of the +/// IfcDoorStyle. More information about the door panel can be +/// included in the same list of the IfcDoorStyle using the +/// IfcPropertySet for dynamic extensions. +/// +/// HISTORY New Entity in IFC Release 2.0. +/// +/// IFC2x4 CHANGE Supertype changed to new IfcPreDefinedPropertySet. +/// +/// Geometry use definitions +/// +/// The IfcDoorPanelProperties does not hold a geometric representation. However it defines parameters which can be used to create the shape of the door style (which is inserted by the IfcDoor into the spatial context of the project) as shown in Figure 173. +/// The parameters of the IfcDoorPanelProperties define a standard door panel, including (if given) a proportional width to define non-uniform double swing (or sliding, or folding) doors. The outer boundary of the panel is determined by the occurrence parameter assigned to the IfcDoor, which inserts the IfcDoorStyle. It has to take the lining parameter into account as well. +/// +/// The depth of the panel (swinging, +/// double-acting, and sliding panels) is defined by the +/// PanelDepth parameter. +/// +/// PanelDepth +/// +/// For door operation types that +/// include more than one panel, the width of (at least) one panel is +/// given by a normalised ratio measure. It determines the width of +/// that panel, which is defined as a ratio of the overall width of +/// the door opening. +/// +/// PanelWidth +/// +/// Figure 173 — Door panel properties +class IFC_PARSE_API IfcDoorPanelProperties : public IfcPreDefinedPropertySet { +public: + /// Depth of the door panel, measured perpendicular to the plane of the door leaf. + boost::optional< double > PanelDepth() const; + void setPanelDepth(boost::optional< double > v); + /// The PanelOperation defines the way of operation of that panel. The PanelOperation of the door panel has to correspond with the OperationType of the IfcDoorStyle by which it is referenced. + ::Ifc4x3_add2::IfcDoorPanelOperationEnum::Value PanelOperation() const; + void setPanelOperation(::Ifc4x3_add2::IfcDoorPanelOperationEnum::Value v); + /// Width of this panel, given as ratio relative to the total clear opening width of the door. If omited, it defaults to 1. A value has to be provided for all doors with OperationType's at IfcDoorStyle defining a door with more then one panel. + boost::optional< double > PanelWidth() const; + void setPanelWidth(boost::optional< double > v); + /// Position of this panel within the door. The PanelPosition of the door panel has to correspond with the OperationType of the IfcDoorStyle by which it is referenced. + ::Ifc4x3_add2::IfcDoorPanelPositionEnum::Value PanelPosition() const; + void setPanelPosition(::Ifc4x3_add2::IfcDoorPanelPositionEnum::Value v); + /// Pointer to the shape aspect, if given. The shape aspect reflects the part of the door shape, which represents the door panel. + /// + /// IFC2x4 CHANGE The attribute is deprecated and shall no longer be used, i.e. the value shall be NIL ($). + ::Ifc4x3_add2::IfcShapeAspect* ShapeAspectStyle() const; + void setShapeAspectStyle(::Ifc4x3_add2::IfcShapeAspect* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDoorPanelProperties (IfcEntityInstanceData* e); + IfcDoorPanelProperties (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< double > v5_PanelDepth, ::Ifc4x3_add2::IfcDoorPanelOperationEnum::Value v6_PanelOperation, boost::optional< double > v7_PanelWidth, ::Ifc4x3_add2::IfcDoorPanelPositionEnum::Value v8_PanelPosition, ::Ifc4x3_add2::IfcShapeAspect* v9_ShapeAspectStyle); + typedef aggregate_of< IfcDoorPanelProperties > list; +}; +/// Definition from IAI: The element type +/// IfcDoorType defines commonly shared information +/// for occurrences of doors. The set of shared information may +/// include: +/// +/// common properties within shared property sets +/// common material information +/// common operation type definitions +/// common shape representations +/// +/// A door type defines the particular parameter of the lining and +/// one (or several) panels through the +/// IfcDoorLiningProperties and the +/// IfcDoorPanelProperties as predefined property sets +/// applicable to doors only. +/// It is used to define a door specification, or door style (i.e. +/// the specific product information that is common to all +/// occurrences of that door type). Door types may be exchanged +/// without being already assigned to occurrences. +/// NOTE The product representations are defined +/// as representation maps (at the level of the supertype +/// IfcTypeProduct, which gets assigned by an element +/// occurrence instance through the +/// IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// Occurrences of the IfcDoorType within building models +/// are represented by instances of IfcDoor or +/// IfcDoorStandardCase. +/// HISTORY New entity in +/// IFC2x4 . +/// NOTE The entity IfcDoorType +/// replaces the previous definition IfcDoorStyle (which is +/// deprecated in IFC2x4). +/// Operation type use definition +/// The IfcDoorTypeOperationEnum defines the general layout +/// of the door type and its symbolic presentation. Depending on the +/// enumerator, the appropriate instances of +/// IfcDoorLiningProperties and IfcDoorPanelProperties +/// are attached in the list of HasPropertySets. The +/// IfcDoorTypeOperationEnum mainly determines the hinge side +/// (left hung, or right hung), the operation (swinging, sliding, +/// folding, etc.) and the number of panels. +/// Note There are different definitions in +/// various countries on what a left opening or left hung or left +/// swing door is (same for right). Therefore the IFC definition may +/// derivate from the local standard and may need to be mapped +/// appropriately. +/// See geometry use definitions at +/// IfcDoorTypeOperationEnum for the correct usage of opening +/// symbols for different operation types. +/// Material Use Definition +/// The material of the IfcDoorType is defined by the +/// IfcMaterialConstituentSet or as fall back by +/// IfcMaterial and attached by the +/// IfcRelAssociatesMaterial.RelatingMaterial. It is +/// accessible by the inverse HasAssociations +/// relationship. +/// The following keywords for +/// IfcMaterialConstituentSet.MaterialConstituents[n].Name +/// shall be used: +/// +/// 'Lining' - to indicate that the material constituent applies +/// to to the door lining +/// 'Framing' - to indicate that the material constituent applies +/// to to the door framing, if not provided, the 'Lining' material +/// information applied to frams as well +/// 'Glazing' - to indicate that the material constituent applies +/// to to the glazing as well +/// +/// If the fall back single IfcMaterial is referenced, it +/// applies to the lining and framing of the door. +/// Property Set Use Definition: +/// The shared property sets relating to the IfcDoorType +/// are defined by the IfcPropertySet and are attached by the +/// HasPropertySets attribute. The following property set +/// definitions specific to the IfcDoorType are part of this +/// IFC release: +/// NOTE There is no differentiation between +/// properties within the property set that are only assignable to +/// IfcDoorType and those that are only assignable to +/// IfcDoor. If the same property is assigned to the +/// IfcDoorType and the IfcDoor being an occurrence of +/// the IfcDoorType, then the occurrence property overrides +/// the type property. +/// +/// Pset_WallCommon: common property set for all +/// door types. +/// Pset_DoorWindowGlazingType: specific property +/// set for the glazing properties of the door type glazing +/// Pset_DoorWindowShadingType: specific property +/// set for the shading properties of the door type shading +/// +/// Two subtypes of IfcPreDefinedPropertySet are applicable +/// to IfcDoorType: +/// +/// IfcDoorLiningProperties - a single instance to define +/// the shape parameters of the door lining +/// IfcDoorPanelProperties - one or several instances to +/// define the shape parameters of the door panel(s) +/// +/// Geometry Use Definitions: +/// The IfcDoorType may define the common shape of door +/// occurrences. The common shape can be defined by +/// +/// applying shape parameters defined within the associated +/// IfcDoorLiningProperties and IfcDoorPanelProperties +/// applied to the 'Profile' geometric representation. It is only +/// applicable if the IfcDoorType has only occurrences of type +/// IfcDoorStandardCase (See geometric use definition of +/// IfcDoorStandardCase for further information). +/// applying the RepresentationMaps attribute to refer to +/// a list of IfcRepresentationMap's, that allow for multiple +/// geometric representations (e.g. with +/// IfcShapeRepresentation's having an +/// RepresentationIdentifier 'Box', 'Profile', 'FootPrint', or +/// 'Body') +/// NOTE The product shape representations are +/// defined as RepresentationMaps (attribute of the supertype +/// IfcTypeProduct), which get assigned by an element +/// occurrence instance through the +/// IfcShapeRepresentation.Item[n] being an +/// IfcMappedItem. See IfcTypeProduct for further +/// information. +/// NOTE The values of attributes +/// RepresentationIdentifier and RepresentationType of +/// IfcShapeRepresentation are restricted in the same way as +/// those for IfcDoor and +/// IfcDoorStandardCase +class IFC_PARSE_API IfcDoorType : public IfcBuiltElementType { +public: + /// Identifies the predefined types of a door element from which the type required may be set. + ::Ifc4x3_add2::IfcDoorTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcDoorTypeEnum::Value v); + /// Type defining the general layout and operation of the door type in terms of the partitioning of panels and panel operations. + ::Ifc4x3_add2::IfcDoorTypeOperationEnum::Value OperationType() const; + void setOperationType(::Ifc4x3_add2::IfcDoorTypeOperationEnum::Value v); + boost::optional< bool > ParameterTakesPrecedence() const; + void setParameterTakesPrecedence(boost::optional< bool > v); + boost::optional< std::string > UserDefinedOperationType() const; + void setUserDefinedOperationType(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDoorType (IfcEntityInstanceData* e); + IfcDoorType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcDoorTypeEnum::Value v10_PredefinedType, ::Ifc4x3_add2::IfcDoorTypeOperationEnum::Value v11_OperationType, boost::optional< bool > v12_ParameterTakesPrecedence, boost::optional< std::string > v13_UserDefinedOperationType); + typedef aggregate_of< IfcDoorType > list; +}; +/// The draughting pre defined colour is a pre defined colour for the purpose to identify a colour by name. Allowable names are: +/// +/// 'black', +/// 'red', +/// 'green', +/// 'blue', +/// 'yellow', +/// 'magenta', +/// 'cyan', +/// 'white', +/// 'by layer' +/// +/// NOTE The IfcDraughtingPreDefinedColour is an entity that had been adopted from ISO 10303-202, Industrial automation systems and integration—Product data representation and exchange, Part 202: Application protocol: Associative draughting. +/// +/// The following table states the RGB values associated with the names given by the IfcDraughtingPreDefinedColour. +/// +/// Colour name +/// Red +/// Green +/// Blue +/// +/// black +/// 0 +/// 0 +/// 0 +/// +/// red +/// 1.0 +/// 0 +/// 0 +/// +/// green +/// 0 +/// 1.0 +/// 0 +/// +/// blue +/// 0 +/// 0 +/// 1.0 +/// +/// yellow +/// 1.0 +/// 1.0 +/// 0 +/// +/// magenta +/// 1.0 +/// 0 +/// 1.0 +/// +/// cyan +/// 0 +/// 1.0 +/// 1.0 +/// +/// white +/// 1.0 +/// 1.0 +/// 1.0 +/// +/// by layer +/// colour values obtained from +/// IfcPresentationLayerWithStyle. +/// +/// NOTE Corresponding ISO 10303 name: draughting_pre_defined_colour. Please refer to ISO/IS 10303-202:1994 page 194 for the final definition of the formal standard. +/// +/// HISTORY New entity in IFC2x2. +/// +/// Informal proposition +/// +/// The value 'by layer' shall only be inserted, if the geometric representation item using the colour definition has an association to IfcPresentationLayerWithStyle, and if that instance of IfcPresentationLayerWithStyle has a valid colour definition for IfcCurveStyle, IfcSymbolStyle, or IfcSurfaceStyle (depending on what is applicable). +class IFC_PARSE_API IfcDraughtingPreDefinedColour : public IfcPreDefinedColour { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDraughtingPreDefinedColour (IfcEntityInstanceData* e); + IfcDraughtingPreDefinedColour (std::string v1_Name); + typedef aggregate_of< IfcDraughtingPreDefinedColour > list; +}; +/// The draughting predefined curve font type defines a selection of widely used curve fonts for draughting purposes by name. +/// +/// NOTE  The IfcDraughtingPreDefinedCurveFont is an entity that had been adopted from ISO 10303, Industrial automation systems and integration—Product data representation and exchange, Part 46 Technical Corrigendum 2: Integrated generic resources: Visual presentation. +/// +/// Figure 291 (from ISO 10303-46 TC2) illustrates predefined curve fonts. +/// +/// Figure 291 — Draughting predefined curve font +/// +/// NOTE  If the IfcDraughtingPreDefinedCurveFont is used within an IfcCurveStyleFontAndScaling then the segment and space lengths that are given in the table are as such for the scale factor 1.0 +/// +/// NOTE  Corresponding ISO 10303 name: pre_defined_curve_font. Please refer to ISO/IS 10303-46:1994 TC2, page 12 for the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC2x2. +class IFC_PARSE_API IfcDraughtingPreDefinedCurveFont : public IfcPreDefinedCurveFont { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDraughtingPreDefinedCurveFont (IfcEntityInstanceData* e); + IfcDraughtingPreDefinedCurveFont (std::string v1_Name); + typedef aggregate_of< IfcDraughtingPreDefinedCurveFont > list; +}; +/// Definition from IAI: Generalization of all components +/// that make up an AEC product. Those elements can be logically +/// contained by a spatial structure element that constitutes a +/// certain level within a project structure hierarchy (e.g., site, +/// building, storey or space). This is done by using the +/// IfcRelContainedInSpatialStructure relationship. +/// Elements are physically existent objects, although they might +/// be void elements, such as holes. Elements either remain +/// permanently in the AEC product, or only temporarily, as formwork +/// does. Elements can be either assembled on site or +/// pre-manufactured and built in on site. +/// EXAMPLEs of elements in a building +/// construction context are walls, floors, windows and +/// recesses. +/// An element can have material and quantity information assigned +/// through the IfcRelAssociatesMaterial and +/// IfcRelDefinesByProperties relationship. +/// In addition an element can be declared to be a specific +/// occurrence of an element type (and thereby be defined by the +/// element type properties) using the IfcRelDefinesByType +/// relationship. +/// An element can also be defined as an element assembly that is +/// a group of semantically and topologically related elements that +/// form a higher level part of the AEC product. Those element +/// assemblies are defined by virtue of the IfcRelAggregates +/// relationship. +/// EXAMPLEs for element assembly are +/// complete Roof Structures, made by several Roof Areas, or a Stair, +/// composed by Flights and Landings. +/// Elements that performs the same function may be grouped by an +/// "Element Group By Function". It is realized by an instance of +/// IfcGroup with the ObjectType = +/// 'ElementGroupByFunction". +/// HISTORY New entity in +/// IFC Release 1.0 +/// Property Set Use Definition: +/// The property sets relating to the IfcElement are +/// defined by the IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. +/// Quantity Use Definition: +/// The quantities relating to the IfcElement are defined +/// by the IfcElementQuantity and attached by the +/// IfcRelDefinesByProperties. A detailed specification for +/// individual quantities is introduced at the level of subtypes of +/// IfcElement. +/// Geometry Use Definitions +/// The geometric representation of any IfcElement is given +/// by the IfcProductDefinitionShape and +/// IfcLocalPlacement allowing multiple geometric +/// representations. A detailed specification for the local placement +/// and shape representaion is introduced at the level of subtypes of +/// IfcElement. +class IFC_PARSE_API IfcElement : public IfcProduct, public IfcInterferenceSelect, public IfcStructuralActivityAssignmentSelect { +public: + /// The tag (or label) identifier at the particular instance of a product, e.g. the serial number, or the position number. It is the identifier at the occurrence level. + boost::optional< std::string > Tag() const; + void setTag(boost::optional< std::string > v); + aggregate_of< IfcRelFillsElement >::ptr FillsVoids() const; // INVERSE IfcRelFillsElement::RelatedBuildingElement + aggregate_of< IfcRelConnectsElements >::ptr ConnectedTo() const; // INVERSE IfcRelConnectsElements::RelatingElement + aggregate_of< IfcRelInterferesElements >::ptr IsInterferedByElements() const; // INVERSE IfcRelInterferesElements::RelatedElement + aggregate_of< IfcRelInterferesElements >::ptr InterferesElements() const; // INVERSE IfcRelInterferesElements::RelatingElement + aggregate_of< IfcRelProjectsElement >::ptr HasProjections() const; // INVERSE IfcRelProjectsElement::RelatingElement + aggregate_of< IfcRelVoidsElement >::ptr HasOpenings() const; // INVERSE IfcRelVoidsElement::RelatingBuildingElement + aggregate_of< IfcRelConnectsWithRealizingElements >::ptr IsConnectionRealization() const; // INVERSE IfcRelConnectsWithRealizingElements::RealizingElements + aggregate_of< IfcRelSpaceBoundary >::ptr ProvidesBoundaries() const; // INVERSE IfcRelSpaceBoundary::RelatedBuildingElement + aggregate_of< IfcRelConnectsElements >::ptr ConnectedFrom() const; // INVERSE IfcRelConnectsElements::RelatedElement + aggregate_of< IfcRelContainedInSpatialStructure >::ptr ContainedInStructure() const; // INVERSE IfcRelContainedInSpatialStructure::RelatedElements + aggregate_of< IfcRelCoversBldgElements >::ptr HasCoverings() const; // INVERSE IfcRelCoversBldgElements::RelatingBuildingElement + aggregate_of< IfcRelAdheresToElement >::ptr HasSurfaceFeatures() const; // INVERSE IfcRelAdheresToElement::RelatingElement + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcElement (IfcEntityInstanceData* e); + IfcElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcElement > list; +}; +/// The IfcElementAssembly +/// represents complex element assemblies aggregated from several +/// elements, such as discrete elements, building elements, or other +/// elements. +/// EXAMPLE Steel construction assemblies, such as +/// trusses and different kinds of frames, can be represented by the +/// IfcElementAssembly entity. Other examples include slab +/// fields aggregated from a number of precast concrete slabs or +/// reinforcement units made from several reinforcement bars. Also +/// bathroom units, staircase sections and other premanufactured or +/// precast elements are examples of the general +/// IfcElementAssembly entity +/// NOTE The IfcElementAssembly is a +/// general purpose entity that is required to be decomposed. Also +/// other subtypes of IfcElement can be decomposed, with some +/// dedicated entities such as IfcWallElementedCase and +/// IfcSlabElementedCase. +/// The assembly structure can be nested, i.e. an +/// IfcElementAssembly could be an aggregated part within +/// another IfcElementAssembly. +/// NOTE View definitions and/or implementer +/// agreements may restrict the number of allowed levels of +/// nesting. +/// HISTORY New Entity for +/// Release IFC2x Edition 2. +/// +/// Containment Use Definition +/// The IfcElementAssembly should have (and in most +/// implementation scenarios it is mandatory) a relationship for its +/// hierachical containment in the spatial structure of the +/// project. +/// +/// The IfcElementAssembly is places within the project +/// spatial hierarchy using the objectified relationship +/// IfcRelContainedInSpatialStructure, refering to it by its +/// inverse attribute SELF\IfcElement.ContainedInStructure. +/// Subtypes of IfcSpatialStructureElement are valid spatial +/// containers, with IfcBuildingStorey being the default +/// container. +/// +/// The IfcElementAssembly shall represent an aggregate, +/// i.e. it should have other elements, being subtypes of +/// IfcElement, as contained (sub)parts. +/// +/// The IfcElementAssembly is an aggregate i.e. being +/// composed by other elements and acting as an assembly using the +/// objectified relationship IfcRelAggregates, refering to it +/// by its inverse attribute +/// SELF\IfcObjectDefinition.IsDecomposedBy. Components of an +/// assembly are described by instances of subtypes of +/// IfcElement. +/// In this case, the containedsubtypes of IfcElement +/// shall not be additionally contained in the project spatial +/// hierarchy, i.e. the inverse attribute +/// SELF\IfcElement.ContainedInStructure of those +/// IfcElement's shall be NIL. +/// +/// Figure 27 illustrates spatial containment and element aggregation relationships. +/// +/// Figure 27 — Element assembly containment +/// +/// Geometry Use Definitions +/// The geometric representation of IfcElementAssembly is +/// given by the IfcProductDefinitionShape, allowing multiple +/// geometric representations. +/// Local Placement +/// The local placement for IfcElementAssembly is defined +/// in its supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate +/// system that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if given) to the local +/// placement of the same IfcSpatialStructureElement that is +/// used in the ContainedInStructure inverse attribute or to a +/// referenced spatial structure element at a higher level. +/// If the relative placement is not used, the absolute placement +/// is defined within the world coordinate system. +/// +/// Geometric Representations +/// The geometry of an IfcElementAssembly is generally +/// formed from its components, in which case it does not need to +/// have an explicit geometric representation. In some cases it may +/// be useful to also expose an own explicit representation of the +/// aggregate. +/// NOTE View definitions or implementer +/// agreements may further constrain the applicability of certain +/// shape representations at the IfcElementAssembly in respect +/// of the shape representations of its parts. +/// Informal proposition +/// +/// The IfcElementAssembly shall have an aggregation +/// relationship to the contained parts, i.e. the (INV) +/// IsDecomposedBy relationship shall be utilzed. +class IFC_PARSE_API IfcElementAssembly : public IfcElement { +public: + /// A designation of where the assembly is intended to take place defined by an Enum. + boost::optional< ::Ifc4x3_add2::IfcAssemblyPlaceEnum::Value > AssemblyPlace() const; + void setAssemblyPlace(boost::optional< ::Ifc4x3_add2::IfcAssemblyPlaceEnum::Value > v); + /// Predefined generic types for a element assembly that are specified in an enumeration. There might be property sets defined specifically for each predefined type. + /// + /// IFC2x4 CHANGE  The attribute has been changed to be optional. + boost::optional< ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcElementAssembly (IfcEntityInstanceData* e); + IfcElementAssembly (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcAssemblyPlaceEnum::Value > v9_AssemblyPlace, boost::optional< ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::Value > v10_PredefinedType); + typedef aggregate_of< IfcElementAssembly > list; +}; +/// Definition from IAI: The IfcElementAssemblyType +/// defines a list of commonly shared property set definitions of an +/// element and an optional set of product representations. It is +/// used to define an element specification (i.e. the specific +/// product information, that is common to all occurrences of that +/// product type). +/// NOTE The product representations are defined +/// as representation maps (at the level of the supertype +/// IfcTypeProduct, which gets assigned by an element +/// occurrence instance through the +/// IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// An element assembly type is used to define the common +/// properties of a certain type of an element assembly that may be +/// applied to many instances of that type to assign a specific +/// style. An element assembly types (or the instantiable subtypes) +/// may be exchanged without being already assigned to +/// occurrences. +/// The occurrences of the IfcElementAssemblyType are +/// represented by instances of IfcElementAssembly. +/// HISTORY New entity in +/// Release IFC2x Edition 4. +class IFC_PARSE_API IfcElementAssemblyType : public IfcElementType { +public: + /// Predefined types to define the particular type of the transport element. There may be property set definitions available for each predefined type. + ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcElementAssemblyTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcElementAssemblyType (IfcEntityInstanceData* e); + IfcElementAssemblyType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcElementAssemblyTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcElementAssemblyType > list; +}; +/// An element component is a representation for minor items included in, added to or connecting to or between +/// elements, which usually are not of interest from the overall building structure viewpoint. +/// However, these small parts may have vital and load carrying functions within the construction. +/// These items do not provide any actual space boundaries. +/// Typical examples of IfcElementComponents include different kinds of fasteners and various accessories. +/// +/// HISTORY New entity in IFC Release 2x2 +/// +/// It is often desirable to model a number of same-shaped element components by means of a single +/// occurrence object, e.g. several bolts within a connection or a row of reinforcement elements. +/// In this IFC release, this is possible by means of multiple mapped representation as documented below. +/// +/// To express the multiplicity of element components also on a higher semantic level, +/// an IfcElementQuantity should be provided via IfcRelDefinesByProperties. +/// The quantity should contain an IfcQuantityCount named 'Count' with the number of components. +/// +/// Geometry Use Definition +/// +/// The geometric representation of IfcElementComponent is given by the IfcProductDefinitionShape, +/// allowing multiple geometric representations. Included are: +/// +/// Local Placement +/// The local placement for IfcElementComponent is defined in its supertype IfcProduct. +/// It is defined by the IfcLocalPlacement, which defines the local coordinate system that is +/// referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of IfcLocalPlacement shall point (if given) to +/// the local placement of the same IfcElement or IfcElementAssembly, which is +/// used in the Decomposes inverse attribute, i.e. the local placement is defined relative to +/// the local placement of the element or element assembly in which the component is contained. +/// If the relative placement is not used, the absolute placement is defined within the world coordinate system. +/// +/// Surface Model Representation +/// +/// Any IfcElementComponent (if no further constraints are defined at the level of its subtypes) +/// may be represented as a single or multiple surface models, based on either shell or face based models. +/// The following attribute values for the IfcShapeRepresentation holding this geometric representation +/// shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'SurfaceModel' +/// +/// Brep Representation +/// +/// Any IfcElementComponent (if no further constraints are defined at the level of its subtypes) +/// may be represented as a single or multiple Boundary Representation elements (which are restricted to faceted +/// Brep with or without voids). The Brep representation allows for the representation of complex element shape. +/// The following attribute values for the IfcShapeRepresentation holding this geometric representation +/// shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'Brep' +/// +/// Mapped Representation +/// +/// The mapped item, IfcMappedItem, should be used if appropriate as it allows for reusing the geometry +/// definition of a type at occurrences of the same type. +/// The following attribute values for the IfcShapeRepresentation holding this geometric representation +/// shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'MappedRepresentation' +/// +/// Multiple Mapped Representation +/// +/// A single instance of a subtype of IfcElementComponent can stand for several +/// actual element components at once. In this case, the IfcShapeRepresentation +/// contains as many mapped items as there are element components combined within this +/// occurrence object: +/// +/// Figure 151 illustrates multiple components modeled as a single occurrence object (here: IfcFastener) +/// +/// Figure 151 — Element component mapped representation +/// +/// Representation identifier and type are the same as in single mapped representation. +/// The number of mapped items in the representation corresponds with the count of +/// element components in the IfcElementQuantity. +class IFC_PARSE_API IfcElementComponent : public IfcElement { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcElementComponent (IfcEntityInstanceData* e); + IfcElementComponent (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcElementComponent > list; +}; +/// Definition from IAI: +/// The element type (IfcElementComponentType) represents the supertype for element +/// types which define lists of commonly shared property set definitions of various small parts and accessories and an optional set of product +/// representations. It is used to define a supporting element mainly within +/// structural and building services domains (i.e. the specific type information +/// common to all occurrences of that type). +/// +/// HISTORY New entity in IFC +/// Release 2x2 +class IFC_PARSE_API IfcElementComponentType : public IfcElementType { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcElementComponentType (IfcEntityInstanceData* e); + IfcElementComponentType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType); + typedef aggregate_of< IfcElementComponentType > list; +}; +/// Definition from ISO/CD 10303-42:1992: An ellipse (IfcEllipse) is a conic section defined by the lengths of the semi-major and semi-minor diameters and the position (center or mid point of the line joining the foci) and orientation of the curve. Interpretation of the data shall be as follows: +/// +/// C = SELF\IfcConic.Position.Location +/// x = SELF\IfcConic.Position.P[1] +/// y = SELF\IfcConic.Position.P[2] +/// z = SELF\IfcConic.Position.P[3] +/// R1 = SemiAxis1 +/// R2 = SemiAxis2 +/// and the ellipse is parameterized as: +/// +/// The parameterization range is 0 £ +/// u £ 2p (or 0 +/// £ u £ +/// 360 degree). In the placement coordinate system defined above, the ellipse is +/// the equation C = 0, where +/// +/// The positive sense of the ellipse at any point is in the tangent direction, T, to the curve at the point, where +/// +/// The inherited Position.Location from IfcConic is the center of the IfcEllipse, and the inherited Position.P[1] from IfcConic the direction of the SemiAxis1. +/// +/// NOTE  Corresponding ISO 10303 entity: ellipse. Please refer to ISO/IS 10303-42:1994, p. 39 for the final definition of the formal standard. +/// +/// HISTORY  New class in IFC Release 1.0 +/// +/// Figure 280 illustrates the definition of the IfcEllipse within the (in this case three-dimensional) position coordinate system. +/// +/// Figure 280 — Ellipse geometry +class IFC_PARSE_API IfcEllipse : public IfcConic { +public: + /// The first radius of the ellipse which shall be positive. Placement.Axes[1] gives the direction of the SemiAxis1. + double SemiAxis1() const; + void setSemiAxis1(double v); + /// The second radius of the ellipse which shall be positive. + double SemiAxis2() const; + void setSemiAxis2(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcEllipse (IfcEntityInstanceData* e); + IfcEllipse (::Ifc4x3_add2::IfcAxis2Placement* v1_Position, double v2_SemiAxis1, double v3_SemiAxis2); + typedef aggregate_of< IfcEllipse > list; +}; +/// The element type IfcEnergyConversionType defines a list of commonly shared property +/// set definitions of an energy conversion device and an optional set of product representations. +/// It is used to define an energy conversion device specification (i.e. the specific product +/// information, that is common to all occurrences of that product type). +/// +/// NOTE: The product representations are defined as +/// representation maps (at the level of the supertype IfcTypeProduct, which +/// get assigned by an element occurrence instance through the +/// IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// +/// A energy conversion type is used to define the common properties of a +/// energy conversion device that may be applied to many occurrences of that type. +/// An energy conversion device is a building systems device that converts energy from one form into another such +/// as a boiler (i.e., combusting gas to heat water), chiller (i.e., using a refrigeration cycle to cool a +/// liquid), or a cooling coil (i.e., using the phase-change characteristics of a refrigerant to cool air). +/// Energy conversion types (or the instantiable subtypes) may be exchanged +/// without being already assigned to occurrences. +/// +/// The occurrences of the IfcEnergyConversionType are represented +/// by instances of IfcEnergyConversionDevice. +/// +/// HISTORY: New entity in IFC Release 2x2. +class IFC_PARSE_API IfcEnergyConversionDeviceType : public IfcDistributionFlowElementType { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcEnergyConversionDeviceType (IfcEntityInstanceData* e); + IfcEnergyConversionDeviceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType); + typedef aggregate_of< IfcEnergyConversionDeviceType > list; +}; +/// The energy conversion device type IfcEngineType defines commonly shared information for occurrences of engines. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a engine specification (i.e. the specific product information, that is common to all occurrences of that product type). Engine types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcEngineType are represented by instances of IfcEngine. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcEnergyConversionDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_EngineTypeCommon +/// +/// Material Use Definition +/// The material of the IfcEngineType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcEngineType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcEngine for standard port definitions. +class IFC_PARSE_API IfcEngineType : public IfcEnergyConversionDeviceType { +public: + ::Ifc4x3_add2::IfcEngineTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcEngineTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcEngineType (IfcEntityInstanceData* e); + IfcEngineType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcEngineTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcEngineType > list; +}; +/// The energy conversion device type IfcEvaporativeCoolerType defines commonly shared information for occurrences of evaporative coolers. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a evaporative cooler specification (i.e. the specific product information, that is common to all occurrences of that product type). Evaporative Cooler types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcEvaporativeCoolerType are represented by instances of IfcEvaporativeCooler. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcEnergyConversionDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_EvaporativeCoolerTypeCommon +/// +/// Material Use Definition +/// The material of the IfcEvaporativeCoolerType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Media': Heat exchanger media material. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcEvaporativeCoolerType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcEvaporativeCooler for standard port definitions. +class IFC_PARSE_API IfcEvaporativeCoolerType : public IfcEnergyConversionDeviceType { +public: + /// Defines the type of evaporative cooler. + ::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcEvaporativeCoolerType (IfcEntityInstanceData* e); + IfcEvaporativeCoolerType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcEvaporativeCoolerType > list; +}; +/// The energy conversion device type IfcEvaporatorType defines commonly shared information for occurrences of evaporators. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a evaporator specification (i.e. the specific product information, that is common to all occurrences of that product type). Evaporator types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcEvaporatorType are represented by instances of IfcEvaporator. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcEnergyConversionDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_EvaporatorTypeCommon +/// +/// Material Use Definition +/// The material of the IfcEvaporatorType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Refrigerant': Refrigerant material. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcEvaporatorType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcEvaporator for standard port definitions. +class IFC_PARSE_API IfcEvaporatorType : public IfcEnergyConversionDeviceType { +public: + /// Defines the type of evaporator. + ::Ifc4x3_add2::IfcEvaporatorTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcEvaporatorTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcEvaporatorType (IfcEntityInstanceData* e); + IfcEvaporatorType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcEvaporatorTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcEvaporatorType > list; +}; +/// An IfcEvent is something +/// that happens that triggers an action or response. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Use definitions +/// +/// IfcEvent is used to capture information about +/// particular things that happen or that may happen. +/// Particularly used in work plans (or process maps) they +/// identify e.g. a point at which a message containing +/// information may be issued or at which a rule or constraint +/// is invoked. +/// +/// Type use definition +/// +/// IfcEvent defines the anticipated or actual occurrence of +/// any event; common information about event types is handled +/// by IfcEventType. The IfcEventType (if present) may +/// establish the common type name, usage (or predefined) type, +/// common set of properties, and common product assignment +/// using IfcRelAssignsToProduct. The IfcEventType is attached +/// using the IfcRelDefinesByType.RelatingType objectified +/// relationship and is accessible by the inverse IsTypedBy +/// attribute. +/// +/// Property set use definition +/// +/// The property sets relating to IfcEvent are defined by +/// IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. They are accessible +/// by the inverse IsDefinedBy relationship. Such property sets +/// may define event parameters. No property sets for IfcEvent +/// are currently defined by IFC. +/// +/// Connectivity use definition +/// +/// The relationship IfcRelSequence is used to indicate control +/// flow. An IfcEvent as a predecessor +/// (IfcRelSequence.RelatingProcess) indicates that the +/// succeeding process (typically IfcProcedure or IfcTask) is +/// triggered in response to the event. An IfcEvent as a +/// successor (IfcRelSequence.RelatedProcess) indicates that +/// the completion of the preceeding process causes the event +/// to be triggered. As events have zero duration, the +/// IfcRelSequence.SequenceType attribute has no effect on an +/// IfcEvent but still applies to the opposite end of the +/// relationship if IfcTask is used. +/// +/// Composition use definition +/// +/// IfcEvent may be contained within an IfcTask using the +/// IfcRelNests relationship. The event is considered active +/// during the time period of the enclosing task (including any +/// assigned IfcWorkCalendar); that is such event may be +/// triggered within the task time period but not outside of +/// it. As an IfcEvent is considered to be atomic, no use is +/// anticipated for nesting processes inside the event. +/// +/// Assignment use definition +/// +/// An IfcEvent may be assigned to an IfcWorkCalendar to +/// indicate times when such event is active using +/// IfcRelAssignsToControl; otherwise the effective calendar is +/// determined by the nearest IfcProcess ancestor with a +/// calendar assigned. +/// +/// For building operation scenarios, IfcEvent may be assigned +/// to a product (IfcElement subtype) using +/// IfcRelAssignsToProduct to indicate a specific product +/// occurrence that sources the event. For example, an +/// IfcSensor for a motion sensor may have a "Motion Sensed" +/// event. If the IfcEvent is defined by an IfcEventType and +/// the IfcEventType is assigned to a product type (using +/// IfcRelAssignsToProduct), then the IfcEvent must be assigned +/// to one or more occurrences of the specified product type +/// using IfcRelAssignsToProduct. +class IFC_PARSE_API IfcEvent : public IfcProcess { +public: + /// Identifies the predefined types of an event from which + /// the type required may be set. + boost::optional< ::Ifc4x3_add2::IfcEventTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcEventTypeEnum::Value > v); + /// Identifies the predefined types of event trigger from which + /// the type required may be set. + boost::optional< ::Ifc4x3_add2::IfcEventTriggerTypeEnum::Value > EventTriggerType() const; + void setEventTriggerType(boost::optional< ::Ifc4x3_add2::IfcEventTriggerTypeEnum::Value > v); + /// A user defined event trigger type, the value of which is + /// asserted when the value of an event trigger type is declared + /// as USERDEFINED. + boost::optional< std::string > UserDefinedEventTriggerType() const; + void setUserDefinedEventTriggerType(boost::optional< std::string > v); + /// The date and/or time at which an event occurs. + ::Ifc4x3_add2::IfcEventTime* EventOccurenceTime() const; + void setEventOccurenceTime(::Ifc4x3_add2::IfcEventTime* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcEvent (IfcEntityInstanceData* e); + IfcEvent (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, boost::optional< ::Ifc4x3_add2::IfcEventTypeEnum::Value > v8_PredefinedType, boost::optional< ::Ifc4x3_add2::IfcEventTriggerTypeEnum::Value > v9_EventTriggerType, boost::optional< std::string > v10_UserDefinedEventTriggerType, ::Ifc4x3_add2::IfcEventTime* v11_EventOccurenceTime); + typedef aggregate_of< IfcEvent > list; +}; +/// Definition from IAI: The external spatial structure +/// element is an abstract entity provided for different kind of +/// external spaces, regions, and volumes. +/// HISTORY New entity in +/// IFC2x4. +class IFC_PARSE_API IfcExternalSpatialStructureElement : public IfcSpatialElement { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcExternalSpatialStructureElement (IfcEntityInstanceData* e); + IfcExternalSpatialStructureElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName); + typedef aggregate_of< IfcExternalSpatialStructureElement > list; +}; +/// Definition from ISO/CD 10303-42:1992: A faceted B-rep +/// is a simple form of boundary representation model in which all +/// faces are planar and all edges are straight lines. Unlike the +/// B-rep model, edges and vertices are not represented explicitly in +/// the model but are implicitly available through the poly loop +/// entity. A faceted B-rep has to meet the same topological +/// constraints as the manifold solid B-rep. +/// +/// NOTE The faceted B-rep has been introduced in order to support the larger number of systems that allow boundary type solid representations with planar surfaces only. +/// +/// NOTE Corresponding ISO 10303-42 entity: faceted_brep. Please refer to ISO/IS 10303-42:1994, p. 173 for the final definition of the formal standard. In the current IFC Release faceted B-rep with voids is represented by an own subtype and not defined via an implicit ANDOR supertype constraint as in ISO/IS 10303-42:1994. This change has been made due to the fact, that only ONEOF supertype constraint is allowed within the IFC data schema. +/// +/// HISTORY  New entity in IFC Release 1.0 +/// +/// Informal proposition: +/// +/// All the bounding loops of all the faces of all the shells in +/// the IfcFacetedBrep shall be of type +/// IfcPolyLoop. +/// All vertices shall be referenced by all polyloops, sharing the vertex. That is, each Cartesian point shall be referenced by at least three polyloops. +/// +/// Figure 257 illustrates use of IfcFacetedBrep for boundary representation models with planar surfaces only. The diagram shows the topological and geometric representation items that are used for faceted breps. Each IfcCartesianPoint, used within the IfcFacetedBrep shall be referenced three times by an IfcPolyLoop bounding a different IfcFace. +/// +/// Figure 257 — Faceted B-rep +class IFC_PARSE_API IfcFacetedBrep : public IfcManifoldSolidBrep { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFacetedBrep (IfcEntityInstanceData* e); + IfcFacetedBrep (::Ifc4x3_add2::IfcClosedShell* v1_Outer); + typedef aggregate_of< IfcFacetedBrep > list; +}; +/// The IfcFacetedBrepWithVoids +/// is a specialization of a faceted B-rep which contains one or more +/// voids in its interior. The voids are represented as closed shells +/// which are defined so that the shell normal point into the +/// void. +/// +/// NOTE Corresponding ISO 10303-42 entity: brep_with_voids (see note above). Please refer to ISO/IS 10303-42:1994, p. 173 for the final definition of the formal standard. In IFC faceted B-rep with voids is represented by this subtype IfcFacetedBrepWithVoids and not defined via an implicit ANDOR supertype constraint as in ISO/IS 10303-42:1994 between an instance of faceted_brep AND brep_with_voids. This change has been made due to the fact, that only ONEOF supertype constraint is allowed within the IFC object model. +/// +/// HISTORY New entity in IFC Release 1.0 +/// +/// IFC2x4 CHANGE Subtyping changed from IfcManifoldSolidBrep to IfcFacetedBrep with upward compatibility for file based exchange. +/// +/// Informal propositions: +/// +/// Each void shell shall be disjoint from the outer shell and +/// from every other void shell +/// Each void shell shall be enclosed within the outer shell but +/// not within any other void shell. In particular the outer shell is +/// not in the set of void shells +/// Each shell in the IfcManifoldSolidBrep shall be +/// referenced only once. +/// All the bounding loops of all the faces of all the shells in +/// the IfcFacetedBrep shall be of type +/// IfcPolyLoop. +class IFC_PARSE_API IfcFacetedBrepWithVoids : public IfcFacetedBrep { +public: + /// Set of closed shells defining voids within the solid. + aggregate_of< ::Ifc4x3_add2::IfcClosedShell >::ptr Voids() const; + void setVoids(aggregate_of< ::Ifc4x3_add2::IfcClosedShell >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFacetedBrepWithVoids (IfcEntityInstanceData* e); + IfcFacetedBrepWithVoids (::Ifc4x3_add2::IfcClosedShell* v1_Outer, aggregate_of< ::Ifc4x3_add2::IfcClosedShell >::ptr v2_Voids); + typedef aggregate_of< IfcFacetedBrepWithVoids > list; +}; + +class IFC_PARSE_API IfcFacility : public IfcSpatialStructureElement { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFacility (IfcEntityInstanceData* e); + IfcFacility (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType); + typedef aggregate_of< IfcFacility > list; +}; + +class IFC_PARSE_API IfcFacilityPart : public IfcSpatialStructureElement { +public: + ::Ifc4x3_add2::IfcFacilityUsageEnum::Value UsageType() const; + void setUsageType(::Ifc4x3_add2::IfcFacilityUsageEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFacilityPart (IfcEntityInstanceData* e); + IfcFacilityPart (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, ::Ifc4x3_add2::IfcFacilityUsageEnum::Value v10_UsageType); + typedef aggregate_of< IfcFacilityPart > list; +}; + +class IFC_PARSE_API IfcFacilityPartCommon : public IfcFacilityPart { +public: + boost::optional< ::Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFacilityPartCommon (IfcEntityInstanceData* e); + IfcFacilityPartCommon (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, ::Ifc4x3_add2::IfcFacilityUsageEnum::Value v10_UsageType, boost::optional< ::Ifc4x3_add2::IfcFacilityPartCommonTypeEnum::Value > v11_PredefinedType); + typedef aggregate_of< IfcFacilityPartCommon > list; +}; +/// Definition from IAI: +/// Representations of fixing parts which are used as fasteners to connect or join elements with +/// other elements. +/// +/// HISTORY New entity in IFC Release 2x2 +/// +/// IFC 2x4 change: +/// Attribute PredefinedType added. +class IFC_PARSE_API IfcFastener : public IfcElementComponent { +public: + /// Subtype of fastener + boost::optional< ::Ifc4x3_add2::IfcFastenerTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcFastenerTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFastener (IfcEntityInstanceData* e); + IfcFastener (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcFastenerTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcFastener > list; +}; +/// Definition from IAI: +/// The element type (IfcFastenerType) defines a list of commonly shared +/// property set definitions of a fastener and an optional set of product +/// representations. It is used to define fasteners mainly within +/// structural and building services domains (i.e. the specific type information +/// common to all occurrences of that type). +/// +/// The occurrences of the IfcFastenerType are represented by +/// instances of IfcFastener. +/// +/// HISTORY New entity in IFC Release 2x2 +/// +/// IFC 2x4 change: +/// Attribute PredefinedType added. +/// Subtype IfcMechanicalFastenerType redefined as direct subtype of IfcElementComponentType. +/// +/// Property Set Use Definition +/// +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// +/// Pset_FastenerWeld (WELD) +class IFC_PARSE_API IfcFastenerType : public IfcElementComponentType { +public: + /// Subtype of fastener + ::Ifc4x3_add2::IfcFastenerTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcFastenerTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFastenerType (IfcEntityInstanceData* e); + IfcFastenerType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcFastenerTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcFastenerType > list; +}; +/// Definition from IAI: Generalization of all existence +/// dependent elements which modify the shape and appearance of the +/// associated master element. The IfcFeatureElement offers +/// the ability to handle shape modifiers as semantic objects within +/// the IFC object model. +/// +/// NOTE The term "feature" has a predefined meaning in a +/// context of "feature-based modeling" and within steel construction +/// work. It is introduced here in a broader sense to cover all +/// existence dependent, but semantically described, modifiers of an +/// element's shape and appearance. It is envisioned that future +/// releases enhance the feature-based capabilities of the IFC +/// model. +/// +/// In contrary to the aggregation, as used in +/// IfcElementAssembly, that defines the aggregate as a +/// container element, that has equally treated parts, the feature +/// concept introduced by IfcFeatureElement defines the master +/// element with subordinate parts as additions, or with voids or +/// cut-outs as subtractions. +/// +/// HISTORY New entity in Release +/// IFC2x Edition 2. +/// NOTE The entity is introduced as an +/// upward compatible extension of the IFC2x platform. It is an +/// intermediate abstract supertype without defining its own explicit +/// attributes. +/// +/// Containment Use Definition +/// As a subordinate part being fully dependent on the master +/// element the IfcFeatureElement shall have no independent +/// containment relationship to the spatial structure. +/// +/// The SELF\IfcElement.ContainedInStructure relationship +/// shall be NIL. +/// +/// Geometry Use Definition +/// The geometric representation of IfcFeatureElement is +/// given by the IfcProductDefinitionShape, allowing multiple +/// geometric representation. +/// Local Placement +/// The local placement for IfcFeatureElement is defined in +/// its supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate +/// system that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if given) to the local +/// placement of the master IfcElement (its relevant +/// subtypes), which is associated to the IfcFeatureElement by +/// the appropriate relationship object. +/// If the relative placement is not used, the absolute placement +/// is defined within the world coordinate system. +/// +/// Geometric Representations +/// Any IfcFeatureElement can be represented by one or +/// several geometric representations. A detailed specification is +/// introduced at the level of subtypes. Only the general +/// representation identifier 'Box' with representation type +/// 'BoundingBox', and representation identifier 'Body' with +/// representation type 'Brep' are defined here. +/// Box Representation +/// Any IfcFeatureElement may be represented as a bounding +/// box, which shows the maximum extend of the body within the +/// coordinated system established by the IfcLocalPlacement. +/// The bounding box representation is the simplest geometric +/// representation available. The following attribute values for the +/// IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'Box' +/// RepresentationType : 'BoundingBox' +/// +/// Body Representation +/// The body representation of any IfcFeatureElement can +/// have the following representation types: 'Brep'. Other +/// representation types might be specified at the level of +/// subtypes. +/// Brep Representation Type +/// Any IfcFeatureElement (so far no further constraints +/// are defined at the level of its subtypes) may be represented as a +/// single or multiple Boundary Representation elements (which are +/// restricted to faceted Brep with or without voids). The Brep +/// representation allows for the representation of complex element +/// shape. The following attribute values for the +/// IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'Brep' +/// +/// In some cases it may be useful to also expose a simple +/// representation as a bounding box representation of the same +/// complex shape. +class IFC_PARSE_API IfcFeatureElement : public IfcElement { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFeatureElement (IfcEntityInstanceData* e); + IfcFeatureElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcFeatureElement > list; +}; +/// Definition from IAI: A specialization of the general +/// feature element, that represents an existence dependent +/// element which modifies the shape and appearance of the +/// associated master element. The +/// IfcFeatureElementAddition offers the ability to +/// handle shape modifiers as semantic objects within the IFC +/// object model that add to the shape of the master element. +/// +/// HISTORY New entity in +/// Release IFC2x Edition 2. +/// NOTE The entity is +/// introduced as an upward compatible extension of the IFC2x +/// platform. It is an intermediate abstract supertype +/// without defining its own explicit +/// attributes. +/// +/// The IfcFeatureElementAddition is associated to its +/// master element by virtue of the objectified relationship +/// IfcRelProjectsElement. This relationship implies a +/// Boolean 'union' operation between the shape of the master +/// element and the shape of the addition feature. +/// +/// Containment use definition +/// +/// The containment to the spatial structure is defined at the +/// level of the supertype IfcFeatureElement +/// +/// Geometry Use Definitions +/// +/// The geometric representation of +/// IfcFeatureElementAddition is given by the +/// IfcProductDefinitionShape, allowing multiple +/// geometric representations. +/// +/// Local Placement +/// +/// The local placement for IfcFeatureElementAddition is +/// defined in its supertype IfcProduct. It is defined +/// by the IfcLocalPlacement, which defines the local +/// coordinate system that is referenced by all geometric +/// representations. The local placement is always defined in +/// relation to the local placement of the element to which the +/// feature element is added: +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point to the local placement +/// of the same IfcElement, which is used in the +/// HasAdditionFeature.RelatingElement inverse +/// attribute. +/// +/// Shape Representation +/// +/// The geometry use definitions for the shape representation +/// of the IfcFeatureElementAddition is given at the +/// level of its subtypes. +class IFC_PARSE_API IfcFeatureElementAddition : public IfcFeatureElement { +public: + aggregate_of< IfcRelProjectsElement >::ptr ProjectsElements() const; // INVERSE IfcRelProjectsElement::RelatedFeatureElement + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFeatureElementAddition (IfcEntityInstanceData* e); + IfcFeatureElementAddition (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcFeatureElementAddition > list; +}; +/// The IfcFeatureElementSubtraction is specialization of +/// the general feature element, that represents an existence dependent +/// elements which modifies the shape and appearance of the associated +/// master element. The IfcFeatureElementSubtraction offers the +/// ability to handle shape modifiers as semantic objects within the +/// IFC object model that subtract from the shape of the master +/// element. +/// +/// A single subtraction feature +/// such as the subtype IfcOpeningElement is assigned by a +/// single subtraction relationship IfcRelVoidsElement to one +/// occurrences of IfcElement. It establishes a 1:1 +/// relationship between the opening and the element. An element may +/// have several IfcRelVoidsElement relationships, enabling +/// several voids. +/// +/// The voiding relationship between a master element and a +/// subtraction feature is geometrically resolved by a Boolean +/// difference operation. +/// +/// HISTORY New entity in +/// Release IFC2x Edition 2. +/// +/// Containment use definition +/// The IfcFeatureElementSubtraction shall have no +/// independent containment relationship to the spatial structure. See +/// explanation at supertype IfcFeatureElement +/// Geometry Use Definitions +/// The geometric representation of +/// IfcFeatureElementSubtraction is given by the +/// IfcProductDefinitionShape, allowing multiple geometric +/// representations. +/// Local Placement +/// The local placement for IfcFeatureElementSubtraction is +/// defined in its supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate system +/// that is referenced by all geometric representations. The local +/// placement is always defined in relation to the local placement of +/// the building element from which the feature element substration is +/// substracted: +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if given) to the local +/// placement of the same IfcElement, which is used in the +/// VoidsElements.RelatingElement inverse attribute. +/// +/// Shape Representation +/// The geometry use definitions for the shape representation of the +/// IfcFeatureElementSubtraction is given at the level of its +/// subtypes. +class IFC_PARSE_API IfcFeatureElementSubtraction : public IfcFeatureElement { +public: + aggregate_of< IfcRelVoidsElement >::ptr VoidsElements() const; // INVERSE IfcRelVoidsElement::RelatedOpeningElement + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFeatureElementSubtraction (IfcEntityInstanceData* e); + IfcFeatureElementSubtraction (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcFeatureElementSubtraction > list; +}; +/// The element type IfcFlowControllerType defines a list of commonly shared property +/// set definitions of a flow controller and an optional set of product representations. +/// It is used to define a flow controller specification (i.e. the specific product +/// information, that is common to all occurrences of that product type). +/// +/// NOTE: The product representations are defined as +/// representation maps (at the level of the supertype IfcTypeProduct, which +/// get assigned by an element occurrence instance through the +/// IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// +/// A flow controller type is used to define the common properties of a +/// flow controller that may be applied to many occurrences of that type. +/// A flow controller is a device that regulates flow within a distribution system, such as a valve in a piping +/// system, modulating damper in an air distribution system, or electrical switch in an electrical distribution +/// system. Flow controller types (or the instantiable subtypes) may be exchanged +/// without being already assigned to occurrences. +/// +/// The occurrences of the IfcFlowControllerType are represented +/// by instances of IfcFlowController or its subtypes. +/// +/// HISTORY: New entity in IFC Release 2x2. +class IFC_PARSE_API IfcFlowControllerType : public IfcDistributionFlowElementType { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFlowControllerType (IfcEntityInstanceData* e); + IfcFlowControllerType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType); + typedef aggregate_of< IfcFlowControllerType > list; +}; +/// The element type IfcFlowFittingType defines a list of commonly shared property +/// set definitions of a flow fitting and an optional set of product representations. +/// It is used to define a flow fitting specification (i.e. the specific product +/// information, that is common to all occurrences of that product type). +/// +/// NOTE: The product representations are defined as +/// representation maps (at the level of the supertype IfcTypeProduct, which +/// get assigned by an element occurrence instance through the +/// IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// +/// A flow fitting type is used to define the common properties of a +/// flow fitting that may be applied to many occurrences of that type. +/// A flow fitting is a device that is used to interconnect flow segments or other fittings within a distribution +/// system, such as a tee in a ducted system that branches flow into two directions, a junction box in an +/// electrical distribution system, etc. +/// Flow fitting types (or the instantiable subtypes) may be exchanged +/// without being already assigned to occurrences. +/// +/// The occurrences of the IfcFlowFittingType are represented +/// by instances of IfcFlowFitting or its subtypes. +/// +/// HISTORY: New entity in IFC Release 2x2. +class IFC_PARSE_API IfcFlowFittingType : public IfcDistributionFlowElementType { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFlowFittingType (IfcEntityInstanceData* e); + IfcFlowFittingType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType); + typedef aggregate_of< IfcFlowFittingType > list; +}; +/// The flow controller type IfcFlowMeterType defines commonly shared information for occurrences of flow meters. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a flow meter specification (i.e. the specific product information, that is common to all occurrences of that product type). Flow Meter types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcFlowMeterType are represented by instances of IfcFlowMeter. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowControllerType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_FlowMeterTypeCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_FlowMeterTypeEnergyMeter (ENERGYMETER) +/// Pset_FlowMeterTypeGasMeter (GASMETER) +/// Pset_FlowMeterTypeOilMeter (OILMETER) +/// Pset_FlowMeterTypeWaterMeter (WATERMETER) +/// +/// Material Use Definition +/// The material of the IfcFlowMeterType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcFlowMeterType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcFlowMeter for standard port definitions. +class IFC_PARSE_API IfcFlowMeterType : public IfcFlowControllerType { +public: + /// Defines the type of flow meter. + ::Ifc4x3_add2::IfcFlowMeterTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcFlowMeterTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFlowMeterType (IfcEntityInstanceData* e); + IfcFlowMeterType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcFlowMeterTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcFlowMeterType > list; +}; +/// The element type IfcFlowMovingDeviceType defines a list of commonly shared property +/// set definitions of a flow moving device and an optional set of product representations. +/// It is used to define a flow moving device specification (i.e. the specific product +/// information, that is common to all occurrences of that product type). +/// +/// NOTE: The product representations are defined as +/// representation maps (at the level of the supertype IfcTypeProduct, which +/// get assigned by an element occurrence instance through the +/// IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// +/// A flow moving type is used to define the common properties of a +/// flow moving device that may be applied to many occurrences of that type. +/// A flow moving device is a device that is used to produce a pressure differential in a distribution system, +/// such as a pump, fan, compressor, etc. +/// Flow moving types (or the instantiable subtypes) may be exchanged +/// without being already assigned to occurrences. +/// +/// The occurrences of the IfcFlowMovingDeviceType are represented +/// by instances of IfcFlowMovingDevice. +/// +/// HISTORY: New entity in IFC Release 2x2. +class IFC_PARSE_API IfcFlowMovingDeviceType : public IfcDistributionFlowElementType { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFlowMovingDeviceType (IfcEntityInstanceData* e); + IfcFlowMovingDeviceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType); + typedef aggregate_of< IfcFlowMovingDeviceType > list; +}; +/// The element type IfcFlowSegmentType defines a list of commonly shared property +/// set definitions of a flow segment and an optional set of product representations. +/// It is used to define a flow segment specification (i.e. the specific product +/// information, that is common to all occurrences of that product type). +/// +/// NOTE: The product representations are defined as +/// representation maps (at the level of the supertype IfcTypeProduct, which +/// get assigned by an element occurrence instance through the +/// IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// +/// A flow segment type is used to define the common properties of a +/// flow segment that may be applied to many occurrences of that type. +/// A flow segment is a section of a distribution system, such as a duct, pipe, conduit, etc. that typically has +/// only two ports. +/// Flow segment types (or the instantiable subtypes) may be exchanged +/// without being already assigned to occurrences. +/// +/// The occurrences of the IfcFlowSegmentType are represented +/// by instances of IfcFlowSegment or its subtypes. +/// +/// HISTORY: New entity in IFC Release 2x2. +/// +/// Material Use Definition +/// The material of the IfcDistributionFlowSegmentType is defined using one of the following entities: +/// +/// IfcMaterialProfileSet : This defines the material cross section which may be used to generate the 'Body' representation at occurrences (for parametric definitions not having representation), or for analysis purposes. +/// +/// IfcMaterialConstituentSet : For elements containing multiple materials where profiles are not applicable, this indicates materials at named aspects. +/// +/// IfcMaterial : For elements comprised of a single material where profiles are not applicable, this indicates the material. +class IFC_PARSE_API IfcFlowSegmentType : public IfcDistributionFlowElementType { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFlowSegmentType (IfcEntityInstanceData* e); + IfcFlowSegmentType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType); + typedef aggregate_of< IfcFlowSegmentType > list; +}; +/// The element type IfcFlowStorageDeviceType defines a list of commonly shared property set definitions of a flow storage device and an optional set of product representations. It is used to define a flow storage device specification (the specific product information that is common to all occurrences of that product type). +/// +/// A flow storage device is a device used for the temporary storage of a fluid (such as a tank) or the voltage potential induced by the induced electron flow (such as a battery). Flow storage types (or the instantiable subtypes) may be exchanged without being already assigned to occurrences. +/// +/// The occurrences of the IfcFlowStorageDeviceType are represented by instances of IfcFlowStorageDevice or its subtypes. +/// +/// HISTORY: New entity in IFC Release 2x2. +class IFC_PARSE_API IfcFlowStorageDeviceType : public IfcDistributionFlowElementType { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFlowStorageDeviceType (IfcEntityInstanceData* e); + IfcFlowStorageDeviceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType); + typedef aggregate_of< IfcFlowStorageDeviceType > list; +}; +/// The element type IfcFlowTerminalType defines a list of commonly shared property set definitions of a flow terminal and an optional set of product representations. It is used to define a flow terminal specification (the specific product information that is common to all occurrences of that product type). +/// +/// A flow terminal type is used to define the common properties of a flow terminal that may be applied to many occurrences of that type. A flow terminal acts as a terminus or beginning element in a distribution system such as a ceiling register in a ducted air distribution system, a sink in a waste-water system, or a light fixture in an electrical lighting system. Flow terminal types (or the instantiable subtypes) may be exchanged without being already assigned to occurrences. +/// +/// The occurrences of the IfcFlowTerminalType are represented by instances of IfcFlowTerminal or its subtypes. +/// +/// HISTORY: New entity in IFC Release 2x2. +class IFC_PARSE_API IfcFlowTerminalType : public IfcDistributionFlowElementType { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFlowTerminalType (IfcEntityInstanceData* e); + IfcFlowTerminalType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType); + typedef aggregate_of< IfcFlowTerminalType > list; +}; +/// The element type IfcFlowTreatmentDeviceType defines a list of commonly shared property set definitions of a flow treatment device and an optional set of product representations. It is used to define a flow treatment device specification (the specific product information that is common to all occurrences of that product type). +/// +/// A flow treatment device is a device used to change the physical properties of the medium, such as an air, oil +/// or water filter (used to remove particulates from the fluid), or a duct silencer (used to attenuate noise). Flow treatment types (or the instantiable subtypes) may be exchanged without being already assigned to occurrences. +/// +/// The occurrences of the IfcFlowTreatmentDeviceType are represented by instances of IfcFlowTreatmentDevice or its subtypes. +/// +/// HISTORY: New entity in IFC Release 2x2. +class IFC_PARSE_API IfcFlowTreatmentDeviceType : public IfcDistributionFlowElementType { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFlowTreatmentDeviceType (IfcEntityInstanceData* e); + IfcFlowTreatmentDeviceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType); + typedef aggregate_of< IfcFlowTreatmentDeviceType > list; +}; +/// Definition from IAI: Provides shared material, decomposition, representation maps, and property sets for instances of IfcFooting. +/// +/// HISTORY New entity in IFC Release 2x4 +/// +/// Note, slab foundation types are not instantiated as IfcFootingType but as IfcSlabType with a predefined type of IfcSlabTypeEnum.BASESLAB. +/// +/// Material Use Definition: +/// +/// Material profile set or material layer set association analogous to IfcBeamStandardCase or IfcSlabStandardCase should be used when applicable. +class IFC_PARSE_API IfcFootingType : public IfcBuiltElementType { +public: + /// Subtype of footing. + ::Ifc4x3_add2::IfcFootingTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcFootingTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFootingType (IfcEntityInstanceData* e); + IfcFootingType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcFootingTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcFootingType > list; +}; +/// Definition from IAI: Generalization of all furniture +/// related objects. Furnishing objects are characterized as +/// being +/// +/// pre-manufactured and assembled on-site, or +/// manufactured on-site (built-in) +/// +/// Thus furnishing elements can either be movable, or not (as the +/// built-ins). +/// HISTORY New entity in +/// IFC Release 2x. +/// IFC2x4 CHANGE The entity is marked +/// as deprecated for instantiation - will be made ABSTRACT after +/// IFC2x4. +/// Geometry Use Definitions: +/// The geometric representation of IfcFurnishingElement is +/// given by the IfcProductDefinitionShape and +/// IfcLocalPlacement allowing multiple geometric +/// representation. +/// Local Placement +/// The local placement for IfcFurnishingElement is defined +/// in its supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate +/// system that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if given) to the local +/// placement of the same IfcSpatialStructureElement , which +/// is used in the ContainedInStructure inverse attribute, or +/// to a spatial structure element at a higher level, referenced by +/// that. +/// If the relative placement is not used, the absolute placement +/// is defined within the world coordinate system. +/// +/// Geometric Representations +/// Any IfcFurnishingElement can be represented by one or +/// several geometric representations. This includes the general +/// representation types 'BoundingBox', 'GeometricCurveSet', +/// 'SurfaceModel', 'Brep', and 'MappedRepresentation' being defined +/// here. +/// Bounding Box Representation +/// Any IfcFurnishingElement may be represented as a +/// bounding box, which shows the maximum extend of the body within +/// the coordinated system established by the +/// IfcLocalPlacement. The bounding box representation is the +/// simplest geometric representation available. The following +/// attribute values for the IfcShapeRepresentation holding +/// this geometric representation shall be used: +/// +/// RepresentationIdentifier : 'Box' +/// RepresentationType : 'BoundingBox' +/// +/// Foot Print Representation +/// The foot print representation of IfcFurnishingElement +/// is given by either a single or multiple 2D points and curves. The +/// representation identifier and type of this geometric +/// representation are: +/// +/// IfcShapeRepresentation.RepresentationIdentifier = +/// 'FootPrint' +/// IfcShapeRepresentation.RepresentationType = +/// 'GeometricCurveSet' +/// +/// SurfaceModel Representation +/// Any IfcFurnishingElement (so far no further constraints +/// are defined at the level of its subtypes) may be represented as a +/// single or multiple surface models, based on either shell or face +/// based models. In some cases it may be useful to also expose a +/// simple representation as a bounding box representation of the +/// same complex shape. The representation identifier and type of +/// this geometric representation are: +/// +/// IfcShapeRepresentation.RepresentationIdentifier = +/// 'Body' +/// IfcShapeRepresentation.RepresentationType = +/// 'SurfaceModel' +/// +/// Brep Representation +/// Any IfcFurnishingElement (so far no further constraints +/// are defined at the level of its subtypes) may be represented as a +/// single or multiple Boundary Representation elements (which are +/// restricted to faceted Brep with or without voids). The Brep +/// representation allows for the representation of complex element +/// shape. In some cases it may be useful to also expose a simple +/// representation as a bounding box representation of the same +/// complex shape. The representation identifier and type of this +/// geometric representation are: +/// +/// IfcShapeRepresentation.RepresentationIdentifier = +/// 'Body' +/// IfcShapeRepresentation.RepresentationType = +/// 'Brep' +/// +/// MappedRepresentation +/// The IfcMappedItem should always be used in appropriate +/// cases as it allows for reusing the geometry definition of the +/// furnishing type for all occurrences of the same type. The +/// representation identifier and type of this geometric +/// representation are: +/// +/// IfcShapeRepresentation.RepresentationIdentifier = +/// 'FootPrint', or 'Body' (depending of the representation map) +/// IfcShapeRepresentation.RepresentationType = +/// 'MappedRepresentation' +class IFC_PARSE_API IfcFurnishingElement : public IfcElement { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFurnishingElement (IfcEntityInstanceData* e); + IfcFurnishingElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcFurnishingElement > list; +}; +/// Furniture defines complete furnishings such as a table, desk, chair, or cabinet, which may or may not be permanently attached to a building structure. +/// +/// Occurrences of furniture that are built in (where the property Pset_FurnitureTypeCommon.IsBuiltIn is asserted to be TRUE) should have their connection relationship with a building element occurrence defined through the IfcRelConnectsElements relationship.HISTORY: New entity in IFC2x2 +/// +/// Type Use Definition +/// IfcFurniture defines the occurrence of any furniture; common information about furniture types is handled by IfcFurnitureType. The IfcFurnitureType (if present) may establish the common type name, usage (predefined type), properties, materials, composition, assignments, and representations. The IfcFurnitureType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. If the IfcFurnitureType has aggregated elements, such objects are reflected at the IfcFurniture occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. They are accessible by the IsDefinedBy inverse attribute. Property sets may also be specified at the IfcFurnitureType, defining the common property data for all occurrences of the same type. They are then accessible by the IsTypedBy inverse attribute pointing to IfcFurnitureType.HasPropertySets. If both are given, then the properties directly defined at IfcFurniture override the properties defined at IfcFurnitureType. Refer to the documentation at the supertype IfcFurnishingElement and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_FurnitureTypeCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_FurnitureTypeChair (CHAIR) +/// Pset_FurnitureTypeDesk (DESK) +/// Pset_FurnitureTypeFileCabinet (FILECABINET) +/// Pset_FurnitureTypeTable (TABLE) +/// +/// Material Use Definition +/// The material of the IfcFurniture is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcFurnitureType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Finish': The finish, typically at visible aspects of the furniture. +/// 'Frame': The frame from which the object is constructed. +/// 'Hardware': Finish hardware such as knobs or handles. +/// 'Padding': Padding such as cushions. +/// 'Panel': Panels such as glass. +/// +/// Composition Use Definition +/// The IfcFurniture may be decomposed into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcFurniture and RelatedObjects contains one or more components. Composition use is defined for the following predefined types: +/// +/// (All Types): May contain IfcSystemFurnitureElement components. Modular furniture may be aggregated into components. +class IFC_PARSE_API IfcFurniture : public IfcFurnishingElement { +public: + boost::optional< ::Ifc4x3_add2::IfcFurnitureTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcFurnitureTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFurniture (IfcEntityInstanceData* e); + IfcFurniture (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcFurnitureTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcFurniture > list; +}; +/// Definition from IAI: An IfcGeographicElement is +/// a generalization of all elements within a geographical landscape. +/// It includes occurrences of typical geographical element, often +/// referred to as features, such as roads, zones, trees, etc. Common +/// type information behind several occurrences of +/// IfcGeographicElement is provided by the +/// IfcGeographicElementType. +/// HISTORY New entity in +/// Release IFC2x4. +/// Type Use Definition +/// An IfcGeographicElement defines the occuurence of any +/// element within a geographic landscape, common information about +/// geographic elements is handled by +/// IfcGeographicElementType. The +/// IfcGeographicElementType (if present) may establish the +/// commontype name, usage (or predefined) type, common set of +/// properties and common shape representations (using +/// IfcRepresentationMap). The IfcGeographicElementType +/// is attached using the IfcRelDefinedByType.RelatingType +/// objectified relationship and is accessible by the inverse +/// IsDefinedBy attribute. +/// Classification Use Definition +/// An IfcGeographicElement might be further qualified by +/// referencing a feature catalog as a particular classification. The +/// feature classification is assigned using the inverse relationship +/// HasAssociations pointing to +/// IfcClassificationReference. The attributes should have the +/// following meaning: +/// +/// Catalog : IfcClassification.Name +/// Identity: +/// IfcClassificationReference.ItemReference +/// ElementName: IfcClassificationReference.Name +/// if there is a differentiation between an main element and a +/// sub element without a unique notation facet, then the main +/// element and sub element(s) can be established by using the +/// subtype +/// +/// IfcClassificationReferenceWithFacets.ItemReferenceFacets +/// +/// Containment Use Definition +/// The IfcGeographicElement, as any subtype of +/// IfcElement, may participate in two different containment +/// relationships. The first (and in most implementation scenarios +/// mandatory) relationship is the hierachical spatial containment, +/// the second (optional) relationship is the aggregation within +/// anelement assembly. +/// +/// The IfcGeographicElement is places within the project +/// spatial hierarchy using the objectified relationship +/// IfcRelContainedInSpatialStructure, refering to it by its +/// inverse attribute SELF\IfcElement.ContainedInStructure. +/// Subtypes ofIfcSpatialStructureElement are valid spatial +/// containers, with IfcSite being the default container. +/// The IfcGeographicElement may be aggregated into an +/// element assembly using the objectified relationship +/// IfcRelAggregates, refering to it by its inverse attribute +/// SELF\IfcObjectDefinition.Decomposes. Any subtype of +/// IfcElement can be an element assembly, with +/// IfcElementAssembly as a special focus subtype. In this +/// case it should not be additionally contained in the project +/// spatial hierarchy, +/// i.e.SELF\IfcElement.ContainedInStructure should be +/// NIL. +/// +/// Geometry Use Definitions +/// The geometric representation of IfcGeographicElement is +/// given by the IfcProductDefinitionShape, allowing multiple +/// geometric representation. +/// Local Placement +/// The local placement for IfcGeographicElement is defined +/// in its supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate +/// system that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if given) to the local +/// placement of the same IfcSpatialStructureElement , which +/// is used in the ContainedInStructure inverse attribute, or +/// to a spatial structure element at a higher level, referenced by +/// that. +/// If the relative placement is not used, the absolute placement +/// is defined within the world coordinate system. +/// +/// Geometric Representation +/// GeometricCurveSet and GeometricSet Representation +/// The standard representation of IfcGeographicElement is +/// defined using 'GeometricCurveSet' or, when including surfaces, +/// the 'GeometricSet' geometry. This also supports a 2D +/// representation of IfcGeographicElement. +/// The following attribute values for the +/// IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'FootPrint' for 2D +/// representation +/// RepresentationType :'GeometricCurveSet' +/// or'GeometricSet' +/// +/// Annotation2D Representation +/// Additional annotation objects, like text or hatching, and +/// style information to the 2D representations, may be exchanged +/// using the 'Annotation2D' representation. Style information is +/// assigned to the geometric representation items within the set of +/// Items at IfcShapeRepresentation using the inverse +/// StyledByItem relationship. +/// The following attribute values for the +/// IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'FootPrint' for 2D +/// representation +/// RepresentationType :'Annotation2D' +/// +/// SurfaceModel and Brep Representation +/// For full 3D representations, the use of 'SurfaceModel' and +/// 'Brep' geometry is supported. This supports a 3D representation, +/// including support for 3D digital terrain models. +/// The following attribute values for the +/// IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'Body' for 3D +/// representation +/// RepresentationType :'SurfaceModel' or'Brep' +/// +/// MappedRepresentation Representation +/// When using the IfcGeographicElement in conjunction with +/// the IfcGeographicElementType having +/// RepresentationMaps defined, the geometric representation +/// ofIfcGeographicElementshall be based on +/// 'MappedRepresentation', referencing the +/// IfcRepresentationMap given at the type object. +/// The following attribute values for the +/// IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'FootPrint' for 2D +/// representation, 'Body' for 3D representation +/// RepresentationType :'MappedRepresentation' +class IFC_PARSE_API IfcGeographicElement : public IfcElement { +public: + /// Predefined generic types for a geographic element that are specified in an enumeration. There might be property sets defined specifically for each predefined type. + boost::optional< ::Ifc4x3_add2::IfcGeographicElementTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcGeographicElementTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcGeographicElement (IfcEntityInstanceData* e); + IfcGeographicElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcGeographicElementTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcGeographicElement > list; +}; + +class IFC_PARSE_API IfcGeotechnicalElement : public IfcElement { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcGeotechnicalElement (IfcEntityInstanceData* e); + IfcGeotechnicalElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcGeotechnicalElement > list; +}; + +class IFC_PARSE_API IfcGeotechnicalStratum : public IfcGeotechnicalElement { +public: + boost::optional< ::Ifc4x3_add2::IfcGeotechnicalStratumTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcGeotechnicalStratumTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcGeotechnicalStratum (IfcEntityInstanceData* e); + IfcGeotechnicalStratum (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcGeotechnicalStratumTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcGeotechnicalStratum > list; +}; + +class IFC_PARSE_API IfcGradientCurve : public IfcCompositeCurve { +public: + ::Ifc4x3_add2::IfcBoundedCurve* BaseCurve() const; + void setBaseCurve(::Ifc4x3_add2::IfcBoundedCurve* v); + ::Ifc4x3_add2::IfcPlacement* EndPoint() const; + void setEndPoint(::Ifc4x3_add2::IfcPlacement* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcGradientCurve (IfcEntityInstanceData* e); + IfcGradientCurve (aggregate_of< ::Ifc4x3_add2::IfcSegment >::ptr v1_Segments, boost::logic::tribool v2_SelfIntersect, ::Ifc4x3_add2::IfcBoundedCurve* v3_BaseCurve, ::Ifc4x3_add2::IfcPlacement* v4_EndPoint); + typedef aggregate_of< IfcGradientCurve > list; +}; +/// IfcGroup is an generalization of any arbitrary group. A group is a logical collection of objects. It does not have its own position, nor can it hold its own shape representation. Therefore a group is an aggregation under some non-geometrical / topological grouping aspects. +/// +/// NOTE Use IfcRelDecomposes together with the appropriate subtypes of IfcProduct to define an aggregation of products that may have its own position and shape representation. +/// +/// EXAMPLE An example for a group is a system, since it groups elements under the aspect of their role, regardless of their position in a building. +/// +/// A group can hold any collection of objects (beingproducts, processes, controls, resources, actors or other groups). Thus groups can be nested. An object can be part of zero, one, or many groups. Grouping relationships are not required to be hierarchical nor do they imply a dependency. +/// +/// NOTE Use IfcRelDecomposes together with the appropriate subtypes of IfcProduct to define an hierarchical aggregation of products. +/// +/// A group can be exchanged without having already objects within the group collection. +/// +/// HISTORY New entity in IFC Release 1.0. +/// +/// IFC2x4 CHANGE The inverse IsGroupedBy relationship is set to 0..n +/// +/// Relationship use definition +/// The group collection is handled by an instance of IfcRelAssignsToGroup, which assigns all group members to the IfcGroup. +/// +/// Objects: included in group using IfcRelAssignsToGroup +/// +/// Groups are assigned to other objects (such as a process or a resource) by the relationship object that refers to the corresponding +/// object: +/// +/// Process: assigned using IfcRelAssignsToProcess +/// Resource: assigned using IfcRelAssignsToResource +/// +/// Groups can be subjected to a control. The control information is then assigned: +/// +/// Controls: affecting the group using IfcRelAssignsToControl +class IFC_PARSE_API IfcGroup : public IfcObject, public IfcSpatialReferenceSelect { +public: + aggregate_of< IfcRelAssignsToGroup >::ptr IsGroupedBy() const; // INVERSE IfcRelAssignsToGroup::RelatingGroup + aggregate_of< IfcRelReferencedInSpatialStructure >::ptr ReferencedInStructures() const; // INVERSE IfcRelReferencedInSpatialStructure::RelatedElements + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcGroup (IfcEntityInstanceData* e); + IfcGroup (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType); + typedef aggregate_of< IfcGroup > list; +}; +/// The energy conversion device type IfcHeatExchangerType defines commonly shared information for occurrences of heat exchangers. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a heat exchanger specification (i.e. the specific product information, that is common to all occurrences of that product type). Heat Exchanger types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcHeatExchangerType are represented by instances of IfcHeatExchanger. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcEnergyConversionDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_HeatExchangerTypeCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_HeatExchangerTypePlate (PLATE) +/// +/// Material Use Definition +/// The material of the IfcHeatExchangerType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Shell': Material used to construct the shell of the heat exchanger. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcHeatExchangerType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcHeatExchanger for standard port definitions. +class IFC_PARSE_API IfcHeatExchangerType : public IfcEnergyConversionDeviceType { +public: + /// Defines the basic types of heat exchanger (e.g., plate, shell and tube, etc.). + ::Ifc4x3_add2::IfcHeatExchangerTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcHeatExchangerTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcHeatExchangerType (IfcEntityInstanceData* e); + IfcHeatExchangerType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcHeatExchangerTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcHeatExchangerType > list; +}; +/// The energy conversion device type IfcHumidifierType defines commonly shared information for occurrences of humidifiers. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a humidifier specification (i.e. the specific product information, that is common to all occurrences of that product type). Humidifier types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcHumidifierType are represented by instances of IfcHumidifier. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcEnergyConversionDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_HumidifierTypeCommon +/// +/// Material Use Definition +/// The material of the IfcHumidifierType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcHumidifierType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcHumidifier for standard port definitions. +class IFC_PARSE_API IfcHumidifierType : public IfcEnergyConversionDeviceType { +public: + /// Defines the type of humidifier. + ::Ifc4x3_add2::IfcHumidifierTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcHumidifierTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcHumidifierType (IfcEntityInstanceData* e); + IfcHumidifierType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcHumidifierTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcHumidifierType > list; +}; + +class IFC_PARSE_API IfcImpactProtectionDevice : public IfcElementComponent { +public: + boost::optional< ::Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcImpactProtectionDevice (IfcEntityInstanceData* e); + IfcImpactProtectionDevice (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcImpactProtectionDevice > list; +}; + +class IFC_PARSE_API IfcImpactProtectionDeviceType : public IfcElementComponentType { +public: + ::Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcImpactProtectionDeviceType (IfcEntityInstanceData* e); + IfcImpactProtectionDeviceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcImpactProtectionDeviceTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcImpactProtectionDeviceType > list; +}; + +class IFC_PARSE_API IfcIndexedPolyCurve : public IfcBoundedCurve { +public: + ::Ifc4x3_add2::IfcCartesianPointList* Points() const; + void setPoints(::Ifc4x3_add2::IfcCartesianPointList* v); + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcSegmentIndexSelect >::ptr > Segments() const; + void setSegments(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcSegmentIndexSelect >::ptr > v); + boost::optional< bool > SelfIntersect() const; + void setSelfIntersect(boost::optional< bool > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcIndexedPolyCurve (IfcEntityInstanceData* e); + IfcIndexedPolyCurve (::Ifc4x3_add2::IfcCartesianPointList* v1_Points, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcSegmentIndexSelect >::ptr > v2_Segments, boost::optional< bool > v3_SelfIntersect); + typedef aggregate_of< IfcIndexedPolyCurve > list; +}; +/// The flow treatment device type IfcInterceptorType defines commonly shared information for occurrences of interceptors. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a interceptor specification (i.e. the specific product information, that is common to all occurrences of that product type). Interceptor types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcInterceptorType are represented by instances of IfcInterceptor. +/// +/// HISTORY: New entity in IFC2x4 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowTreatmentDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_InterceptorTypeCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_InterceptorTypeGrease (GREASE) +/// Pset_InterceptorTypeOil (OIL) +/// Pset_InterceptorTypePetrol (PETROL) +/// +/// Material Use Definition +/// The material of the IfcInterceptorType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Body': The primary material from which the object is constructed. +/// 'Cover': Material from which the cover or grating is constructed. +/// 'Strainer': Material from which the strainer is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcInterceptorType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcInterceptor for standard port definitions. +class IFC_PARSE_API IfcInterceptorType : public IfcFlowTreatmentDeviceType { +public: + ::Ifc4x3_add2::IfcInterceptorTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcInterceptorTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcInterceptorType (IfcEntityInstanceData* e); + IfcInterceptorType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcInterceptorTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcInterceptorType > list; +}; + +class IFC_PARSE_API IfcIntersectionCurve : public IfcSurfaceCurve { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcIntersectionCurve (IfcEntityInstanceData* e); + IfcIntersectionCurve (::Ifc4x3_add2::IfcCurve* v1_Curve3D, aggregate_of< ::Ifc4x3_add2::IfcPcurve >::ptr v2_AssociatedGeometry, ::Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::Value v3_MasterRepresentation); + typedef aggregate_of< IfcIntersectionCurve > list; +}; +/// An inventory is a list of items within an enterprise. +/// +/// Various types of inventory can be included. These are identified by the range of values within the inventory type enumeration which includes space, asset, and furniture. User defined inventories can also be defined for lists of particular types of element such as may be required in operating and maintenance instructions. Such inventories should be constrained to contain a list of elements of a restricted type.There are a number of actors that can be associated with an inventory, each actor having a role. Actors within the scope of the project are indicated using the IfcRelAssignsToActor relationship in which case roles should be defined through the IfcActorRole class; otherwise principal actors are identified as attributes of the class. In the existence of both, direct attributes take precedence.There are a number of costs that can be associated with an inventory, each cost having a role. These are specified through the CurrentValue and OriginalValue attributes.HISTORY: New entity in IFC2.0. Modified in IFC2x4 to make all attributes optional and remove Where Rule. +/// +/// Assignment Use Definition +/// The IfcInventory may have assignments of its own using the IfcRelAssignsToGroup relationship where RelatingGroup refers to the IfcInventory and RelatedObjects contains one or more objects of the following types: +/// IfcAsset: Assets included in the inventory. +/// +/// IfcElement: Elements such as furniture included in the inventory. +/// +/// IfcSpace: Spaces included in the inventory. +class IFC_PARSE_API IfcInventory : public IfcGroup { +public: + /// A list of the types of inventories from which that required may be selected. + /// + /// IFC2x4 CHANGE Attribute made optional. + boost::optional< ::Ifc4x3_add2::IfcInventoryTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcInventoryTypeEnum::Value > v); + /// The organizational unit to which the inventory is applicable. + ::Ifc4x3_add2::IfcActorSelect* Jurisdiction() const; + void setJurisdiction(::Ifc4x3_add2::IfcActorSelect* v); + /// Persons who are responsible for the inventory. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPerson >::ptr > ResponsiblePersons() const; + void setResponsiblePersons(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPerson >::ptr > v); + /// The date on which the last update of the inventory was carried out. + /// + /// IFC2x4 CHANGE Type changed from IfcDateTimeSelect. + boost::optional< std::string > LastUpdateDate() const; + void setLastUpdateDate(boost::optional< std::string > v); + /// An estimate of the current cost value of the inventory. + ::Ifc4x3_add2::IfcCostValue* CurrentValue() const; + void setCurrentValue(::Ifc4x3_add2::IfcCostValue* v); + /// An estimate of the original cost value of the inventory. + ::Ifc4x3_add2::IfcCostValue* OriginalValue() const; + void setOriginalValue(::Ifc4x3_add2::IfcCostValue* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcInventory (IfcEntityInstanceData* e); + IfcInventory (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< ::Ifc4x3_add2::IfcInventoryTypeEnum::Value > v6_PredefinedType, ::Ifc4x3_add2::IfcActorSelect* v7_Jurisdiction, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPerson >::ptr > v8_ResponsiblePersons, boost::optional< std::string > v9_LastUpdateDate, ::Ifc4x3_add2::IfcCostValue* v10_CurrentValue, ::Ifc4x3_add2::IfcCostValue* v11_OriginalValue); + typedef aggregate_of< IfcInventory > list; +}; +/// The flow fitting type IfcJunctionBoxType defines commonly shared information for occurrences of junction boxs. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a junction box specification (i.e. the specific product information, that is common to all occurrences of that product type). Junction Box types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcJunctionBoxType are represented by instances of IfcJunctionBox. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowFittingType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_ElectricalDeviceCommon +/// Pset_JunctionBoxTypeCommon +/// +/// Material Use Definition +/// The material of the IfcJunctionBoxType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcJunctionBoxType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcJunctionBox for standard port definitions. +class IFC_PARSE_API IfcJunctionBoxType : public IfcFlowFittingType { +public: + /// Identifies the predefined types of junction boxes from which the type required may be set. + ::Ifc4x3_add2::IfcJunctionBoxTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcJunctionBoxTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcJunctionBoxType (IfcEntityInstanceData* e); + IfcJunctionBoxType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcJunctionBoxTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcJunctionBoxType > list; +}; + +class IFC_PARSE_API IfcKerbType : public IfcBuiltElementType { +public: + ::Ifc4x3_add2::IfcKerbTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcKerbTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcKerbType (IfcEntityInstanceData* e); + IfcKerbType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcKerbTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcKerbType > list; +}; +/// An IfcLaborResource is used in construction with particular skills or crafts required to perform certain types of construction or management related work. +/// +/// HISTORY: New Entity in IFC Release 2.0. Base type and documentation extended in IFC 2x4. +/// +/// IFC2x4 CHANGE: The attribute Skillset has been deleted; use LongDescription to describe the skillset. +/// +/// The purpose of an IfcLaborResource is to identify a skillset that may be required or used. The skillset identified may be (for instance) chargehand, foreman, labourer, plumbers mate etc. and provides a designation of a particular level of skill. It can be used to identify the generic type of labor resource that is required for a purpose without having to be specific about the actor (person or organization) providing the resource occurrence. It may be particularly useful when creating an overall plan for a process or processes. For instance, within maintenance or work planning there may be a known task that needs to be done which is planned to require a 'chargehand pipe fitter'. There may be several such labor resources available and so the need to identify which will be used is not necessary at the planning stage. +/// +/// At a later stage, individual actors can be determined for the labor resources. This is achieved through specifiying the actor through IfcActor. The actor is then identified as the labour resource occurrence through the IfcRelAssignsToResource.RelatedResource attribute. The IfcLaborResource provides the IfcRelAssignsToResource.RelatingResource attribute. +/// +/// Use definitions for composition, assignment, constraints, time series, and baselines are described at the base type IfcConstructionResource. +/// +/// Type use definition +/// IfcLaborResource defines the occurrence of any labor resource; common information about labor resource types is handled by IfcLaborResourceType. The IfcLaborResourceType (if present) may establish the common type name, common properties, common productivities for various task types using IfcRelAssignsToProcess. The IfcLaborResourceType is attached using the IfcRelDefinesByType.RelatingType objectified relationship and is accessible by the inverse IsTypedBy attribute. +/// +/// Quantity use definition +/// The quantities relating to the IfcLaborResource are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. It is accessible by the inverse IsDefinedBy relationship. The following base quantities are defined and should be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. Other quantities can be defined being subjected to local standard of measurement with another string value assigned to Name and a value provided for MethodOfMeasurement. +/// +/// Qto_LaborResourceBaseQuantities: base quantities for all labor resources. +/// +/// Assignment use definition +/// In addition to assignments specified at the base class IfcConstructionResource, a labor resource may have assignments of its own using IfcRelAssignsToResource where RelatingResource refers to the IfcLaborResource and RelatedObjects contains one or more IfcActor subtypes as shown in Figure 194. Such relationship indicates the specific people used as input for the resource. Such actors are nested according to organizational structure with the root organization assigned to the IfcProject. The IfcActor entity is used to represent the people or organizations. +/// +/// Figure 194 — Labor resource assignment use +class IFC_PARSE_API IfcLaborResource : public IfcConstructionResource { +public: + /// Defines types of labor resources. + /// IFC2x4 New attribute + boost::optional< ::Ifc4x3_add2::IfcLaborResourceTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcLaborResourceTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLaborResource (IfcEntityInstanceData* e); + IfcLaborResource (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, ::Ifc4x3_add2::IfcResourceTime* v8_Usage, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v9_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v10_BaseQuantity, boost::optional< ::Ifc4x3_add2::IfcLaborResourceTypeEnum::Value > v11_PredefinedType); + typedef aggregate_of< IfcLaborResource > list; +}; +/// The flow terminal type IfcLampType defines commonly shared information for occurrences of lamps. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a lamp specification (i.e. the specific product information, that is common to all occurrences of that product type). Lamp types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcLampType are represented by instances of IfcLamp. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowTerminalType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_ElectricalDeviceCommon +/// Pset_LampTypeCommon +/// +/// Material Use Definition +/// The material of the IfcLampType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Bulb': Material from which the bulb is constructed (e.g. glass). +/// 'Conductor': Material from which the conductor is constructed. +/// 'Filament': Material from which the filament is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcLampType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcLamp for standard port definitions. +class IFC_PARSE_API IfcLampType : public IfcFlowTerminalType { +public: + /// Identifies the predefined types of lamp from which the type required may be set. + ::Ifc4x3_add2::IfcLampTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcLampTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLampType (IfcEntityInstanceData* e); + IfcLampType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcLampTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcLampType > list; +}; +/// The flow terminal type IfcLightFixtureType defines commonly shared information for occurrences of light fixtures. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a light fixture specification (i.e. the specific product information, that is common to all occurrences of that product type). Light Fixture types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcLightFixtureType are represented by instances of IfcLightFixture. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowTerminalType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_ElectricalDeviceCommon +/// Pset_LightFixtureTypeCommon +/// Pset_LightFixtureTypeThermal +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_LightFixtureTypeSecurityLighting (SECURITYLIGHTING) +/// +/// Material Use Definition +/// The material of the IfcLightFixtureType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcLightFixtureType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcLightFixture for standard port definitions. +class IFC_PARSE_API IfcLightFixtureType : public IfcFlowTerminalType { +public: + /// Identifies the predefined types of light fixture from which the type required may be set. + ::Ifc4x3_add2::IfcLightFixtureTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcLightFixtureTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLightFixtureType (IfcEntityInstanceData* e); + IfcLightFixtureType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcLightFixtureTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcLightFixtureType > list; +}; + +class IFC_PARSE_API IfcLinearElement : public IfcProduct { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLinearElement (IfcEntityInstanceData* e); + IfcLinearElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation); + typedef aggregate_of< IfcLinearElement > list; +}; + +class IFC_PARSE_API IfcLiquidTerminalType : public IfcFlowTerminalType { +public: + ::Ifc4x3_add2::IfcLiquidTerminalTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcLiquidTerminalTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLiquidTerminalType (IfcEntityInstanceData* e); + IfcLiquidTerminalType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcLiquidTerminalTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcLiquidTerminalType > list; +}; + +class IFC_PARSE_API IfcMarineFacility : public IfcFacility { +public: + boost::optional< ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMarineFacility (IfcEntityInstanceData* e); + IfcMarineFacility (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, boost::optional< ::Ifc4x3_add2::IfcMarineFacilityTypeEnum::Value > v10_PredefinedType); + typedef aggregate_of< IfcMarineFacility > list; +}; + +class IFC_PARSE_API IfcMarinePart : public IfcFacilityPart { +public: + boost::optional< ::Ifc4x3_add2::IfcMarinePartTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcMarinePartTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMarinePart (IfcEntityInstanceData* e); + IfcMarinePart (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, ::Ifc4x3_add2::IfcFacilityUsageEnum::Value v10_UsageType, boost::optional< ::Ifc4x3_add2::IfcMarinePartTypeEnum::Value > v11_PredefinedType); + typedef aggregate_of< IfcMarinePart > list; +}; +/// Definition from IAI: Fasteners connecting building elements mechanically. A single instance of this class may represent one or many of actual mechanical fasteners, for example an array of bolts or a row of nails. +/// +/// HISTORY New entity in IFC Release 2x2 +/// +/// IFC 2x4 change: +/// Supertype changed from IfcFastener to IfcElementComponent. +/// Attribute PredefinedType added. +/// Attributes NominalDiameter and NominalLength moved to IfcMechanicalFastenerType. +/// +/// Geometry Use Definition +/// +/// See definitions at the supertype IfcElementComponent. +/// +/// In addition, a symbolic representation is defined for a row of fasteners or several rows of +/// fasteners within a single instance of IfcMechanicalFastener. Such rows or arrays may +/// contain possibly large numbers of individual pieces. The product definition shape consists of +/// an IfcShapeRepresentation with the attribute values +/// +/// RepresentationIdentifier : 'Row' +/// RepresentationType : 'GeometricCurveSet' +/// +/// and one or several curves as geometric items. The curves represent where the heads of the fasteners +/// are located. The local placement of the IfcMechanicalFastener shall be located and oriented such +/// that the local z axis is parallel with the axes of the fasteners (bolts, nails, staples or similar). +/// +/// In case of such a symbolic 'Row' representation, an IfcElementQuantity should be attached to +/// the IfcMechanicalFastener via IfcRelDefinesByProperties. The quantity should contain an +/// IfcQuantityCount named 'Count' with the number of fasteners and an IfcQuantityLength +/// named 'Spacing' which expresses the center-to-center distances of fasteners. +class IFC_PARSE_API IfcMechanicalFastener : public IfcElementComponent { +public: + boost::optional< double > NominalDiameter() const; + void setNominalDiameter(boost::optional< double > v); + boost::optional< double > NominalLength() const; + void setNominalLength(boost::optional< double > v); + /// Subtype of mechanical fastener + boost::optional< ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMechanicalFastener (IfcEntityInstanceData* e); + IfcMechanicalFastener (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< double > v9_NominalDiameter, boost::optional< double > v10_NominalLength, boost::optional< ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::Value > v11_PredefinedType); + typedef aggregate_of< IfcMechanicalFastener > list; +}; +/// Definition from IAI: The element type (IfcMechanicalFastenerType) defines a list of commonly shared property set definitions of a fastener and an optional set of product representations. It is used to define mechanical fasteners mainly within structural and building services domains (i.e. the specific type information common to all occurrences of that type). +/// +/// The occurrences of the IfcMechanicalFastenerType are represented by instances of IfcMechanicalFastener. +/// +/// HISTORY New entity in IFC Release 2x2 +/// +/// IFC 2x4 change: +/// Supertype changed from IfcFastenerType to IfcElementComponentType. +/// Attributes PredefinedType, NominalDiameter, NominalLength added. +/// +/// Mechanical fasteners, especially bolts, are often standardized. To refer to a formal fastener +/// designation according to a standard (a product norm), IfcRelAssociatesClassification together +/// with IfcClassificationReference should be used. +/// +/// IfcClassificationReference.ItemReference +/// contains a machine-readable form of the formal fastener designation from the norm. +/// Example: 'M16X80-10.9-HV' for a high-strength structural bolting assembly for preloading with +/// hexagon bolt and nut. (On the other hand, IfcMechanicalFastenerType.Name contains a +/// displayable name which may not necessarily be the same as the formal designation.) +/// IfcClassificationReference.Name carries the short name of the fastener norm. +/// Example: 'EN 14399-4' as the respective European standard for high-strength hexagon bolts. +/// Optionally, the norm can be further described by +/// IfcClassificationReference.ReferencedSource, including information like publisher and +/// date of issue of the norm. +/// +/// Furthermore, IfcRelAssociatesLibrary together with IfcLibraryReference may be +/// used to refer to a library which contains fastener definitions. +/// +/// Property Set Use Definition +/// +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// +/// Pset_MechanicalFastenerBolt (BOLT) +class IFC_PARSE_API IfcMechanicalFastenerType : public IfcElementComponentType { +public: + /// Subtype of mechanical fastener + ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::Value v); + /// The nominal diameter describing the cross-section size of the fastener type. + boost::optional< double > NominalDiameter() const; + void setNominalDiameter(boost::optional< double > v); + /// The nominal length describing the longitudinal dimensions of the fastener type. + boost::optional< double > NominalLength() const; + void setNominalLength(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMechanicalFastenerType (IfcEntityInstanceData* e); + IfcMechanicalFastenerType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcMechanicalFastenerTypeEnum::Value v10_PredefinedType, boost::optional< double > v11_NominalDiameter, boost::optional< double > v12_NominalLength); + typedef aggregate_of< IfcMechanicalFastenerType > list; +}; +/// The flow terminal type IfcMedicalDeviceType defines commonly shared information for occurrences of medical devices. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a medical device specification (i.e. the specific product information, that is common to all occurrences of that product type). Medical Device types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcMedicalDeviceType are represented by instances of IfcMedicalDevice. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowTerminalType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_MedicalDeviceTypeCommon +/// +/// Material Use Definition +/// The material of the IfcMedicalDeviceType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Body': The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcMedicalDeviceType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcMedicalDevice for standard port definitions. +class IFC_PARSE_API IfcMedicalDeviceType : public IfcFlowTerminalType { +public: + ::Ifc4x3_add2::IfcMedicalDeviceTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcMedicalDeviceTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMedicalDeviceType (IfcEntityInstanceData* e); + IfcMedicalDeviceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcMedicalDeviceTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcMedicalDeviceType > list; +}; +/// Definition from IAI: The element type +/// IfcMemberType defines commonly shared information for +/// occurrences of members. Members are predominately linear building +/// elements, often forming part of a structural system. The +/// orientation of the member (being horizontal, vertical or sloped) +/// is not relevant to its definition (in contrary to beam and +/// column). The set of shared information may include: +/// +/// common properties within shared property sets +/// common material information +/// common profile definitions +/// common shape representations +/// +/// It is used to define a member specification, or member style +/// (i.e. the specific product information that is common to all +/// occurrences of that member type). Member types may be exchanged +/// without being already assigned to occurrences. +/// Occurrences of the IfcMemberType within building models +/// are represented by instances of IfcMemberStandardCase if +/// the IfcMemberType has a single associated +/// IfcMaterialProfileSet; otherwise they are represented by +/// instances of IfcMember. Occurrences of the +/// IfcMemberType within structural analysis models are +/// represented by instances of IfcStructuralCurveMember, or +/// its applicable subtypes. +/// HISTORY New entity in +/// Release IFC2x2 Addendum 1. +/// Material Use Definition +/// The material of the IfcMemberType is defined by the +/// IfcMaterialProfileSet or as fall back by +/// IfcMaterial and attached by the +/// IfcRelAssociatesMaterial.RelatingMaterial. It is +/// accessible by the inverse HasAssociations +/// relationship. +/// Note: It is illegal to assign an +/// IfcMaterial to an IfcMemberType, if there is at +/// least one occurrences of IfcMemberStandardCase for this +/// type. +/// Property Set Use Definition: +/// The shared property sets relating to the IfcMemberType +/// are defined by the IfcPropertySet and are attached by the +/// HasPropertySets attribute. The following property set +/// definitions specific to the IfcMemberType are part of this +/// IFC release: +/// NOTE There is no differentiation between +/// properties within the property set that are only assignable to +/// IfcMemberType and those that are only assignable to +/// IfcMember. If the same property is assigned to the +/// IfcMemberType and the IfcMember being an occurrence +/// of the IfcMemberType, then the occurrence property +/// overrides the type property. +/// +/// Pset_MemberCommon: common property set for all +/// member types. +/// +/// Profile Use Definition: +/// The shared profile definition is defined by assigning an +/// IfcMaterialProfileSet (see material use definition above). +/// The IfcMaterialProfile refers to the subtype of +/// IfcProfileDef that is the common profile for all member +/// occurrence, if used. It is only applicable if the +/// IfcMemberType has only occurrences of type +/// IfcMemberStandardCase (see definition of +/// IfcMemberStandardCase for further information). +/// NOTE The attribute ProfileName of the +/// IfcProfileDef subtype, referenced in +/// IfcMaterialProfile should contain a standardized profile +/// name according to local standards. However, an additional +/// geometric representation of the profile is necessary (e.g. as +/// IfcExtrudedAreaSolid). An importing application is allowed +/// to check for the existence of the profile name: in case of +/// identifying it as a standardized name, the corresponding profile +/// geometry and possibly other cross sectional properties can be +/// read from a library. Otherwise the geometric representation and +/// possible non geometric IfcProfileProperties have to be +/// used. +/// Geometry Use Definition: +/// The IfcMemberType may define the shared geometric +/// representation for all member occurrences. The +/// RepresentationMaps attribute refers to a list of +/// IfcRepresentationMap's, that allow for multiple geometric +/// representations (e.g. with IfcShaperepresentation's having +/// an RepresentationIdentifier 'Box', 'Axis', or 'Body'). It +/// is only applicable if the IfcMemberType has only +/// occurrences of type IfcMember (See geometric use +/// definition of IfcMember for further information). +/// NOTE If the IfcMemberType has an +/// associated IfcMaterialProfileSet, then no shared geometric +/// representation shall be provided. +/// NOTE The product shape representations are +/// defined as RepresentationMaps (attribute of the supertype +/// IfcTypeProduct), which get assigned by an element +/// occurrence instance through the +/// IfcShapeRepresentation.Item[n] being an +/// IfcMappedItem. See IfcTypeProduct for further +/// information. +/// NOTE The values of attributes +/// RepresentationIdentifier and RepresentationType of +/// IfcShapeRepresentation are restricted in the same way as +/// those for IfcMember and +/// IfcMemberStandardCase +class IFC_PARSE_API IfcMemberType : public IfcBuiltElementType { +public: + /// Identifies the predefined types of a linear structural member element from which the type required may be set. + ::Ifc4x3_add2::IfcMemberTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcMemberTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMemberType (IfcEntityInstanceData* e); + IfcMemberType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcMemberTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcMemberType > list; +}; + +class IFC_PARSE_API IfcMobileTelecommunicationsApplianceType : public IfcFlowTerminalType { +public: + ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMobileTelecommunicationsApplianceType (IfcEntityInstanceData* e); + IfcMobileTelecommunicationsApplianceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcMobileTelecommunicationsApplianceType > list; +}; + +class IFC_PARSE_API IfcMooringDeviceType : public IfcBuiltElementType { +public: + ::Ifc4x3_add2::IfcMooringDeviceTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcMooringDeviceTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMooringDeviceType (IfcEntityInstanceData* e); + IfcMooringDeviceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcMooringDeviceTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcMooringDeviceType > list; +}; +/// The energy conversion device type IfcMotorConnectionType defines commonly shared information for occurrences of motor connections. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a motor connection specification (i.e. the specific product information, that is common to all occurrences of that product type). Motor Connection types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcMotorConnectionType are represented by instances of IfcMotorConnection. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcEnergyConversionDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_ElectricalDeviceCommon +/// Pset_MotorConnectionTypeCommon +/// +/// Material Use Definition +/// The material of the IfcMotorConnectionType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcMotorConnectionType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcMotorConnection for standard port definitions. +class IFC_PARSE_API IfcMotorConnectionType : public IfcEnergyConversionDeviceType { +public: + /// Identifies the predefined types of motor connection from which the type required may be set. + ::Ifc4x3_add2::IfcMotorConnectionTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcMotorConnectionTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMotorConnectionType (IfcEntityInstanceData* e); + IfcMotorConnectionType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcMotorConnectionTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcMotorConnectionType > list; +}; + +class IFC_PARSE_API IfcNavigationElementType : public IfcBuiltElementType { +public: + ::Ifc4x3_add2::IfcNavigationElementTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcNavigationElementTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcNavigationElementType (IfcEntityInstanceData* e); + IfcNavigationElementType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcNavigationElementTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcNavigationElementType > list; +}; +/// An occupant is a type of actor that defines the form of occupancy of a property. +/// +/// The principal purpose of IfcOccupant is to determine the nature of occupancy of a property for a particular actor. All characteristics relating to the actor (name and organization details) are inherited from the IfcActor class.HISTORY: New entity in IFC2x +/// +/// Assignment Use Definition +/// The IfcOccupant may have assignments of its own using the IfcRelAssignsToActor relationship where RelatingActor refers to the IfcOccupant and RelatedObjects contains one or more objects of the following types: +/// IfcSpatialStructureElement: Indicates the property to be occupied. Particular details of the agreement relating to the occupancy of a property are dealt within the Pset_PropertyAgreement that is defined for the instance of IfcSpatialStructureElement. This means that an occupant may be related to a site, building, building storey or space through the IfcSpatialStructureElement.ElementComposition attribute. For instance, if the property concerned is several office spaces on a building storey, it might be appropriate to reference IfcBuildingStorey.ElementComposition=PARTIAL. Occupants of a property may be considered to be the parties to an agreement. The roles that the occupant may play in respect to an agreement are defined in the IfcOccupantTypeEnum enumeration. If the role is not specified by the predefined contents of this enumeration, the value USERDEFINED may be set and the ObjectType attribute asserted. +class IFC_PARSE_API IfcOccupant : public IfcActor { +public: + /// Predefined occupant types from which that required may be set. + /// + /// IFC2x4 CHANGE Attribute made optional. + boost::optional< ::Ifc4x3_add2::IfcOccupantTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcOccupantTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcOccupant (IfcEntityInstanceData* e); + IfcOccupant (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcActorSelect* v6_TheActor, boost::optional< ::Ifc4x3_add2::IfcOccupantTypeEnum::Value > v7_PredefinedType); + typedef aggregate_of< IfcOccupant > list; +}; +/// The opening element stands for +/// opening, recess or chase, all reflecting voids. It represents a +/// void within any element that has physical manifestation. Openings +/// can be inserted into walls, slabs, beams, columns, or other +/// elements. +/// The IFC specification provides two entities for opening +/// elements: +/// +/// IfcOpeningStandardCase is used for all openings that +/// have a constant profile along a linear extrusion. They are placed +/// relative to the voided elements and the extrusion direction is +/// perpendicular to the plane of the element (horizontally for +/// walls, vertically for slabs). Only a single extrusion body is +/// allowed. It cuts through the whole thickness of the voided +/// element, i.e. it reflects a true opening. +/// IfcOpeningElement is used for all other occurrences of +/// openings and in particular also for niches or recesses. +/// +/// NOTE View definitions or implementer +/// agreements may restrict the types of elements which can be voided +/// by an IfcOpeningElement or +/// IfcOpeningStandardCase +/// There are two different types of opening elements: +/// +/// an opening, where the thickness of the opening is greater or +/// equal to the thickness of the element; +/// a recess or niche, where the thickness of the recess is +/// smaller than the thickness of the element. +/// +/// The attribute PredefinedType should be used to capture +/// the differences, +/// +/// the attribute is set to OPENING for an opening or +/// the attribute is set to RECESS for a recess or niche. +/// If the value for PredefinedType is omitted, or the +/// value is set to NOTDEFINED, no specific information of whether it +/// is an opening or recess shall be assumed. +/// +/// NOTE Until IFC2x3 the information had been +/// provided by the inherited attribute +/// ObjectType. +/// An IfcOpeningElement has to be inserted into an +/// IfcElement by using the IfcRelVoidsElement +/// relationship. The relationship implies a Boolean subtraction +/// operation between the volume of the voided element and the volume +/// of the opening. It may be filled by an IfcDoor, +/// IfcWindow, or another filling element by using the +/// relationship IfcRelFillsElements. +/// HISTORY New entity in +/// IFC Release 1.0 +/// IFC2x CHANGE The intermediate +/// ABSTRACT supertypes IfcFeatureElement and +/// IfcFeatureSubtraction have been added. +/// IFC2x4 CHANGE The attribute +/// PredefinedType has been added at the end of attribute +/// list. +/// Property Set Use Definition: +/// The property sets relating to the IfcOpeningElement are +/// defined by the IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// property set definitions specific to the IfcOpeningElement +/// are part of this IFC release: +/// +/// Pset_OpeningElementCommon: common property +/// set for all opening occurrences +/// +/// Quantity Use Definition: +/// The quantities relating to the IfcOpeningElement are +/// defined by the IfcElementQuantity and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// base quantities are defined and should be exchanged with the +/// IfcElementQuantity.Name = 'BaseQuantities'. Other +/// quantities, being subjected to local standard of measurement, can +/// be defined with another string value assigned to Name. In +/// this case a valid value for MethodOfMeasurement has to be +/// provided. +/// +/// Qto_OpeningElementBaseQuantities: base +/// quantities for all opening occurrences. +/// +/// Containment Use Definition +/// The IfcOpeningElement shall not participate in the +/// containment relationship, i.e. it is not linked directly to the +/// spatial structure of the project. It has a mandatory +/// VoidsElements inverse relationship pointing to the +/// IfcElement that is contained in the spatial structure. +/// +/// The inverse relationship ContainedInStructure shall be +/// NIL. +/// +/// NOTE See IfcRelVoidsElement for a +/// diagram on how to apply spatial containment and the voiding +/// relationship. +/// Geometry Use Definitions +/// The geometric representation of IfcOpeningElement is +/// given by the IfcProductDefinitionShape and +/// IfcLocalPlacement allowing multiple geometric +/// representations. +/// Local Placement +/// The local placement for IfcOpeningElement is defined in +/// its supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate +/// system that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement should point to the local placement of +/// the same element, which is voided by the opening, i.e. referred +/// to by VoidsElement.RelatingBuildingElement. +/// +/// Geometric Representation +/// Currently, the 'Body', and 'Box' representations are +/// supported. The 'Box' representation includes the representation +/// type 'BoundingBox' and is explained at +/// IfcFeatureElement. +/// Body Representation +/// The 'Body' representation of IfcOpeningElement can be +/// represented using the representation types 'SweptSolid', and +/// 'Brep'. The representation type 'Brep' is explained at +/// IfcFeatureElement +/// Swept Solid Representation Type with Horizontal +/// Extrusion +/// The 'SweptSolid' geometric representation of +/// IfcOpeningElement, using horizontal extrusion direction +/// (for walls), is defined using the swept area solid geometry. The +/// following attribute values for the IfcShapeRepresentation +/// holding this geometric representation shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'SweptSolid' +/// +/// The following additional constraints apply to the swept solid +/// representation: +/// +/// Solid: IfcExtrudedAreaSolid is required, the +/// set of IfcShapeRepresentation.Items may include a single, +/// or multiple, instances of IfcExtrudedAreaSolid. +/// Profile: IfcRectangleProfileDef, +/// IfcCircleProfileDef and +/// IfcArbitraryClosedProfileDef shall be supported. +/// Extrusion: The profile shall be extruded horizontally +/// (i.e. perpendicular to the extrusion direction of the voided +/// element), e.g. for wall openings, or vertically (i.e. in the +/// extrusion direction of the voided element), e.g., for floor +/// openings. If multiple instances of IfcExtrudedAreaSolid +/// are used, the extrusion direction of each extrusion should be +/// equal. +/// +/// NOTE In case of non-parallel jambs, the shape +/// representation shall be a 'SweptSolid' representation with +/// vertical extrusion. +/// +/// Figure 34 illustrates an opening with horizontal extrusion. +/// NOTE The local placement directions for the IfcOpeningElement are only given as an example, other directions are valid as well. +/// +/// Figure 34 — Opening with full extrusion +/// +/// Figure 35 illustrates an opening for a recess. +/// NOTE The local placement directions for the IfcOpeningElement are only given as an example, other directions are valid as well. +/// NOTE Rectangles are now defined centric, the placement +/// location has to be set: +/// +/// IfcCartesianPoint(XDim/2,YDim/2) +/// +/// Figure 35 — Opening with recess extrusion +/// +/// Swept Solid Representation with Vertical Extrusion +/// The 'SweptSolid' geometric representation of +/// IfcOpeningElement, using vertical extrusion direction (for +/// walls), is defined using the swept area solid geometry, however +/// the extrusion direction may be vertical, i.e. in case of a wall +/// opening, the extrusion would be in the direction of the wall +/// height. The following attribute values for the +/// IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'SweptSolid' +/// +/// The following additional constraints apply to the swept solid +/// representation: +/// +/// Solid: IfcExtrudedAreaSolid is required, the +/// set of IfcShapeRepresentation.Items may include a single, +/// or multiple, instances of IfcExtrudedAreaSolid. +/// Profile: IfcRectangleProfileDef, +/// IfcCircleProfileDef and +/// IfcArbitraryClosedProfileDef shall be supported. +/// Extrusion: The profile shall be extruded vertically, +/// i.e. for wall openings along the extrusion direction of the +/// voided element. If multiple instances of +/// IfcExtrudedAreaSolid are used, the extrusion direction +/// should be equal. +/// +/// Vertical extrusions shall be used when an opening or recess +/// has a non rectangular foot print geometry that does not change +/// along the height of the opening or recess. +/// Figure 36 shows a vertical extrusion with multiple extrusion bodies for the opening. Each extrusion body has a different extrusion lenght. +/// NOTE The local placement directions for the IfcOpeningElement are only given as an example, other directions are valid as well. +/// +/// Figure 36 — Opening with multiple extrusions +class IFC_PARSE_API IfcOpeningElement : public IfcFeatureElementSubtraction { +public: + /// Predefined generic type for an opening that is specified in an enumeration. There may be a property set given specificly for the predefined types. + /// + /// IFC2x4 CHANGE The attribute has been added at the end of the entity definition. + boost::optional< ::Ifc4x3_add2::IfcOpeningElementTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcOpeningElementTypeEnum::Value > v); + aggregate_of< IfcRelFillsElement >::ptr HasFillings() const; // INVERSE IfcRelFillsElement::RelatingOpeningElement + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcOpeningElement (IfcEntityInstanceData* e); + IfcOpeningElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcOpeningElementTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcOpeningElement > list; +}; +/// The flow terminal type IfcOutletType defines commonly shared information for occurrences of outlets. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a outlet specification (i.e. the specific product information, that is common to all occurrences of that product type). Outlet types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcOutletType are represented by instances of IfcOutlet. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowTerminalType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_ElectricalDeviceCommon +/// Pset_OutletTypeCommon +/// +/// Material Use Definition +/// The material of the IfcOutletType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// 'Conductor': Material from which the conductors are constructed. +/// 'Surface': Material from which the outlet plate is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcOutletType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcOutlet for standard port definitions. +class IFC_PARSE_API IfcOutletType : public IfcFlowTerminalType { +public: + /// Identifies the predefined types of outlet from which the type required may be set. + ::Ifc4x3_add2::IfcOutletTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcOutletTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcOutletType (IfcEntityInstanceData* e); + IfcOutletType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcOutletTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcOutletType > list; +}; + +class IFC_PARSE_API IfcPavementType : public IfcBuiltElementType { +public: + ::Ifc4x3_add2::IfcPavementTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcPavementTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPavementType (IfcEntityInstanceData* e); + IfcPavementType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcPavementTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcPavementType > list; +}; +/// IfcPerformanceHistory is used to document the actual performance of an occurrence instance over time. In practice, performance-related data are generally not easy to obtain as they can originate from different sources (predicted, simulated, or measured) and occur during different stages of the building life-cycle. Such time-related data cover a large spectrum, including meteorological data, schedules, operational status measurements, trend reports, etc. +/// +/// IfcPerformanceHistory is assigned to other objects (represented by subtypes of IfcObjectDefinition, excluding subtypes of IfcControl), by the objectified relationship IfcRelAssignsToControl. +/// +/// HISTORY: New entity in Release IFC2x Edition 2. +class IFC_PARSE_API IfcPerformanceHistory : public IfcControl { +public: + /// Describes the applicable building life-cycle phase. Typical values should be DESIGNDEVELOPMENT, SCHEMATICDEVELOPMENT, CONSTRUCTIONDOCUMENT, CONSTRUCTION, ASBUILT, COMMISSIONING, OPERATION, etc. + std::string LifeCyclePhase() const; + void setLifeCyclePhase(std::string v); + /// Predefined generic type for a performace history that is specified in an enumeration. + /// + /// IFC2x4 CHANGE The attribute has been added at the end of the entity definition. + boost::optional< ::Ifc4x3_add2::IfcPerformanceHistoryTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcPerformanceHistoryTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPerformanceHistory (IfcEntityInstanceData* e); + IfcPerformanceHistory (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, std::string v7_LifeCyclePhase, boost::optional< ::Ifc4x3_add2::IfcPerformanceHistoryTypeEnum::Value > v8_PredefinedType); + typedef aggregate_of< IfcPerformanceHistory > list; +}; +/// This entity is a description of a panel within a +/// door or window (as fillers for opening) which allows for air +/// flow. It is given by its properties +/// (IfcPermeableCoveringProperties). A permeable covering is +/// a casement, such as a component, fixed or opening, consisting +/// essentially of a frame and the infilling. The infilling is +/// normally a grill, a louver or a screen. The way of operation is +/// defined in the operation type. +/// The IfcPermeableCoveringProperties are included in the +/// list of properties (HasPropertySets) of the +/// IfcWindowStyle or the IfcDoorStyle. More +/// information about the permeable covering can be included in the +/// same list of the window or door style using the +/// IfcPropertySet for dynamic extensions. This particularly +/// applies for additional properties for the various operation +/// types +/// +/// HISTORY New entity in IFC Release 2.0, it had been renamed from +/// IfcPermeableCovering in IFC Release 2x. +/// +/// IFC2x4 CHANGE Supertype changed to new IfcPreDefinedPropertySet. +/// +/// Geometry use definitions +/// The IfcPermeableCoveringProperties does not hold a geometric representation. However it defines parameters which can be used to create the shape of the IfcWindowStyle (which is inserted by the IfcWindow into the spatial context of the project), or of the IfcDoorStyle (which is inserted by the IfcDoor). +/// The parameters at the IfcPermeableCoveringProperties define a standard permeable covering. The outer boundary of the panel is determined by the occurrence parameter assigned to the +/// IfcWindow or IfcDoor. It has to take the lining parameter into account as well. The position of the permeable covering within the overall window or door is determined by the +/// PanelPosition attribute. +/// +/// As shown in Figure 174, the panel is applied to the position within the lining, as defined by the panel position attribute. The following parameters apply to that panel: FrameDepth, FrameThickness. +/// +/// Figure 174 — Permeable covering properties +class IFC_PARSE_API IfcPermeableCoveringProperties : public IfcPreDefinedPropertySet { +public: + /// Types of permeable covering operations. Also used to assign standard symbolic presentations according to national building standards. + ::Ifc4x3_add2::IfcPermeableCoveringOperationEnum::Value OperationType() const; + void setOperationType(::Ifc4x3_add2::IfcPermeableCoveringOperationEnum::Value v); + /// Position of this permeable covering panel within the overall window or door type. + ::Ifc4x3_add2::IfcWindowPanelPositionEnum::Value PanelPosition() const; + void setPanelPosition(::Ifc4x3_add2::IfcWindowPanelPositionEnum::Value v); + /// Depth of panel frame (used to include the permeable covering), measured from front face to back face horizontally (i.e. perpendicular to the window or door (elevation) plane. + boost::optional< double > FrameDepth() const; + void setFrameDepth(boost::optional< double > v); + /// Width of panel frame (used to include the permeable covering), measured from inside of panel (at permeable covering) to outside of panel (at lining), i.e. parallel to the window or door (elevation) plane. + boost::optional< double > FrameThickness() const; + void setFrameThickness(boost::optional< double > v); + /// Optional link to a shape aspect definition, which points to the part of the geometric representation of the window style, which is used to represent the permeable covering. + ::Ifc4x3_add2::IfcShapeAspect* ShapeAspectStyle() const; + void setShapeAspectStyle(::Ifc4x3_add2::IfcShapeAspect* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPermeableCoveringProperties (IfcEntityInstanceData* e); + IfcPermeableCoveringProperties (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcPermeableCoveringOperationEnum::Value v5_OperationType, ::Ifc4x3_add2::IfcWindowPanelPositionEnum::Value v6_PanelPosition, boost::optional< double > v7_FrameDepth, boost::optional< double > v8_FrameThickness, ::Ifc4x3_add2::IfcShapeAspect* v9_ShapeAspectStyle); + typedef aggregate_of< IfcPermeableCoveringProperties > list; +}; +/// A permit is a permission to perform work in places and on artifacts where regulatory, security or other access restrictions apply. +/// +/// HISTORY New entity in IFC2x2 +/// IFC2x4 CHANGE PermitID renamed to Identification and promoted to supertype IfcControl, Attributes PredefinedType, Status, and LongDescription added. +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. They are accessible by the IsDefinedBy inverse attribute. Refer to the documentation at the supertype IfcControl and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_Permit +/// +/// Declaration Use Definition +/// The IfcPermit may be declared within the project using the IfcRelDeclares relationship where RelatingContext refers to the single IfcProject and RelatedDefinitions contains the IfcPermit. Alternatively, if the IfcPermit is aggregated within an IfcWorkPlan, then it shall not have a direct declaration relationship (whereas the containing work plan may have a declaration relationship). +/// +/// Composition Use Definition +/// The IfcPermit may be aggregated into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcPermit and RelatedObjects contains one or more components. Aggregation use is defined for the following predefined types: +/// +/// ACCESS: May contain IfcWorkCalendar components. A work calendar may indicate the time period of the permit and allowed times when work may be performed. Such work calendar may have assigned resources indicating equipment or labor permitted at various times. +/// WORK: May contain IfcWorkSchedule components. A work schedule may indicate tasks and scheduled times where the work schedule type may designate whether tasks and/or times are planned or actual. Such work schedule may have assigned tasks indicating detail, where tasks may be assigned to products and may have assigned resources. +/// +/// As shown in Figure 159, an IfcPermit may be nested into sub-items using IfcRelNests where RelatingObject refers to the enclosing IfcPermit and RelatedObjects contains one or more sub-items. Nesting use is defined for the following predefined types: +/// +/// (All Types): May contain IfcPermit sub-items. A permit may be nested to indicate permit ammendments, in order of issue. +/// +/// Figure 159 — Permit composition +/// +/// Assignment Use Definition +/// As shown in Figure 160, an IfcPermit may be assigned to the following entities using relationships as indicated: +/// +/// IfcActor (IfcRelAssignsToActor): Organization issuing the permit such as a local government agency or security organization. +/// +/// The IfcPermit may have assignments of its own using the IfcRelAssignsToControl relationship where RelatingControl refers to the IfcPermit and RelatedObjects contains one or more objects of the following types: +/// IfcActor: Organization(s) bound to the permit, typically a single contractor. +/// +/// Figure 160 — Permit assignment +/// +/// Approval Use Definition +/// Approvals may be associated to indicate the status of acceptance or rejection using the IfcRelAssociatesApproval relationship where RelatingApproval refers to an IfcApproval and RelatedObjects contains the IfcPermit. Approvals may be split into sub-approvals using IfcApprovalRelationship to track approval status separately for each party where RelatingApproval refers to the higher-level approval and RelatedApprovals contains one or more lower-level approvals. The hierarchy of approvals implies sequencing such that a higher-level approval is not executed until all of its lower-level approvals have been accepted. +class IFC_PARSE_API IfcPermit : public IfcControl { +public: + /// Identifies the predefined types of permit that can be granted. + /// + /// IFC2x4 CHANGE The attribute has been added. + boost::optional< ::Ifc4x3_add2::IfcPermitTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcPermitTypeEnum::Value > v); + /// The status currently assigned to the permit. + /// + /// IFC2x4 CHANGE The attribute has been added. + boost::optional< std::string > Status() const; + void setStatus(boost::optional< std::string > v); + /// Detailed description of the request. + /// + /// IFC2x4 CHANGE The attribute has been added. + boost::optional< std::string > LongDescription() const; + void setLongDescription(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPermit (IfcEntityInstanceData* e); + IfcPermit (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< ::Ifc4x3_add2::IfcPermitTypeEnum::Value > v7_PredefinedType, boost::optional< std::string > v8_Status, boost::optional< std::string > v9_LongDescription); + typedef aggregate_of< IfcPermit > list; +}; +/// Definition from IAI: Provides shared material, decomposition, representation maps, and property sets for instances of IfcPile. +/// +/// HISTORY New entity in IFC Release 2x4 +/// +/// Material Use Definition: +/// +/// Material profile set association analogous to IfcColumnStandardCase should be used when applicable. +class IFC_PARSE_API IfcPileType : public IfcDeepFoundationType { +public: + /// Subtype of pile. + ::Ifc4x3_add2::IfcPileTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcPileTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPileType (IfcEntityInstanceData* e); + IfcPileType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcPileTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcPileType > list; +}; +/// The flow fitting type IfcPipeFittingType defines commonly shared information for occurrences of pipe fittings. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a pipe fitting specification (i.e. the specific product information, that is common to all occurrences of that product type). Pipe Fitting types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcPipeFittingType are represented by instances of IfcPipeFitting. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowFittingType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_PipeFittingTypeCommon +/// +/// Material Use Definition +/// The material of the IfcPipeFittingType is defined by IfcMaterialProfileSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialProfileSet.MaterialProfiles[n].Name shall be used: +/// +/// 'Body': Material from which the pipe fitting is constructed. +/// 'Coating': The outer coating, if applicable. +/// 'Insulation': The insulating wrapping, if applicable. +/// 'Lining': The inner lining, if applicable. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcPipeFittingType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcPipeFitting for standard port definitions. +class IFC_PARSE_API IfcPipeFittingType : public IfcFlowFittingType { +public: + /// The type of pipe fitting. + ::Ifc4x3_add2::IfcPipeFittingTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcPipeFittingTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPipeFittingType (IfcEntityInstanceData* e); + IfcPipeFittingType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcPipeFittingTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcPipeFittingType > list; +}; +/// The flow segment type IfcPipeSegmentType defines commonly shared information for occurrences of pipe segments. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a pipe segment specification (i.e. the specific product information, that is common to all occurrences of that product type). Pipe Segment types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcPipeSegmentType are represented by instances of IfcPipeSegment. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowSegmentType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_PipeSegmentTypeCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_PipeSegmentTypeCulvert (CULVERT) +/// Pset_PipeSegmentTypeGutter (GUTTER) +/// +/// Material Use Definition +/// The material of the IfcPipeSegmentType is defined by IfcMaterialProfileSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialProfileSet.MaterialProfiles[n].Name shall be used: +/// +/// 'Body': Material from which the pipe segment is constructed. +/// 'Coating': The outer coating, if applicable. +/// 'Insulation': The insulating wrapping, if applicable. +/// 'Lining': The inner lining, if applicable. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcPipeSegmentType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcPipeSegment for standard port definitions. +class IFC_PARSE_API IfcPipeSegmentType : public IfcFlowSegmentType { +public: + /// The type of pipe segment. + ::Ifc4x3_add2::IfcPipeSegmentTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcPipeSegmentTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPipeSegmentType (IfcEntityInstanceData* e); + IfcPipeSegmentType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcPipeSegmentTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcPipeSegmentType > list; +}; +/// The element type IfcPlateType defines commonly shared +/// information for occurrences of plates. The set of shared +/// information may include: +/// +/// common properties within shared property sets +/// common material information +/// common material layer definitions +/// common shape representations +/// +/// NOTE It is illegal to share shape +/// representations as representation maps for occurrences of +/// IfcPlateStandardCase. +/// +/// It is used to define a plate specification (i.e. the specific +/// product information, that is common to all occurrences of that +/// product type). Plate types may be exchanged without being already +/// assigned to occurrences. +/// NOTE The product representations are defined as +/// representation maps (at the level of the supertype +/// IfcTypeProduct, which gets assigned by an element occurrence +/// instance through the IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// The occurrences of the IfcPlateType within building +/// models are represented by instances of IfcPlateStandardCase +/// if the IfcPlateType has a single associated +/// IfcMaterialLayerSet; otherwise they are represented by +/// instances of IfcPlate. +/// +/// HISTORY  New +/// entity in Release IFC2x2. +/// +/// Informal proposition: +/// +/// The material assignment, if provided using the +/// IfcRelAssociatesMaterial relationship, shall not reference +/// the IfcMaterialLayerSetUsage. +/// +/// Material Use Definition +/// The material of the IfcPlateType is defined by the +/// IfcMaterialLayerSet or as fall back by IfcMaterial +/// and attached by the +/// IfcRelAssociatesMaterial.RelatingMaterial. It is +/// accessible by the inverse HasAssociations relationship. +/// Note: It is illegal to assign an +/// IfcMaterial to an IfcPlateType, if there is at least +/// one occurrences of IfcPlateStandardCase for this +/// type. +/// Layer Set Use Definition: +/// The shared material layer set definition is defined by assigning +/// an IfcMaterialLayerSet (see material use definition above). +/// The IfcMaterialLayer refers to one or several of +/// IfcMaterial that is the common for all plate occurrence, if +/// used. It is only applicable if the IfcPlateType has only +/// occurrences of type IfcPlateStandardCase (see definition of +/// IfcPlateStandardCase for further information). +/// NOTE Since each individual instance of +/// IfcPlateStandardCase defines its own +/// IfcMaterialLayerSetUsage including the offset from the +/// reference plane, the same IfcPlateType can be used +/// independently of the reference plane alignment of its +/// occurrences. +/// Property Set Use Definition: +/// The shared property sets relating to the IfcPlateType are +/// defined by the IfcPropertySet and are attached by the +/// HasPropertySets attribute. The following property set +/// definitions specific to the IfcWallType are part of this IFC +/// release: +/// NOTE There is no differentiation between +/// properties within the property set that are only assignable to +/// IfcPlateType and those that are only assignable to +/// IfcPlate. If the same property is assigned to the +/// IfcPlateType and the IfcPlate being an occurrence of +/// the IfcPlateType, then the occurrence property overrides the +/// type property. +/// +/// Pset_PlateCommon: common property set for all +/// plate types. +class IFC_PARSE_API IfcPlateType : public IfcBuiltElementType { +public: + /// Identifies the predefined types of a planar member element from which the type required may be set. + ::Ifc4x3_add2::IfcPlateTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcPlateTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPlateType (IfcEntityInstanceData* e); + IfcPlateType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcPlateTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcPlateType > list; +}; + +class IFC_PARSE_API IfcPolygonalFaceSet : public IfcTessellatedFaceSet { +public: + boost::optional< bool > Closed() const; + void setClosed(boost::optional< bool > v); + aggregate_of< ::Ifc4x3_add2::IfcIndexedPolygonalFace >::ptr Faces() const; + void setFaces(aggregate_of< ::Ifc4x3_add2::IfcIndexedPolygonalFace >::ptr v); + boost::optional< std::vector< int > /*[1:?]*/ > PnIndex() const; + void setPnIndex(boost::optional< std::vector< int > /*[1:?]*/ > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPolygonalFaceSet (IfcEntityInstanceData* e); + IfcPolygonalFaceSet (::Ifc4x3_add2::IfcCartesianPointList3D* v1_Coordinates, boost::optional< bool > v2_Closed, aggregate_of< ::Ifc4x3_add2::IfcIndexedPolygonalFace >::ptr v3_Faces, boost::optional< std::vector< int > /*[1:?]*/ > v4_PnIndex); + typedef aggregate_of< IfcPolygonalFaceSet > list; +}; +/// Definition from ISO/CD 10303-42:1992: A polyline +/// is a bounded curve of n - 1 linear segments, defined by a +/// list of n points, P1, P2 ... Pn. +/// The ith segment of the curve is parameterized as follows: +/// +///     +/// for 1 ≤ i ≤ n - 1 +/// +/// where i - 1 ≤ u ≤ i and +/// with parametric range of 0 <≤ u ≤ n - 1. +/// +/// NOTE  Corresponding ISO 10303 entity: polyline. Please refer to ISO/IS 10303-42:1994, p. 45 for the final definition of the formal standard. +/// +/// HISTORY  New class in IFC Release 1.0 +class IFC_PARSE_API IfcPolyline : public IfcBoundedCurve { +public: + /// The points defining the polyline. + aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr Points() const; + void setPoints(aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPolyline (IfcEntityInstanceData* e); + IfcPolyline (aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr v1_Points); + typedef aggregate_of< IfcPolyline > list; +}; +/// Definition from IAI: An IfcPort provides the +/// means for an element to connect to other elements. +/// +/// An IfcPort is associated with an IfcElement, +/// it belongs to, through the objectified relationship +/// IfcRelConnectsPortToElement. Exactly two ports, +/// belonging to two different elements, are connected with +/// each other through the objectified relationship +/// IfcRelConnectsPorts. +/// +/// An instance of IfcElement may have one or more +/// points at which it connects to other instances of +/// IfcElement. An instance of IfcPort is located +/// at a point where a connection can occur. The location of +/// the port is determined in the context of the local +/// coordinate system of the element to which it belongs. +/// +/// HISTORY New entity in +/// Release IFC2x Edition 2. +/// +/// Containment Use Definitions +/// +/// As a subordinate part being fully dependent on the master +/// element the IfcPort shall have no +/// independent containment relationship to the spatial +/// structure. +/// +/// Geometry Use Definition +/// +/// The geometric representation of IfcPort is +/// given by the IfcProductDefinitionShape, allowing +/// multiple geometric representation. +/// +/// Local Placement +/// +/// The local placement for IfcPort is defined +/// in its supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local +/// coordinate system that is referenced by all geometric +/// representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point to the +/// local placement of the master IfcElement (its +/// relevant subtypes), which is associated to the +/// IfcPort by the relationship object +/// IfcRelConnectsPortToElement. +/// +/// Shape Representation +/// +/// The geometry use definitions for the shape representation +/// of the IfcPort is given at the level of +/// its subtypes. +class IFC_PARSE_API IfcPort : public IfcProduct { +public: + aggregate_of< IfcRelConnectsPortToElement >::ptr ContainedIn() const; // INVERSE IfcRelConnectsPortToElement::RelatingPort + aggregate_of< IfcRelConnectsPorts >::ptr ConnectedFrom() const; // INVERSE IfcRelConnectsPorts::RelatedPort + aggregate_of< IfcRelConnectsPorts >::ptr ConnectedTo() const; // INVERSE IfcRelConnectsPorts::RelatingPort + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPort (IfcEntityInstanceData* e); + IfcPort (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation); + typedef aggregate_of< IfcPort > list; +}; + +class IFC_PARSE_API IfcPositioningElement : public IfcProduct { +public: + aggregate_of< IfcRelContainedInSpatialStructure >::ptr ContainedInStructure() const; // INVERSE IfcRelContainedInSpatialStructure::RelatedElements + aggregate_of< IfcRelPositions >::ptr Positions() const; // INVERSE IfcRelPositions::RelatingPositioningElement + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPositioningElement (IfcEntityInstanceData* e); + IfcPositioningElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation); + typedef aggregate_of< IfcPositioningElement > list; +}; +/// An IfcProcedure is a +/// logical set of actions to be taken in response to an event +/// or to cause an event to occur. +/// +/// HISTORY  New entity in IFC2x2 +/// +/// IFC2x4 CHANGE  ProcedureType renamed to PredefinedType and made optional (upward compatible). Where rules WR1 and WR2 have been removed. +/// +/// Use definitions +/// +/// IfcProcedure is used to capture information about +/// stepped processes such as calibration, start/stop +/// procedures for equipment items, designated actions to take +/// in the event of an emergency etc. A procedure is not a +/// task, but may describe a set of tasks and their order of +/// occurrence in response to or to cause an event. +/// +/// Type use definition +/// +/// IfcProcedure defines the anticipated or actual +/// occurrence of any procedure; common information about +/// procedure types is handled by IfcProcedureType. The +/// IfcProcedureType (if present) may establish the +/// common type name, usage (or predefined) type, common nested +/// procedures (using IfcRelNests), common set of +/// properties, and common product assignment using +/// IfcRelAssignsToProduct. The IfcProcedureType +/// is attached using the +/// IfcRelDefinesByType.RelatingType objectified +/// relationship and is accessible by the inverse +/// IsTypedBy attribute. +/// +/// Property set use definition +/// +/// The property sets relating to IfcProcedure are +/// defined by IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. They are +/// accessible by the inverse IsDefinedBy relationship. +/// Such property sets may define procedure parameters. No +/// property sets for IfcProcedure are currently defined +/// by IFC. +/// +/// Connectivity use definition +/// +/// The relationship IfcRelSequence is used to indicate +/// control flow. An IfcProcedure as a successor to an +/// IfcEvent indicates that the procedure should be +/// performed in response to the event. An IfcProcedure +/// as a predecessor to an IfcEvent indicates that the +/// event should be trigerred following the procedure. As +/// procedures have arbitrary duration, the +/// IfcRelSequence.SequenceType attribute has no effect +/// on an IfcProcedure but still applies to the opposite +/// end of the relationship if IfcTask is used. +/// +/// Composition use definition +/// +/// IfcProcedure may be contained within an +/// IfcTask or IfcProcedure using the +/// IfcRelNests relationship. An IfcProcedure may +/// in turn nest other IfcProcedure or IfcEvent +/// entities. Such nesting indicates decomposed level of +/// detail. +/// +/// Note that a particular type of IfcProcedure is a +/// caution, warning or other form of advisory note. Typically, +/// it is anticipated that such a procedure would be assigned +/// to the specific IfcProcess for which it gives advice +/// using IfcRelAssignsToProcess. +/// +/// Assignment use definition +/// +/// An IfcProcedure may be assigned to an +/// IfcWorkCalendar to indicate times when such +/// procedure may be performed using +/// IfcRelAssignsToControl; otherwise the effective +/// calendar is determined by the nearest IfcProcess +/// ancestor with a calendar assigned. Advisory notes should be +/// assigned to the specific IfcProcess for which it +/// gives advice using IfcRelAssignsToProcess. +/// +/// For building operation scenarios, IfcProcedure may +/// be assigned to a product (IfcElement subtype) using +/// IfcRelAssignsToProduct to indicate a specific +/// product occurrence that performs the procedure. For +/// example, an IfcActuator may have a "Close" +/// procedure. If the IfcProcedure is defined by an +/// IfcProcedureType and the IfcProcedureType is +/// assigned to a product type (using +/// IfcRelAssignsToProduct), then the +/// IfcProcedure must be assigned to one or more +/// occurrences of the specified product type using +/// IfcRelAssignsToProduct. +/// +/// As shown in Figure 12, IfcProcedure does not restrict anything but +/// describes specific steps of how something should happen. +/// While a procedure does control/restrict in the sense of +/// indicating "this is how the task should be performed" by +/// nature of describing inner detail, this is not different than +/// parts of a product indicating "this is how the parts should +/// be assembled". Consequently, it doesn't restrict the outer +/// item as a whole but provides inner detail of the item. +/// +/// Figure 12 — Procedure relationships +class IFC_PARSE_API IfcProcedure : public IfcProcess { +public: + /// Identifies the predefined types of a procedure from which + /// the type required may be set. + boost::optional< ::Ifc4x3_add2::IfcProcedureTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcProcedureTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcProcedure (IfcEntityInstanceData* e); + IfcProcedure (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, boost::optional< ::Ifc4x3_add2::IfcProcedureTypeEnum::Value > v8_PredefinedType); + typedef aggregate_of< IfcProcedure > list; +}; +/// A project order is a directive to purchase products and/or perform work, such as for construction or facilities management. +/// +/// Project orders are typically formal contracts between two organizations, where cost and time information may be rigid or flexible according to contained schedule types and constraints. +/// +/// HISTORY New entity in IFC 2.0 +/// IFC2x4 CHANGE Attribute 'ID' changed to Identification and promoted to supertype IfcControl. Attribute 'LongDescription' added. +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. They are accessible by the IsDefinedBy inverse attribute. Refer to the documentation at the supertype IfcControl and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_ProjectOrderChangeOrder (CHANGEORDER) +/// Pset_ProjectOrderMaintenanceWorkOrder (MAINTENANCEWORKORDER) +/// Pset_ProjectOrderMoveOrder (MOVEORDER) +/// Pset_ProjectOrderPurchaseOrder (PURCHASEORDER) +/// Pset_ProjectOrderWorkOrder (WORKORDER) +/// +/// Declaration Use Definition +/// The IfcProjectOrder may be declared within the project using the IfcRelDeclares relationship where RelatingContext refers to the single IfcProject and RelatedDefinitions contains the IfcProjectOrder. Alternatively, if the IfcProjectOrder is aggregated within an IfcWorkPlan, then it shall not have a direct declaration relationship (whereas the containing work plan may have a declaration relationship). +/// +/// Composition Use Definition +/// As shown in Figure 160, an IfcProjectOrder may be aggregated into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcProjectOrder and RelatedObjects contains one or more components. Aggregation use is defined for the following predefined types: +/// +/// (All Types): May contain IfcCostSchedule components. A cost schedule may indicate costs and quantities where the cost schedule type may designate whether rates and/or quantities are estimated or final. Such cost schedule may have assigned cost items indicating detail, where each cost item may have assigned products, processes, or resources. +/// WORKORDER: May contain IfcWorkSchedule components. A work schedule may indicate tasks and scheduled times where the work schedule type may designate whether tasks and/or times are planned or actual. Such work schedule may have assigned tasks indicating detail, where tasks may be assigned to products and may have assigned resources. +/// +/// The IfcProjectOrder may be nested into sub-items using IfcRelNests where RelatingObject refers to the enclosing IfcProjectOrder and RelatedObjects contains one or more sub-items. Nesting use is defined for the following predefined types: +/// +/// WORKORDER: May contain IfcProjectOrder sub-items having PredefinedType CHANGEORDER. A work order may be nested into change orders to indicate contract ammendment, in order of issue. +/// +/// Figure 161 — Project order composition +/// +/// Assignment Use Definition +/// As shown in Figure 161, an IfcProjectOrder may be assigned to the following entities using relationships as indicated: +/// +/// IfcActor (IfcRelAssignsToActor): Organization issuing the order such as an owner or contractor. +/// +/// The IfcProjectOrder may have assignments of its own using the IfcRelAssignsToControl relationship where RelatingControl refers to the IfcProjectOrder and RelatedObjects contains one or more objects of the following types: +/// IfcActor: Organization(s) contracted to fulfill the order, typically a single contractor, subcontractor, or supplier. +/// +/// Figure 162 — Project order assignment +/// +/// Approval Use Definition +/// Approvals may be associated to indicate the status of acceptance or rejection using the IfcRelAssociatesApproval relationship where RelatingApproval refers to an IfcApproval and RelatedObjects contains the IfcProjectOrder. Approvals may be split into sub-approvals using IfcApprovalRelationship to track approval status separately for each party where RelatingApproval refers to the higher-level approval and RelatedApprovals contains one or more lower-level approvals. The hierarchy of approvals implies sequencing such that a higher-level approval is not executed until all of its lower-level approvals have been accepted. +class IFC_PARSE_API IfcProjectOrder : public IfcControl { +public: + /// Predefined generic type for a project order that is specified in an enumeration. There may be a property set given specificly for the predefined types. + /// + /// IFC2x4 CHANGE The attribute has been made optional. + boost::optional< ::Ifc4x3_add2::IfcProjectOrderTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcProjectOrderTypeEnum::Value > v); + /// The current status of a project order.Examples of status values that might be used for a project order status include: + /// + /// PLANNED + /// REQUESTED + /// APPROVED + /// ISSUED + /// STARTED + /// DELAYED + /// DONE + boost::optional< std::string > Status() const; + void setStatus(boost::optional< std::string > v); + /// A detailed description of the project order describing the work to be completed. + boost::optional< std::string > LongDescription() const; + void setLongDescription(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcProjectOrder (IfcEntityInstanceData* e); + IfcProjectOrder (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< ::Ifc4x3_add2::IfcProjectOrderTypeEnum::Value > v7_PredefinedType, boost::optional< std::string > v8_Status, boost::optional< std::string > v9_LongDescription); + typedef aggregate_of< IfcProjectOrder > list; +}; +/// The projection element is a +/// specialization of the general feature element to represent +/// projections applied to building elements. It represents a solid +/// attached to any element that has physical manifestation. +/// EXAMPLE A wall projection such as a pilaster +/// strip is handled by +/// IfcProjectionElement +/// NOTE View definitions or implementer agreements +/// may restrict the types of elements to which +/// IfcProjectionElement can be applied. +/// An IfcProjectionElement has to be linked to a element +/// (all subtypes of IfcElement) by using the +/// IfcRelProjectsElement relationship. Its existence depends on +/// the existence of the master element. The relationship implies a +/// Boolean union operation between the volume of the projection +/// element and the volume of the element. +/// HISTORY New entity in IFC2x2. +/// IFC2x4 CHANGE The attribute PredefinedType has been added at the end of attribute +/// list. +/// The quantities relating to the IfcProjectionElement are +/// defined by the IfcElementQuantity and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible by +/// the inverse IsDefinedBy relationship. The following base +/// quantities are defined and should be exchanged with the +/// IfcElementQuantity.Name = 'BaseQuantities'. Other +/// quantities, being subjected to local standard of measurement, can +/// be defined with another string value assigned to Name. In +/// this case a valid value for MethodOfMeasurement has to be +/// provided. +/// +/// Qto_ProjectionElementBaseQuantities: base +/// quantities for all opening occurrences. +/// +/// Containment Use Definition +/// The IfcProjectionElement shall not participate in the +/// containment relationship, i.e. it is not linked directly to the +/// spatial structure of the project. It has a mandatory +/// ProjectsElements inverse relationship pointing to the +/// IfcElement that is contained in the spatial structure. +/// +/// The inverse relationship ContainedInStructure shall be +/// NIL. +/// +/// Geometry Use Definition +/// The geometric representation of IfcProjectionElement is +/// given by the IfcProductDefinitionShape and +/// IfcLocalPlacement allowing multiple geometric +/// representations. +/// Local Placement +/// The local placement for IfcOpeningRecess is defined in +/// its supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate system +/// that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement should point to the local placement of the +/// same element, to which the projection adds, i.e. referred to by +/// ProjectsElement.RelatingBuildingElement. +/// +/// Swept Solid Representation +/// The geometric representation of IfcProjectionElement is +/// defined using the swept area solid geometry. The following +/// attribute values for the IfcShapeRepresentation holding this +/// geometric representation shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'SweptSolid' +/// +/// The following additional constraints apply to the swept solid +/// representation: +/// +/// Solid: IfcExtrudedAreaSolid is required. +/// Profile: IfcRectangleProfileDef, +/// IfcCircleProfileDef and IfcArbitraryClosedProfileDef +/// shall be supported. +/// Extrusion: The profile shall be extruded horizontally +/// (that is, perpendicular to the extrusion direction of the modified +/// element), such as for wall projections, or vertically (that is, in the +/// extrusion direction of the projected element), such as for floor +/// projections. +/// +/// As shown in Figure 38, the following interpretation of dimension parameter applies for +/// rectangular projection: +/// +/// IfcRectangleProfileDef.YDim interpreted as projection +/// width +/// IfcRectangleProfileDef.XDim interpreted as projection +/// height +/// IfcExtrudedAreaSolid.Depth is interpreted as projection +/// depth +/// +/// NOTE  Rectangles are now defined centric, the placement location has to be set: +/// IfcCartesianPoint(XDim/2,YDim/2) +/// NOTE  The local placement directions for the IfcProjectionElement are only given as an example, other directions are valid as well. +/// +/// Figure 38 — Projection representation +/// +/// Brep Representation +/// The general b-rep geometric representation of +/// IfcProjectionElement is defined using the Brep geometry. The +/// Brep representation allows for the representation of complex +/// element shape. The following attribute values for the +/// IfcShapeRepresentation holding this geometric representation +/// shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'Brep' +class IFC_PARSE_API IfcProjectionElement : public IfcFeatureElementAddition { +public: + /// Predefined generic type for a projection element that is specified in an enumeration. There may be a property set given specificly for the predefined types. + /// + /// IFC2x4 CHANGE The attribute has been added at the end of the entity definition. + boost::optional< ::Ifc4x3_add2::IfcProjectionElementTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcProjectionElementTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcProjectionElement (IfcEntityInstanceData* e); + IfcProjectionElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcProjectionElementTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcProjectionElement > list; +}; +/// The flow controller type IfcProtectiveDeviceType defines commonly shared information for occurrences of protective devices. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a protective device specification (i.e. the specific product information, that is common to all occurrences of that product type). Protective Device types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcProtectiveDeviceType are represented by instances of IfcProtectiveDevice. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowControllerType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_ElectricalDeviceCommon +/// Pset_ProtectiveDeviceTypeCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_ProtectiveDeviceTypeCircuitBreaker (CIRCUITBREAKER) +/// Pset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker (EARTHLEAKAGECIRCUITBREAKER) +/// Pset_ProtectiveDeviceTypeFuseDisconnector (FUSEDISCONNECTOR) +/// Pset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker (RESIDUALCURRENTCIRCUITBREAKER) +/// Pset_ProtectiveDeviceTypeResidualCurrentSwitch (RESIDUALCURRENTSWITCH) +/// Pset_ProtectiveDeviceTypeVaristor (VARISTOR) +/// +/// Material Use Definition +/// The material of the IfcProtectiveDeviceType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcProtectiveDeviceType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcProtectiveDevice for standard port definitions. +class IFC_PARSE_API IfcProtectiveDeviceType : public IfcFlowControllerType { +public: + /// Identifies the predefined types of protective device from which the type required may be set. + ::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcProtectiveDeviceType (IfcEntityInstanceData* e); + IfcProtectiveDeviceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcProtectiveDeviceType > list; +}; +/// The flow moving device type IfcPumpType defines commonly shared information for occurrences of pumps. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a pump specification (i.e. the specific product information, that is common to all occurrences of that product type). Pump types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcPumpType are represented by instances of IfcPump. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowMovingDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_PumpTypeCommon +/// +/// Material Use Definition +/// The material of the IfcPumpType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// 'Impeller': Material from which the impeller of the pump is constructed. In the case of a positive displacement pump, the piston acts as the impeller. +/// 'ImpellerSeal': Material from which the impeller shaft seal of the pump is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcPumpType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcPump for standard port definitions. +class IFC_PARSE_API IfcPumpType : public IfcFlowMovingDeviceType { +public: + /// Defines the type of pump typically used in building services. + ::Ifc4x3_add2::IfcPumpTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcPumpTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPumpType (IfcEntityInstanceData* e); + IfcPumpType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcPumpTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcPumpType > list; +}; + +class IFC_PARSE_API IfcRailType : public IfcBuiltElementType { +public: + ::Ifc4x3_add2::IfcRailTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcRailTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRailType (IfcEntityInstanceData* e); + IfcRailType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcRailTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcRailType > list; +}; +/// Definition from IAI: The element type (IfcRailingType) +/// defines a list of commonly shared property set definitions of a railing element +/// and an optional set of product representations. It is used to define a railing +/// specification (i.e. the specific product information, that is common to all +/// occurrences of that product type). +/// +/// NOTE: The product representations are defined as +/// representation maps (at the level of the supertype IfcTypeProduct, which +/// gets assigned by an element occurrence instance through the +/// IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// A railing type is used to define the common properties of a certain type +/// of railing that may be applied to many instances of that type to assign a +/// specific style. Railing types may be exchanged without being already assigned +/// to occurrences. +/// The occurrences of the IfcRailingType are represented by +/// instances of IfcRailing. +/// +/// HISTORY New entity in Release IFC2x +/// Editon 2. +class IFC_PARSE_API IfcRailingType : public IfcBuiltElementType { +public: + /// Identifies the predefined types of a railing element from which the type required may be set. + ::Ifc4x3_add2::IfcRailingTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcRailingTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRailingType (IfcEntityInstanceData* e); + IfcRailingType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcRailingTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcRailingType > list; +}; + +class IFC_PARSE_API IfcRailway : public IfcFacility { +public: + boost::optional< ::Ifc4x3_add2::IfcRailwayTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcRailwayTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRailway (IfcEntityInstanceData* e); + IfcRailway (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, boost::optional< ::Ifc4x3_add2::IfcRailwayTypeEnum::Value > v10_PredefinedType); + typedef aggregate_of< IfcRailway > list; +}; + +class IFC_PARSE_API IfcRailwayPart : public IfcFacilityPart { +public: + boost::optional< ::Ifc4x3_add2::IfcRailwayPartTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcRailwayPartTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRailwayPart (IfcEntityInstanceData* e); + IfcRailwayPart (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, ::Ifc4x3_add2::IfcFacilityUsageEnum::Value v10_UsageType, boost::optional< ::Ifc4x3_add2::IfcRailwayPartTypeEnum::Value > v11_PredefinedType); + typedef aggregate_of< IfcRailwayPart > list; +}; +/// Definition from IAI: The element type (IfcRampFlightType) +/// defines a list of commonly shared property set definitions of a ramp flight and +/// an optional set of product representations. It is used to define an ramp flight +/// specification (i.e. the specific product information, that is common to all +/// occurrences of that product type). +/// +/// NOTE: The product representations are defined as +/// representation maps (at the level of the supertype IfcTypeProduct, which +/// gets assigned by an element occurrence instance through the +/// IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// A ramp flight type is used to define the common properties of a certain +/// type of a ramp flight that may be applied to many instances of that type to +/// assign a specific style. Ramp flight types may be exchanged without being +/// already assigned to occurrences. +/// The occurrences of the IfcRampFlightType are represented by +/// instances of IfcRampFlight. +/// +/// HISTORY New entity in Release IFC2x +/// Edition 2. +class IFC_PARSE_API IfcRampFlightType : public IfcBuiltElementType { +public: + /// Identifies the predefined types of a ramp flight element from which the type required may be set. + ::Ifc4x3_add2::IfcRampFlightTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcRampFlightTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRampFlightType (IfcEntityInstanceData* e); + IfcRampFlightType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcRampFlightTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcRampFlightType > list; +}; +/// Definition from IAI: The element type +/// IfcRampType defines a list of commonly shared +/// property set definitions of a ramp and an optional set of +/// product representations. It is used to define a ramp +/// specification (i.e. the specific product information, that +/// is common to all occurrences of that product type). +/// +/// NOTE The product representations are defined as +/// representation maps (at the level of the supertype +/// IfcTypeProduct, which gets assigned by an element +/// occurrence instance through the +/// IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// +/// An IfcRampTypeis used to define the common +/// properties of a specific ramp that may be applied to many +/// instances of that type to assign a specific style. +/// Building element types (or the instantiable subtypes) +/// may be exchanged without being +/// already assigned to occurrences. +/// +/// The IfcRampType can have common material (using the +/// inverse relationship HasAssociations) or property +/// set information (using HasPropertySets) assigned. If +/// present, it does apply equally to all occurrences of the +/// IfcRampType. Property set information may be +/// overridden at the occurrence. +/// +/// The occurrences of the IfcRampType are represented +/// by instances of IfcRamp. +/// +/// HISTORY New entity in Release +/// IFC2x Edition 4. +class IFC_PARSE_API IfcRampType : public IfcBuiltElementType { +public: + /// Identifies the predefined types of a ramp element from which the type required may be set. + ::Ifc4x3_add2::IfcRampTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcRampTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRampType (IfcEntityInstanceData* e); + IfcRampType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcRampTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcRampType > list; +}; +/// A rational B-spline surface with knots is a piecewise parametric rational surface described in terms of control points, and associated weight values. +/// +/// The surface is to be interpreted as follows: +/// +/// σ +/// +/// NOTE: The IfcRationalBSplineSurfaceWithKnots is an entity that had been adopted from ISO 10303, Industrial automation systems and integration — Product data representation and exchange, Part 42: Integrated generic resource: Geometric and topological representation. +/// +/// NOTE: The specific subtype IfcRationalBSplineSurfaceWithKnots has been introduced to avoid the complexity of ANDOR subtype relationships in the ISO 10303-42 specification +/// +/// NOTE: Corresponding ISO 10303 entity: rational_b_spline_surface. Please refer to ISO/IS 10303-42:1994, p. 85 for the final definition of the formal standard. +/// +/// HISTORY: New entity in IFC2x4. +class IFC_PARSE_API IfcRationalBSplineSurfaceWithKnots : public IfcBSplineSurfaceWithKnots { +public: + /// The weights associated with the control points in the rational case. + std::vector< std::vector< double > > WeightsData() const; + void setWeightsData(std::vector< std::vector< double > > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRationalBSplineSurfaceWithKnots (IfcEntityInstanceData* e); + IfcRationalBSplineSurfaceWithKnots (int v1_UDegree, int v2_VDegree, aggregate_of_aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr v3_ControlPointsList, ::Ifc4x3_add2::IfcBSplineSurfaceForm::Value v4_SurfaceForm, boost::logic::tribool v5_UClosed, boost::logic::tribool v6_VClosed, boost::logic::tribool v7_SelfIntersect, std::vector< int > /*[2:?]*/ v8_UMultiplicities, std::vector< int > /*[2:?]*/ v9_VMultiplicities, std::vector< double > /*[2:?]*/ v10_UKnots, std::vector< double > /*[2:?]*/ v11_VKnots, ::Ifc4x3_add2::IfcKnotType::Value v12_KnotSpec, std::vector< std::vector< double > > v13_WeightsData); + typedef aggregate_of< IfcRationalBSplineSurfaceWithKnots > list; +}; + +class IFC_PARSE_API IfcReferent : public IfcPositioningElement { +public: + boost::optional< ::Ifc4x3_add2::IfcReferentTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcReferentTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcReferent (IfcEntityInstanceData* e); + IfcReferent (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< ::Ifc4x3_add2::IfcReferentTypeEnum::Value > v8_PredefinedType); + typedef aggregate_of< IfcReferent > list; +}; +/// Definition from IAI: Bars, wires, strands, meshes, tendons, and other components embedded in concrete in such a manner that the reinforcement and the concrete act together in resisting forces. +/// +/// HISTORY New entity in IFC Release 2x2 +/// +/// IFC 2x4 CHANGE Entity made non-abstract. +/// Subtypes IfcTendon and IfcTendonAnchor removed. +/// Attribute SteelGrade removed. +/// Attributes PredefinedType and Role added. +class IFC_PARSE_API IfcReinforcingElement : public IfcElementComponent { +public: + boost::optional< std::string > SteelGrade() const; + void setSteelGrade(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcReinforcingElement (IfcEntityInstanceData* e); + IfcReinforcingElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_SteelGrade); + typedef aggregate_of< IfcReinforcingElement > list; +}; +/// Definition from IAI: Types of bars, wires, strands, meshes, tendons, and other components embedded in concrete in such a manner that the reinforcement and the concrete act together in resisting forces. +/// +/// HISTORY New entity in IFC Release 2x4 +class IFC_PARSE_API IfcReinforcingElementType : public IfcElementComponentType { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcReinforcingElementType (IfcEntityInstanceData* e); + IfcReinforcingElementType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType); + typedef aggregate_of< IfcReinforcingElementType > list; +}; +/// Definition from IAI: A series of longitudinal and transverse wires or bars of various gauges, arranged at right angles to each other and welded at all points of intersection; usually used for concrete slab reinforcement. Also known as welded wire fabric. +/// +/// HISTORY New entity in IFC Release 2x2 +/// +/// IFC 2x4 CHANGE All attributes removed; information now provided by IfcReinforcingMeshType. +/// +/// Geometry Use Definition +/// +/// The geometric representation of IfcReinforcingBar is given by the IfcProductDefinitionShape, +/// allowing multiple geometric representations. Included are: +/// +/// Local Placement +/// The use of local placement is defined at the supertype IfcElementComponent. +/// +/// Multiple Mapped Representation +/// See supertype IfcElementComponent. This method of representation allows for several meshes +/// represented by a single instance of IfcReinforcingMesh. +/// +/// An IfcElementQuantity, +/// attached via IfcRelDefinesByProperties, should contain an IfcQuantityCount named 'Count' +/// with the number of meshes represented by this instance. +/// +/// Simplified Geometric Representation +/// Simplified geometric representations may be used based on local agreements. +class IFC_PARSE_API IfcReinforcingMesh : public IfcReinforcingElement { +public: + boost::optional< double > MeshLength() const; + void setMeshLength(boost::optional< double > v); + boost::optional< double > MeshWidth() const; + void setMeshWidth(boost::optional< double > v); + boost::optional< double > LongitudinalBarNominalDiameter() const; + void setLongitudinalBarNominalDiameter(boost::optional< double > v); + boost::optional< double > TransverseBarNominalDiameter() const; + void setTransverseBarNominalDiameter(boost::optional< double > v); + boost::optional< double > LongitudinalBarCrossSectionArea() const; + void setLongitudinalBarCrossSectionArea(boost::optional< double > v); + boost::optional< double > TransverseBarCrossSectionArea() const; + void setTransverseBarCrossSectionArea(boost::optional< double > v); + boost::optional< double > LongitudinalBarSpacing() const; + void setLongitudinalBarSpacing(boost::optional< double > v); + boost::optional< double > TransverseBarSpacing() const; + void setTransverseBarSpacing(boost::optional< double > v); + /// The predefined type is always MESH. + boost::optional< ::Ifc4x3_add2::IfcReinforcingMeshTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcReinforcingMeshTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcReinforcingMesh (IfcEntityInstanceData* e); + IfcReinforcingMesh (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_SteelGrade, boost::optional< double > v10_MeshLength, boost::optional< double > v11_MeshWidth, boost::optional< double > v12_LongitudinalBarNominalDiameter, boost::optional< double > v13_TransverseBarNominalDiameter, boost::optional< double > v14_LongitudinalBarCrossSectionArea, boost::optional< double > v15_TransverseBarCrossSectionArea, boost::optional< double > v16_LongitudinalBarSpacing, boost::optional< double > v17_TransverseBarSpacing, boost::optional< ::Ifc4x3_add2::IfcReinforcingMeshTypeEnum::Value > v18_PredefinedType); + typedef aggregate_of< IfcReinforcingMesh > list; +}; +/// Definition from IAI: A series of longitudinal and transverse wires or bars of various gauges, arranged at right angles to each other and welded at all points of intersection; usually used for concrete slab reinforcement. Also known as welded wire fabric. +/// +/// HISTORY New entity in IFC Release 2x4 +/// +/// Material Use Definition: +/// +/// An associated material denotes the steel grade, preferrably via material classification. +/// +/// Geometry Use Definition: +/// +/// The IfcReinforcingMeshType may define the shared geometric representation for all mesh occurrences. The RepresentationMaps attribute refers to a list of IfcRepresentationMap's, that allow for multiple geometric representations. +class IFC_PARSE_API IfcReinforcingMeshType : public IfcReinforcingElementType { +public: + /// The predefined type is always MESH. + ::Ifc4x3_add2::IfcReinforcingMeshTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcReinforcingMeshTypeEnum::Value v); + /// The overall length of the mesh measured in its longitudinal direction. + boost::optional< double > MeshLength() const; + void setMeshLength(boost::optional< double > v); + /// The overall width of the mesh measured in its transversal direction. + boost::optional< double > MeshWidth() const; + void setMeshWidth(boost::optional< double > v); + /// The nominal diameter denoting the cross-section size of the longitudinal bars. + boost::optional< double > LongitudinalBarNominalDiameter() const; + void setLongitudinalBarNominalDiameter(boost::optional< double > v); + /// The nominal diameter denoting the cross-section size of the transverse bars. + boost::optional< double > TransverseBarNominalDiameter() const; + void setTransverseBarNominalDiameter(boost::optional< double > v); + /// The effective cross-section area of the longitudinal bars of the mesh. + boost::optional< double > LongitudinalBarCrossSectionArea() const; + void setLongitudinalBarCrossSectionArea(boost::optional< double > v); + /// The effective cross-section area of the transverse bars of the mesh. + boost::optional< double > TransverseBarCrossSectionArea() const; + void setTransverseBarCrossSectionArea(boost::optional< double > v); + /// The spacing between the longitudinal bars. Note: an even distribution of bars is presumed; other cases are handled by classification or property sets. + boost::optional< double > LongitudinalBarSpacing() const; + void setLongitudinalBarSpacing(boost::optional< double > v); + /// The spacing between the transverse bars. Note: an even distribution of bars is presumed; other cases are handled by classification or property sets. + boost::optional< double > TransverseBarSpacing() const; + void setTransverseBarSpacing(boost::optional< double > v); + boost::optional< std::string > BendingShapeCode() const; + void setBendingShapeCode(boost::optional< std::string > v); + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcBendingParameterSelect >::ptr > BendingParameters() const; + void setBendingParameters(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcBendingParameterSelect >::ptr > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcReinforcingMeshType (IfcEntityInstanceData* e); + IfcReinforcingMeshType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcReinforcingMeshTypeEnum::Value v10_PredefinedType, boost::optional< double > v11_MeshLength, boost::optional< double > v12_MeshWidth, boost::optional< double > v13_LongitudinalBarNominalDiameter, boost::optional< double > v14_TransverseBarNominalDiameter, boost::optional< double > v15_LongitudinalBarCrossSectionArea, boost::optional< double > v16_TransverseBarCrossSectionArea, boost::optional< double > v17_LongitudinalBarSpacing, boost::optional< double > v18_TransverseBarSpacing, boost::optional< std::string > v19_BendingShapeCode, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcBendingParameterSelect >::ptr > v20_BendingParameters); + typedef aggregate_of< IfcReinforcingMeshType > list; +}; + +class IFC_PARSE_API IfcRelAdheresToElement : public IfcRelDecomposes { +public: + ::Ifc4x3_add2::IfcElement* RelatingElement() const; + void setRelatingElement(::Ifc4x3_add2::IfcElement* v); + aggregate_of< ::Ifc4x3_add2::IfcSurfaceFeature >::ptr RelatedSurfaceFeatures() const; + void setRelatedSurfaceFeatures(aggregate_of< ::Ifc4x3_add2::IfcSurfaceFeature >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelAdheresToElement (IfcEntityInstanceData* e); + IfcRelAdheresToElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcElement* v5_RelatingElement, aggregate_of< ::Ifc4x3_add2::IfcSurfaceFeature >::ptr v6_RelatedSurfaceFeatures); + typedef aggregate_of< IfcRelAdheresToElement > list; +}; +/// The aggregation relationship +/// IfcRelAggregates is a special type of the general +/// composition/decomposition (or whole/part) relationship +/// IfcRelDecomposes. The aggregation relationship can be +/// applied to all subtypes of IfcObjectDefinition. +/// In cases of aggregation of physical elements into a physical +/// aggregate the shape representation of the whole (within the same +/// representation identifier) can be taken from the sum of the shape +/// representations of the parts. +/// EXAMPLE A roof is the aggregation of the roof +/// elements, such as roof slabs, rafters, purlins, etc. Within the +/// same representation identifier, e.g. the body geometric +/// representation, the shape representation of the roof is given by +/// the shape representation of its parts +/// Decompositions imply a dependency, i.e. the definition of the +/// whole depends on the definition of the parts and the parts depend +/// on the existence of the whole. The behaviour that is implied from +/// the dependency has to be established inside the applications. +/// +/// HISTORY New entity in IFC Release 2x. +/// +/// IFC2x4 CHANGE The attributes RelatingObject and RelatedObjects are demoted from the supertype IfcRelDecomposes. +class IFC_PARSE_API IfcRelAggregates : public IfcRelDecomposes { +public: + /// The object definition, either an object type or an object occurrence, that represents the aggregation. It is the whole within the whole/part relationship. + /// + /// IFC2x4 CHANGE  The attribute has been demoted from the supertype IfcRelDecomposes and defines the non-ordered aggregation relationship. + ::Ifc4x3_add2::IfcObjectDefinition* RelatingObject() const; + void setRelatingObject(::Ifc4x3_add2::IfcObjectDefinition* v); + /// The object definitions, either object occurrences or object types, that are being aggregated. They are defined as the parts in the whole/part relationship. No order is implied between the parts. + /// + /// IFC2x4 CHANGE  The attribute has been demoted from the supertype IfcRelDecomposes and defines the non-ordered set of parts within the aggregation. + aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr RelatedObjects() const; + void setRelatedObjects(aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRelAggregates (IfcEntityInstanceData* e); + IfcRelAggregates (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, ::Ifc4x3_add2::IfcObjectDefinition* v5_RelatingObject, aggregate_of< ::Ifc4x3_add2::IfcObjectDefinition >::ptr v6_RelatedObjects); + typedef aggregate_of< IfcRelAggregates > list; +}; + +class IFC_PARSE_API IfcRoad : public IfcFacility { +public: + boost::optional< ::Ifc4x3_add2::IfcRoadTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcRoadTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRoad (IfcEntityInstanceData* e); + IfcRoad (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, boost::optional< ::Ifc4x3_add2::IfcRoadTypeEnum::Value > v10_PredefinedType); + typedef aggregate_of< IfcRoad > list; +}; + +class IFC_PARSE_API IfcRoadPart : public IfcFacilityPart { +public: + boost::optional< ::Ifc4x3_add2::IfcRoadPartTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcRoadPartTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRoadPart (IfcEntityInstanceData* e); + IfcRoadPart (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, ::Ifc4x3_add2::IfcFacilityUsageEnum::Value v10_UsageType, boost::optional< ::Ifc4x3_add2::IfcRoadPartTypeEnum::Value > v11_PredefinedType); + typedef aggregate_of< IfcRoadPart > list; +}; +/// Definition from IAI: The element type +/// IfcRoofType defines a list of commonly shared +/// property set definitions of a roof and an optional set of +/// product representations. It is used to define a roof +/// specification (i.e. the specific product information, that +/// is common to all occurrences of that product type). +/// +/// NOTE The product representations are defined as +/// representation maps (at the level of the supertype +/// IfcTypeProduct, which gets assigned by an element +/// occurrence instance through the +/// IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// +/// An IfcRoofTypeis used to define the common +/// properties of a specific roof that may be applied to many +/// instances of that type to assign a specific style. Building +/// element types (or the instantiable subtypes) may be +/// exchanged without being already assigned to occurrences. +/// +/// The IfcRoofType can have common material (using the +/// inverse relationship HasAssociations) or property +/// set information (using HasPropertySets) assigned. If +/// present, it does apply equally to all occurrences of the +/// IfcRoofType. Property set information may be +/// overridden at the occurrence. +/// +/// The occurrences of the IfcRoofType are represented +/// by instances of IfcRoof. +/// +/// HISTORY New entity in Release +/// IFC2x Edition 4. +class IFC_PARSE_API IfcRoofType : public IfcBuiltElementType { +public: + /// Identifies the predefined types of a roof element from which the type required may be set. + ::Ifc4x3_add2::IfcRoofTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcRoofTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRoofType (IfcEntityInstanceData* e); + IfcRoofType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcRoofTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcRoofType > list; +}; +/// The flow terminal type IfcSanitaryTerminalType defines commonly shared information for occurrences of sanitary terminals. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a sanitary terminal specification (i.e. the specific product information, that is common to all occurrences of that product type). Sanitary Terminal types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcSanitaryTerminalType are represented by instances of IfcSanitaryTerminal. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowTerminalType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_SanitaryTerminalTypeCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_SanitaryTerminalTypeBath (BATH) +/// Pset_SanitaryTerminalTypeBidet (BIDET) +/// Pset_SanitaryTerminalTypeCistern (CISTERN) +/// Pset_SanitaryTerminalTypeSanitaryFountain (SANITARYFOUNTAIN) +/// Pset_SanitaryTerminalTypeShower (SHOWER) +/// Pset_SanitaryTerminalTypeSink (SINK) +/// Pset_SanitaryTerminalTypeToiletPan (TOILETPAN) +/// Pset_SanitaryTerminalTypeUrinal (URINAL) +/// Pset_SanitaryTerminalTypeWashHandBasin (WASHHANDBASIN) +/// +/// Material Use Definition +/// The material of the IfcSanitaryTerminalType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Body': The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcSanitaryTerminalType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcSanitaryTerminal for standard port definitions. +class IFC_PARSE_API IfcSanitaryTerminalType : public IfcFlowTerminalType { +public: + /// Identifies the predefined types of sanitary terminal from which the type required may be set. + ::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSanitaryTerminalType (IfcEntityInstanceData* e); + IfcSanitaryTerminalType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcSanitaryTerminalType > list; +}; + +class IFC_PARSE_API IfcSeamCurve : public IfcSurfaceCurve { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSeamCurve (IfcEntityInstanceData* e); + IfcSeamCurve (::Ifc4x3_add2::IfcCurve* v1_Curve3D, aggregate_of< ::Ifc4x3_add2::IfcPcurve >::ptr v2_AssociatedGeometry, ::Ifc4x3_add2::IfcPreferredSurfaceCurveRepresentation::Value v3_MasterRepresentation); + typedef aggregate_of< IfcSeamCurve > list; +}; + +class IFC_PARSE_API IfcSecondOrderPolynomialSpiral : public IfcSpiral { +public: + double QuadraticTerm() const; + void setQuadraticTerm(double v); + boost::optional< double > LinearTerm() const; + void setLinearTerm(boost::optional< double > v); + boost::optional< double > ConstantTerm() const; + void setConstantTerm(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSecondOrderPolynomialSpiral (IfcEntityInstanceData* e); + IfcSecondOrderPolynomialSpiral (::Ifc4x3_add2::IfcAxis2Placement* v1_Position, double v2_QuadraticTerm, boost::optional< double > v3_LinearTerm, boost::optional< double > v4_ConstantTerm); + typedef aggregate_of< IfcSecondOrderPolynomialSpiral > list; +}; + +class IFC_PARSE_API IfcSegmentedReferenceCurve : public IfcCompositeCurve { +public: + ::Ifc4x3_add2::IfcBoundedCurve* BaseCurve() const; + void setBaseCurve(::Ifc4x3_add2::IfcBoundedCurve* v); + ::Ifc4x3_add2::IfcPlacement* EndPoint() const; + void setEndPoint(::Ifc4x3_add2::IfcPlacement* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSegmentedReferenceCurve (IfcEntityInstanceData* e); + IfcSegmentedReferenceCurve (aggregate_of< ::Ifc4x3_add2::IfcSegment >::ptr v1_Segments, boost::logic::tribool v2_SelfIntersect, ::Ifc4x3_add2::IfcBoundedCurve* v3_BaseCurve, ::Ifc4x3_add2::IfcPlacement* v4_EndPoint); + typedef aggregate_of< IfcSegmentedReferenceCurve > list; +}; + +class IFC_PARSE_API IfcSeventhOrderPolynomialSpiral : public IfcSpiral { +public: + double SepticTerm() const; + void setSepticTerm(double v); + boost::optional< double > SexticTerm() const; + void setSexticTerm(boost::optional< double > v); + boost::optional< double > QuinticTerm() const; + void setQuinticTerm(boost::optional< double > v); + boost::optional< double > QuarticTerm() const; + void setQuarticTerm(boost::optional< double > v); + boost::optional< double > CubicTerm() const; + void setCubicTerm(boost::optional< double > v); + boost::optional< double > QuadraticTerm() const; + void setQuadraticTerm(boost::optional< double > v); + boost::optional< double > LinearTerm() const; + void setLinearTerm(boost::optional< double > v); + boost::optional< double > ConstantTerm() const; + void setConstantTerm(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSeventhOrderPolynomialSpiral (IfcEntityInstanceData* e); + IfcSeventhOrderPolynomialSpiral (::Ifc4x3_add2::IfcAxis2Placement* v1_Position, double v2_SepticTerm, boost::optional< double > v3_SexticTerm, boost::optional< double > v4_QuinticTerm, boost::optional< double > v5_QuarticTerm, boost::optional< double > v6_CubicTerm, boost::optional< double > v7_QuadraticTerm, boost::optional< double > v8_LinearTerm, boost::optional< double > v9_ConstantTerm); + typedef aggregate_of< IfcSeventhOrderPolynomialSpiral > list; +}; +/// Definition from IAI: The IfcShadingDeviceType +/// defines a list of commonly shared property set definitions of a +/// shading device element and an optional set of product +/// representations. It is used to define a shading device +/// specification (i.e. the specific product information, that is +/// common to all occurrences of that product type). +/// NOTE: The product representations are defined +/// as representation maps (at the level of the supertype +/// IfcTypeProduct, which gets assigned by an element +/// occurrence instance through the +/// IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// A shading device type is used to define the common properties +/// of a certain type of chimney that may be applied to many +/// instances of that type to assign a specific style. Shading device +/// types may be exchanged without being already assigned to +/// occurrences. +/// The occurrences of the IfcShadingDeviceType are +/// represented by instances of IfcShadingDevice. +/// HISTORY New entity in +/// Release IFC2x4. +class IFC_PARSE_API IfcShadingDeviceType : public IfcBuiltElementType { +public: + /// Identifies the predefined types of a shading device element from which the type required may be set. + ::Ifc4x3_add2::IfcShadingDeviceTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcShadingDeviceTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcShadingDeviceType (IfcEntityInstanceData* e); + IfcShadingDeviceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcShadingDeviceTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcShadingDeviceType > list; +}; + +class IFC_PARSE_API IfcSign : public IfcElementComponent { +public: + boost::optional< ::Ifc4x3_add2::IfcSignTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSignTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSign (IfcEntityInstanceData* e); + IfcSign (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcSignTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcSign > list; +}; + +class IFC_PARSE_API IfcSignType : public IfcElementComponentType { +public: + ::Ifc4x3_add2::IfcSignTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcSignTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSignType (IfcEntityInstanceData* e); + IfcSignType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcSignTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcSignType > list; +}; + +class IFC_PARSE_API IfcSignalType : public IfcFlowTerminalType { +public: + ::Ifc4x3_add2::IfcSignalTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcSignalTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSignalType (IfcEntityInstanceData* e); + IfcSignalType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcSignalTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcSignalType > list; +}; + +class IFC_PARSE_API IfcSineSpiral : public IfcSpiral { +public: + double SineTerm() const; + void setSineTerm(double v); + boost::optional< double > LinearTerm() const; + void setLinearTerm(boost::optional< double > v); + boost::optional< double > ConstantTerm() const; + void setConstantTerm(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSineSpiral (IfcEntityInstanceData* e); + IfcSineSpiral (::Ifc4x3_add2::IfcAxis2Placement* v1_Position, double v2_SineTerm, boost::optional< double > v3_LinearTerm, boost::optional< double > v4_ConstantTerm); + typedef aggregate_of< IfcSineSpiral > list; +}; +/// Definition from ISO 6707-1:1989: Area where construction +/// works are undertaken. +/// A site is a defined area of land, possibly +/// covered with water, on which the project construction is to be +/// completed. A site may be used to erect building(s) or other AEC +/// products. +/// A site (IfcSite) may include a definition of the single +/// geographic reference point for this site (global position using +/// WGS84 with Longitude, Latitude and Elevation). +/// The precision is provided up to millionth of a second and it +/// provides an absolute placement in relation to the real world as +/// used in exchange with geospational information systems. If +/// asserted, the Longitude, Latitude and +/// Elevation establish the point in WGS84 where the point +/// 0.,0.,0. of the LocalPlacement of IfcSite is +/// situated. +/// The geometrical placement of the site, defined by the +/// IfcLocalPlacement, shall be always relative to the spatial +/// structure element, in which this site is included, or absolute, +/// i.e. to the world coordinate system, as established by the +/// geometric representation context of the project. The world +/// coordinate system, established at the +/// IfcProject.RepresentationContexts, may include a definition +/// of the true north within the XY plane of the world coordinate +/// system, if provided, it can be obtained at +/// IfcGeometricRepresentationContext.TrueNorth. +/// A project may span over several connected or disconnected sites. +/// Therefore site complex provides for a collection of sites included +/// in a project. A site can also be decomposed in parts, where each +/// part defines a site section. This is defined by the composition +/// type attribute of the supertype IfcSpatialStructureElements +/// which is interpreted as follow: +/// +/// COMPLEX = site complex +/// ELEMENT = site +/// PARTIAL = site section +/// +/// HISTORY  New entity in IFC Release 1.0. +/// +/// Property Set Use Definition +/// The property sets relating to the IfcSite are defined by +/// the IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible by +/// the inverse IsDefinedBy relationship. The following property +/// set definitions specific to the IfcSite are part of this IFC +/// release: +/// +/// Pset_SiteCommon: common property set for all +/// types of site +/// +/// Quantity Use Definition +/// The quantities relating to the IfcSite are defined by the +/// IfcElementQuantity and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible by +/// the inverse IsDefinedBy relationship. The following base +/// quantities are defined and should be exchanged with the +/// IfcElementQuantity.Name = 'BaseQuantities'. Other +/// quantities, being subjected to local standard of measurement, can +/// be defined with another string value assigned to Name. In +/// this case a valid value for MethodOfMeasurement has to be +/// provided. +/// +/// Qto_SiteBaseQuantities: base quantities for all site +/// occurrences. +/// +/// Spatial Structure Use Definition +/// The IfcSite is used to build the spatial structure of a +/// building (that serves as the primary project breakdown and is +/// required to be hierarchical). The spatial structure elements are +/// linked together by using the objectified relationship +/// IfcRelAggregates. The IfcSite references them by its +/// inverse relationships: +/// +/// IfcSite.Decomposes -- referencing (IfcProject || +/// IfcSite) by IfcRelAggregates.RelatingObject, If it +/// refers to another instance of IfcSite, the referenced +/// IfcSite needs to have a different and higher +/// CompositionType, i.e. COMPLEX (if the other IfcSite +/// has ELEMENT), or ELEMENT (if the other IfcSite has +/// PARTIAL). +/// IfcSite.IsDecomposedBy -- referencing (IfcSite || +/// IfcBuilding || IfcSpace) by +/// IfcRelAggregates.RelatedObjects. If it refers to another +/// instance of IfcSite, the referenced IfcSite needs to +/// have a different and lower CompositionType, i.e. ELEMENT (if the +/// other IfcSite has COMPLEX), or PARTIAL (if the other +/// IfcSite has ELEMENT). +/// +/// If there are building elements and/or other elements directly +/// related to the IfcSite (like a fence, or a shear wall), they +/// are associated with the IfcSite by using the objectified +/// relationship IfcRelContainedInSpatialStructure. The +/// IfcIfcSite references them by its inverse relationship: +/// +/// IfcSite.ContainsElements -- referencing any subtype of +/// IfcProduct (with the exception of other spatial structure +/// element) by +/// IfcRelContainedInSpatialStructure.RelatedElements. +/// +/// Figure 51 shows the IfcSite as part of the spatial structure. In addition to the logical spatial structure, also the placement hierarchy is shown. In this example the spatial structure hierarchy and the placement hierarchy are identical. +/// NOTE Detailed requirements on mandatory element containment and placement structure relationships are given in view definitions and implementer agreements. +/// +/// Figure 51 — Site composition +/// +/// Attribute Use Definition +/// Figure 52 describes the heights and elevations of the IfcSite. It is used to provide the geographic longitude, latitude, and height above sea level for the origin of the site. The origin of the site is the local placement. +/// The provision of longitude, latitude, height at the IfcSite for georeferencing is provided for upward compatibility reasons. It requires a single instance of IfcSite and WGS84 as coordinate reference system. +/// For exact georeferencing the new entities IfcCoordinateReferenceSystem and IfcMapConversion should be used. +/// +/// reference height of site is provided by: IfcSite.RefElevation, it is given according to the height datum used at this location. +/// the reference height of each building situated at the site is given againt the same height datum used at this location. +/// the elevations of each storey belonging to each building are given as local height relative to the reference height of the building. +/// +///   +/// Figure 52 — Site elevations +/// +/// Geometry Use Definitions +/// The geometric representation of IfcSite is given by the +/// IfcProductDefinitionShape and IfcLocalPlacement +/// allowing multiple geometric representations. +/// Local placement +/// The local placement for IfcSite is defined in its +/// supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate system +/// that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point to the +/// IfcSpatialStructureElement of type "IfcSite", if +/// relative placement is used (e.g. to position a site relative a a +/// site complex, or a site section to a site). +/// If the relative placement is not used, the absolute placement +/// is defined within the world coordinate system. If there is only one +/// site object, then this is the default situation. +/// +/// Foot Print Representation +/// The foot print representation of IfcSite is given by +/// either a single 2D curve (such as IfcPolyline or +/// IfcCompositeCurve), or by a list of 2D curves (in case of +/// inner boundaries). +/// The representation identifier and type of this geometric +/// representation of IfcSite is: +/// +/// IfcShapeRepresentation.RepresentationIdentifier = +/// 'FootPrint' +/// IfcShapeRepresentation.RepresentationType = +/// 'GeometricCurveSet', or 'Annotation2D' +/// +/// Survey Points Representation +/// The survey point representation of IfcSite is defined +/// using a set of survey points and optionally breaklines. The +/// breaklines are restricted to only connect points given in the set +/// of survey points. Breaklines, if given, are used to constrain the +/// triangulation. +/// The representation identifier and type of this geometric +/// representation of IfcSite is: +/// +/// IfcShapeRepresentation.RepresentationIdentifier = +/// 'SurveyPoints' +/// IfcShapeRepresentation.RepresentationType = +/// 'GeometricCurveSet' +/// +/// Figure 53 shows a set of survey points, given as 3D Cartesian points within the object coordinate system of the site. Figure 54 shows the result after facetation. +/// The set of IfcCartesianPoint is included in the set of IfcGeometricCurveSet.Elements. +/// +/// Figure 53 — Site survey points +/// Figure 54 — Site survey points facetation +/// +/// Figure 55 shows A set of survey points, given as 3D Cartesian points, and a set of break points, given as a set of lines, connecting some survey points, within the object coordinate system of the site. Figure 56 shows the result after facetation. +/// The set of IfcCartesianPoint and the set of IfcPolyline are included in the set of IfcGeometricCurveSet.Elements. +/// +/// Figure 55 — Site breaklines +/// Figure 56 — Site breaklines facetation +/// +/// NOTE  The geometric representation of the site has been based on the ARM level description of the site_shape_representation given within the ISO 10303-225 "Building Elements using explicit shape representation". +/// +/// Body Representation +/// The body representation of IfcSite is defined using a +/// solid or surface model. Applicable solids are the +/// IfcFacetedBrep or on the IfcFacetedBrepWithVoids, +/// applicable surface models are the IfcFaceBasedSurfaceModel +/// and the IfcShellBasedSurfaceModel. +/// The representation identifier and type of this representation of +/// IfcSite is: +/// +/// IfcShapeRepresentation.RepresentationIdentifier = +/// 'Body' +/// IfcShapeRepresentation.RepresentationType = 'Brep', or +/// 'SurfaceModel' +class IFC_PARSE_API IfcSite : public IfcSpatialStructureElement { +public: + /// World Latitude at reference point (most likely defined in legal description). Defined as integer values for degrees, minutes, seconds, and, optionally, millionths of seconds with respect to the world geodetic system WGS84. + /// Latitudes are measured relative to the geodetic equator, north of the equator by positive values - from 0 till +90, south of the equator by negative values - from 0 till -90. + boost::optional< std::vector< int > /*[3:4]*/ > RefLatitude() const; + void setRefLatitude(boost::optional< std::vector< int > /*[3:4]*/ > v); + /// World Longitude at reference point (most likely defined in legal description). Defined as integer values for degrees, minutes, seconds, and, optionally, millionths of seconds with respect to the world geodetic system WGS84. + /// Longitudes are measured relative to the geodetic zero meridian, nominally the same as the Greenwich prime meridian: longitudes west of the zero meridian have negative values - from 0 till -180, longitudes east of the zero meridian have positive values - from 0 till -180. + /// Example: Chicago Harbor Light has according to WGS84 a longitude -87.35.40 (or 87.35.40W) and a latitude 41.53.30 (or 41.53.30N). + boost::optional< std::vector< int > /*[3:4]*/ > RefLongitude() const; + void setRefLongitude(boost::optional< std::vector< int > /*[3:4]*/ > v); + /// Datum elevation relative to sea level. + boost::optional< double > RefElevation() const; + void setRefElevation(boost::optional< double > v); + /// The land title number (designation of the site within a regional system). + boost::optional< std::string > LandTitleNumber() const; + void setLandTitleNumber(boost::optional< std::string > v); + /// Address given to the site for postal purposes. + ::Ifc4x3_add2::IfcPostalAddress* SiteAddress() const; + void setSiteAddress(::Ifc4x3_add2::IfcPostalAddress* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSite (IfcEntityInstanceData* e); + IfcSite (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, boost::optional< std::vector< int > /*[3:4]*/ > v10_RefLatitude, boost::optional< std::vector< int > /*[3:4]*/ > v11_RefLongitude, boost::optional< double > v12_RefElevation, boost::optional< std::string > v13_LandTitleNumber, ::Ifc4x3_add2::IfcPostalAddress* v14_SiteAddress); + typedef aggregate_of< IfcSite > list; +}; +/// The element type IfcSlabType defines commonly shared +/// information for occurrences of slabs. The set of shared information +/// may include: +/// +/// common properties within shared property sets +/// common material information +/// common material layer definitions +/// common shape representations +/// +/// NOTE It is illegal to share shape +/// representations as representation maps for occurrences of +/// IfcSlabStandardCase. +/// +/// It is used to define a slab specification (i.e. the specific +/// product information, that is common to all occurrences of that +/// product type). Slab types may be exchanged without being already +/// assigned to occurrences. +/// NOTE The product representations are defined as +/// representation maps (at the level of the supertype +/// IfcTypeProduct, which gets assigned by an element occurrence +/// instance through the IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// The occurrences of the IfcSlabType within building models +/// are represented by instances of IfcSlabStandardCase if the +/// IfcSlabType has a single associated +/// IfcMaterialLayerSet; otherwise they are represented by +/// instances of IfcSlab, or IfcSlabElementedCase. +/// +/// HISTORY  New +/// entity in Release IFC2x2. +/// +/// Informal proposition: +/// +/// The material assignment, if provided using the +/// IfcRelAssociatesMaterial relationship, shall not reference +/// the IfcMaterialLayerSetUsage. +/// +/// Material Use Definition +/// The material of the IfcSlabType is defined by the +/// IfcMaterialLayerSet or as fall back by IfcMaterial +/// and attached by the +/// IfcRelAssociatesMaterial.RelatingMaterial. It is +/// accessible by the inverse HasAssociations relationship. +/// Note: It is illegal to assign an +/// IfcMaterial to an IfcSlabType, if there is at least +/// one occurrences. of IfcSlabStandardCase for this +/// type. +/// Layer Set Use Definition: +/// The shared material layer set definition is defined by assigning +/// an IfcMaterialLayerSet (see material use definition above). +/// The IfcMaterialLayer refers to one or several of +/// IfcMaterial that is the common for all slab occurrence, if +/// used. It is only applicable if the IfcSlabType has only +/// occurrences of type IfcSlabStandardCase (see definition of +/// IfcSlabStandardCase for further information). +/// NOTE Since each individual instance of +/// IfcSlabStandardCase defines its own +/// IfcMaterialLayerSetUsage including the offset from the +/// reference plane, the same IfcSlabType can be used +/// independently of the reference plane alignment of its +/// occurrences. +/// Property Set Use Definition: +/// The shared property sets relating to the IfcSlabType are +/// defined by the IfcPropertySet and are attached by the +/// HasPropertySets attribute. The following property set +/// definitions specific to the IfcWallType are part of this IFC +/// release: +/// NOTE There is no differentiation between +/// properties within the property set that are only assignable to +/// IfcSlabType and those that are only assignable to +/// IfcSlab. If the same property is assigned to the +/// IfcSlabType and the IfcSlab being an occurrence of +/// the IfcSlabType, then the occurrence property overrides the +/// type property. +/// +/// Pset_SlabCommon: common property set for all +/// slab types. +class IFC_PARSE_API IfcSlabType : public IfcBuiltElementType { +public: + /// Identifies the predefined types of a slab element from which the type required may be set. + ::Ifc4x3_add2::IfcSlabTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcSlabTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSlabType (IfcEntityInstanceData* e); + IfcSlabType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcSlabTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcSlabType > list; +}; +/// The energy conversion device type IfcSolarDeviceType defines commonly shared information for occurrences of solar devices. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a solar device specification (i.e. the specific product information, that is common to all occurrences of that product type). Solar Device types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcSolarDeviceType are represented by instances of IfcSolarDevice. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcEnergyConversionDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_SolarDeviceTypeCommon +/// +/// Material Use Definition +/// The material of the IfcSolarDeviceType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcSolarDeviceType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcSolarDevice for standard port definitions. +class IFC_PARSE_API IfcSolarDeviceType : public IfcEnergyConversionDeviceType { +public: + ::Ifc4x3_add2::IfcSolarDeviceTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcSolarDeviceTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSolarDeviceType (IfcEntityInstanceData* e); + IfcSolarDeviceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcSolarDeviceTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcSolarDeviceType > list; +}; +/// A space represents an area or volume +/// bounded actually or theoretically. Spaces are areas or volumes that +/// provide for certain functions within a building. +/// A space is associated to a building storey (or in case of +/// exterior spaces to a site). A space may span over several connected +/// spaces. Therefore a space group provides for a collection of spaces +/// included in a storey. A space can also be decomposed in parts, +/// where each part defines a partial space. This is defined by the +/// CompositionType attribute of the supertype +/// IfcSpatialStructureElement which is interpreted as +/// follow: +/// +/// COMPLEX = space group +/// ELEMENT = space +/// PARTIAL = partial space +/// +/// NOTE View definitions and implementation +/// agreements may restrict spaces with CompositionType=ELEMENT +/// to be non-overlapping. +/// The following guidelines should apply for using the Name, +/// Description, LongName and ObjectType +/// attributes. +/// +/// Name holds the unique name (or space number) from the +/// plan. +/// Description holds any additional information field the +/// user may have specified, there are no further recommendations. +/// LongName holds the full name of the space, it is often +/// used in addition to the Name, if a number is assigned to the +/// room, then the descriptive name is exchanged as +/// LongName. +/// ObjectType holds the space type, i.e. usually the +/// functional category of the space . +/// +/// HISTORY New Entity in IFC Release 1.0 +/// +/// Property Set Use Definition +/// The property sets relating to the IfcSpace are defined by +/// the IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible by +/// the inverse IsDefinedBy relationship. The following property +/// set definitions specific to the IfcSpace are part of this +/// IFC release: +/// +/// Pset_SpaceCommon: common property set for all +/// types of spaces +/// +/// Pset_SpaceParking: specific property set for +/// only those spaces that are used to define parking spaces by +/// PredefinedType: PARKING +/// +/// Pset_SpaceFireSafetyRequirements: common +/// property set for all types of spaces to capture the fire safety +/// requirements +/// Pset_SpaceLightingRequirements: common property +/// set for all types of spaces to capture the lighting +/// requirements +/// Pset_SpaceOccupancyRequirements: common +/// property set for all types of spaces to capture the occupancy +/// requirements +/// Pset_SpaceThermalRequirements: common property +/// set for all types of spaces to capture the thermal +/// requirements +/// Pset_SpaceThermalDesign: common property set +/// for all all types of spaces to capture building service design +/// values +/// +/// Quantity Use Definition +/// The quantities relating to the IfcSpace are defined by +/// the IfcElementQuantity and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible by +/// the inverse IsDefinedBy relationship. The following base +/// quantities are defined and should be exchanged with the +/// IfcElementQuantity.Name = 'BaseQuantities'. Other +/// quantities, being subjected to local standard of measurement, can +/// be defined with another string value assigned to Name. In +/// this case a valid value for MethodOfMeasurement has to be +/// provided. +/// +/// Qto_SpaceBaseQuantities: base quantities for all space +/// occurrences. +/// +/// Spatial Structure Use Definition +/// The IfcSpace is used to build the spatial structure of a +/// building (that serves as the primary project breakdown and is +/// required to be hierarchical). The spatial structure elements are +/// linked together by using the objectified relationship +/// IfcRelAggregates. The IfcSpace references them by its +/// inverse relationships: +/// +/// IfcSpace.Decomposes -- referencing (IfcSite || +/// IfcBuildingStorey || IfcSpace) by +/// IfcRelAggregates.RelatingObject, If it refers to another +/// instance of IfcSpace, the referenced IfcSpace +/// needs to have a different and higher CompositionType, i.e. +/// COMPLEX (if the other IfcSpace has ELEMENT), or ELEMENT (if +/// the other IfcSpace has PARTIAL). +/// IfcSpace.IsDecomposedBy -- referencing (IfcSpace) +/// by IfcRelAggregates.RelatedObjects. If it refers to another +/// instance of IfcSpace, the referenced IfcSpace needs +/// to have a different and lower CompositionType, i.e. ELEMENT +/// (if the other IfcSpace has COMPLEX), or PARTIAL (if the +/// other IfcSpace has ELEMENT). +/// +/// If there are building elements and/or other elements directly +/// related to the IfcSpace (like most furniture and +/// distribution elements), they are associated with the +/// IfcSpace by using the objectified relationship +/// IfcRelContainedInSpatialStructure. The IfcSpace +/// references them by its inverse relationship: +/// +/// IfcSpace.ContainsElements -- referencing any subtype of +/// IfcProduct (with the exception of other spatial structure +/// element) by +/// IfcRelContainedInSpatialStructure.RelatedElements. +/// +/// Figure 57 shows the IfcSpace as part of the spatial structure. It also serves as the spatial container for space related elements. +/// NOTE Detailed requirements on mandatory element containment and placement structure relationships are given in view definitions and implementer agreements. +/// +/// Figure 57 — Space composition +/// +/// Attribute Use Definition +/// +/// Figure 58 describes the heights and elevations of the IfcSpace. +/// +/// elevation of the space (top of construction slab) equals elevation of storey: provided by IfcBuildingStorey.Elevation relative to IfcBuilding.ElevationOfRefHeight +/// elevation of the space flooring (top of flooring on top of slab): provided by IfcSpace.ElevationWithFlooring relative to IfcBuilding.ElevationOfRefHeight +/// height of space (top of slab below to bottom of slab above): provided by BaseQuantity with Name="Height" +/// floor height of space (top of slab below to top of flooring): provided by BaseQuantity with Name="FinishFloorHeight" +/// net height of space (top of flooring to bottom of suspended ceiling): provided by BaseQuantity with Name="FinishCeilingHeight" +/// +/// Figure 58 — Space elevations +/// +/// Geometry Use Definition +/// The geometric representation of IfcSpace is given by the +/// IfcProductDefinitionShape and IfcLocalPlacement +/// allowing multiple geometric representations. +/// NOTE In cases of inconsistency between the +/// geometric representation of the IfcSpace and the combined +/// geometric representations of the surrounding +/// IfcRelSpaceBoundary, the geometric representation of the +/// space should take priority over the geometric representation of the +/// surrounding space boundaries. +/// Local Placement +/// The local placement for IfcSpace is defined in its +/// supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate system +/// that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point to the local placement of the +/// IfcSpatialStructureElement of type "IfcBuildingStorey", if +/// relative placement is used, or of type "IfcSpace" (e.g. to position +/// a space relative to a space group, or a partial space to a +/// space). +/// If the relative placement is not used, the absolute placement +/// is defined within the world coordinate system. +/// +/// Geometric Representations +/// Currently, the use of a 2D 'FootPrint' representation of type +/// 'Curve2D' or 'GeometricCurveSet' and a 3D 'Body' representation of +/// type 'SweptSolid, 'Clipping' and 'Brep' is supported. +/// 'Foot Print' Representation +/// The 2D geometric representation of IfcSpace is defined +/// using the 'Curve2D' or 'GeometricCurveSet' geometry. The following +/// attribute values should be inserted +/// +/// IfcShapeRepresentation.RepresentationIdentifier = +/// 'FootPrint'. +/// IfcShapeRepresentation.RepresentationType = 'Curve2D' or +/// 'GeometricCurveSet' . +/// +/// The following constraints apply to the 2D representation: +/// +/// Profile: IfcBoundedCurve is required, using +/// IfcPolyline for faceted space contours or +/// IfcCompositeCurve for space contours with arc segments. For +/// spaces with inner boundaries, a set of IfcBoundedCurve's is +/// used, that should be grouped into an +/// IfcGeometricCurveSet. +/// +/// Figure 59 shows a two-dimensional bounded curve representing the +/// foot print of IfcSpace. +/// +/// Figure 59 — Space footprint +/// +/// 'Swept Solid' Representation +/// The standard geometric representation of IfcSpace is +/// defined using the swept area solid geometry. The following +/// attribute values should be inserted +/// +/// IfcShapeRepresentation.RepresentationIdentifier = +/// 'Body'. +/// IfcShapeRepresentation.RepresentationType = +/// 'SweptSolid'. +/// +/// The following constraints apply to the standard +/// representation: +/// +/// Solid: IfcExtrudedAreaSolid is required, +/// Profile: IfcArbitraryClosedProfileDef is +/// required, IfcArbitraryProfileDefWithVoids shall be +/// supported. +/// Extrusion: The extrusion direction shall be vertically, +/// i.e., along the positive Z Axis of the co-ordinate system of the +/// containing spatial structure element. +/// +/// Figure 60 shows an extrusion of an arbitrary profile definition with voids into the swept area solid of IfcSpace. +/// +/// Figure 60 — Space body swept solid +/// +/// 'Clipping' representation +/// The advanced geometric representation of IfcSpace is +/// defined using the swept area solid geometry that can be subjected +/// to a Boolean expression. The following attribute values should be +/// inserted. +/// +/// IfcShapeRepresentation.RepresentationIdentifier = +/// 'Body'. +/// IfcShapeRepresentation.RepresentationType = +/// 'Clipping'. +/// +/// The following additional constraints apply to the advanced +/// representation: +/// +/// Solid: see standard geometric representation, +/// Profile: see standard geometric representation, +/// Extrusion: see standard geometric representation, +/// Boolean result: The difference operation with the second +/// operand being of type IfcHalfSpaceSolid (or one of its +/// subtypes) shall be supported. +/// +/// Figure 61 shows an extrusion of an arbitrary profile definition into the swept area solid. The solid and an half space solid are operands of the Boolean result of IfcSpace. +/// +/// Figure 61 — Space body clipping +/// +/// 'Brep' representation +/// The fallback advanced geometric representation of +/// IfcSpace is defined using the Brep solid geometry. may +/// be represented as a single or multiple instances of +/// IfcFacetedBrep or IfcFacetedBrepWithVoids. The Brep +/// representation allows for the representation of complex element +/// shape. The following attribute values for the +/// IfcShapeRepresentation holding this geometric representation +/// shall be used: +/// +/// IfcShapeRepresentation.RepresentationIdentifier : +/// 'Body' +/// IfcShapeRepresentation.RepresentationType : +/// 'Brep' +class IFC_PARSE_API IfcSpace : public IfcSpatialStructureElement, public IfcSpaceBoundarySelect { +public: + /// Predefined generic types for a space that are specified in an enumeration. There might be property sets defined specifically for each predefined type. + /// + /// Previous use, prior to IFC2x4, had been to indicates whether the IfcSpace is an interior space by value INTERNAL, or an exterior space by value EXTERNAL. This use is now deprecated, the property 'IsExternal' at 'Pset_SpaceCommon' should be used instead. + /// + /// IFC2x4 CHANGE  The attribute has been renamed from ExteriorOrInteriorSpace with upward compatibility for file based exchange. + boost::optional< ::Ifc4x3_add2::IfcSpaceTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSpaceTypeEnum::Value > v); + /// Level of flooring of this space; the average shall be taken, if the space ground surface is sloping or if there are level differences within this space. + boost::optional< double > ElevationWithFlooring() const; + void setElevationWithFlooring(boost::optional< double > v); + aggregate_of< IfcRelCoversSpaces >::ptr HasCoverings() const; // INVERSE IfcRelCoversSpaces::RelatingSpace + aggregate_of< IfcRelSpaceBoundary >::ptr BoundedBy() const; // INVERSE IfcRelSpaceBoundary::RelatingSpace + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSpace (IfcEntityInstanceData* e); + IfcSpace (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, boost::optional< ::Ifc4x3_add2::IfcSpaceTypeEnum::Value > v10_PredefinedType, boost::optional< double > v11_ElevationWithFlooring); + typedef aggregate_of< IfcSpace > list; +}; +/// The energy conversion device type IfcSpaceHeaterType defines commonly shared information for occurrences of space heaters. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a space heater specification (i.e. the specific product information, that is common to all occurrences of that product type). Space Heater types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcSpaceHeaterType are represented by instances of IfcSpaceHeater. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcEnergyConversionDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_SpaceHeaterTypeCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_SpaceHeaterTypeConvector (CONVECTOR) +/// Pset_SpaceHeaterTypeRadiator (RADIATOR) +/// +/// Material Use Definition +/// The material of the IfcSpaceHeaterType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Body': The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcSpaceHeaterType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcSpaceHeater for standard port definitions. +class IFC_PARSE_API IfcSpaceHeaterType : public IfcFlowTerminalType { +public: + /// Enumeration of possible types of space heater (e.g., baseboard heater, convector, radiator, etc.). + ::Ifc4x3_add2::IfcSpaceHeaterTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcSpaceHeaterTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSpaceHeaterType (IfcEntityInstanceData* e); + IfcSpaceHeaterType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcSpaceHeaterTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcSpaceHeaterType > list; +}; +/// Definition from IAI: A space represents an area or +/// volume bounded actually or theoretically. Spaces are areas or +/// volumes that provide for certain functions within a building. +/// The IfcSpaceType defines a list of commonly shared +/// defines commonly shared information for occurrences of spaces. +/// The set of shared information may include: +/// +/// common properties within shared property sets +/// common shape representations +/// +/// It is used to define an space specification (i.e. the specific +/// space information, that is common to all occurrences of that +/// space type. Space types may be exchanged without being already +/// assigned to occurrences. +/// NOTE The space types are often used to +/// represent space catalogues, less so for sharing a common +/// representation map. Space types in a space catalogue share same +/// space classification and a common set of space requirement +/// properties. +/// The occurrences of IfcSpaceType are represented by +/// instances of IfcSpace. +/// +/// HISTORY New entity in +/// IFC2x3. +/// +/// Property Set Use Definition: +/// The shared property sets relating to the IfcSpaceType +/// are defined by the IfcPropertySet and are attached by the +/// HasPropertySets attribute. The following property set +/// definitions specific to the IfcSpaceType are part of this +/// IFC release: +/// NOTE There is no differentiation between +/// properties within the property set that are only assignable to +/// IfcSpaceType and those that are only assignable to +/// IfcSpace. If the same property is assigned to the +/// IfcSpaceType and the IfcSpace being an occurrence +/// of the IfcSpaceType, then the occurrence property +/// overrides the type property. +/// +/// Pset_SpaceCommon: common property set for all +/// types of spaces +/// +/// Pset_SpaceParking: specific property set for +/// only those spaces that are used to define parking spaces by +/// PredefinedType: PARKING +/// +/// Pset_SpaceFireSafetyRequirements: common +/// property set for all types of spaces to capture the fire safety +/// requirements +/// Pset_SpaceLightingRequirements: common +/// property set for all types of spaces to capture the lighting +/// requirements +/// Pset_SpaceOccupancyRequirements: common +/// property set for all types of spaces to capture the occupancy +/// requirements +/// Pset_SpaceThermalRequirements: common +/// property set for all types of spaces to capture the thermal +/// requirements +/// Pset_SpaceThermalDesign: common property set +/// for allall types of spaces to capture building service design +/// values +/// +/// Geometry Use Definition: +/// The IfcSpaceType may define the shared geometric +/// representation for all space occurrences. The +/// RepresentationMaps attribute refers to a list of +/// IfcRepresentationMap's, that allow for multiple geometric +/// representations (e.g. with IfcShaperepresentation's having +/// an RepresentationIdentifier 'Box', 'FootPrint', or 'Body'). +/// +/// NOTE The product representations are defined as +/// representation maps (at the level of the supertype +/// IfcTypeProduct, which gets assigned by an element +/// occurrence instance through the +/// IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// +/// However view definitions and implementer +/// agreements may prevent the usage of shared geometry for +/// spaces. +/// . +class IFC_PARSE_API IfcSpaceType : public IfcSpatialStructureElementType { +public: + /// Predefined types to define the particular type of space. There may be property set definitions available for each predefined type. + ::Ifc4x3_add2::IfcSpaceTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcSpaceTypeEnum::Value v); + boost::optional< std::string > LongName() const; + void setLongName(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSpaceType (IfcEntityInstanceData* e); + IfcSpaceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcSpaceTypeEnum::Value v10_PredefinedType, boost::optional< std::string > v11_LongName); + typedef aggregate_of< IfcSpaceType > list; +}; +/// The flow terminal type IfcStackTerminalType defines commonly shared information for occurrences of stack terminals. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a stack terminal specification (i.e. the specific product information, that is common to all occurrences of that product type). Stack Terminal types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcStackTerminalType are represented by instances of IfcStackTerminal. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowTerminalType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_StackTerminalTypeCommon +/// +/// Material Use Definition +/// The material of the IfcStackTerminalType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Body': The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcStackTerminalType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcStackTerminal for standard port definitions. +class IFC_PARSE_API IfcStackTerminalType : public IfcFlowTerminalType { +public: + /// Identifies the predefined types of stack terminal from which the type required may be set. + ::Ifc4x3_add2::IfcStackTerminalTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcStackTerminalTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStackTerminalType (IfcEntityInstanceData* e); + IfcStackTerminalType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcStackTerminalTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcStackTerminalType > list; +}; +/// Definition from IAI: The element type (IfcStairFlightType) +/// defines a list of commonly shared property set definitions of a stair flight +/// and an optional set of product representations. It is used to define an stair +/// flight specification (i.e. the specific product information, that is common to +/// all occurrences of that product type). +/// +/// NOTE: The product representations are defined as +/// representation maps (at the level of the supertype IfcTypeProduct, which +/// gets assigned by an element occurrence instance through the +/// IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// A stair flight type is used to define the common properties of a certain +/// type of a stair flight that may be applied to many instances of that type to +/// assign a specific style. Stair flight types may be exchanged without being +/// already assigned to occurrences. +/// The occurrences of the IfcStairFlightType are represented by +/// instances of IfcStairFlight. +/// +/// HISTORY: New entity in Release IFC2x +/// Edition 2. +class IFC_PARSE_API IfcStairFlightType : public IfcBuiltElementType { +public: + /// Identifies the predefined types of a stair flight element from which the type required may be set. + ::Ifc4x3_add2::IfcStairFlightTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcStairFlightTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStairFlightType (IfcEntityInstanceData* e); + IfcStairFlightType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcStairFlightTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcStairFlightType > list; +}; +/// Definition from IAI: The element type +/// IfcStairType defines a list of commonly shared +/// property set definitions of a stair and an optional set of +/// product representations. It is used to define a stair +/// specification (i.e. the specific product information, that +/// is common to all occurrences of that product type). +/// +/// NOTE The product representations are defined as +/// representation maps (at the level of the supertype +/// IfcTypeProduct, which gets assigned by an element +/// occurrence instance through the +/// IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// +/// An IfcStairTypeis used to define the common +/// properties of a specific stair that may be applied to many +/// instances of that type to assign a specific style. +/// Building element types (or the instantiable subtypes) +/// may be exchanged without being +/// already assigned to occurrences. +/// +/// The IfcStairType can have common material (using the +/// inverse relationship HasAssociations) or property +/// set information (using HasPropertySets) assigned. If +/// present, it does apply equally to all occurrences of the +/// IfcStairType. Property set information may be +/// overridden at the occurrence. +/// +/// The occurrences of the IfcStairType are represented +/// by instances of IfcStair. +/// +/// HISTORY New entity in Release +/// IFC2x Edition 4. +class IFC_PARSE_API IfcStairType : public IfcBuiltElementType { +public: + /// Identifies the predefined types of a stair element from which the type required may be set. + ::Ifc4x3_add2::IfcStairTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcStairTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStairType (IfcEntityInstanceData* e); + IfcStairType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcStairTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcStairType > list; +}; +/// Definition from IAI: A structural action is a structural activity that acts upon +/// a structural item or building element. +/// +/// HISTORY  New entity in IFC 2x2. +/// IFC 2x4 change: Attribute DestabilizingLoad made optional. Attribute CausedBy deleted; use IfcRelAssignsToProduct via ReferencedBy instead. +/// +/// Structural actions are grouped into either an IfcStructuralLoadGroup of predefined +/// type LOAD_GROUP or, more often, an IfcStructuralLoadCase. This is accomplished via the +/// inverse relationship HasAssignments and an IfcRelAssignsToGroup relationship object. +/// IfcStructuralLoadGroup.LoadGroupFor or IfcStructuralLoadCase.LoadGroupFor respectively +/// refers to the structural analysis model(s) in which the loads are used. +/// +/// It is furthermore possible to establish relationships between actions in one analysis model +/// and reactions in another analysis model which cause the actions. For example, a support reaction +/// from one structural system may be taken over as a load onto another supporting structural system. +/// This is expressed by means of the inverse relationship ReferencedBy of the action and an +/// IfcRelAssignsToProduct relationship object. IfcRelAssignsToProduct.Name is set to +/// 'Causes' and IfcRelAssignsToProduct.RelatedObjects refers to an instance of a subtype of +/// IfcStructuralReaction. +class IFC_PARSE_API IfcStructuralAction : public IfcStructuralActivity { +public: + /// Indicates if this action may cause a stability problem. If it is 'FALSE', no further investigations regarding stability problems are necessary. + boost::optional< bool > DestabilizingLoad() const; + void setDestabilizingLoad(boost::optional< bool > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralAction (IfcEntityInstanceData* e); + IfcStructuralAction (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal, boost::optional< bool > v10_DestabilizingLoad); + typedef aggregate_of< IfcStructuralAction > list; +}; +/// Definition from IAI: An IfcStructuralConnection represents a structural connection object (node i.e. vertex connection, or edge connection, or surface connection) or supports. +/// +/// HISTORY: New entity in IFC 2x2. +class IFC_PARSE_API IfcStructuralConnection : public IfcStructuralItem { +public: + /// Optional boundary conditions which define support conditions of this connection object, given in local coordinate directions of the connection object. If left unspecified, the connection object is assumed to have no supports besides being connected with members. + ::Ifc4x3_add2::IfcBoundaryCondition* AppliedCondition() const; + void setAppliedCondition(::Ifc4x3_add2::IfcBoundaryCondition* v); + aggregate_of< IfcRelConnectsStructuralMember >::ptr ConnectsStructuralMembers() const; // INVERSE IfcRelConnectsStructuralMember::RelatedStructuralConnection + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralConnection (IfcEntityInstanceData* e); + IfcStructuralConnection (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcBoundaryCondition* v8_AppliedCondition); + typedef aggregate_of< IfcStructuralConnection > list; +}; +/// Definition from IAI: Defines an action which is distributed over a curve. +/// A curve action may be connected with a curve member or curve connection, or +/// surface member or surface connection. +/// +/// HISTORY: New entity in IFC 2x4. +/// +/// IFC 2x4 change: Former entitiy +/// IfcStructuralLinearActionVarying from IFC 2x2 has been removed and are replaced +/// by this entity. +/// +/// Coordinate Systems: +/// +/// See definitions at IfcStructuralActivity. +/// +/// Topology Use Definitions: +/// +/// Standard Case: +/// If connected with a curve item, instances of IfcStructuralCurveAction shall not have an +/// ObjectPlacement nor a Representation. It is implied that the placement and +/// representation of the IfcStructuralActivity is the same as the ones of the member or +/// connection. +/// +/// Special Case 1: +/// If connected with a surface item, instances of IfcStructuralCurveAction shall have an +/// ObjectPlacement and Representation, containing an IfcEdgeCurve. See +/// IfcStructuralActivity for further definitions. +/// +/// Special Case 2: +/// If not connected with a structural item (which may happen in an incomplete or conceptual model), +/// a curve action should have an ObjectPlacement and Representation, containing an +/// IfcEdgeCurve. See IfcStructuralActivity for further definitions. +/// +/// Informal propositions: +/// +/// If the curve action is of the predefined type CONST, SINUS, or PARABOLA, +/// SELF\IfcStructuralActivity.AppliedLoad must not be of type +/// IfcStructuralLoadConfiguration. In case of SINUS and PARABOLA, the load item +/// defines the maximum of the load at the centre of the load distribution. +/// If the curve action is of the predefined type LINEAR, +/// SELF\IfcStructuralActivity.AppliedLoad shall be of type +/// IfcStructuralLoadConfiguration and shall contain two items. +/// If the curve action is of the predefined type POLYGONAL, +/// SELF\IfcStructuralActivity.AppliedLoad shall be of type +/// IfcStructuralLoadConfiguration and shall contain three or more items. +/// If the curve action is of the predefined type DISCRETE, +/// SELF\IfcStructuralActivity.AppliedLoad shall be of type +/// IfcStructuralLoadConfiguration and shall contain two or more items. +/// In case of types LINEAR, POLYGONAL, and DISCRETE, the load items shall have +/// one-dimensional IfcStructuralLoadConfiguration.Locations, defining the +/// location of the load samples in local coordinates of the curve action. +/// The load items shall be provided in ascending order according to their locations. +/// The first and the last load item define the extent of the load distribution. +/// Point actions must be of type DISCRETE, thus contain two or more load points. +/// (Single point loads are modeled by IfcStructuralPointAction.) +/// All items in SELF\IfcStructuralActivity.AppliedLoad\IfcStructuralLoadConfiguration.Values +/// shall be of the same entity type. +class IFC_PARSE_API IfcStructuralCurveAction : public IfcStructuralAction { +public: + /// Defines whether load values are given per true length of the curve on which they act, or per length of the projection of the curve in load direction. The latter is only applicable to loads which act in global coordinate directions. + boost::optional< ::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::Value > ProjectedOrTrue() const; + void setProjectedOrTrue(boost::optional< ::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::Value > v); + /// Type of action according to its distribution of load values. + ::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralCurveAction (IfcEntityInstanceData* e); + IfcStructuralCurveAction (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal, boost::optional< bool > v10_DestabilizingLoad, boost::optional< ::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::Value > v11_ProjectedOrTrue, ::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::Value v12_PredefinedType); + typedef aggregate_of< IfcStructuralCurveAction > list; +}; +/// Definition from IAI: Instances of IfcStructuralCurveConnection describe edge 'nodes', i.e. edges where two or more surface members are joined, or edge supports. Edge curves may be straight or curved. +/// +/// HISTORY: New entity in IFC 2x2. +/// +/// IFC 2x4 change: Attribute Axis added, allowing for skewed supports. Use definitions added. +/// +/// Coordinate Systems: +/// +/// See definitions at IfcStructuralItem. The local coordinate system is established by the reference curve given by topology representation and by the attribute Axis. The local x axis is parallel with the tangent on the reference curve. The local z axis is located in the surface which is created by sweeping Axis along the reference curve and is directed according to Axis. The local y axis is directed such that x,y,z form a right-handed Cartesian coordinate system. +/// +/// Topology Use Definitions: +/// +/// Instances of IfcStructuralCurveConnection shall have a topology representation which consists of one instance of IfcEdge or a subtype, representing the reference curve of the curve connection. See definitions at IfcStructuralItem for further specifications. +/// +/// Informal propositions: +/// +/// The reference curve must not be parallel with Axis at any point within the curve connections's domain. +class IFC_PARSE_API IfcStructuralCurveConnection : public IfcStructuralConnection { +public: + ::Ifc4x3_add2::IfcDirection* AxisDirection() const; + void setAxisDirection(::Ifc4x3_add2::IfcDirection* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralCurveConnection (IfcEntityInstanceData* e); + IfcStructuralCurveConnection (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcBoundaryCondition* v8_AppliedCondition, ::Ifc4x3_add2::IfcDirection* v9_AxisDirection); + typedef aggregate_of< IfcStructuralCurveConnection > list; +}; +/// Definition from IAI: Instances of IfcStructuralCurveMember describe edge members, i.e. structural analysis idealizations of beams, columns, rods etc.. Curve members may be straight or curved. +/// +/// HISTORY: New entity in IFC 2x2. +/// +/// IFC 2x4 change: Attribute Axis and WHERE rule added. Use definitions changed. +/// +/// Coordinate Systems: +/// +/// See definitions at IfcStructuralItem. The local coordinate system is established by the reference curve given by topology representation and by the attribute Axis. The local x axis is parallel with the tangent on the reference curve. The local z axis is located in the surface which is created by sweeping Axis along the reference curve and is directed according to Axis. The local y axis is directed such that x,y,z form a right-handed Cartesian coordinate system. +/// +/// Material Use Definition +/// +/// The material of direct instances IfcStructuralCurveMember (in contrast to instances of the subtype IfcStructuralCurveMemberVarying) is defined by IfcMaterialProfileSetUsage and attached by the IfcRelAssociatesMaterial.RelatingMaterial. It is accessible by the inverse HasAssociations relationship. Composite profile beams can be represented by refering to several IfcMaterialProfiles within the IfcMaterialProfileSet that is referenced from the IfcMaterialProfileSetUsage. In case of tapered members, the material profile usage subtype IfcMaterialProfileSetUsageDual is used which specifies IfcMaterialProfileSets separately at the start and the end of the tapered member. +/// +/// The material (IfcMaterial) in each IfcMaterialProfile(Set) is specified minimally by a name which corresponds with an agreed upon standardized structural material designation. An external reference to the source which specifies the material designation should be provided. Alternatively, structural material properties may be provided by means of IfcMechanicalMaterialProperties and IfcExtendedMaterialProperties. +/// +/// The profile (IfcProfileDef) in each IfcMaterialProfile(Set) is specified minimally by a name which corresponds with an agreed upon standardized structural profile designation. An external reference to the source which specifies the profile designation should be provided. Alternatively or additionally, explicit profile geometry should be provided by using respective subtypes of IfcProfileDef. Alternatively or additionally, structural profile properties may be provided by means of subtypes of IfcProfileProperties. +/// +/// An IfcProfileDef is a two-dimensional geometric object with a xp,yp coordinate system. The profile is inserted into the curve member model thus that the origin of xp,yp is located at the member's reference curve and that xp,yp are parallel with and directed like the local y,z. +/// +/// NOTE  Due to convention in structural mechanics, axis names of IfcStructuralCurveMember differ from axis names of building elements like IfcBeamStandardCase: The extrusion axis of IfcStructuralCurveMember is called x while the extrusion axis of IfcBeamStandardCase is called z. Hence x,y,z of IfcStructuralCurveMember correspond with z,x,y of IfcBeamStandardCase. +/// +/// If the profile is meant to be inserted centrically in terms of structural section properties, it is necessary that the origin of xp,yp is identical with the geometric centroid of the profile (commonly also called centre of gravity). If subtypes of IfcParameterizedProfileDef are used which are only singly symmetric or are asymmetric, an explicit translation by IfcParameterizedProfileDef.Position.Location is required then. +/// +/// If the profile is inserted at its geometric centroid, IfcMaterialProfileSetUsage.CardinalPoint shall be set to 10. +/// +/// Otherwise, the profile is inserted eccentrically and a different cardinal point should be set accordingly. +/// +/// NOTE  Another eccentricity model is available independently of eccentric profile specification: The reference curve of the member may be located eccentrically relative to the reference points of the connected IfcStructuralPointConnections. The connection relationship is then established by IfcRelConnectsWithEccentricity. Whether one or the other or both eccentricity models may be used is subject to information requirements and local agreements. +/// +/// Topology Use Definitions: +/// +/// Direct instances of IfcStructuralCurveMember shall have a topology representation which consists of one instance of IfcEdge or a subtype, representing the reference curve of the curve member. See definitions at IfcStructuralItem for further specifications. +/// +/// Informal propositions: +/// +/// The reference curve must not be parallel with Axis at any point within the curve member's domain. +class IFC_PARSE_API IfcStructuralCurveMember : public IfcStructuralMember { +public: + /// Type of member with respect to its load carrying behavior in this analysis idealization. + ::Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::Value v); + /// Direction which is used in the definition of the local z axis. Axis is specified relative to the so-called global coordinate system, i.e. the SELF\IfcProduct.ObjectPlacement. + /// + /// NOTE  It is desirable and usually possible that many instances of IfcStructuralCurveConnection and IfcStructuralCurveMember share a common instance of IfcDirection as their Axis attribute. + ::Ifc4x3_add2::IfcDirection* Axis() const; + void setAxis(::Ifc4x3_add2::IfcDirection* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralCurveMember (IfcEntityInstanceData* e); + IfcStructuralCurveMember (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::Value v8_PredefinedType, ::Ifc4x3_add2::IfcDirection* v9_Axis); + typedef aggregate_of< IfcStructuralCurveMember > list; +}; +/// Definition from IAI: Describes edge members with varying profile properties. Each instance of IfcStructuralCurveMemberVarying is composed of two or more instances of IfcStructuralCurveMember with differing profile properties. These subordinate members relate to the instance of IfcStructuralCurveMemberVarying by IfcRelAggregates. +/// +/// NOTE  A curve member whose variation of profile properties can be sufficiently described by a start profile and an end profile (e.g. tapers) shall be modeled as a single direct instance of the supertype IfcStructuralCurveMember. +/// +/// NOTE  It is recommended that structural activities (actions or reactions) are not connected with aggregated IfcStructuralCurveMemberVarying but only with the IfcStructuralCurveMembers in the aggregation. That way, difficulties in interpretation of local coordinates are avoided. +/// +/// HISTORY: New entity in IFC 2x2. +/// Use definition changed in IFC 2x4. +/// +/// Coordinate Systems: +/// +/// See definitions at IfcStructuralItem and IfcStructuralCurveMember. The local coordinates of the aggregate are derived from those of its parts. Length measures in local x direction of the aggregate depend on continuity and lengths of the parts. The Axis of the aggregate shal be the same as the Axis of the part at the start of the aggregate. +/// +/// Material Use Definition +/// +/// Only the individual parts (direct instances of IfcStructuralCurveMember) carry material and profile information. +/// +/// Topology Use Definitions: +/// +/// Instances of IfcStructuralCurveMemberVarying may have a topology representation which contains a single IfcEdgeLoop, based upon the edges of the parts. +class IFC_PARSE_API IfcStructuralCurveMemberVarying : public IfcStructuralCurveMember { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralCurveMemberVarying (IfcEntityInstanceData* e); + IfcStructuralCurveMemberVarying (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralCurveMemberTypeEnum::Value v8_PredefinedType, ::Ifc4x3_add2::IfcDirection* v9_Axis); + typedef aggregate_of< IfcStructuralCurveMemberVarying > list; +}; +/// Definition from IAI: Defines a reaction which occurs distributed over a curve. +/// A curve reaction may be connected with a curve member or curve connection, +/// or surface member or surface connection. +/// +/// HISTORY: New entity in IFC 2x4. +/// +/// Coordinate Systems: +/// +/// See definitions at IfcStructuralActivity. +/// +/// Topology Use Definitions: +/// +/// Standard Case: +/// If connected with a curve item, instances of IfcStructuralCurveRection shall not +/// have an ObjectPlacement nor a Representation. It is implied that the +/// placement and representation of the IfcStructuralActivity is the same as the ones +/// of the member or connection. +/// +/// Special Case: +/// If connected with a surface item, instances of IfcStructuralCurveReaction shall +/// have an ObjectPlacement and Representation, containing an IfcEdgeCurve. +/// See IfcStructuralActivity for further definitions. +/// +/// Informal propositions: +/// +/// If the curve reaction is of the predefined type CONST, +/// SELF\IfcStructuralActivity.AppliedLoad must not be of type +/// IfcStructuralLoadConfiguration. +/// If the curve reaction is of the predefined type LINEAR, +/// SELF\IfcStructuralActivity.AppliedLoad shall be of type +/// IfcStructuralLoadConfiguration and shall contain two items. +/// If the curve reaction is of the predefined type POLYGONAL, +/// SELF\IfcStructuralActivity.AppliedLoad shall be of type +/// IfcStructuralLoadConfiguration and shall contain three or more items. +/// If the curve action is of the predefined type DISCRETE, +/// SELF\IfcStructuralActivity.AppliedLoad shall be of type +/// IfcStructuralLoadConfiguration and shall contain two or more items. +/// In case of types LINEAR, POLYGONAL, and DISCRETE, the load items shall have +/// one-dimensional IfcStructuralLoadConfiguration.Locations, defining the +/// location of the result samples in local coordinates of the curve reaction. +/// The load items shall be provided in ascending order according to their locations. +/// The first and the last load item define the extent of the result distribution. +/// If the curve reaction is of the predefined type EQUIDISTANT, +/// SELF\IfcStructuralActivity.AppliedLoad shall be of type +/// IfcStructuralLoadConfiguration and shall contain two or more items. +/// IfcStructuralLoadConfiguration.Locations shall be omitted as it is implicit. +/// The load items shall be provided in ascending order. The first and the last load +/// item are located at the beginning and end of the result distribution, respectively. +/// All items in SELF\IfcStructuralActivity.AppliedLoad\IfcStructuralLoadConfiguration.Values +/// shall be of the same entity type. +class IFC_PARSE_API IfcStructuralCurveReaction : public IfcStructuralReaction { +public: + /// Type of reaction according to its distribution of load values. + ::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralCurveReaction (IfcEntityInstanceData* e); + IfcStructuralCurveReaction (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal, ::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcStructuralCurveReaction > list; +}; +/// Definition from IAI: Defines an action with constant value which is distributed over a curve. +/// +/// HISTORY: New entity in IFC 2x2. +/// +/// IFC 2x4 change: Intermediate supertype IfcStructuralCurveAction inserted. Derived attribute PredefinedType added. +/// +/// NOTE  Like its supertype IfcStructuralCurveAction, this action type may also act on curved edges. +class IFC_PARSE_API IfcStructuralLinearAction : public IfcStructuralCurveAction { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralLinearAction (IfcEntityInstanceData* e); + IfcStructuralLinearAction (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal, boost::optional< bool > v10_DestabilizingLoad, boost::optional< ::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::Value > v11_ProjectedOrTrue, ::Ifc4x3_add2::IfcStructuralCurveActivityTypeEnum::Value v12_PredefinedType); + typedef aggregate_of< IfcStructuralLinearAction > list; +}; +/// Definition from IAI: The entity IfcStructuralLoadGroup is used to structure the +/// physical impacts. By using the grouping features inherited from IfcGroup, instances of +/// IfcStructuralAction (or its subclasses) and of IfcStructuralLoadGroup can be used to +/// define load groups, load cases and load combinations. (See also IfcLoadGroupTypeEnum.) +/// +/// NOTE: Important functionality for the description of a load-bearing system +/// is derived from the existing IFC entity IfcGroup. This class provides, via the relationship +/// class IfcRelAssignsToGroup, the needed grouping mechanism. In this way, instances of +/// IfcStructuralAction belonging to a specific load group can be unambiguously determined. +/// +/// NOTE: The relationship class IfcRelAssignsToGroupByFactor is +/// used to group load cases into load combinations. The factor provided in this assignment relationship +/// is to applied together with the optional IfcStructuralLoadGroup.Coefficient. Unlike this +/// coefficient which always affects the load group, the IfcRelAssignsToGroupByFactor.Factor is +/// specific for a load case—load combination pair. As many instances of +/// IfcRelAssignsToGroupByFactor are used within one load combination as there are different +/// Factors to be applied to load cases in the load combination. +/// +/// On the other hand, a load case may appear in more than one load combination +/// and can have a different Factor in each assignment by IfcRelAssignsToGroupByFactor. +/// +/// HISTORY: New entity in IFC 2x2. +/// IFC 2x4 change: Subtype IfcStructuralLoadCase added. Informal propositions and WHERE rule added. +/// Predefined type LOAD_COMBINATION_GROUP made obsolete and removed. +/// +/// Informal propositions: +/// +/// Load groups of type LOAD_GROUP shall only contain instances of IfcStructuralAction. +/// Load groups of type LOAD_CASE shall always be instantiated from the subtype IfcStructuralLoadCase, +/// not directly from the generic type IfcStructuralLoadGroup itself. +/// Instances of IfcStructuralLoadCase shall only contain instances of IfcStructuralAction +/// or/ and instances of IfcStructuralLoadGroup of type LOAD_GROUP. +/// Load groups of type LOAD_COMBINATION shall only contain instances of IfcStructuralLoadCase. +class IFC_PARSE_API IfcStructuralLoadGroup : public IfcGroup { +public: + /// Selects a predefined type for the load group. It can be differentiated between load groups, load cases, load combinations, or userdefined grouping levels. + ::Ifc4x3_add2::IfcLoadGroupTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcLoadGroupTypeEnum::Value v); + /// Type of actions in the group. Normally needed if 'PredefinedType' specifies a LOAD_CASE. + ::Ifc4x3_add2::IfcActionTypeEnum::Value ActionType() const; + void setActionType(::Ifc4x3_add2::IfcActionTypeEnum::Value v); + /// Source of actions in the group. Normally needed if 'PredefinedType' specifies a LOAD_CASE. + ::Ifc4x3_add2::IfcActionSourceTypeEnum::Value ActionSource() const; + void setActionSource(::Ifc4x3_add2::IfcActionSourceTypeEnum::Value v); + /// Load factor. If omitted, a factor is not yet known or not specified. A load factor of 1.0 shall be explicitly exported as Coefficient = 1.0. + boost::optional< double > Coefficient() const; + void setCoefficient(boost::optional< double > v); + /// Description of the purpose of this instance. Among else, possible values of the Purpose of load combinations are 'SLS', 'ULS', 'ALS' to indicate serviceability, ultimate, or accidental limit state. + boost::optional< std::string > Purpose() const; + void setPurpose(boost::optional< std::string > v); + aggregate_of< IfcStructuralResultGroup >::ptr SourceOfResultGroup() const; // INVERSE IfcStructuralResultGroup::ResultForLoadGroup + aggregate_of< IfcStructuralAnalysisModel >::ptr LoadGroupFor() const; // INVERSE IfcStructuralAnalysisModel::LoadedBy + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralLoadGroup (IfcEntityInstanceData* e); + IfcStructuralLoadGroup (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcLoadGroupTypeEnum::Value v6_PredefinedType, ::Ifc4x3_add2::IfcActionTypeEnum::Value v7_ActionType, ::Ifc4x3_add2::IfcActionSourceTypeEnum::Value v8_ActionSource, boost::optional< double > v9_Coefficient, boost::optional< std::string > v10_Purpose); + typedef aggregate_of< IfcStructuralLoadGroup > list; +}; +/// Definition from IAI: Defines an action which acts on a point. +/// A point action is typically connected with a point connection. +/// It may also be connected with a curve member or curve connection, +/// or surface member or surface connection. +/// +/// HISTORY: New entity in IFC 2x2. +/// +/// IFC 2x4 change: Attributes in the supertypes +/// IfcStructuralActivity and IfcStructuralAction changed. Use definitions changed, +/// informal propositions added. +/// +/// Coordinate Systems: +/// +/// See definitions at IfcStructuralActivity. +/// +/// Topology Use Definitions: +/// +/// Standard Case: +/// If connected with a point item, instances of IfcStructuralPointAction +/// shall not have an ObjectPlacement nor a Representation. +/// It is implied that the placement and representation of the action is the same +/// as the structural item. +/// +/// Special Case 1: +/// If connected with a curve item or surface item, instances of IfcStructuralPointAction +/// shall have an ObjectPlacement and Representation, containing an IfcVertexPoint. +/// See IfcStructuralActivity for further definitions. +/// +/// NOTE In order to model concentrated actions on a curve or surface item, +/// IfcStructuralCurveAction or IfcStructuralSurfaceAction of type DISCRETE is +/// preferable since they do not require an extra topology representation in this case. +/// An IfcStructuralPointAction should be used for a concentrated action on a curve or surface +/// item only when an explicit vertex point representation is actually desired. +/// +/// Special Case 2: +/// If not connected with a structural item (which may happen in an incomplete or +/// conceptual model), a point action should have an ObjectPlacement and +/// Representation, containing an IfcVertexPoint. +/// See IfcStructuralActivity for further definitions. +/// +/// Informal propositions: +/// +/// SELF\IfcStructuralActivity.AppliedLoad shall be of type +/// IfcStructuralLoadSingleForce or +/// IfcStructuralLoadSingleDisplacement. +class IFC_PARSE_API IfcStructuralPointAction : public IfcStructuralAction { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralPointAction (IfcEntityInstanceData* e); + IfcStructuralPointAction (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal, boost::optional< bool > v10_DestabilizingLoad); + typedef aggregate_of< IfcStructuralPointAction > list; +}; +/// Definition from IAI: Instances of IfcStructuralPointConnection describe structural nodes or point supports. +/// +/// HISTORY: New entity in IFC 2x2. +/// +/// IFC 2x4 change: Attribute ConditionCoordinateSystem added, allowing for skewed supports. Use definitions added. +/// +/// Coordinate Systems: +/// +/// See definitions at IfcStructuralItem. The local coordinate system is established by the reference point given by topology representation and by the attribute ConditionCoordinateSystem. +/// +/// Topology Use Definitions: +/// +/// Instances of IfcStructuralPointConnection shall have a topology representation which consists of one IfcVertexPoint, representing the reference point of the point connection. See definitions at IfcStructuralItem for further specifications. +class IFC_PARSE_API IfcStructuralPointConnection : public IfcStructuralConnection { +public: + /// Defines a coordinate system used for the description of the support condition properties in SELF\IfcStructuralConnection.SupportCondition, specified relative to the global coordinate system (global to the structural analysis model) established by SELF.\IfcProduct.ObjectPlacement. If left unspecified, the placement IfcAxis2Placement3D((x,y,z), ?, ?) is implied with x,y,z being the coordinates of the reference point of this IfcStructuralPointConnection and the default axes directions being in parallel with the global axes. + ::Ifc4x3_add2::IfcAxis2Placement3D* ConditionCoordinateSystem() const; + void setConditionCoordinateSystem(::Ifc4x3_add2::IfcAxis2Placement3D* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralPointConnection (IfcEntityInstanceData* e); + IfcStructuralPointConnection (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcBoundaryCondition* v8_AppliedCondition, ::Ifc4x3_add2::IfcAxis2Placement3D* v9_ConditionCoordinateSystem); + typedef aggregate_of< IfcStructuralPointConnection > list; +}; +/// Definition from IAI: Defines a reaction which occurs at a point. +/// A point reaction is typically connected with a point connection. +/// It may also be connected with a curve member or curve connection, +/// or surface member or surface connection. +/// +/// HISTORY: New entity in IFC 2x2. +/// +/// IFC 2x4 change: Attributes in the supertypes IfcStructuralActivity and IfcStructuralReaction changed. Use definitions changed, informal propositions added. +/// +/// Coordinate Systems: +/// +/// See definitions at IfcStructuralActivity. +/// +/// Topology Use Definitions: +/// +/// Standard Case: +/// If connected with a point item, instances of IfcStructuralPointReaction +/// shall not have an ObjectPlacement nor a Representation. +/// It is implied that the placement and representation of the reaction is the same +/// as the structural item. +/// +/// Special Case 1: +/// If connected with a curve item or surface item, instances of IfcStructuralPointReaction +/// shall have an ObjectPlacement and Representation, containing an IfcVertexPoint. +/// See IfcStructuralActivity for further definitions. +/// +/// NOTE In order to model concentrated reactions on a curve or surface item, +/// IfcStructuralCurveReaction or IfcStructuralSurfaceAction of type DISCRETE is +/// preferable since they do not require an extra topology representation in this case. +/// An IfcStructuralPointReaction should be used for a concentrated reaction on a curve or surface +/// item only when an explicit vertex point representation is actually desired. +/// +/// Special Case 2: +/// If not connected with a structural item (which may happen in an incomplete or +/// conceptual model), a point action should have an ObjectPlacement and +/// Representation, containing an IfcVertexPoint. +/// See IfcStructuralActivity for further definitions. +/// +/// Informal propositions: +/// +/// SELF\IfcStructuralActivity.AppliedLoad shall be of type +/// IfcStructuralLoadSingleForce or +/// IfcStructuralLoadSingleDisplacement. +class IFC_PARSE_API IfcStructuralPointReaction : public IfcStructuralReaction { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralPointReaction (IfcEntityInstanceData* e); + IfcStructuralPointReaction (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal); + typedef aggregate_of< IfcStructuralPointReaction > list; +}; +/// Definition from IAI: Instances of the entity IfcStructuralResultGroup are used to group results of structural analysis calculations and to capture the connection to the underlying basic load group. The basic functionality for grouping inherited from IfcGroup is used to collect instances from IfcStructuralReaction or its respective subclasses. +/// +/// HISTORY: New entity in IFC 2x2. +/// IFC 2x4 change: WHERE rule added. +class IFC_PARSE_API IfcStructuralResultGroup : public IfcGroup { +public: + /// Specifies the analysis theory used to obtain the respective results. + ::Ifc4x3_add2::IfcAnalysisTheoryTypeEnum::Value TheoryType() const; + void setTheoryType(::Ifc4x3_add2::IfcAnalysisTheoryTypeEnum::Value v); + /// Reference to an instance of IfcStructuralLoadGroup for which this instance represents the result. + ::Ifc4x3_add2::IfcStructuralLoadGroup* ResultForLoadGroup() const; + void setResultForLoadGroup(::Ifc4x3_add2::IfcStructuralLoadGroup* v); + /// This value allows to easily recognize whether a linear analysis has been applied (allowing the superposition of analysis results). + bool IsLinear() const; + void setIsLinear(bool v); + aggregate_of< IfcStructuralAnalysisModel >::ptr ResultGroupFor() const; // INVERSE IfcStructuralAnalysisModel::HasResults + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralResultGroup (IfcEntityInstanceData* e); + IfcStructuralResultGroup (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcAnalysisTheoryTypeEnum::Value v6_TheoryType, ::Ifc4x3_add2::IfcStructuralLoadGroup* v7_ResultForLoadGroup, bool v8_IsLinear); + typedef aggregate_of< IfcStructuralResultGroup > list; +}; +/// Definition from IAI: Defines an action which is distributed over a surface. +/// A surface action may be connected with a surface member or surface connection. +/// +/// HISTORY: New entity in IFC 2x4. +/// +/// IFC 2x4 change: Former entity +/// IfcStructuralPlanarActionVarying from IFC 2x2 has been removed and are replaced +/// by this entity. +/// +/// Coordinate Systems: +/// +/// See definitions at IfcStructuralActivity. +/// +/// Topology Use Definitions: +/// +/// Standard Case: +/// If connected with a surface item and acting on its entirety, instances of +/// IfcStructuralCurveAction shall not have an ObjectPlacement nor a +/// Representation. It is implied that the placement and representation of the +/// IfcStructuralActivity is the same as the ones of the member or connection. +/// +/// Special Case 1: +/// If connected with a surface item but acting only on a part of it, instances of +/// IfcStructuralSurfaceAction shall have an ObjectPlacement and +/// Representation, containing an IfcFaceSurface which topologically +/// defines the loaded part of the surface. See IfcStructuralActivity for further +/// definitions. +/// +/// Special Case 2: +/// If not connected with a structural item (which may happen in an incomplete or conceptual model), +/// a surface action should have an ObjectPlacement and Representation, containing an +/// IfcFaceSurface. See IfcStructuralActivity for further definitions. +/// +/// Informal propositions: +/// +/// If the surface action is of the predefined type CONST, +/// SELF\IfcStructuralActivity.AppliedLoad must not be of type +/// IfcStructuralLoadConfiguration. +/// If the surface action is of the predefined type BILINEAR, +/// SELF\IfcStructuralActivity.AppliedLoad shall be of type +/// IfcStructuralLoadConfiguration and shall contain three items +/// with two-dimensional IfcStructuralLoadConfiguration.Locations, +/// defining the location of the load samples in local coordinates of the +/// surface action. +/// If the surface action is of the predefined type DISCRETE, +/// SELF\IfcStructuralActivity.AppliedLoad shall be of type +/// IfcStructuralLoadConfiguration and shall contain two or more +/// items with two-dimensional locations. +/// Point loads must be of type DISCRETE, thus contain two or more load points. +/// (Single point loads are modeled by IfcStructuralPointLoad.) +/// All items in SELF\IfcStructuralActivity.AppliedLoad\IfcStructuralLoadConfiguration.Values +/// shall be of the same entity type. +class IFC_PARSE_API IfcStructuralSurfaceAction : public IfcStructuralAction { +public: + /// Defines whether load values are given per true lengths of the surface on which they act, or per lengths of the projection of the surface in load direction. The latter is only applicable to loads which act in global coordinate directions. + boost::optional< ::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::Value > ProjectedOrTrue() const; + void setProjectedOrTrue(boost::optional< ::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::Value > v); + /// Type of action according to its distribution of load values. + ::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralSurfaceAction (IfcEntityInstanceData* e); + IfcStructuralSurfaceAction (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal, boost::optional< bool > v10_DestabilizingLoad, boost::optional< ::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::Value > v11_ProjectedOrTrue, ::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::Value v12_PredefinedType); + typedef aggregate_of< IfcStructuralSurfaceAction > list; +}; +/// Definition from IAI: Instances of IfcStructuralSurfaceConnection describe face 'nodes', i.e. faces where two or more surface members are joined, or face supports. Face surfaces may be planar or curved. +/// +/// HISTORY: New entity in IFC 2x2. +/// IFC 2x4 change: Use definitions added. +/// +/// Coordinate Systems: +/// +/// See definitions at IfcStructuralItem. The local coordinate system is established by the reference surface given by topology representation. +/// +/// Topology Use Definitions: +/// +/// Instances of IfcStructuralSurfaceConnection shall have a topology representation which consists of one IfcFaceSurface, representing the reference surface of the surface connection. See definitions at IfcStructuralItem for further specifications. +class IFC_PARSE_API IfcStructuralSurfaceConnection : public IfcStructuralConnection { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralSurfaceConnection (IfcEntityInstanceData* e); + IfcStructuralSurfaceConnection (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcBoundaryCondition* v8_AppliedCondition); + typedef aggregate_of< IfcStructuralSurfaceConnection > list; +}; +/// IfcSubContractResource is a construction resource needed in a construction process that represents a sub-contractor. +/// +/// HISTORY: New Entity in IFC Release 2.0. Base type and documentation extended in IFC 2x4. +/// +/// IFC2x4 CHANGE: The attribute SubContractor has been deleted; use IfcRelAssignsToResource to assign an IfcActor to fulfill the role as the subcontractor. The attribute JobDescription has been deleted; use LongDescription to describe the job. +/// +/// An IfcSubContractResource can be used in cost estimating and work planning with or without specifying the subcontractor and contract agreement. +/// The purpose of an IfcSubContractResource is to indicate work of a particular type that is that is to be engaged through the use of a sub-contract. It's aim is to identify the description of the sub-contract work required. It can be used to identify the generic type of sub-contract resource that is required for a purpose without having to be specific about the actor (person or organization) providing the resource occurrence. It may be particularly useful when creating an overall plan for a process or processes. For instance, within maintenance or work planning there may be a known task that needs to be done which is planned to require an 'insulation specialist'. +/// A subcontract resource may be described at various stages and levels of detail through its assignments: +/// +/// Subcontract resource designated for particular tasks +/// Actors identified to request bids +/// Cost schedules (bids) received from actors +/// Project order (work order, change order, etc.) executed +/// +/// Use definitions for composition, assignment, constraints, time series, and baselines are described at the base type IfcConstructionResource. +/// +/// Type use definition +/// IfcSubContractResource defines the occurrence of any subcontract resource; common information about subcontract resource types is handled by IfcSubContractResourceType. The IfcSubContractResourceType (if present) may establish the common type name, common properties, and common productivities for various task types using IfcRelAssignsToProcess. The IfcSubContractResourceType is attached using the IfcRelDefinesByType.RelatingType objectified relationship and is accessible by the inverse IsTypedBy attribute. +/// +/// Assignment use definition +/// In addition to assignments specified at the base class IfcConstructionResource, a subcontract resource may have assignments of its own using IfcRelAssignsToResource where RelatingResource refers to the IfcSubContractResource and RelatedObjects contains one or more IfcActor, IfcCostSchedule, and/or IfcWorkOrder objects as shown in Figure 195. An IfcActor indicates a specific organization to be considered to fulfill the resource or invited to bid on the resource. An IfcCostSchedule indicates a bid or price quote made on behalf of an organization. An IfcProjectOrder indicates a specific work order committed to fulfill the resource. +/// +/// Figure 195 — Subcontract assignment use +class IFC_PARSE_API IfcSubContractResource : public IfcConstructionResource { +public: + /// Defines types of subcontract resources. + /// IFC2x4 New attribute + boost::optional< ::Ifc4x3_add2::IfcSubContractResourceTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSubContractResourceTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSubContractResource (IfcEntityInstanceData* e); + IfcSubContractResource (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, ::Ifc4x3_add2::IfcResourceTime* v8_Usage, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v9_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v10_BaseQuantity, boost::optional< ::Ifc4x3_add2::IfcSubContractResourceTypeEnum::Value > v11_PredefinedType); + typedef aggregate_of< IfcSubContractResource > list; +}; +/// Definition from IAI: A surface feature is a modification at (onto, or into) of the surface of an element. Parts of the surface of the entire surface may be affected. The volume and mass of the element may be increased, remain unchanged, or be decreased by the surface feature, depending on manufacturing technology. +/// +/// The standard use of instances of IfcSurfaceFeature is as a part of element type objects (instances of subtypes of IfcElementType). The part–whole relationship is established by an aggregation relationship object, expressing the decomposition of an element type into one or more additive elements (element parts) and zero or more feature elements. +/// +/// HISTORY New type in IFC 2x4. +/// +/// Containment Use Definition: +/// +/// Surface features shall have no spatial containment relationship to the spatial structure since they are dependent on element types without spatial containment relationships or on an element occurrence with own spatial containment relationship. +/// +/// The SELF\IfcElement.ContainedInStructure relationship shall be NIL. +/// +/// Geometry use definition: +/// +/// The geometric representation of IfcSurfaceFeatureElement is given by the IfcProductDefinitionShape, allowing multiple geometric representation. +/// +/// Local Placement +/// +/// The local placement for IfcSurfaceFeatureElement is defined in its supertype IfcProduct. It is defined by the IfcLocalPlacement, which defines the local coordinate system that is referenced by all geometric representations. +/// +/// In case of features which are part of an element type, absolute placement into the type object's implied coordinate system shall be used. +/// In case of features which are voiding an element occurrence, the PlacementRelTo relationship of IfcLocalPlacement shall point to the local placement of the respective element. +/// +/// Shape representation +/// +/// Different shape representations may be used, depending on the nature of the feature and information requirements: +/// +/// Symbolic representation, such as the two-dimensional bounding box of a tag. +/// A geometric set representing the geometric items of a mark. +/// Surface representations of treated parts of the lement surface by means of IfcShellBasedSurfaceModel. The faces within the surface model may be included into a B-Rep model within a representation map of the parent element type. +/// +/// Higher-level parameters (geometric and non-geometric) may be provided by property sets based on local agreements. +class IFC_PARSE_API IfcSurfaceFeature : public IfcFeatureElement { +public: + /// Indicates the kind of surface feature. + boost::optional< ::Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::Value > v); + aggregate_of< IfcRelAdheresToElement >::ptr AdheresToElement() const; // INVERSE IfcRelAdheresToElement::RelatedSurfaceFeatures + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSurfaceFeature (IfcEntityInstanceData* e); + IfcSurfaceFeature (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcSurfaceFeatureTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcSurfaceFeature > list; +}; +/// The flow controller type IfcSwitchingDeviceType defines commonly shared information for occurrences of switching devices. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a switching device specification (i.e. the specific product information, that is common to all occurrences of that product type). Switching Device types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcSwitchingDeviceType are represented by instances of IfcSwitchingDevice. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowControllerType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_SwitchingDeviceTypeCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_ElectricalDeviceCommon +/// Pset_SwitchingDeviceTypeContactor (CONTACTOR) +/// Pset_SwitchingDeviceTypeDimmerSwitch (DIMMERSWITCH) +/// Pset_SwitchingDeviceTypeEmergencyStop (EMERGENCYSTOP) +/// Pset_SwitchingDeviceTypeKeypad (KEYPAD) +/// Pset_SwitchingDeviceTypeMomentarySwitch (MOMENTARYSWITCH) +/// Pset_SwitchingDeviceTypeSelectorSwitch (SELECTORSWITCH) +/// Pset_SwitchingDeviceTypeStarter (STARTER) +/// Pset_SwitchingDeviceTypeSwitchDisconnector (SWITCHDISCONNECTOR) +/// Pset_SwitchingDeviceTypeToggleSwitch (TOGGLESWITCH) +/// +/// Material Use Definition +/// The material of the IfcSwitchingDeviceType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// 'Conductor': Material from which the conductors are constructed. +/// 'Surface': Material from which the switch surface is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcSwitchingDeviceType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcSwitchingDevice for standard port definitions. +class IFC_PARSE_API IfcSwitchingDeviceType : public IfcFlowControllerType { +public: + /// Identifies the predefined types of switch from which the type required may be set. + ::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSwitchingDeviceType (IfcEntityInstanceData* e); + IfcSwitchingDeviceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcSwitchingDeviceType > list; +}; +/// Definition from IAI: Organized combination of +/// related parts within an AEC product, composed for a common +/// purpose or function or to provide a service. System is +/// essentially a functionally related aggregation of products. +/// The grouping relationship to one or several instances of +/// IfcProduct (the system members) is handled by +/// IfcRelAssignsToGroup. +/// +/// NOTE: The use of IfcSystem often +/// applies to the representation of building services related +/// systems, such as the piping system, cold water system, etc. +/// Members within such a system may or may not be connected +/// using the connectivity related entities (e.g. through +/// IfcPort). +/// +/// HISTORY: New entity in +/// IFC Release 1.0 +class IFC_PARSE_API IfcSystem : public IfcGroup { +public: + aggregate_of< IfcRelServicesBuildings >::ptr ServicesBuildings() const; // INVERSE IfcRelServicesBuildings::RelatingSystem + aggregate_of< IfcRelReferencedInSpatialStructure >::ptr ServicesFacilities() const; // INVERSE IfcRelReferencedInSpatialStructure::RelatedElements + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSystem (IfcEntityInstanceData* e); + IfcSystem (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType); + typedef aggregate_of< IfcSystem > list; +}; +/// A system furniture element defines components of modular furniture which are not directly placed in a building structure but aggregated inside furniture. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Type Use Definition +/// IfcSystemFurnitureElement defines the occurrence of any furniture element; common information about furniture element types is handled by IfcSystemFurnitureElementType. The IfcSystemFurnitureElementType (if present) may establish the common type name, usage (predefined type), properties, materials, composition, assignments, and representations. The IfcSystemFurnitureElementType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. If the IfcSystemFurnitureElementType has aggregated elements, such objects are reflected at the IfcSystemFurnitureElement occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. They are accessible by the IsDefinedBy inverse attribute. Property sets may also be specified at the IfcSystemFurnitureElementType, defining the common property data for all occurrences of the same type. They are then accessible by the IsTypedBy inverse attribute pointing to IfcSystemFurnitureElementType.HasPropertySets. If both are given, then the properties directly defined at IfcSystemFurnitureElement override the properties defined at IfcSystemFurnitureElementType. Refer to the documentation at the supertype IfcFurnishingElement and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_SystemFurnitureElementTypeCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_SystemFurnitureElementTypePanel (PANEL) +/// Pset_SystemFurnitureElementTypeWorkSurface (WORKSURFACE) +/// +/// Material Use Definition +/// The material of the IfcSystemFurnitureElement is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcSystemFurnitureElementType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Finish': The finish, typically at visible aspects of the furniture. +/// 'Frame': The frame from which the object is constructed. +/// 'Hardware': Finish hardware such as knobs or handles. +/// 'Padding': Padding such as cushions. +/// 'Panel': Panels such as glass. +class IFC_PARSE_API IfcSystemFurnitureElement : public IfcFurnishingElement { +public: + boost::optional< ::Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSystemFurnitureElement (IfcEntityInstanceData* e); + IfcSystemFurnitureElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcSystemFurnitureElementTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcSystemFurnitureElement > list; +}; +/// The flow storage device type IfcTankType defines commonly shared information for occurrences of tanks. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a tank specification (i.e. the specific product information, that is common to all occurrences of that product type). Tank types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcTankType are represented by instances of IfcTank. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowStorageDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_TankTypeCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_TankTypeExpansion (EXPANSION) +/// Pset_TankTypePreformed (PREFORMED) +/// Pset_TankTypePressureVessel (PRESSUREVESSEL) +/// Pset_TankTypeSectional (SECTIONAL) +/// +/// Material Use Definition +/// The material of the IfcTankType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Body': The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcTankType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcTank for standard port definitions. +class IFC_PARSE_API IfcTankType : public IfcFlowStorageDeviceType { +public: + /// Defines the type of tank. + ::Ifc4x3_add2::IfcTankTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcTankTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTankType (IfcEntityInstanceData* e); + IfcTankType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcTankTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcTankType > list; +}; + +class IFC_PARSE_API IfcTendon : public IfcReinforcingElement { +public: + boost::optional< ::Ifc4x3_add2::IfcTendonTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcTendonTypeEnum::Value > v); + boost::optional< double > NominalDiameter() const; + void setNominalDiameter(boost::optional< double > v); + boost::optional< double > CrossSectionArea() const; + void setCrossSectionArea(boost::optional< double > v); + boost::optional< double > TensionForce() const; + void setTensionForce(boost::optional< double > v); + boost::optional< double > PreStress() const; + void setPreStress(boost::optional< double > v); + boost::optional< double > FrictionCoefficient() const; + void setFrictionCoefficient(boost::optional< double > v); + boost::optional< double > AnchorageSlip() const; + void setAnchorageSlip(boost::optional< double > v); + boost::optional< double > MinCurvatureRadius() const; + void setMinCurvatureRadius(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTendon (IfcEntityInstanceData* e); + IfcTendon (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_SteelGrade, boost::optional< ::Ifc4x3_add2::IfcTendonTypeEnum::Value > v10_PredefinedType, boost::optional< double > v11_NominalDiameter, boost::optional< double > v12_CrossSectionArea, boost::optional< double > v13_TensionForce, boost::optional< double > v14_PreStress, boost::optional< double > v15_FrictionCoefficient, boost::optional< double > v16_AnchorageSlip, boost::optional< double > v17_MinCurvatureRadius); + typedef aggregate_of< IfcTendon > list; +}; + +class IFC_PARSE_API IfcTendonAnchor : public IfcReinforcingElement { +public: + boost::optional< ::Ifc4x3_add2::IfcTendonAnchorTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcTendonAnchorTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTendonAnchor (IfcEntityInstanceData* e); + IfcTendonAnchor (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_SteelGrade, boost::optional< ::Ifc4x3_add2::IfcTendonAnchorTypeEnum::Value > v10_PredefinedType); + typedef aggregate_of< IfcTendonAnchor > list; +}; + +class IFC_PARSE_API IfcTendonAnchorType : public IfcReinforcingElementType { +public: + ::Ifc4x3_add2::IfcTendonAnchorTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcTendonAnchorTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTendonAnchorType (IfcEntityInstanceData* e); + IfcTendonAnchorType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcTendonAnchorTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcTendonAnchorType > list; +}; + +class IFC_PARSE_API IfcTendonConduit : public IfcReinforcingElement { +public: + boost::optional< ::Ifc4x3_add2::IfcTendonConduitTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcTendonConduitTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTendonConduit (IfcEntityInstanceData* e); + IfcTendonConduit (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_SteelGrade, boost::optional< ::Ifc4x3_add2::IfcTendonConduitTypeEnum::Value > v10_PredefinedType); + typedef aggregate_of< IfcTendonConduit > list; +}; + +class IFC_PARSE_API IfcTendonConduitType : public IfcReinforcingElementType { +public: + ::Ifc4x3_add2::IfcTendonConduitTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcTendonConduitTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTendonConduitType (IfcEntityInstanceData* e); + IfcTendonConduitType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcTendonConduitTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcTendonConduitType > list; +}; + +class IFC_PARSE_API IfcTendonType : public IfcReinforcingElementType { +public: + ::Ifc4x3_add2::IfcTendonTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcTendonTypeEnum::Value v); + boost::optional< double > NominalDiameter() const; + void setNominalDiameter(boost::optional< double > v); + boost::optional< double > CrossSectionArea() const; + void setCrossSectionArea(boost::optional< double > v); + boost::optional< double > SheathDiameter() const; + void setSheathDiameter(boost::optional< double > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTendonType (IfcEntityInstanceData* e); + IfcTendonType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcTendonTypeEnum::Value v10_PredefinedType, boost::optional< double > v11_NominalDiameter, boost::optional< double > v12_CrossSectionArea, boost::optional< double > v13_SheathDiameter); + typedef aggregate_of< IfcTendonType > list; +}; + +class IFC_PARSE_API IfcTrackElementType : public IfcBuiltElementType { +public: + ::Ifc4x3_add2::IfcTrackElementTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcTrackElementTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTrackElementType (IfcEntityInstanceData* e); + IfcTrackElementType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcTrackElementTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcTrackElementType > list; +}; +/// The energy conversion device type IfcTransformerType defines commonly shared information for occurrences of transformers. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a transformer specification (i.e. the specific product information, that is common to all occurrences of that product type). Transformer types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcTransformerType are represented by instances of IfcTransformer. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcEnergyConversionDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_ElectricalDeviceCommon +/// Pset_TransformerTypeCommon +/// +/// Material Use Definition +/// The material of the IfcTransformerType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcTransformerType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcTransformer for standard port definitions. +class IFC_PARSE_API IfcTransformerType : public IfcEnergyConversionDeviceType { +public: + /// Identifies the predefined types of transformer from which the type required may be set. + ::Ifc4x3_add2::IfcTransformerTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcTransformerTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTransformerType (IfcEntityInstanceData* e); + IfcTransformerType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcTransformerTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcTransformerType > list; +}; +/// Definition from IAI: The element type +/// IfcTransportElementType defines commonly shared +/// information for occurrences of transport elements. The set of +/// shared information may include: +/// +/// common properties within shared property sets +/// common material information +/// common shape representations +/// +/// It is used to define a transport element specification (i.e. +/// the specific product information that is common to all +/// occurrences of that beam type). Transport element types (or the +/// instantiable subtypes) may be exchanged without being already +/// assigned to occurrences. +/// The occurrences of the IfcTransportElementType are +/// represented by instances of IfcTransportElement (or its +/// subtypes). +/// +/// HISTORY: New entity in Release +/// IFC2x Edition 2. +/// +/// Property Set Use Definition: +/// The shared property sets relating to the +/// IfcTransportElementType are defined by the +/// IfcPropertySet and are attached by the +/// HasPropertySets attribute. The following property set +/// definitions specific to the IfcTransportElementType are +/// part of this IFC release: +/// NOTE There is no differentiation between +/// properties within the property set that are only assignable to +/// IfcTransportElementType and those that are only assignable +/// to IfcTransportElement. If the same property is assigned +/// to the IfcTransportElementType and the +/// IfcTransportElement being an occurrence of the +/// IfcTransportElementType, then the occurrence property +/// overrides the type property. +/// +/// Pset_TransportElementCommon: common property +/// set for all transport element types +/// +/// Pset_TransportElementElevator: specific +/// property set for all types of transport elements with the +/// PredefinedType: ELEVATOR +/// +/// Geometry Use Definition: +/// The IfcTransportElementType may define the shared +/// geometric representation for all transport element occurrences. +/// The RepresentationMaps attribute refers to a list of +/// IfcRepresentationMap's, that allow for multiple geometric +/// representations (e.g. with IfcShaperepresentation's having +/// an RepresentationIdentifier 'Box', 'FootPrint', or +/// 'Body'). +/// NOTE The product shape representations are +/// defined as RepresentationMaps (attribute of the supertype +/// IfcTypeProduct), which get assigned by an element +/// occurrence instance through the +/// IfcShapeRepresentation.Item[n] being an +/// IfcMappedItem. See IfcTypeProduct for further +/// information. +/// NOTE The values of attributes +/// RepresentationIdentifier and RepresentationType of +/// IfcShapeRepresentation are restricted in the same way as +/// those for IfcTransportElementType. +class IFC_PARSE_API IfcTransportElementType : public IfcTransportationDeviceType { +public: + /// Predefined types to define the particular type of the transport element. There may be property set definitions available for each predefined type. + ::Ifc4x3_add2::IfcTransportElementTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcTransportElementTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTransportElementType (IfcEntityInstanceData* e); + IfcTransportElementType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcTransportElementTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcTransportElementType > list; +}; + +class IFC_PARSE_API IfcTransportationDevice : public IfcElement { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTransportationDevice (IfcEntityInstanceData* e); + IfcTransportationDevice (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcTransportationDevice > list; +}; +/// Definition from ISO/CD 10303-42:1992: +/// A trimmed curve is a bounded curve which is created by taking a selected +/// portion, between two identified points, of the associated basis curve. +/// The basis curve itself is unaltered and more than one trimmed curve may +/// reference the same basis curve. Trimming points for the curve may be +/// identified by: +/// parametric value geometric +/// position both of the above +/// At least one of these shall be specified at each +/// end of the +/// curve. The SenseAgreement makes it possible to +/// unambiguously define any segment of a closed curve such as a circle. +/// The combinations of sense and ordered end points make it possible to +/// define four distinct directed segments connecting two different points +/// on a circle or other closed curve. For this purpose cyclic properties +/// of the parameter range are assumed; for example, 370 degrees is +/// equivalent to 10 degrees. +/// The IfcTrimmedCurve has a parameterization +/// which is inherited from the particular basis curve reference. More +/// precisely the parameter s of the trimmed curve is derived from the +/// parameter of the basis curve as follows: +/// if SenseAgreement is TRUE: s +/// = t - t1 if SenseAgreement +/// is FALSE: s +/// = t2 - t +/// In the above equations t1 is +/// the value +/// given by Trim1 or the parameter value corresponding +/// to point 1 and t2 is the value given by Trim2 +/// or the parameter value corresponding to point 2. The resultant IfcTrimmedCurve +/// has a parameter ranging from 0 at the first trimming point to |t2 +/// - t1| at the second trimming point. +/// NOTE In case +/// of a closed curve, +/// it may be necessary to increment t1 or t2 by the parametric length for +/// consistency with the sense flag. +/// +/// NOTE Corresponding ISO 10303 entity: trimmed_curve; As a further IFC restriction, an IfcTrimmedCurve should only trim a IfcLine or IfcConic. Please refer to ISO/IS 10303-42:1994, p. 54 for the final definition of the formal standard. +/// +/// HISTORY New class in IFC Release 1.0 +/// +/// Informal Propositions: +/// Where both the parameter value and the Cartesian +/// point +/// exist for Trim1 and Trim2 they +/// shall be consistent. (i.e., the BasisCurve +/// evaluated at the parameter value shall coincide with the specified +/// point). When a Cartesian point is specified by Trim1 +/// or by Trim2 it shall lie on the BasisCurve. +/// Except the case of a closed BasisCurve +/// where both parameter 1 and parameter 2 exist, they shall be consistent +/// with the sense flag, i.e., (sense = parameter 1 < parameter 2). Or, for every open curve where both +/// parameter 1 and parameter 2 exist, they shall be consistent with the SenseAgreement, +/// i.e., SenseAgreement = (parameter 1 < +/// parameter 2). If both parameter 1 +/// and parameter 2 exist, then parameter 1 +/// <> parameter 2. For a +/// closed base curve, e.g. IfcCircle or IfcEllipse, +/// this also applies to the cyclic properties, as 360' is equal to 0', +/// parameter 1 = 360' and parameter 2 = 0' are treated as being equal and +/// therefore violating this proposition. When +/// a parameter value is specified by Trim1 +/// or Trim2 it shall lie within the parametric range +/// of the BasisCurve. +/// Additional illustration from IAI: +/// The +/// figure above shows the four arcs (dashed blue and +/// green lines with arrow showing different orientations) that can be +/// defined by the same BasisCurve (of type IfcCircle) +/// and the same trimming points (given by Cartesian points and parameter +/// values) by using different assignments to Trim1 and +/// Trim2 and SenseAgreement. +/// Note: Since the BasisCurve is closed (type IfcCircle), +/// the exception of the informal proposition IP3 applies, i.e. the sense +/// flag is not +/// required to be consistent with the parameter values of Trim1 +/// and Trim1, so the rule (sense = parameter 1 +/// < parameter 2) may not be fulfilled. +class IFC_PARSE_API IfcTrimmedCurve : public IfcBoundedCurve { +public: + /// The curve to be trimmed. For curves with multiple representations any parameter values given as Trim1 or Trim2 refer to the master representation of the BasisCurve only. + ::Ifc4x3_add2::IfcCurve* BasisCurve() const; + void setBasisCurve(::Ifc4x3_add2::IfcCurve* v); + /// The first trimming point which may be specified as a Cartesian point, as a real parameter or both. + aggregate_of< ::Ifc4x3_add2::IfcTrimmingSelect >::ptr Trim1() const; + void setTrim1(aggregate_of< ::Ifc4x3_add2::IfcTrimmingSelect >::ptr v); + /// The second trimming point which may be specified as a Cartesian point, as a real parameter or both. + aggregate_of< ::Ifc4x3_add2::IfcTrimmingSelect >::ptr Trim2() const; + void setTrim2(aggregate_of< ::Ifc4x3_add2::IfcTrimmingSelect >::ptr v); + /// Flag to indicate whether the direction of the trimmed curve agrees with or is opposed to the direction of the basis curve. + bool SenseAgreement() const; + void setSenseAgreement(bool v); + /// Where both parameter and point are present at either end of the curve this indicates the preferred form. + ::Ifc4x3_add2::IfcTrimmingPreference::Value MasterRepresentation() const; + void setMasterRepresentation(::Ifc4x3_add2::IfcTrimmingPreference::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTrimmedCurve (IfcEntityInstanceData* e); + IfcTrimmedCurve (::Ifc4x3_add2::IfcCurve* v1_BasisCurve, aggregate_of< ::Ifc4x3_add2::IfcTrimmingSelect >::ptr v2_Trim1, aggregate_of< ::Ifc4x3_add2::IfcTrimmingSelect >::ptr v3_Trim2, bool v4_SenseAgreement, ::Ifc4x3_add2::IfcTrimmingPreference::Value v5_MasterRepresentation); + typedef aggregate_of< IfcTrimmedCurve > list; +}; +/// The energy conversion device type IfcTubeBundleType defines commonly shared information for occurrences of tube bundles. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a tube bundle specification (i.e. the specific product information, that is common to all occurrences of that product type). Tube Bundle types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcTubeBundleType are represented by instances of IfcTubeBundle. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcEnergyConversionDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_TubeBundleTypeCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_TubeBundleTypeFinned (FINNED) +/// +/// Material Use Definition +/// The material of the IfcTubeBundleType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Body': Material used for construction of the tubes. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcTubeBundleType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcTubeBundle for standard port definitions. +class IFC_PARSE_API IfcTubeBundleType : public IfcEnergyConversionDeviceType { +public: + /// Defines the type of tube bundle. + ::Ifc4x3_add2::IfcTubeBundleTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcTubeBundleTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTubeBundleType (IfcEntityInstanceData* e); + IfcTubeBundleType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcTubeBundleTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcTubeBundleType > list; +}; +/// The energy conversion device type IfcUnitaryEquipmentType defines commonly shared information for occurrences of unitary equipments. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a unitary equipment specification (i.e. the specific product information, that is common to all occurrences of that product type). Unitary Equipment types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcUnitaryEquipmentType are represented by instances of IfcUnitaryEquipment. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcEnergyConversionDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_UnitaryEquipmentTypeCommon +/// +/// Material Use Definition +/// The material of the IfcUnitaryEquipmentType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. +/// Composition Use Definition +/// The IfcUnitaryEquipmentType may be aggregated into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcUnitaryEquipmentType and RelatedObjects contains one or more components. Components are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Aggregation use is defined for the following predefined types: +/// +/// (All Types): May contain IfcDistributionElement components. Unitary equipment (air handlers in particular) may elaborate contained elements such as dampers, fans, coils, sensors, actuators, and controllers. Such breakdown provides access to component information and tracking of performance history for embedded elements. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcUnitaryEquipmentType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcUnitaryEquipment for standard port definitions. +class IFC_PARSE_API IfcUnitaryEquipmentType : public IfcEnergyConversionDeviceType { +public: + /// The type of unitary equipment. + ::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcUnitaryEquipmentType (IfcEntityInstanceData* e); + IfcUnitaryEquipmentType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcUnitaryEquipmentType > list; +}; +/// The flow controller type IfcValveType defines commonly shared information for occurrences of valves. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a valve specification (i.e. the specific product information, that is common to all occurrences of that product type). Valve types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcValveType are represented by instances of IfcValve. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowControllerType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_ValveTypeCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_ValveTypeAirRelease (AIRRELEASE) +/// Pset_ValveTypeDrawOffCock (DRAWOFFCOCK) +/// Pset_ValveTypeFaucet (FAUCET) +/// Pset_ValveTypeFlushing (FLUSHING) +/// Pset_ValveTypeGasTap (GASTAP) +/// Pset_ValveTypeIsolating (ISOLATING) +/// Pset_ValveTypeMixing (MIXING) +/// Pset_ValveTypePressureReducing (PRESSUREREDUCING) +/// Pset_ValveTypePressureRelief (PRESSURERELIEF) +/// +/// Material Use Definition +/// The material of the IfcValveType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Body': The primary material from which the object is constructed. +/// 'Operation': Material from which the operating mechanism (gate, globe, plug, needle, clack etc.) of the valve is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcValveType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcValve for standard port definitions. +class IFC_PARSE_API IfcValveType : public IfcFlowControllerType { +public: + /// The type of valve. + ::Ifc4x3_add2::IfcValveTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcValveTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcValveType (IfcEntityInstanceData* e); + IfcValveType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcValveTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcValveType > list; +}; + +class IFC_PARSE_API IfcVehicle : public IfcTransportationDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcVehicleTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcVehicleTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcVehicle (IfcEntityInstanceData* e); + IfcVehicle (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcVehicleTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcVehicle > list; +}; + +class IFC_PARSE_API IfcVibrationDamper : public IfcElementComponent { +public: + boost::optional< ::Ifc4x3_add2::IfcVibrationDamperTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcVibrationDamperTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcVibrationDamper (IfcEntityInstanceData* e); + IfcVibrationDamper (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcVibrationDamperTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcVibrationDamper > list; +}; + +class IFC_PARSE_API IfcVibrationDamperType : public IfcElementComponentType { +public: + ::Ifc4x3_add2::IfcVibrationDamperTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcVibrationDamperTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcVibrationDamperType (IfcEntityInstanceData* e); + IfcVibrationDamperType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcVibrationDamperTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcVibrationDamperType > list; +}; +/// A vibration isolator is a device used to minimize the effects of vibration transmissibility in a building. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcVibrationIsolator defines the occurrence of any vibration isolator; common information about vibration isolator types is handled by IfcVibrationIsolatorType. +/// The IfcVibrationIsolatorType (if present) may establish the common type name, usage (predefined type), properties, materials, composition, assignments, and representations. +/// The IfcVibrationIsolatorType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcVibrationIsolatorType has aggregated elements, such objects are reflected at the IfcVibrationIsolator occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcVibrationIsolatorType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcVibrationIsolatorType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcVibrationIsolator override the properties defined at IfcVibrationIsolatorType. +/// Refer to the documentation at the supertype IfcElementComponent and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_VibrationIsolatorTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_VibrationIsolatorBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcVibrationIsolator is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcVibrationIsolatorType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// Damping: Material from which the damping element of the vibration isolator is constructed. +class IFC_PARSE_API IfcVibrationIsolator : public IfcElementComponent { +public: + boost::optional< ::Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcVibrationIsolator (IfcEntityInstanceData* e); + IfcVibrationIsolator (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcVibrationIsolator > list; +}; +/// The element component type IfcVibrationIsolatorType defines commonly shared information for occurrences of vibration isolators. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// applicable assignment of process types +/// +/// It is used to define a vibration isolator specification (i.e. the specific product information, that is common to all occurrences of that product type). Vibration Isolator types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcVibrationIsolatorType are represented by instances of IfcVibrationIsolator. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcElementComponentType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_VibrationIsolatorTypeCommon +/// +/// Material Use Definition +/// The material of the IfcVibrationIsolatorType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Damping': Material from which the damping element of the vibration isolator is constructed. +class IFC_PARSE_API IfcVibrationIsolatorType : public IfcElementComponentType { +public: + /// Defines the type of vibration isolator. + ::Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcVibrationIsolatorType (IfcEntityInstanceData* e); + IfcVibrationIsolatorType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcVibrationIsolatorTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcVibrationIsolatorType > list; +}; +/// A virtual element is a special element used to provide imaginary boundaries, such as between two adjacent, but not separated, spaces. Virtual elements are usually not displayed and does not have quantities and other measures. Therefore IfcVirtualElement does not have material information and quantities attached. +/// +/// NOTE The main purpose of IfcVirtualElement is the provision of a virtual space boundary. The IfcVirtualElement may provide the 2D curve or 3D surface representation of the virtual space connection and is referenced by two instances of IfcRelSpaceBoundary, each pointing to one of the two adjacent IfcSpaces. +/// +/// HISTORY New entity in IFC Release 2x2 Addendum. +/// IFC2x2 CHANGE: The entity IfcVirtualElement has been added. Upward compatibility for file based exchange is guaranteed. +/// +/// Space Boundary Use Definition +/// The IfcVirtualElement is mainly used to define a virtual boundary between two spaces. Figure 63 describes how to use IfcRelSpaceBoundary in conjunction with IfcVirtualElement to define space boundaries. +/// +/// Figure 63 — Virtual element space boundaries +/// +/// Geometry Use Definition +/// The geometric representation of any IfcVirtualElement +/// is given by the IfcProductDefinitionShape and +/// IfcLocalPlacement allowing multiple geometric +/// representations. Included are: +/// Local Placement +/// The local placement for IfcVirtualElement is defined in +/// its supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate +/// system that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if given) to the local +/// placement of the same IfcSpatialStructureElement that is +/// used in the ContainedInStructure inverse attribute or to a +/// referenced spatial structure element at a higher level. +/// If the relative placement is not used, the absolute placement +/// is defined within the world coordinate system. +/// +/// Geometric Representation +/// Currently, the use of 'FootPrint' and 'Surface' representation +/// is supported. +/// FootPrint Representation +/// The 2D geometric representation of IfcVirtualElement is +/// defined using the 'FootPrint' representation. +/// +/// IfcShapeRepresentation.RepresentationIdentifier = +/// 'FootPrint'. +/// IfcShapeRepresentation.RepresentationType = 'Curve2D' +/// or 'GeometricCurveSet' . +/// +/// The following constraints apply to the 2D FootPrint +/// representation: +/// +/// 'Curve2D': IfcPolyline, IfcTrimmedCurve or +/// IfcCompositeCurve +/// 'GeometricCurveSet': a list of 2D curves within the +/// constraints shown above. +/// +/// Surface Representation +/// The 3D geometric representation of IfcVirtualElement is +/// defined using a surface geometry. +/// +/// IfcShapeRepresentation.RepresentationIdentifier = +/// 'Surface'. +/// IfcShapeRepresentation.RepresentationType = +/// 'Surface3D' or 'GeometricSet . +/// +/// The following constraints apply to the 3D surface +/// representation: +/// +/// 'Surface3D': IfcSurfaceOfLinearExtrusion, +/// IfcCurveBoundedPlane, IfcCurveBoundedSurface, +/// IfcRectangularTrimmedSurface +/// in case of an +/// IfcSurfaceOfLinearExtrusion +/// +/// Profile: +/// IfcArbitraryOpenProfileDef +/// Extrusion: The extrusion direction shall be +/// vertically, i.e., along the positive Z Axis of the co-ordinate +/// system of the containing spatial structure element. +/// +/// in case of an +/// IfcCurveBoundedPlane, IfcCurveBoundedSurface, +/// IfcRectangularTrimmedSurface +/// +/// Extrusion: The BasisSurface shall be a +/// surface that is upright, i.e. standing perpendicular to the xy +/// place of the co-ordinate system of the containing spatial +/// structure element. +/// +/// 'GeometricSet': a list of 3D surfaces within the constraints +/// shown above. +class IFC_PARSE_API IfcVirtualElement : public IfcElement { +public: + boost::optional< ::Ifc4x3_add2::IfcVirtualElementTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcVirtualElementTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcVirtualElement (IfcEntityInstanceData* e); + IfcVirtualElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcVirtualElementTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcVirtualElement > list; +}; +/// Definition from IAI: A voiding feature is a modification of an element which reduces its volume. Such a feature may be manufactured in different ways, for example by cutting, drilling, or milling of members made of various materials, or by inlays into the formwork of cast members made of materials such as concrete. +/// +/// The standard use of instances of IfcVoidingFeature is as a part of element type objects (instances of subtypes of IfcElementType). The part–whole relationship is established by an aggregation relationship object, expressing the decomposition of an element type into one or more additive elements (element parts) and zero or more feature elements. +/// +/// HISTORY New type in IFC 2x4. +/// +/// Containment Use Definition: +/// +/// Voiding features shall have no spatial containment relationship to the spatial structure since they are dependent on element types without spatial containment relationships or on an element occurrence with own spatial containment relationship. +/// +/// The SELF\IfcElement.ContainedInStructure relationship shall be NIL. +/// +/// Geometry use definition: +/// +/// The geometric representation of IfcVoidingFeatureElement is given by the IfcProductDefinitionShape, allowing multiple geometric representation. +/// +/// Local Placement +/// +/// The local placement for IfcVoidingFeatureElement is defined in its supertype IfcProduct. It is defined by the IfcLocalPlacement, which defines the local coordinate system that is referenced by all geometric representations. +/// +/// In case of features which are part of an element type, absolute placement into the type object's implied coordinate system shall be used. +/// In case of features which are voiding an element occurrence, the PlacementRelTo relationship of IfcLocalPlacement shall point to the local placement of the respective element. +/// +/// Shape representation +/// +/// Different shape representations may be used, depending on the nature of the feature and information requirements: +/// +/// Symbolic representations, such as an axis representation, may be used for simple shapes such as holes or edge features. +/// Volumetric representations by means of subtypes of IfcSweptSurface or of IfcCsgPrimitive3D may be used to semi-parametrically model the actual volume of the void created by the feature. The objects within the shape model of the feature's shape representation can be included into a CSG model within a representation map of the parent element type. +/// Surface representations of cutting planes by means of IfcShellBasedSurfaceModel. The faces within the surface model may be included into a B-Rep model within a representation map of the parent element type. +/// +/// Higher-level parameters (geometric and non-geometric) may be provided by property sets based on local agreements. +class IFC_PARSE_API IfcVoidingFeature : public IfcFeatureElementSubtraction { +public: + /// Qualifies the feature regarding its shape and configuration relative to the voided element. + boost::optional< ::Ifc4x3_add2::IfcVoidingFeatureTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcVoidingFeatureTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcVoidingFeature (IfcEntityInstanceData* e); + IfcVoidingFeature (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcVoidingFeatureTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcVoidingFeature > list; +}; +/// Definition from IAI: The element type +/// IfcWallType defines commonly shared information for +/// occurrences of walls. The set of shared information may +/// include: +/// +/// common properties within shared property sets +/// common material information +/// common material layer definitions +/// common shape representations +/// +/// NOTE It is illegal to share shape +/// representations as representation maps for occurrences of +/// IfcWallStandardcase. +/// +/// It is used to define a wall specification (i.e. the specific +/// product information, that is common to all occurrences of that +/// product type). Wall types may be exchanged without being already +/// assigned to occurrences. +/// +/// NOTE: The product representations are defined +/// as representation maps (at the level of the supertype +/// IfcTypeProduct, which gets assigned by an element +/// occurrence instance through the +/// IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// +/// Occurrences of the IfcWallType within building models +/// are represented by instances of IfcWallStandardCase if the +/// IfcBeamType has a single associated +/// IfcMaterialLayerSet; otherwise they are represented by +/// instances of IfcWall, or IfcWallElementedCase. +/// Occurrences of the IfcWallType within structural analysis +/// models are represented by instances of +/// IfcStructuralSurfaceMember, or its applicable +/// subtypes. +/// HISTORY: New entity in +/// Release IFC2x Editon 2. +/// Informal proposition: +/// +/// The material assignment, if provided using the +/// IfcRelAssociatesMaterial relationship, shall not reference +/// the IfcMaterialLayerSetUsage. +/// +/// Material Use Definition +/// The material of the IfcWallType is defined by the +/// IfcMaterialLayerSet or as fall back by IfcMaterial +/// and attached by the +/// IfcRelAssociatesMaterial.RelatingMaterial. It is +/// accessible by the inverse HasAssociations +/// relationship. +/// Note: It is illegal to assign an +/// IfcMaterial to an IfcWallType, if there is at least +/// one occurrences. of IfcWallStandardCase for this +/// type. +/// Layer Set Use Definition: +/// The shared material layer set definition is defined by +/// assigning an IfcMaterialLayerSet (see material use +/// definition above). The IfcMaterialLayer refers to one or +/// several of IfcMaterialLayer that is the common for all +/// wall occurrence, if used. It is only applicable if the +/// IfcWallType has only occurrences of type +/// IfcWallStandardCase (see definition of +/// IfcWallStandardCase for further information). +/// NOTE Since each individual instance of +/// IfcWallStandardCase defines its own +/// IfcMaterialLayerSetUsage including the offset from the +/// wall axis, the same IfcWallType can be used independently +/// of the axis alignment of its occurrences. +/// Property Set Use Definition: +/// The shared property sets relating to the IfcWallType +/// are defined by the IfcPropertySet and are attached by the +/// HasPropertySets attribute. The following property set +/// definitions specific to the IfcWallType are part of this +/// IFC release: +/// NOTE There is no differentiation between +/// properties within the property set that are only assignable to +/// IfcWallType and those that are only assignable to +/// IfcWall. If the same property is assigned to the +/// IfcWallType and the IfcWall being an occurrence of +/// the IfcWallType, then the occurrence property overrides +/// the type property. +/// +/// Pset_WallCommon: common property set for all +/// wall types. +class IFC_PARSE_API IfcWallType : public IfcBuiltElementType { +public: + /// Identifies the predefined types of a wall element from which the type required may be set. + ::Ifc4x3_add2::IfcWallTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcWallTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcWallType (IfcEntityInstanceData* e); + IfcWallType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcWallTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcWallType > list; +}; +/// The flow terminal type IfcWasteTerminalType defines commonly shared information for occurrences of waste terminals. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a waste terminal specification (i.e. the specific product information, that is common to all occurrences of that product type). Waste Terminal types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcWasteTerminalType are represented by instances of IfcWasteTerminal. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowTerminalType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_WasteTerminalTypeCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_WasteTerminalTypeFloorTrap (FLOORTRAP) +/// Pset_WasteTerminalTypeFloorWaste (FLOORWASTE) +/// Pset_WasteTerminalTypeGullySump (GULLYSUMP) +/// Pset_WasteTerminalTypeGullyTrap (GULLYTRAP) +/// Pset_WasteTerminalTypeRoofDrain (ROOFDRAIN) +/// Pset_WasteTerminalTypeWasteDisposalUnit (WASTEDISPOSALUNIT) +/// Pset_WasteTerminalTypeWasteTrap (WASTETRAP) +/// +/// Material Use Definition +/// The material of the IfcWasteTerminalType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Body': The primary material from which the object is constructed. +/// 'Cover': Material from which the cover or grating is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcWasteTerminalType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcWasteTerminal for standard port definitions. +class IFC_PARSE_API IfcWasteTerminalType : public IfcFlowTerminalType { +public: + /// Identifies the predefined types of waste terminal from which the type required may be set. + ::Ifc4x3_add2::IfcWasteTerminalTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcWasteTerminalTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcWasteTerminalType (IfcEntityInstanceData* e); + IfcWasteTerminalType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcWasteTerminalTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcWasteTerminalType > list; +}; +/// Definition from IAI: The element type +/// IfcWindowType defines commonly shared information for +/// occurrences of windows. The set of shared information may +/// include: +/// +/// common properties within shared property sets +/// common material information +/// common partitioning of panels +/// common operation types of panels +/// common shape representations +/// +/// A window type defines the particular parameter of the lining +/// and one (or several) panels through the +/// IfcWindowLiningProperties and the +/// IfcWindowPanelProperties as predefined property sets +/// applicable to windows only. +/// It is used to define a window specification, or window style +/// (i.e. the specific product information that is common to all +/// occurrences of that window type). Window types may be exchanged +/// without being already assigned to occurrences. +/// Occurrences of the IfcWindowType within building models +/// are represented by instances of IfcWindow or +/// IfcWindowStandardCase. +/// HISTORY New entity in +/// IFC2x4 . +/// NOTE The entity IfcWindowType +/// replaces the previous definition IfcWindowStyle (which is +/// deprecated in IFC2x4). +/// Partitioning type use definition +/// The IfcWindowTypePartitioningEnum defines the general +/// layout of the window type and its symbolic presentation. +/// Depending on the enumerator, the appropriate instances of +/// IfcWindowLiningProperties and +/// IfcWindowPanelProperties are attached in the list of +/// HasPropertySets. The IfcWindowTypePartitioningEnum +/// mainly determines the way of partitioning the window into +/// individual window panels and thereby number and position of +/// window panels. +/// See geometry use definitions at +/// IfcWindowTypePartitioningEnum for the correct usage of +/// panel partitioning and IfcWindowPanelProperties for the +/// opening symbols for different panel operation types. +/// Material Use Definition +/// The material of the IfcWindowType is defined by the +/// IfcMaterialConstituentSet or as fall back by +/// IfcMaterial and attached by the +/// IfcRelAssociatesMaterial.RelatingMaterial. It is +/// accessible by the inverse HasAssociations +/// relationship. +/// The following keywords for +/// IfcMaterialConstituentSet.MaterialConstituents[n].Name +/// shall be used: +/// +/// 'Lining' - to indicate that the material constituent applies +/// to to the window lining +/// 'Framing' - to indicate that the material constituent applies +/// to to the window panels, if not provided, the 'Lining' material +/// information applied to panels as well +/// 'Glazing' - to indicate that the material constituent applies +/// to to the glazing part +/// +/// If the fall back single IfcMaterial is referenced, it +/// applies to the lining and framing of the window. +/// Property Set Use Definition: +/// The shared property sets relating to the IfcWindowType +/// are defined by the IfcPropertySet and are attached by the +/// HasPropertySets attribute. The following property set +/// definitions specific to the IfcWindowType are part of this +/// IFC release: +/// NOTE There is no differentiation between +/// properties within the property set that are only assignable to +/// IfcWindowType and those that are only assignable to +/// IfcWindow. If the same property is assigned to the +/// IfcWindowType and the IfcWindow being an occurrence +/// of the IfcWindowType, then the occurrence property +/// overrides the type property. +/// +/// Pset_WindowCommon: common property set for all +/// window types. +/// Pset_DoorWindowGlazingType: specific property +/// set for the glazing properties of the door type glazing +/// Pset_DoorWindowShadingType: specific property +/// set for the shading properties of the door type shading +/// +/// Two subtypes of IfcPreDefinedPropertySet are applicable +/// to IfcWindowType: +/// +/// IfcWindowLiningProperties - a single instance to +/// define the shape parameters of the window lining +/// IfcWindowPanelProperties - one or several instances to +/// define the shape parameters of the window panel(s) +/// +/// Geometry Use Definitions: +/// The IfcWindowType may define the common shape of window +/// occurrences. The common shape can be defined by +/// +/// applying shape parameters defined within the associated +/// IfcWindowLiningProperties and +/// IfcWindowPanelProperties applied to the 'Profile' +/// geometric representation. It is only applicable if the +/// IfcWindowType has only occurrences of type +/// IfcWindowStandardCase (See geometric use definition of +/// IfcWindowStandardCase for further information). +/// applying the RepresentationMaps attribute to refer to +/// a list of IfcRepresentationMap's, that allow for multiple +/// geometric representations (e.g. with +/// IfcShapeRepresentation's having an +/// RepresentationIdentifier 'Box', 'Profile', 'FootPrint', or +/// 'Body') +/// NOTE The product shape representations are +/// defined as RepresentationMaps (attribute of the supertype +/// IfcTypeProduct), which get assigned by an element +/// occurrence instance through the +/// IfcShapeRepresentation.Item[n] being an +/// IfcMappedItem. See IfcTypeProduct for further +/// information. +/// NOTE The values of attributes +/// RepresentationIdentifier and RepresentationType of +/// IfcShapeRepresentation are restricted in the same way as +/// those for IfcWindow and +/// IfcWindowStandardCase +class IFC_PARSE_API IfcWindowType : public IfcBuiltElementType { +public: + /// Identifies the predefined types of a window element from which the type required may be set. + ::Ifc4x3_add2::IfcWindowTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcWindowTypeEnum::Value v); + /// Type defining the general layout of the window type in terms of the partitioning of panels. + ::Ifc4x3_add2::IfcWindowTypePartitioningEnum::Value PartitioningType() const; + void setPartitioningType(::Ifc4x3_add2::IfcWindowTypePartitioningEnum::Value v); + boost::optional< bool > ParameterTakesPrecedence() const; + void setParameterTakesPrecedence(boost::optional< bool > v); + boost::optional< std::string > UserDefinedPartitioningType() const; + void setUserDefinedPartitioningType(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcWindowType (IfcEntityInstanceData* e); + IfcWindowType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcWindowTypeEnum::Value v10_PredefinedType, ::Ifc4x3_add2::IfcWindowTypePartitioningEnum::Value v11_PartitioningType, boost::optional< bool > v12_ParameterTakesPrecedence, boost::optional< std::string > v13_UserDefinedPartitioningType); + typedef aggregate_of< IfcWindowType > list; +}; +/// An IfcWorkCalendar defines working and non-working time periods for tasks and resources. It enables to define both specific time periods, such as from 7:00 till 12:00 on 25th August 2009, as well as repetitive time periods based on frequently used recurrence patterns, such as each Monday from 7:00 till 12:00 between 1st March 2009 and 31st December 2009. +/// +/// HISTORY  New entity in IFC2x4. +/// +/// A work calendar is a subtype of IfcControl and thus inherits the feature for controlling other objects through IfcRelAssignsToControl, which is used to define a work calendar for tasks (IfcTask) and resources (IfcResource). It also inherits a name and description attribute, whereas a name shall be given and a description may be given as an indication of its content and usage. +/// +/// The definition of time periods can be derived from a base calendar and/or modified/defined by a set of working times and non-working exception times. All time periods defined by IfcWorkCalendar.ExceptionTimes override the time periods inherited from the base calendar (base calendar is defined as the next applicable calendar for the task or resource). Thus, exception times replace the working times from the base calendar. +/// +/// The base calendar of a work calendar is defined by IfcRelAssignsToControl, where IfcRelAssignsToControl.RelatingControl is linked with the base calendar and IfcRelAssignsToControl.RelatedObjects is linked with work calendars that are derived from the base calendar. Although not restricted by the IfcRelAssignsToControl relationship it is only allowed to have one base calendar. +/// +/// Figure 17 shows the definition of a work calendar, which is defined by a set of work times and exception times. The work times are defined as recurring patterns with optional boundaries (applying from and/or to a specific date). The shown example defines a simple work calendar with working times Monday to Thursday 8:00 to 12:00 and 13:00 to 17:00, Friday 8:00 to 14:00 and as exception every 1st Monday in a month the work starts one hour later - i.e. the working time on every 1st Monday in a month is overriden to be 9:00 to 12:00 and 13:00 to 17:00. Both the working time and the exception time is valid for the period of 01.09.2010 till 30.08.2011. +/// +/// Figure 17 — Work calendar instantiation +class IFC_PARSE_API IfcWorkCalendar : public IfcControl { +public: + /// Set of times periods that are regarded as an initial set-up + /// of working times. Exception times can then further restrict + /// these working times. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcWorkTime >::ptr > WorkingTimes() const; + void setWorkingTimes(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcWorkTime >::ptr > v); + /// Set of times periods that define exceptions (non-working + /// times) for the given working times including the base + /// calendar, if provided. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcWorkTime >::ptr > ExceptionTimes() const; + void setExceptionTimes(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcWorkTime >::ptr > v); + /// Identifies the predefined types of a work calendar from which + /// the type required may be set. + /// + /// Added in IFC 2x4 + boost::optional< ::Ifc4x3_add2::IfcWorkCalendarTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcWorkCalendarTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcWorkCalendar (IfcEntityInstanceData* e); + IfcWorkCalendar (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcWorkTime >::ptr > v7_WorkingTimes, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcWorkTime >::ptr > v8_ExceptionTimes, boost::optional< ::Ifc4x3_add2::IfcWorkCalendarTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcWorkCalendar > list; +}; +/// An IfcWorkControl is an abstract supertype which captures information that is common to both IfcWorkPlan and IfcWorkSchedule. +/// +/// HISTORY  New class in IFC 2x +/// +/// CHANGE IFC2x4  Corrected assignment of resources to work control in documentation. Assignment of tasks to work control updated based on changes of task time definitions and the introduction of a summary task. Identifier has been renamed (now Identification) and promoted to supertype IfcControl +/// +/// A work control may have resources assigned to it, this is +/// handled by the IfcRelAssignsToControl relationship. +/// A work control should also define a context that gives +/// further information about its usage. If no special context +/// information is required then the IfcProject instance +/// as a global context should be used instead. An explicit +/// link between the work control and the IfcProject via +/// IfcRelDeclares should then be provided. +/// +/// From IFC2x4 onwards the assignment of tasks to the work +/// control is handled by the IfcRelAssignsToControl +/// relationship. IfcRelAssignsTasks as used in previous +/// IFC releases has been deleted and can not be used any +/// longer. Another change in IFC2x4 is that it is not +/// necessary to assign each task to a work control as it is +/// regarded to be sufficient if the summary task (root task in +/// the task hierarchy defined through IfcRelNests +/// relationships) is assigned to a work control. +/// +/// The attribute IfcWorkControl.Purpose is used to +/// define the purpose of either a work schedule or a work +/// plan. In the case of IfcWorkPlan, the purpose +/// attribute can be used to determine if the work plan is for +/// cost estimating, task scheduling or some other defined +/// purpose. +/// +/// Property set use definition +/// +/// The property sets relating to the IfcWorkControl are +/// defined by IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is +/// accessible by the inverse IsDefinedBy relationship. +/// The following property set definition specific to the +/// IfcWorkControl and its subtype are part of this IFC +/// release: +/// +/// Pset_WorkControlCommon: common +/// property set for work control +class IFC_PARSE_API IfcWorkControl : public IfcControl { +public: + /// The date that the plan is created. + std::string CreationDate() const; + void setCreationDate(std::string v); + /// The authors of the work plan. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPerson >::ptr > Creators() const; + void setCreators(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPerson >::ptr > v); + /// A description of the purpose of the work schedule. + boost::optional< std::string > Purpose() const; + void setPurpose(boost::optional< std::string > v); + /// The total duration of the entire work schedule. + boost::optional< std::string > Duration() const; + void setDuration(boost::optional< std::string > v); + /// The total time float of the entire work schedule. + boost::optional< std::string > TotalFloat() const; + void setTotalFloat(boost::optional< std::string > v); + /// The start time of the schedule. + std::string StartTime() const; + void setStartTime(std::string v); + /// The finish time of the schedule. + boost::optional< std::string > FinishTime() const; + void setFinishTime(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcWorkControl (IfcEntityInstanceData* e); + IfcWorkControl (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, std::string v7_CreationDate, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPerson >::ptr > v8_Creators, boost::optional< std::string > v9_Purpose, boost::optional< std::string > v10_Duration, boost::optional< std::string > v11_TotalFloat, std::string v12_StartTime, boost::optional< std::string > v13_FinishTime); + typedef aggregate_of< IfcWorkControl > list; +}; +/// An IfcWorkPlan represents work plans in a construction or a facilities management project. +/// +/// HISTORY: New Entity in IFC 2.0 +/// +/// A work plan contains a set of work schedules for different +/// purposes (including construction and facilities +/// management). Contained work schedules are defined through +/// the IfcRelAggregates relationship. Through +/// inheritance from IfcWorkControl it is also possible +/// to define references to activities (for example, IfcTask) +/// and resources used in the work plan. +/// +/// A work plan has information such as start date, finish +/// date, total free float, and so on. IfcWorkPlan can +/// also refer to the construction project represented by the +/// single IfcProject instance (please also check the +/// definition of IfcWorkControl). +/// +/// Figure 18 shows the backbone structure of a work plan that +/// defines (1) contained work schedules through +/// IfcRelAggregates and (2), if not assigned otherwise +/// to contained work schedules, assigned tasks and resources +/// through IfcRelAssignsToControl. +/// +/// Figure 18 — Work plan relationships +class IFC_PARSE_API IfcWorkPlan : public IfcWorkControl { +public: + /// Identifies the predefined types of a work plan from which + /// the type required may be set. + boost::optional< ::Ifc4x3_add2::IfcWorkPlanTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcWorkPlanTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcWorkPlan (IfcEntityInstanceData* e); + IfcWorkPlan (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, std::string v7_CreationDate, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPerson >::ptr > v8_Creators, boost::optional< std::string > v9_Purpose, boost::optional< std::string > v10_Duration, boost::optional< std::string > v11_TotalFloat, std::string v12_StartTime, boost::optional< std::string > v13_FinishTime, boost::optional< ::Ifc4x3_add2::IfcWorkPlanTypeEnum::Value > v14_PredefinedType); + typedef aggregate_of< IfcWorkPlan > list; +}; +/// An IfcWorkSchedule +/// represents a task schedule of a work plan, which in turn +/// can contain a set of schedules for different purposes. +/// +/// HISTORY: New Entity in IFC +/// Release 2.0 +/// +/// Assignment Use Definition +/// +/// An IfcWorkSchedule controls a set of tasks and +/// resources defined through IfcRelAssignsToControl. +/// Additionally, through the IfcWorkControl abstract +/// supertype, the actors creating the schedule can be +/// specified and schedule time information such as start time, +/// finish time, and total float of the schedule can also be +/// specified. +/// +/// Declaration Use Definition +/// +/// IfcWorkSchedule can reference a project (the +/// single IfcProject instance) via +/// IfcRelDeclares. The documents of the +/// IfcWorkSchedule can be referenced by the +/// IfcRelAssociatesDocuments relationship. +/// +/// Composition Use Definition +/// A work schedule can include other work schedules as sub-items +/// through IfcRelNests relationship. If not included in +/// another work schedule it might be a part of a work plan +/// (IfcWorkPlan) defined through +/// IfcRelAggregates relationship. +/// +/// Figure 19 shows the backbone structure of a work schedule +/// that defines (1) a context through IfcRelDeclares +/// (not necessarily the project) and (2) controls tasks +/// (typically the schedule summary task) and resources. Please +/// note that a work calendar shall be assigned to the summary +/// task and not the work schedule. +/// +/// Figure 19 — Work schedule relationships +class IFC_PARSE_API IfcWorkSchedule : public IfcWorkControl { +public: + /// Identifies the predefined types of a work schedule from which + /// the type required may be set. + boost::optional< ::Ifc4x3_add2::IfcWorkScheduleTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcWorkScheduleTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcWorkSchedule (IfcEntityInstanceData* e); + IfcWorkSchedule (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, std::string v7_CreationDate, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPerson >::ptr > v8_Creators, boost::optional< std::string > v9_Purpose, boost::optional< std::string > v10_Duration, boost::optional< std::string > v11_TotalFloat, std::string v12_StartTime, boost::optional< std::string > v13_FinishTime, boost::optional< ::Ifc4x3_add2::IfcWorkScheduleTypeEnum::Value > v14_PredefinedType); + typedef aggregate_of< IfcWorkSchedule > list; +}; +/// Definition from IAI: A zone isa group of spaces, +/// partial spaces or other zones. Zone structures may not be +/// hierarchical (in contrary to the spatial structure of a project - +/// see IfcSpatialStructureElement), i.e. one individual +/// IfcSpace may be associated with zero, one, or several +/// IfcZone's. IfcSpace's are grouped into an +/// IfcZone by using the objectified relationship +/// IfcRelAssignsToGroup as specified at the supertype +/// IfcGroup. +/// NOTE Certain use cases may restrict the +/// freedom of non hierarchical relationships. In some building +/// service use cases the zone denotes aview based delimited volume +/// for the purpose of analysis and calculation. This type of zone +/// cannot overlap with respect to that analysis, but may overlap +/// otherwise. +/// An IfcZone is a spatial system under which individual +/// IfcSpace's (and other IfcZone's) are grouped. In +/// contrary to the IfcSpatialZone entity, IfcZone is a +/// mere grouping, it can not define an own geometric representation +/// and placement. Therefore it cannot be used for spatial zones +/// having a different shape and size compared to the shape and size +/// of aggregated spaces. +/// NOTE The IfcZone is regarded as the +/// spatial system (as compared to the building service, electrical, +/// or analytical system), the name remains IfcZone for +/// compatibility reasons, instead of using a proper naming +/// convention, like IfcSpatialSystem. +/// NOTE One of the purposes of a zone is to +/// define a fire compartmentation. In this case it defines the +/// geometric information about the fire compartment (through the +/// contained spaces) and information, whether this compartment is +/// ventilated or sprinkler protected. In addition the fire risk code +/// and the hazard type can be added, the coding is normally defined +/// within a national fire regulation. All that information is +/// available within the relevant property sets. Again, if an +/// independent shape has to be provided to the fire compartment, +/// then the entity IfcSpatialZone shall be +/// used. +/// RECOMMENDATION In case of a zone denoting a +/// (fire) compartment, the following types should be used, if +/// applicable, as values of the ObjectType attribute: +/// +/// FireCompartment - a zone of spaces, collected to +/// represent a single fire compartment. +/// ElevatorShaft - a collection of spaces within an +/// elevator, potentially going through many storeys. +/// RisingDuct +/// RunningDuct +/// +/// Additional classifications of the IfcZone, as provided +/// by a national classification system, can be assigned by using the +/// IfcRelAssociatesClassification relationship, accessible +/// via the inverse attribute HasAssociations. The +/// IfcZone can be assigned to a spatial structure element, it +/// refers to, e.g. to a particular IfcBuildingStorey by using +/// the IfcRelServicesBuildings relationship, accessible via +/// the inverse attribute ServicesBuilding. +/// HISTORY New entity in +/// IFC Release 1.0 +/// IFC2x4 CHANGE The entity is now +/// subtyped from IfcSystem (not its supertype +/// IfcGroup) with upward compatibility for file based +/// exchange. +/// Property Set Use Definition: +/// The property sets relating to the IfcZone are defined +/// by the IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// property set definitions specific to the IfcZone are part +/// of this IFC release: +/// +/// Pset_ZoneCommon: common property set for all +/// types of zone +/// Pset_SpaceFireSafetyRequirements: common +/// property set for all types of zones to capture the fire safety +/// requirements +/// Pset_SpaceLightingRequirements: common +/// property set for all types of zones to capture the lighting +/// requirements +/// Pset_SpaceOccupancyRequirements: common +/// property set for all types of zones to capture the occupancy +/// requirements +/// Pset_SpaceThermalRequirements: common +/// property set for all types of zones to capture the thermal +/// requirements +class IFC_PARSE_API IfcZone : public IfcSystem { +public: + /// Long name for a zone, used for informal purposes. It should be used, if available, in conjunction with the inherited Name attribute. + /// + /// NOTE In many scenarios the Name attribute refers to the short name or number of a zone, and the LongName refers to the full name. + /// + /// IFC2x4 CHANGE The attribute has been added at the end of the entity definition. + boost::optional< std::string > LongName() const; + void setLongName(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcZone (IfcEntityInstanceData* e); + IfcZone (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_LongName); + typedef aggregate_of< IfcZone > list; +}; +/// A request is the act or instance of asking for something, such as a request for information, bid submission, or performance of work. +/// +/// Requests may take many forms depending on the need including fault reports for maintenance, requests for small works, and purchase requests (where these are to be made through a help desk or buying function). +/// +/// HISTORY: New entity in IFC2x2 +/// IFC2x4 CHANGE RequestID renamed to Identification and promoted to supertype IfcControl, attributes PredefinedType, Status, and LongDescription added. +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. They are accessible by the IsDefinedBy inverse attribute. Refer to the documentation at the supertype IfcControl and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_ActionRequest +/// +/// Declaration Use Definition +/// The IfcActionRequest may be declared within the project using the IfcRelDeclares relationship where RelatingContext refers to the single IfcProject and RelatedDefinitions contains the IfcActionRequest. Alternatively, if the IfcActionRequest is aggregated within an IfcWorkPlan, then it shall not have a direct declaration relationship (whereas the containing work plan may have a declaration relationship). +/// +/// Composition Use Definition +/// As shown in Figure 155, an IfcActionRequest may be aggregated into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcActionRequest and RelatedObjects contains one or more components. Aggregation use is defined for the following predefined types: +/// +/// (All Types): May contain IfcCostSchedule components. A cost schedule may indicate costs and quantities where the cost schedule type may designate whether rates and/or quantities are estimated or final. Such cost schedule may have assigned cost items indicating detail, where each cost item may have assigned products, processes, or resources. +/// +/// The IfcActionRequest may be nested into sub-items using IfcRelNests where RelatingObject refers to the enclosing IfcActionRequest and RelatedObjects contains one or more sub-items. Nesting use is defined for the following predefined types: +/// +/// (All Types): May contain IfcActionRequest sub-items. A request may be nested into follow-up requests, in order of issue. +/// +/// Figure 155 — Action request composition +/// +/// Assignment Use Definition +/// As shown in Figure 156, an IfcActionRequest may be assigned to the following entities using relationships as indicated: +/// +/// IfcActor (IfcRelAssignsToActor): Person or organization issuing the request such as a tenant or owner. +/// +/// The IfcActionRequest may have assignments of its own using the IfcRelAssignsToControl relationship where RelatingControl refers to the IfcActionRequest and RelatedObjects contains one or more objects of the following types: +/// IfcActor: Person or organization(s) fulfilling the request such as a facilities manager or contractor. +/// +/// Figure 156 — Action request assignment +/// +/// Approval Use Definition +/// Approvals may be associated to indicate the status of acceptance or rejection using the IfcRelAssociatesApproval relationship where RelatingApproval refers to an IfcApproval and RelatedObjects contains the IfcActionRequest. Approvals may be split into sub-approvals using IfcApprovalRelationship to track approval status separately for each party where RelatingApproval refers to the higher-level approval and RelatedApprovals contains one or more lower-level approvals. The hierarchy of approvals implies sequencing such that a higher-level approval is not executed until all of its lower-level approvals have been accepted. +class IFC_PARSE_API IfcActionRequest : public IfcControl { +public: + /// Identifies the predefined type of sources through which a request can be made. + /// + /// IFC2x4 CHANGE The attribute has been added. + boost::optional< ::Ifc4x3_add2::IfcActionRequestTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcActionRequestTypeEnum::Value > v); + /// The status currently assigned to the request. Possible values include: + /// Hold: wait to see if further requests are received before deciding on action + /// NoAction: no action is required on this request + /// Schedule: plan action to take place as part of maintenance or other task planning/scheduling + /// Urgent: take action immediately + /// + /// IFC2x4 CHANGE The attribute has been added. + boost::optional< std::string > Status() const; + void setStatus(boost::optional< std::string > v); + /// Detailed description of the permit. + /// + /// IFC2x4 CHANGE The attribute has been added. + boost::optional< std::string > LongDescription() const; + void setLongDescription(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcActionRequest (IfcEntityInstanceData* e); + IfcActionRequest (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< ::Ifc4x3_add2::IfcActionRequestTypeEnum::Value > v7_PredefinedType, boost::optional< std::string > v8_Status, boost::optional< std::string > v9_LongDescription); + typedef aggregate_of< IfcActionRequest > list; +}; +/// The flow controller type IfcAirTerminalBoxType defines commonly shared information for occurrences of air boxes. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a air box specification (i.e. the specific product information, that is common to all occurrences of that product type). Air Box types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcAirTerminalBoxType are represented by instances of IfcAirTerminalBox. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowControllerType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_AirTerminalBoxTypeCommon +/// +/// Material Use Definition +/// The material of the IfcAirTerminalBoxType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Body': The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcAirTerminalBoxType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcAirTerminalBox for standard port definitions. +class IFC_PARSE_API IfcAirTerminalBoxType : public IfcFlowControllerType { +public: + /// The air terminal box type. + ::Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAirTerminalBoxType (IfcEntityInstanceData* e); + IfcAirTerminalBoxType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcAirTerminalBoxType > list; +}; +/// The flow terminal type IfcAirTerminalType defines commonly shared information for occurrences of air terminals. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a air terminal specification (i.e. the specific product information, that is common to all occurrences of that product type). Air Terminal types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcAirTerminalType are represented by instances of IfcAirTerminal. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowTerminalType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_AirTerminalTypeCommon +/// +/// Material Use Definition +/// The material of the IfcAirTerminalType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Body': The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcAirTerminalType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcAirTerminal for standard port definitions. +class IFC_PARSE_API IfcAirTerminalType : public IfcFlowTerminalType { +public: + ::Ifc4x3_add2::IfcAirTerminalTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcAirTerminalTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAirTerminalType (IfcEntityInstanceData* e); + IfcAirTerminalType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcAirTerminalTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcAirTerminalType > list; +}; +/// The energy conversion device type IfcAirToAirHeatRecoveryType defines commonly shared information for occurrences of air-to-air heat recovery devices. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a air-to-air heat recovery device specification (i.e. the specific product information, that is common to all occurrences of that product type). Air-To-Air Heat Recovery Device types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcAirToAirHeatRecoveryType are represented by instances of IfcAirToAirHeatRecovery. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcEnergyConversionDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_AirToAirHeatRecoveryTypeCommon +/// +/// Material Use Definition +/// The material of the IfcAirToAirHeatRecoveryType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Media': The primary media material used for heat transfer. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcAirToAirHeatRecoveryType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcAirToAirHeatRecovery for standard port definitions. +class IFC_PARSE_API IfcAirToAirHeatRecoveryType : public IfcEnergyConversionDeviceType { +public: + /// Defines the type of air to air heat recovery device. + ::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAirToAirHeatRecoveryType (IfcEntityInstanceData* e); + IfcAirToAirHeatRecoveryType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcAirToAirHeatRecoveryType > list; +}; + +class IFC_PARSE_API IfcAlignmentCant : public IfcLinearElement { +public: + double RailHeadDistance() const; + void setRailHeadDistance(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAlignmentCant (IfcEntityInstanceData* e); + IfcAlignmentCant (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, double v8_RailHeadDistance); + typedef aggregate_of< IfcAlignmentCant > list; +}; + +class IFC_PARSE_API IfcAlignmentHorizontal : public IfcLinearElement { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAlignmentHorizontal (IfcEntityInstanceData* e); + IfcAlignmentHorizontal (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation); + typedef aggregate_of< IfcAlignmentHorizontal > list; +}; + +class IFC_PARSE_API IfcAlignmentSegment : public IfcLinearElement { +public: + ::Ifc4x3_add2::IfcAlignmentParameterSegment* DesignParameters() const; + void setDesignParameters(::Ifc4x3_add2::IfcAlignmentParameterSegment* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAlignmentSegment (IfcEntityInstanceData* e); + IfcAlignmentSegment (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcAlignmentParameterSegment* v8_DesignParameters); + typedef aggregate_of< IfcAlignmentSegment > list; +}; + +class IFC_PARSE_API IfcAlignmentVertical : public IfcLinearElement { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAlignmentVertical (IfcEntityInstanceData* e); + IfcAlignmentVertical (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation); + typedef aggregate_of< IfcAlignmentVertical > list; +}; +/// An asset is a uniquely identifiable grouping of elements acting as a single entity that has a financial value or that can be operated on as a single unit. +/// +/// An asset is generally the level of granularity at which maintenance operations are undertaken. An asset is a group that can contain one or more elements. Whilst the financial value of a component or element can be defined, financial value is also defined for accounting purposes at the level of the asset. There are a number of actors that can be associated with an asset, each actor having a role. Actors within the scope of the project are indicated using the IfcRelAssignsToActor relationship in which case roles should be defined through the IfcActorRole class; otherwise principal actors are identified as attributes of the class. In the existence of both, direct attributes take precedence. There are a number of costs that can be associated with an asset, each cost having a role. These are specified through the OriginalValue, CurrentValue, TotalReplacementCost and DepreciatedValue attributes. +/// +/// HISTORY: New entity in IFC2x. In IFC2x4, all attributes made optional and date values changed to use IfcDate. +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. They are accessible by the IsDefinedBy inverse attribute. Refer to the documentation at the supertype IfcGroup and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_Asset +/// +/// Classification Use Definition +/// Classifications may be applied using IfcRelAssociatesClassification where RelatedObjects contains the IfcAsset and RelatingClassification refers to an IfcClassification or IfcClassificationReference. +/// +/// IfcClassificationReference: The operating function of an asset within an organization may be particularly valuable in situations where one organization provides and maintains core services and another organization adds and maintains terminal services. It can classify who owns and is responsible for the asset. Operating function can be designated through the use of one or more classification references. +/// +/// Assignment Use Definition +/// The IfcAsset may be assigned to the following entities using relationships as indicated: +/// +/// IfcActor (IfcRelAssignsToActor): Indicates the actor who owns, uses, or is responsible for the asset (as indicated by role in relationship), if such actor is within the scope of the project. +/// IfcCostItem (IfcRelAssignsToControl): Indicates a cost item encompassing the asset. +/// +/// The IfcAsset may have assignments of its own using the IfcRelAssignsToGroup relationship where RelatingGroup refers to the IfcAsset and RelatedObjects contains one or more objects of the following types: +/// IfcElement: Physical elements that comprise the asset. +class IFC_PARSE_API IfcAsset : public IfcGroup { +public: + /// A unique identification assigned to an asset that enables its differentiation from other assets. + /// NOTE: The asset identifier is unique within the asset register. It differs from the globally unique id assigned to the instance of an entity populating a database. + boost::optional< std::string > Identification() const; + void setIdentification(boost::optional< std::string > v); + /// The cost value of the asset at the time of purchase. + ::Ifc4x3_add2::IfcCostValue* OriginalValue() const; + void setOriginalValue(::Ifc4x3_add2::IfcCostValue* v); + /// The current cost value of the asset. + ::Ifc4x3_add2::IfcCostValue* CurrentValue() const; + void setCurrentValue(::Ifc4x3_add2::IfcCostValue* v); + /// The total cost of replacement of the asset. + ::Ifc4x3_add2::IfcCostValue* TotalReplacementCost() const; + void setTotalReplacementCost(::Ifc4x3_add2::IfcCostValue* v); + /// The name of the person or organization that 'owns' the asset. + ::Ifc4x3_add2::IfcActorSelect* Owner() const; + void setOwner(::Ifc4x3_add2::IfcActorSelect* v); + /// The name of the person or organization that 'uses' the asset. + ::Ifc4x3_add2::IfcActorSelect* User() const; + void setUser(::Ifc4x3_add2::IfcActorSelect* v); + /// The person designated to be responsible for the asset. + /// NOTE: In some regulations (for example, UK Health and Safety at Work Act, Electricity at Work Regulations), management of assets must have a person identified as being responsible and to whom regulatory, insurance and other organizations communicate. In places where there is not a legal requirement, the responsible person would be the asset manager but would not have a legal status. + ::Ifc4x3_add2::IfcPerson* ResponsiblePerson() const; + void setResponsiblePerson(::Ifc4x3_add2::IfcPerson* v); + /// The date on which an asset was incorporated into the works, installed, constructed, erected or completed. + /// NOTE: This is the date on which an asset is considered to start depreciating. + /// + /// IFC2x4 CHANGE Type changed from IfcDateTimeSelect. + boost::optional< std::string > IncorporationDate() const; + void setIncorporationDate(boost::optional< std::string > v); + /// The current value of an asset within the accounting rules and procedures of an organization. + ::Ifc4x3_add2::IfcCostValue* DepreciatedValue() const; + void setDepreciatedValue(::Ifc4x3_add2::IfcCostValue* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAsset (IfcEntityInstanceData* e); + IfcAsset (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, ::Ifc4x3_add2::IfcCostValue* v7_OriginalValue, ::Ifc4x3_add2::IfcCostValue* v8_CurrentValue, ::Ifc4x3_add2::IfcCostValue* v9_TotalReplacementCost, ::Ifc4x3_add2::IfcActorSelect* v10_Owner, ::Ifc4x3_add2::IfcActorSelect* v11_User, ::Ifc4x3_add2::IfcPerson* v12_ResponsiblePerson, boost::optional< std::string > v13_IncorporationDate, ::Ifc4x3_add2::IfcCostValue* v14_DepreciatedValue); + typedef aggregate_of< IfcAsset > list; +}; +/// The flow terminal type IfcAudioVisualApplianceType defines commonly shared information for occurrences of audio-visual appliances. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a audio-visual appliance specification (i.e. the specific product information, that is common to all occurrences of that product type). Audio-Visual Appliance types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcAudioVisualApplianceType are represented by instances of IfcAudioVisualAppliance. +/// +/// HISTORY: New entity in IFC2x4 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowTerminalType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_AudioVisualApplianceTypeCommon +/// Pset_ElectricalDeviceCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_AudioVisualApplianceTypeAmplifier (AMPLIFIER) +/// Pset_AudioVisualApplianceTypeCamera (CAMERA) +/// Pset_AudioVisualApplianceTypeDisplay (DISPLAY) +/// Pset_AudioVisualApplianceTypePlayer (PLAYER) +/// Pset_AudioVisualApplianceTypeProjector (PROJECTOR) +/// Pset_AudioVisualApplianceTypeReceiver (RECEIVER) +/// Pset_AudioVisualApplianceTypeSpeaker (SPEAKER) +/// Pset_AudioVisualApplianceTypeTuner (TUNER) +/// +/// Material Use Definition +/// The material of the IfcAudioVisualApplianceType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// +/// Composition Use Definition +/// The IfcAudioVisualApplianceType may be aggregated into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcAudioVisualApplianceType and RelatedObjects contains one or more components. Components are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Aggregation use is defined for the following predefined types: +/// +/// (All Types): May contain IfcAudioVisualAppliance components. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcAudioVisualApplianceType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcAudioVisualAppliance for standard port definitions. +class IFC_PARSE_API IfcAudioVisualApplianceType : public IfcFlowTerminalType { +public: + /// Identifies the predefined types of audio-visual appliance from which the type required may be set. + ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAudioVisualApplianceType (IfcEntityInstanceData* e); + IfcAudioVisualApplianceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcAudioVisualApplianceType > list; +}; +/// Definition from ISO/CD 10303-42:1992: A B-spline curve is a piecewise parametric polynomial or rational curve described in terms of control points and basis functions. The B-spline curve has been selected as the most stable format to represent all types of polynomial or rational parametric curves. With appropriate attribute values it is capable of representing single span or spline curves of explicit polynomial, rational, Bezier or B-spline type. +/// +/// Interpretation of the data is as follows: +/// +/// All weights shall be positive and the curve is given by +/// +/// k+1 +/// = number of control points +/// +/// Pi +/// = control points +/// +/// wi +/// = weights +/// +/// d +/// = degree +/// +/// The knot array is an array of (k+d+2) real numbers +/// [u-d ... uk+1], such that for +/// all indices j in [-d,k], uj <= +/// uj+1. This array is obtained from the knot data list by +/// repeating each multiple knot according to the multiplicity. N +/// di, the ith normalized B-spline basis function +/// of degree d, is defined on the subset [ui-d, ... , +/// ui+1] of this array. +/// +/// Let L denote the number of distinct values among the +/// d+k+2 knots in the knot array; L will be referred to as +/// the 'upper index on knots'. Let mj denote the multiplicity +/// (number of repetitions) of the jth distinct knot. Then +/// +/// All knot multiplicities except the first and the last shall be in +/// the range 1 ... degree; the first and last may have a maximum value of degree + +/// 1. In evaluating the basis functions, a knot u of e.g. multiplicity 3 is +/// interpreted as a string u, u, u, in the knot array. The B-spline curve +/// has 3 special subtypes (Note: only 1, Bezier curve, included in this IFC +/// release) where the knots and knot multiplicities are derived to provide +/// simple default capabilities. +/// Logical flag is provided to indicate whether the curve self +/// intersects or not. +/// +/// Figure 277 (from ISO 10303-42) illustrates a B-spline curve. +/// +/// Figure 277 — B-spline curve +/// +/// NOTE  Corresponding ISO 10303 entity: b_spline_curve. Please refer to ISO/IS 10303-42:1994, p. 45 for the final definition of the formal standard. +/// +/// HISTORY  New entity in Release IFC2x2. +class IFC_PARSE_API IfcBSplineCurve : public IfcBoundedCurve { +public: + /// The algebraic degree of the basis functions. + int Degree() const; + void setDegree(int v); + /// The list of control points for the curve. + aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr ControlPointsList() const; + void setControlPointsList(aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr v); + /// Used to identify particular types of curve; it is for information only. + ::Ifc4x3_add2::IfcBSplineCurveForm::Value CurveForm() const; + void setCurveForm(::Ifc4x3_add2::IfcBSplineCurveForm::Value v); + /// Indication of whether the curve is closed; it is for information only. + boost::logic::tribool ClosedCurve() const; + void setClosedCurve(boost::logic::tribool v); + /// Indication whether the curve self-intersects or not; it is for information only. + boost::logic::tribool SelfIntersect() const; + void setSelfIntersect(boost::logic::tribool v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBSplineCurve (IfcEntityInstanceData* e); + IfcBSplineCurve (int v1_Degree, aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr v2_ControlPointsList, ::Ifc4x3_add2::IfcBSplineCurveForm::Value v3_CurveForm, boost::logic::tribool v4_ClosedCurve, boost::logic::tribool v5_SelfIntersect); + typedef aggregate_of< IfcBSplineCurve > list; +}; +/// Definition from ISO 10303:42:1994: This is the type of b-spline curve for which the knot values are explicitly given. This subtype shall be used to represent non-uniform B-spline curves and may be used for other knot types. +/// +/// Let L denote the number of distinct values amongst the +/// d+k+2 knots in the knot list; L will be +/// referred to as the ‘upper index on knots’. Let +/// mj denote the multiplicity (i.e., number of +/// repetitions) of the jth distinct knot. Then: +/// +/// All knot multiplicities except the first and the last shall be +/// in the range 1,...,d; the first and last may have a +/// maximum value of d + 1. In evaluating the basis functions, +/// a knot u of, e.g., multiplicity 3 is interpreted as a +/// sequence u, u, u,; in the knot array. +/// +/// NOTE Corresponding ISO 10303 entity: b_spline_curve_with_knots. Please refer to ISO/IS 10303-42:1994, p. 46 for the final definition of the formal standard. +/// +/// HISTORY New entity in IFC2x4. +class IFC_PARSE_API IfcBSplineCurveWithKnots : public IfcBSplineCurve { +public: + /// The multiplicities of the knots. This list defines the number of times each knot in the knots list is to be repeated in constructing the knot array. + std::vector< int > /*[2:?]*/ KnotMultiplicities() const; + void setKnotMultiplicities(std::vector< int > /*[2:?]*/ v); + /// The list of distinct knots used to define the B-spline basis functions. + std::vector< double > /*[2:?]*/ Knots() const; + void setKnots(std::vector< double > /*[2:?]*/ v); + /// The description of the knot type. This is for information only. + ::Ifc4x3_add2::IfcKnotType::Value KnotSpec() const; + void setKnotSpec(::Ifc4x3_add2::IfcKnotType::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBSplineCurveWithKnots (IfcEntityInstanceData* e); + IfcBSplineCurveWithKnots (int v1_Degree, aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr v2_ControlPointsList, ::Ifc4x3_add2::IfcBSplineCurveForm::Value v3_CurveForm, boost::logic::tribool v4_ClosedCurve, boost::logic::tribool v5_SelfIntersect, std::vector< int > /*[2:?]*/ v6_KnotMultiplicities, std::vector< double > /*[2:?]*/ v7_Knots, ::Ifc4x3_add2::IfcKnotType::Value v8_KnotSpec); + typedef aggregate_of< IfcBSplineCurveWithKnots > list; +}; +/// Definition from IAI: The element type +/// IfcBeamType defines commonly shared information for +/// occurrences of beams. The set of shared information may +/// include: +/// +/// common properties within shared property sets +/// common material information +/// common profile definitions +/// common shape representations +/// +/// It is used to define a beam specification, or beam style (i.e. +/// the specific product information that is common to all +/// occurrences of that beam type). Beam types may be exchanged +/// without being already assigned to occurrences. +/// Occurrences of the IfcBeamType within building models +/// are represented by instances of IfcBeamStandardCase if the +/// IfcBeamType has a single associated +/// IfcMaterialProfileSet; otherwise they are represented by +/// instances of IfcBeam. Occurrences of the +/// IfcBeamType within structural analysis models are +/// represented by instances of IfcStructuralCurveMember, or +/// its applicable subtypes. +/// HISTORY New entity in +/// Release IFC2x Edition 2. +/// Material Use Definition +/// The material of the IfcBeamType is defined by the +/// IfcMaterialProfileSet or as fall back by +/// IfcMaterial and attached by the +/// IfcRelAssociatesMaterial.RelatingMaterial. It is +/// accessible by the inverse HasAssociations +/// relationship. +/// Note: It is illegal to assign an +/// IfcMaterial to an IfcBeamType, if there is at least +/// one occurrences. of IfcBeamStandardCase for this +/// type. +/// Property Set Use Definition: +/// The shared property sets relating to the IfcBeamType +/// are defined by the IfcPropertySet and are attached by the +/// HasPropertySets attribute. The following property set +/// definitions specific to the IfcBeamType are part of this +/// IFC release: +/// NOTE There is no differentiation between +/// properties within the property set that are only assignable to +/// IfcBeamType and those that are only assignable to +/// IfcBeam. If the same property is assigned to the +/// IfcBeamType and the IfcBeam being an occurrence of +/// the IfcBeamType, then the occurrence property overrides +/// the type property. +/// +/// Pset_BeamCommon: common property set for all +/// beam types. +/// +/// Profile Use Definition: +/// The shared profile definition is defined by assigning an +/// IfcMaterialProfileSet (see material use definition above). +/// The IfcMaterialProfile refers to the subtype of +/// IfcProfileDef that is the common profile for all beam +/// occurrence, if used. It is only applicable if the +/// IfcBeamType has only occurrences of type +/// IfcBeamStandardCase (see definition of +/// IfcBeamStandardCase for further information). +/// NOTE The attribute ProfileName of the +/// IfcProfileDef subtype, referenced in +/// IfcMaterialProfile should contain a standardized profile +/// name according to local standards. However, an additional +/// geometric representation of the profile is necessary (e.g. as +/// IfcExtrudedAreaSolid). An importing application is allowed +/// to check for the existence of the profile name: in case of +/// identifying it as a standardized name, the corresponding profile +/// geometry and possibly other cross sectional properties can be +/// read from a library. Otherwise the geometric representation and +/// possible non geometric IfcProfileProperties have to be +/// used. +/// Geometry Use Definition: +/// The IfcBeamType may define the shared geometric +/// representation for all beam occurrences. The +/// RepresentationMaps attribute refers to a list of +/// IfcRepresentationMap's, that allow for multiple geometric +/// representations (e.g. with IfcShaperepresentation's having +/// an RepresentationIdentifier 'Box', 'Axis', or 'Body'). It +/// is only applicable if the IfcBeamType has only occurrences +/// of type IfcBeam (See geometric use definition of +/// IfcBeam for further information). +/// NOTE If the IfcBeamType has an +/// associated IfcMaterialProfileSet, then no shared geometric +/// representation shall be provided. +/// NOTE The product shape representations are +/// defined as RepresentationMaps (attribute of the supertype +/// IfcTypeProduct), which get assigned by an element +/// occurrence instance through the +/// IfcShapeRepresentation.Item[n] being an +/// IfcMappedItem. See IfcTypeProduct for further +/// information. +/// NOTE The values of attributes +/// RepresentationIdentifier and RepresentationType of +/// IfcShapeRepresentation are restricted in the same way as +/// those for IfcBeam and +/// IfcBeamStandardCase +class IFC_PARSE_API IfcBeamType : public IfcBuiltElementType { +public: + /// Identifies the predefined types of a beam element from which the type required may be set. + ::Ifc4x3_add2::IfcBeamTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcBeamTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBeamType (IfcEntityInstanceData* e); + IfcBeamType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcBeamTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcBeamType > list; +}; + +class IFC_PARSE_API IfcBearingType : public IfcBuiltElementType { +public: + ::Ifc4x3_add2::IfcBearingTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcBearingTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBearingType (IfcEntityInstanceData* e); + IfcBearingType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcBearingTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcBearingType > list; +}; +/// The energy conversion device type IfcBoilerType defines commonly shared information for occurrences of boilers. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a boiler specification (i.e. the specific product information, that is common to all occurrences of that product type). Boiler types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcBoilerType are represented by instances of IfcBoiler. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcEnergyConversionDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_BoilerTypeCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_BoilerTypeSteam (STEAM) +/// +/// Material Use Definition +/// The material of the IfcBoilerType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Body': The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcBoilerType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcBoiler for standard port definitions. +class IFC_PARSE_API IfcBoilerType : public IfcEnergyConversionDeviceType { +public: + /// Defines types of boilers. + ::Ifc4x3_add2::IfcBoilerTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcBoilerTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBoilerType (IfcEntityInstanceData* e); + IfcBoilerType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcBoilerTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcBoilerType > list; +}; +/// Definition from ISO/CD 10303-42:1992 A boundary curve +/// is a type of bounded curve suitable for the definition of a +/// surface boundary. +/// +/// NOTE Corresponding ISO 10303 entity: boundary_curve. Please refer to ISO/IS 10303-42:1994, p.89 for the final definition of the formal standard. +/// +/// HISTORY New entity in IFC2x4. +class IFC_PARSE_API IfcBoundaryCurve : public IfcCompositeCurveOnSurface { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBoundaryCurve (IfcEntityInstanceData* e); + IfcBoundaryCurve (aggregate_of< ::Ifc4x3_add2::IfcSegment >::ptr v1_Segments, boost::logic::tribool v2_SelfIntersect); + typedef aggregate_of< IfcBoundaryCurve > list; +}; + +class IFC_PARSE_API IfcBridge : public IfcFacility { +public: + boost::optional< ::Ifc4x3_add2::IfcBridgeTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcBridgeTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBridge (IfcEntityInstanceData* e); + IfcBridge (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, boost::optional< ::Ifc4x3_add2::IfcBridgeTypeEnum::Value > v10_PredefinedType); + typedef aggregate_of< IfcBridge > list; +}; + +class IFC_PARSE_API IfcBridgePart : public IfcFacilityPart { +public: + boost::optional< ::Ifc4x3_add2::IfcBridgePartTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcBridgePartTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBridgePart (IfcEntityInstanceData* e); + IfcBridgePart (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, ::Ifc4x3_add2::IfcFacilityUsageEnum::Value v10_UsageType, boost::optional< ::Ifc4x3_add2::IfcBridgePartTypeEnum::Value > v11_PredefinedType); + typedef aggregate_of< IfcBridgePart > list; +}; +/// Definition from ISO 6707-1:1989: Construction work that +/// has the provision of shelter for its occupants or contents as one +/// of its main purpose and is normally designed to stand permanently +/// in one place. +/// A building represents a structure +/// that provides shelter for its occupants or contents and stands in +/// one place. The building is also used to provide a basic element +/// within the spatial structure hierarchy for the components of a +/// building project (together with site, storey, and space). +/// A building is (if specified) associated to a site. A building +/// may span over several connected or disconnected buildings. +/// Therefore building complex provides for a collection of buildings +/// included in a site. A building can also be decomposed in +/// (vertical) parts, where each part defines a building section. +/// This is defined by the composition type attribute of the +/// supertype IfcSpatialStructureElements which is interpreted +/// as follow: +/// +/// COMPLEX = building complex +/// ELEMENT = building +/// PARTIAL = building section +/// +/// HISTORY New entity in IFC Release 1.0. +/// +/// Property Set Use Definition +/// The property sets relating to the IfcBuilding are +/// defined by the IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// property set definitions specific to the IfcBuilding are +/// part of this IFC release: +/// +/// Pset_BuildingCommon: common property set for all +/// types of buildings +/// Pset_BuildingWaterStorage: specific property +/// set for buildings to capture the water supply requirements +/// Pset_BuildingUse: specific property set for +/// buildings to capture the current and anticipated real estate +/// context. +/// Pset_BuildingUseAdjacent: specific property +/// set for buildings to capture the use information about the +/// adjacent buildings. +/// +/// Quantity Use Definition +/// The quantities relating to the IfcBuilding are defined +/// by the IfcElementQuantity and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// base quantities are defined and should be exchanged with the +/// IfcElementQuantity.Name = 'BaseQuantities'. Other +/// quantities, being subjected to local standard of measurement, can +/// be defined with another string value assigned to Name. In +/// this case a valid value for MethodOfMeasurement has to be +/// provided. +/// +/// Qto_BuildingBaseQuantities: base quantities +/// for all building occurrences. +/// +/// Spatial Structure Use Definition +/// The IfcBuilding is used to build the spatial structure +/// of a building (that serves as the primary project breakdown and +/// is required to be hierarchical). The spatial structure elements +/// are linked together by using the objectified relationship +/// IfcRelAggregates. The IfcBuilding references them +/// by its inverse relationships: +/// +/// IfcBuilding.Decomposes -- referencing (IfcSite +/// || IfcBuilding) by IfcRelAggregates.RelatingObject, +/// If it refers to another instance of IfcBuilding, the +/// referenced IfcBuilding needs to have a different and +/// higher CompositionType, i.e. COMPLEX (if the other +/// IfcBuilding has ELEMENT), or ELEMENT (if the other +/// IfcBuilding has PARTIAL). +/// IfcBuilding.IsDecomposedBy -- referencing +/// (IfcBuilding || IfcBuildingStorey) by +/// IfcRelAggregates.RelatedObjects. If it refers to another +/// instance ofIfcBuilding, the referenced IfcBuilding +/// needs to have a different and lower CompositionType, i.e. ELEMENT +/// (if the other IfcBuilding has COMPLEX), or PARTIAL (if the +/// other IfcBuilding has ELEMENT). +/// +/// If there are building elements and/or other elements directly +/// related to the IfcBuilding(like a curtain wall spanning +/// several stories), they are associated with the IfcBuilding +/// by using the objectified relationship +/// IfcRelContainedInSpatialStructure. The IfcBuilding +/// references them by its inverse relationship: +/// +/// IfcBuilding.ContainsElements -- referencing any +/// subtype of IfcProduct (with the exception of other spatial +/// structure element) by +/// IfcRelContainedInSpatialStructure.RelatedElements. +/// +/// Figure 20 shows the IfcBuilding as part of the spatial +/// structure. It also serves as the spatial container for building +/// and other elements. +/// NOTE Detailed requirements on mandatory element +/// containment and placement structure relationships are given in +/// view definitions and implementer agreements. +/// +/// Figure 20 — Building composition +/// +/// Systems, such as building service or electrical distribution +/// systems, zonal systems, or structural analysis systems, relate to +/// IfcBuilding by using the objectified relationship +/// IfcRelServicesBuildings. +/// +/// Attribute Use Definition +/// +/// Figure 21 describes the heights and elevations of the IfcBuilding. It is used to provide the height above sea level of the project height datum for this building, that is, the internal height 0.00. The height 0.00 is often used as a building internal reference height and equal to the floor finish level of the ground floor. +/// +/// base elevation of building provided by: IfcBuilding.ElevationOfRefHeight, it is usually the top of construction slab +/// base elevation of terrain at the perimeter of the building provided by: IfcBuilding.ElevationOfTerrain, it is usually the minimum elevation is sloped terrain +/// total height of building, also referred to as ridge height (top of roof structure, e.g the ridge against terrain): provided by BaseQuantity with Name="TotalHeight" +/// eaves height of building (base of roof structure, e.g the eaves against terrain): provided by BaseQuantity with Name="EavesHeight" +/// +/// Figure 21 — Building elevations +/// +/// Geometry Use Definitions +/// The geometric representation of IfcBuilding is given by +/// the IfcProductDefinitionShape and +/// IfcLocalPlacement, allowing multiple geometric +/// representation. +/// Local Placement +/// The local placement for IfcBuilding is defined in its +/// supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate +/// system that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if relative placement is +/// used) to the IfcSpatialStructureElement of type +/// IfcSite, or of type IfcBuilding (e.g. to position a +/// building relative to a building complex, or a building section to +/// a building). +/// If the relative placement is not used, the absolute placement +/// is defined within the world coordinate system. +/// +/// Geometric Representations +/// Currently, the use of a 2D 'FootPrint' representation of type +/// 'GeometricCurveSet' and a 3D 'Body' representation of type 'Brep' +/// is supported. +/// Foot Print Representation +/// The foot print representation of IfcBuilding is given +/// by either a single 2D curve (such as IfcPolyline or +/// IfcCompositeCurve), or by a list of 2D curves (in case of +/// inner boundaries), if the building has an independent geometric +/// representation. +/// The representation identifier and type of this geometric +/// representation of IfcBuilding is: +/// +/// IfcShapeRepresentation.RepresentationIdentifier = +/// 'FootPrint' +/// IfcShapeRepresentation.RepresentationType = +/// 'GeometricCurveSet' +/// +/// Body Representation +/// The body (or solid model) geometric representation (if the +/// building has an independent geometric representation) of +/// IfcBuilding is defined using faceted B-Rep capabilities +/// (with or without voids), based on the IfcFacetedBrep or on +/// the IfcFacetedBrepWithVoids. +/// The representation identifier and type of this representation +/// of IfcBuilding is: +/// +/// IfcShapeRepresentation.RepresentationIdentifier = +/// 'Body' +/// IfcShapeRepresentation.RepresentationType = +/// 'Brep' +/// +/// Since the building shape is usually described by the exterior +/// building elements, an independent shape representation shall only +/// be given, if the building is exposed independently from its +/// constituting elements. +class IFC_PARSE_API IfcBuilding : public IfcFacility { +public: + /// Elevation above sea level of the reference height used for all storey elevation measures, equals to height 0.0. It is usually the ground floor level. + boost::optional< double > ElevationOfRefHeight() const; + void setElevationOfRefHeight(boost::optional< double > v); + /// Elevation above the minimal terrain level around the foot print of the building, given in elevation above sea level. + boost::optional< double > ElevationOfTerrain() const; + void setElevationOfTerrain(boost::optional< double > v); + /// Address given to the building for postal purposes. + ::Ifc4x3_add2::IfcPostalAddress* BuildingAddress() const; + void setBuildingAddress(::Ifc4x3_add2::IfcPostalAddress* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBuilding (IfcEntityInstanceData* e); + IfcBuilding (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcElementCompositionEnum::Value > v9_CompositionType, boost::optional< double > v10_ElevationOfRefHeight, boost::optional< double > v11_ElevationOfTerrain, ::Ifc4x3_add2::IfcPostalAddress* v12_BuildingAddress); + typedef aggregate_of< IfcBuilding > list; +}; +/// Definition from IAI: Layers or major components as subordinate +/// parts of a building element. Typical usage examples include precast concrete +/// sandwich walls, where the layers may have different geometry representations. +/// In this case the layered material representation does not sufficiently describe +/// the element. Each layer is represented by an own instance of the +/// IfcBuildingElementPart with its own geometry description. +/// +/// The kind of building element part is further specified by a +/// corresponding instance of IfcBuildingElementPartType, +/// referred to by IfcRelDefinesByType. +/// +/// HISTORY New entity in IFC Release 2x2 +/// +/// IFC 2x4 change: +/// Moved from from IfcStructuralElementsDomain schema to +/// IfcSharedComponentElements schema, compatible change of supertype, +/// attribute PredefinedType added. +class IFC_PARSE_API IfcBuildingElementPart : public IfcElementComponent { +public: + /// Subtype of building element part + boost::optional< ::Ifc4x3_add2::IfcBuildingElementPartTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcBuildingElementPartTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBuildingElementPart (IfcEntityInstanceData* e); + IfcBuildingElementPart (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcBuildingElementPartTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcBuildingElementPart > list; +}; +/// Definition from IAI: The building element part type defines +/// lists of commonly shared property set definitions and representation maps of parts of a building element. +/// +/// HISTORY New entity in IFC Release 2x4 +class IFC_PARSE_API IfcBuildingElementPartType : public IfcElementComponentType { +public: + /// Subtype of building element part + ::Ifc4x3_add2::IfcBuildingElementPartTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcBuildingElementPartTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBuildingElementPartType (IfcEntityInstanceData* e); + IfcBuildingElementPartType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcBuildingElementPartTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcBuildingElementPartType > list; +}; +/// Definition from IAI: +/// TheIfcBuildingElementProxyType defines a list of +/// commonly shared property set definitions of a building +/// element proxy and an optional set of product +/// representations. It is used to define an element +/// specification (i.e. the specific product information, that +/// is common to all occurrences of that product type). +/// +/// NOTE The product representations are defined as +/// representation maps (at the level of the supertype +/// IfcTypeProduct, which gets assigned by an element +/// occurrence instance through the +/// IfcShapeRepresentation.Item[1] being an +/// IfcMappedItem. +/// +/// A building element proxy type is used to define the common +/// properties of a certain type of a building element proxy +/// that may be applied to many instances of thattype to +/// assign a specific style. Building element proxy typesmay +/// be exchanged without being already assigned to occurrences. +/// +/// NOTE Although an building element proxy does not have +/// a predefined ontological meaning the provision of a type may be +/// helpful in sharing information among multiple occurrences. Applications +/// that provide type information for element types not yet included in the +/// current IFC specification can use the IfcBuildingElementProxyType +/// to exchange such types. +/// +/// The occurrences of the IfcBuildingElementProxyType +/// are represented by instances of +/// IfcBuildingElementProxy. +/// +/// HISTORY New entity in +/// Release IFC2x Edition 3. +class IFC_PARSE_API IfcBuildingElementProxyType : public IfcBuiltElementType { +public: + /// Predefined types to define the particular type of an building element proxy. There may be property set definitions available for each predefined or user defined type. + ::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBuildingElementProxyType (IfcEntityInstanceData* e); + IfcBuildingElementProxyType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcBuildingElementProxyType > list; +}; +/// Definition from IAI: A building system is a +/// group by which building elements are group according to a common +/// function within the building. +/// HISTORY: New entity in +/// IFC 2x4. +/// The group IfcBuildingSystem defines the occurrence of a +/// specialized system for use within the context of a building and +/// finishing fabric. Important functionalities for the description +/// of a building system are derived from supertypes: +/// +/// From IfcSystem it inherits the ability to couple the +/// building system via IfcRelServicesBuildings to one or more +/// IfcSpatialElement subtypes as necessary. +/// +/// From IfcGroup it inherits the inverse attribute +/// IsGroupedBy, pointing to the relationship class +/// IfcRelAssignsToGroup. This allows to group building +/// elements (instances of IfcBuildingElement subtypes, +/// IfcFurnishingElement subtype, IfcElementAssembly +/// and IfcTransportElement, ). +/// +/// From IfcObjectDefinition it inherits the inverse +/// attribute IsDecomposedBy pointing to the relationship +/// class IfcRelAggregates. It provides the hierarchy between +/// the separate (partial) building systems. +/// +/// Property Set Use Definition: +/// The property sets relating to this entity are defined by the +/// IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// property set definitions specific to this entity are part of this +/// IFC release: +/// +/// Pset_BuildingSystemCommon: common property +/// set for building system occurrences +class IFC_PARSE_API IfcBuildingSystem : public IfcSystem { +public: + /// Predefined types of distribution systems. + boost::optional< ::Ifc4x3_add2::IfcBuildingSystemTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcBuildingSystemTypeEnum::Value > v); + boost::optional< std::string > LongName() const; + void setLongName(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBuildingSystem (IfcEntityInstanceData* e); + IfcBuildingSystem (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< ::Ifc4x3_add2::IfcBuildingSystemTypeEnum::Value > v6_PredefinedType, boost::optional< std::string > v7_LongName); + typedef aggregate_of< IfcBuildingSystem > list; +}; + +class IFC_PARSE_API IfcBuiltElement : public IfcElement { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBuiltElement (IfcEntityInstanceData* e); + IfcBuiltElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcBuiltElement > list; +}; + +class IFC_PARSE_API IfcBuiltSystem : public IfcSystem { +public: + boost::optional< ::Ifc4x3_add2::IfcBuiltSystemTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcBuiltSystemTypeEnum::Value > v); + boost::optional< std::string > LongName() const; + void setLongName(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBuiltSystem (IfcEntityInstanceData* e); + IfcBuiltSystem (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< ::Ifc4x3_add2::IfcBuiltSystemTypeEnum::Value > v6_PredefinedType, boost::optional< std::string > v7_LongName); + typedef aggregate_of< IfcBuiltSystem > list; +}; +/// The energy conversion device type IfcBurnerType defines commonly shared information for occurrences of burners. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a burner specification (i.e. the specific product information, that is common to all occurrences of that product type). Burner types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcBurnerType are represented by instances of IfcBurner. +/// +/// HISTORY: New entity in IFC2x4 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcEnergyConversionDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_BurnerTypeCommon +/// +/// Material Use Definition +/// The material of the IfcBurnerType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// 'Fuel': Material designed to be burned. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcBurnerType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcBurner for standard port definitions. +class IFC_PARSE_API IfcBurnerType : public IfcEnergyConversionDeviceType { +public: + ::Ifc4x3_add2::IfcBurnerTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcBurnerTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBurnerType (IfcEntityInstanceData* e); + IfcBurnerType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcBurnerTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcBurnerType > list; +}; +/// The flow fitting type IfcCableCarrierFittingType defines commonly shared information for occurrences of cable carrier fittings. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a cable carrier fitting specification (i.e. the specific product information, that is common to all occurrences of that product type). Cable Carrier Fitting types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcCableCarrierFittingType are represented by instances of IfcCableCarrierFitting. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowFittingType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_CableCarrierFittingTypeCommon +/// +/// Material Use Definition +/// The material of the IfcCableCarrierFittingType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Body': The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcCableCarrierFittingType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcCableCarrierFitting for standard port definitions. +class IFC_PARSE_API IfcCableCarrierFittingType : public IfcFlowFittingType { +public: + /// Identifies the predefined types of cable carrier fitting from which the type required may be set. + ::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCableCarrierFittingType (IfcEntityInstanceData* e); + IfcCableCarrierFittingType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcCableCarrierFittingType > list; +}; +/// The flow segment type IfcCableCarrierSegmentType defines commonly shared information for occurrences of cable carrier segments. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a cable carrier segment specification (i.e. the specific product information, that is common to all occurrences of that product type). Cable Carrier Segment types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcCableCarrierSegmentType are represented by instances of IfcCableCarrierSegment. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowSegmentType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_CableCarrierSegmentTypeCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_CableCarrierSegmentTypeCableLadderSegment (CABLELADDERSEGMENT) +/// Pset_CableCarrierSegmentTypeCableTraySegment (CABLETRAYSEGMENT) +/// Pset_CableCarrierSegmentTypeCableTrunkingSegment (CABLETRUNKINGSEGMENT) +/// Pset_CableCarrierSegmentTypeConduitSegment (CONDUITSEGMENT) +/// +/// Material Use Definition +/// The material of the IfcCableCarrierSegmentType is defined by IfcMaterialProfileSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialProfileSet.MaterialProfiles[n].Name shall be used: +/// +/// 'Body': Material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcCableCarrierSegmentType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcCableCarrierSegment for standard port definitions. +class IFC_PARSE_API IfcCableCarrierSegmentType : public IfcFlowSegmentType { +public: + /// Identifies the predefined types of cable carrier segment from which the type required may be set. + ::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCableCarrierSegmentType (IfcEntityInstanceData* e); + IfcCableCarrierSegmentType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcCableCarrierSegmentType > list; +}; +/// The flow fitting type IfcCableFittingType defines commonly shared information for occurrences of cable fittings. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a cable fitting specification (i.e. the specific product information, that is common to all occurrences of that product type). Cable Fitting types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcCableFittingType are represented by instances of IfcCableFitting. +/// +/// HISTORY: New entity in IFC2x4 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowFittingType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_CableFittingTypeCommon +/// Pset_ElectricalDeviceCommon +/// +/// Material Use Definition +/// The material of the IfcCableFittingType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// 'Conductor': Material from which the conductors are constructed, such as Aluminium or Copper. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcCableFittingType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcCableFitting for standard port definitions. +class IFC_PARSE_API IfcCableFittingType : public IfcFlowFittingType { +public: + /// Identifies the predefined types of cable fitting from which the type required may be set. + ::Ifc4x3_add2::IfcCableFittingTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcCableFittingTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCableFittingType (IfcEntityInstanceData* e); + IfcCableFittingType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCableFittingTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcCableFittingType > list; +}; +/// The flow segment type IfcCableSegmentType defines commonly shared information for occurrences of cable segments. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a cable segment specification (i.e. the specific product information, that is common to all occurrences of that product type). Cable Segment types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcCableSegmentType are represented by instances of IfcCableSegment. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowSegmentType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_CableSegmentTypeCommon +/// Pset_ElectricalDeviceCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_CableSegmentTypeBusbarSegment (BUSBARSEGMENT) +/// Pset_CableSegmentTypeCableSegment (CABLESEGMENT) +/// Pset_CableSegmentTypeConductorSegment (CONDUCTORSEGMENT) +/// +/// Material Use Definition +/// The material of the IfcCableSegmentType is defined by IfcMaterialProfileSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialProfileSet.MaterialProfiles[n].Name shall be used: +/// +/// 'Conductor': The material from which the conductor is constructed such as Aluminium or Copper. +/// 'Insulation': The material from which the insulation is constructed such as PVC, PEX, EPR, etc. +/// 'Screen': The material from which the screen that covers the sheath is constructed (mantel) such as Aluminium, Copper, Steel , Lead. +/// 'Sheath': The outer sheathing of the cable which may be color-coded. +/// +/// Composition Use Definition +/// The IfcCableSegmentType may be aggregated into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcCableSegmentType and RelatedObjects contains one or more components. Components are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Aggregation use is defined for the following predefined types: +/// +/// CABLESEGMENT: May contain IfcCableSegment components having PredefinedType CORESEGMENT. Cable segments may be aggregated into cable cores. +/// CORESEGMENT: May contain IfcCableSegment components having PredefinedType CONDUCTORSEGMENT. Cable cores may be aggregated into cable conductors. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcCableSegmentType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcCableSegment for standard port definitions. +class IFC_PARSE_API IfcCableSegmentType : public IfcFlowSegmentType { +public: + /// Identifies the predefined types of cable segment from which the type required may be set. + ::Ifc4x3_add2::IfcCableSegmentTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcCableSegmentTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCableSegmentType (IfcEntityInstanceData* e); + IfcCableSegmentType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCableSegmentTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcCableSegmentType > list; +}; + +class IFC_PARSE_API IfcCaissonFoundationType : public IfcDeepFoundationType { +public: + ::Ifc4x3_add2::IfcCaissonFoundationTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcCaissonFoundationTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCaissonFoundationType (IfcEntityInstanceData* e); + IfcCaissonFoundationType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCaissonFoundationTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcCaissonFoundationType > list; +}; +/// The energy conversion device type IfcChillerType defines commonly shared information for occurrences of chillers. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a chiller specification (i.e. the specific product information, that is common to all occurrences of that product type). Chiller types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcChillerType are represented by instances of IfcChiller. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcEnergyConversionDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_ChillerTypeCommon +/// +/// Material Use Definition +/// The material of the IfcChillerType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// 'Refrigerant': Refrigerant material. +/// +/// Composition Use Definition +/// The IfcChillerType may be aggregated into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcChillerType and RelatedObjects contains one or more components. Components are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Aggregation use is defined for the following predefined types: +/// +/// (All Types): May contain IfcDistributionElement components. Chillers may aggregate distribution flow elements forming a refrigeration cycle (compressor, condenser, valve, evaporator), as well as control elements. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcChillerType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcChiller for standard port definitions. +class IFC_PARSE_API IfcChillerType : public IfcEnergyConversionDeviceType { +public: + /// Defines the typical types of chillers (e.g., air-cooled, water-cooled, etc.). + ::Ifc4x3_add2::IfcChillerTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcChillerTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcChillerType (IfcEntityInstanceData* e); + IfcChillerType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcChillerTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcChillerType > list; +}; +/// Definition from ISO 6707-1:1989: Construction +/// containing one or more flues. Flue: Duct designed to convey the +/// products of combustion to the open air. Chimney stack: Part of +/// the chimney that projects above a roof. +/// Definition from IAI: Chimneys are typically vertical, +/// or as near as vertical, parts of the construction of a building +/// and part of the building fabric. Often constructed by pre-cast or +/// insitu concrete, today seldom by bricks. +/// HISTORY New entity in +/// IFC2x4 +/// Property Set Use Definition: +/// The property sets relating to the IfcChimney are +/// defined by the IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// property set definitions specific to the IfcChimney are +/// part of this IFC release: +/// +/// Pset_ChimneyCommon: common property set for all +/// chimney occurrences. +/// +/// Property sets can also be given at the IfcChimneyType, +/// defining the common property data for all occurrences of the same +/// type.It is then accessible by the inverse IsTypedBy relationship pointing to +/// IfcChimneyType.HasPropertySets. If both are given, then +/// the properties directly assigned to IfcChimney overrides +/// the properties assigned to IfcChimneyType. +/// Quantity Use Definition: +/// The quantities relating to the IfcChimney are defined +/// by the IfcElementQuantity and attached by the +/// IfcRelDefinesByProperties. It is accessible by the inverse +/// IsDefinedBy relationship. The following base quantities +/// are defined and should be exchanged with the +/// IfcElementQuantity.MethodOfMeasurement = 'BaseQuantities'. +/// Other quantities can be defined being subjected to local standard +/// of measurement with another string value assigned to Name +/// and a value provided for MethodOfMeasurement. Quanties +/// shall be never assigned to the IfcChimneyType. +/// +/// Qto_ChimneyBaseQuantities: base quantities +/// for all chimney occurrences. +class IFC_PARSE_API IfcChimney : public IfcBuiltElement { +public: + /// Predefined generic type for a chimney that is specified in an enumeration. There may be a property set given specificly for the predefined types. + /// NOTE The PredefinedType shall only be used, if no type object IfcChimneyType is assigned, providing its own IfcChimneyType.PredefinedType. + boost::optional< ::Ifc4x3_add2::IfcChimneyTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcChimneyTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcChimney (IfcEntityInstanceData* e); + IfcChimney (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcChimneyTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcChimney > list; +}; +/// Definition from ISO/CD 10303-42:1992: An IfcCircle is defined by a radius and the location and orientation of the circle. Interpretation of data should be as follows: +/// +/// C = SELF\IfcConic.Position.Location +/// x = SELF\IfcConic.Position.P[1] +/// y = SELF\IfcConic.Position.P[2] +/// z = SELF\IfcConic.Position.P[3] +/// R = Radius +/// +/// and the circle is parameterized as +/// +/// The parameterization range is 0 £ +/// u £2p (or 0 +/// £u £ +/// 360 degree). In the placement coordinate system defined above, the circle is +/// the equation C = 0, where +/// +/// The positive sense of the circle at any point is in the tangent direction, T, to the curve at the point, where +/// +/// NOTE  A circular arc is defined by using the trimmed curve (IfcTrimmedCurve) entity in conjunction with the circle (IfcCircle) entity as the BasisCurve. +/// +/// NOTE  Corresponding ISO 10303 entity: circle, please refer to ISO/IS 10303-42:1994, p. 38 for the final definition of the formal standard. +/// +/// HISTORY  New class in IFC Release 1.0 +/// +/// Figure 278 illustrates the definition of the IfcCircle within the (in this case three-dimensional) position coordinate system. +/// +/// Figure 278 — Circle geometry +class IFC_PARSE_API IfcCircle : public IfcConic { +public: + /// The radius of the circle, which shall be greater than zero. + double Radius() const; + void setRadius(double v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCircle (IfcEntityInstanceData* e); + IfcCircle (::Ifc4x3_add2::IfcAxis2Placement* v1_Position, double v2_Radius); + typedef aggregate_of< IfcCircle > list; +}; + +class IFC_PARSE_API IfcCivilElement : public IfcElement { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCivilElement (IfcEntityInstanceData* e); + IfcCivilElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcCivilElement > list; +}; +/// The energy conversion device type IfcCoilType defines commonly shared information for occurrences of coils. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a coil specification (i.e. the specific product information, that is common to all occurrences of that product type). Coil types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcCoilType are represented by instances of IfcCoil. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcEnergyConversionDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_CoilTypeCommon +/// Pset_CoilTypeHydronic +/// +/// Material Use Definition +/// The material of the IfcCoilType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Body': The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcCoilType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcCoil for standard port definitions. +class IFC_PARSE_API IfcCoilType : public IfcEnergyConversionDeviceType { +public: + /// Defines typical types of coils (e.g., Cooling, Heating, etc.) + ::Ifc4x3_add2::IfcCoilTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcCoilTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCoilType (IfcEntityInstanceData* e); + IfcCoilType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCoilTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcCoilType > list; +}; +/// Definition from ISO 6707-1:1989: Structural member of +/// slender form, usually vertical, that transmits to its base the +/// forces, primarily in compression, that are applied to it. +/// PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcColumnTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcColumn (IfcEntityInstanceData* e); + IfcColumn (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcColumnTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcColumn > list; +}; +/// The flow terminal type IfcCommunicationsApplianceType defines commonly shared information for occurrences of communications appliances. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a communications appliance specification (i.e. the specific product information, that is common to all occurrences of that product type). Communications Appliance types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcCommunicationsApplianceType are represented by instances of IfcCommunicationsAppliance. +/// +/// HISTORY: New entity in IFC2x4 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowTerminalType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_CommunicationsApplianceTypeCommon +/// Pset_ElectricalDeviceCommon +/// +/// Material Use Definition +/// The material of the IfcCommunicationsApplianceType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// +/// Composition Use Definition +/// The IfcCommunicationsApplianceType may be aggregated into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcCommunicationsApplianceType and RelatedObjects contains one or more components. Components are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Aggregation use is defined for the following predefined types: +/// +/// COMPUTER: May contain IfcAudioVisualAppliance components. Computers may be aggregated into audio-visual components such as displays, cameras, speakers, or microphones. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcCommunicationsApplianceType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcCommunicationsAppliance for standard port definitions. +class IFC_PARSE_API IfcCommunicationsApplianceType : public IfcFlowTerminalType { +public: + /// Identifies the predefined types of communications appliance from which the type required may be set. + ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCommunicationsApplianceType (IfcEntityInstanceData* e); + IfcCommunicationsApplianceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcCommunicationsApplianceType > list; +}; +/// The flow moving device type IfcCompressorType defines commonly shared information for occurrences of compressors. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a compressor specification (i.e. the specific product information, that is common to all occurrences of that product type). Compressor types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcCompressorType are represented by instances of IfcCompressor. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowMovingDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_CompressorTypeCommon +/// +/// Material Use Definition +/// The material of the IfcCompressorType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Body': The primary material from which the object is constructed. +/// 'Refrigerant': Refrigerant material. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcCompressorType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcCompressor for standard port definitions. +class IFC_PARSE_API IfcCompressorType : public IfcFlowMovingDeviceType { +public: + /// Defines the type of compressor (e.g., hermetic, reciprocating, etc.). + ::Ifc4x3_add2::IfcCompressorTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcCompressorTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCompressorType (IfcEntityInstanceData* e); + IfcCompressorType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCompressorTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcCompressorType > list; +}; +/// The energy conversion device type IfcCondenserType defines commonly shared information for occurrences of condensers. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a condenser specification (i.e. the specific product information, that is common to all occurrences of that product type). Condenser types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcCondenserType are represented by instances of IfcCondenser. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcEnergyConversionDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_CondenserTypeCommon +/// +/// Material Use Definition +/// The material of the IfcCondenserType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// 'Refrigerant': Refrigerant material. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcCondenserType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcCondenser for standard port definitions. +class IFC_PARSE_API IfcCondenserType : public IfcEnergyConversionDeviceType { +public: + /// Defines the type of condenser. + ::Ifc4x3_add2::IfcCondenserTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcCondenserTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCondenserType (IfcEntityInstanceData* e); + IfcCondenserType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCondenserTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcCondenserType > list; +}; +/// IfcConstructionEquipmentResource is usage of construction equipment to assist in the performance of construction. Construction Equipment resources are wholly or partially consumed or occupied in the performance of construction. +/// +/// HISTORY: New Entity in IFC Release 2.0. Base type and documentation extended in IFC2x4. +/// +/// Occurrences of IfcConstructionEquipmentResource are products that are used as resources to assist the process of construction. More specifically, they are products that are standalone items brought to a project to fulfil a particular purpose. Examples might be a tower crane or other mobile crane, a screwing machine, a lifting hoist etc. They are explicitly instances of IfcProduct and may be drawn from various of the subtype, for instance IfcTransportElement, IfcDiscreteAccessory, IfcProxy (for particular cases where more precise usage details are not available). +/// +/// A product that is used as an IfcConstructionEquipmentResource is referenced using the IfcRelAssignsToResource.RelatedObjects relationship. +/// +/// Use definitions for composition, assignment, constraints, time series, and baselines are described at the base type IfcConstructionResource. +/// +/// Type use definition +/// IfcConstructionEquipmentResource defines the occurrence of any construction equipment resource; common information about construction equipment resource types is handled by IfcConstructionEquipmentResourceType. The IfcConstructionEquipmentResourceType (if present) may establish the common type name, common properties, and common productivities for various task types using IfcRelAssignsToProcess. The IfcConstructionEquipmentResourceType is attached using the IfcRelDefinesByType.RelatingType objectified relationship and is accessible by the inverse IsTypedBy attribute. +/// +/// Quantity use definition +/// The quantities relating to the IfcConstructionEquipmentResource are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. It is accessible by the inverse IsDefinedBy relationship. The following base quantities are defined and should be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. Other quantities can be defined being subjected to local standard of measurement with another string value assigned to Name and a value provided for MethodOfMeasurement. +/// +/// Qto_ConstructionEquipmentResourceBaseQuantities: base quantities for all construction equipment resources. +/// +/// Assignment use definition +/// In addition to assignments specified at the base class IfcConstructionResource, a construction equipment resource may have assignments of its own using IfcRelAssignsToResource where RelatingResource refers to the IfcConstructionEquipmentResource and RelatedObjects contains one or more IfcProduct subtypes as shown in Figure 183. Such relationship indicates the equipment used as input for the resource. Such products are not contained within a building structure but are referenced within a construction spatial zone, specifically IfcSpatialZone with PredefinedType=CONSTRUCTION, which is aggregated within the IfcProject. There may be multiple chains of production such that the assigned equipment may have their own task and resource assignments for assembling such equipment. +/// +/// Figure 183 — Construction equipment resource assignment +class IFC_PARSE_API IfcConstructionEquipmentResource : public IfcConstructionResource { +public: + /// Defines types of construction equipment resources. + /// IFC2x4 New attribute + boost::optional< ::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcConstructionEquipmentResource (IfcEntityInstanceData* e); + IfcConstructionEquipmentResource (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, ::Ifc4x3_add2::IfcResourceTime* v8_Usage, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v9_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v10_BaseQuantity, boost::optional< ::Ifc4x3_add2::IfcConstructionEquipmentResourceTypeEnum::Value > v11_PredefinedType); + typedef aggregate_of< IfcConstructionEquipmentResource > list; +}; +/// IfcConstructionMaterialResource identifies a material resource type in a construction project. +/// +/// HISTORY: New Entity in IFC Release 2.0. Base type and documentation extended in IFC2x4. +/// +/// IFC2x4 NOTE: The attribute Suppliers has been deleted; use IfcRelAssignsToResource to assign an IfcActor to fulfill the role as a supplier. The attribute UsageRatio has been deleted; use BaseQuantityConsumed and BaseQuantityProduced to indicate material usage. +/// +/// Occurrences of IfcConstructionMaterialResource are consumed (wholly or partially), or occupied during a construction work task (IfcTask). +/// +/// Similar to IfcConstructionProductResource, sometimes things such as 5000kg of gravel are already instantiated as an IfcProduct because it is a result of a work task (for example, ‘transporting gravel’). In this case, the instance of IfcConstructionMaterialResource can be associated with the product instance ‘5000kg of gravel’ to provide more information for resource uses. Nevertheless, IfcConstructionMaterialResource should only be used to represent resource usage (for example ‘gravel’), but not product substances (for example, ‘5000kg of gravel’). +/// Note: This class is not the same as IfcMaterial; the former can typically represent the type of bulk materials such as sand, gravels, nails and so on (note these can be instantiated from IfcProduct as well depending their uses in the system) used in a construction process. The latter is about physical materials used in a physical building element typically with detailed positioning (e.g. offset) and layering information. +/// Quantities for an IfcConstructionMaterialResource are defined through IfcRelDefinesByProperty and use IfcElementQuantity. +/// +/// Use definitions for composition, assignment, constraints, time series, and baselines are described at the base type IfcConstructionResource. +/// +/// Type use definition +/// IfcConstructionMaterialResource defines the occurrence of any material resource; common information about material resource types is handled by IfcConstructionMaterialResourceType. The IfcConstructionMaterialResourceType (if present) may establish the common type name, common properties, and common productivities for various task types using IfcRelAssignsToProcess. The IfcConstructionMaterialResourceType is attached using the IfcRelDefinesByType.RelatingType objectified relationship and is accessible by the inverse IsTypedBy attribute. +/// +/// Quantity use definition +/// The quantities relating to the IfcConstructionMaterialResource are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. It is accessible by the inverse IsDefinedBy relationship. The following base quantities are defined and should be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. Other quantities can be defined being subjected to local standard of measurement with another string value assigned to Name and a value provided for MethodOfMeasurement. +/// +/// Qto_ConstructionMaterialResourceBaseQuantities: base quantities for all construction material resources. +/// +/// Assignment use definition +/// In addition to assignments specified at the base class IfcConstructionResource, a construction material resource may have assignments of its own using IfcRelAssignsToResource where RelatingResource refers to the IfcConstructionMaterialResource and RelatedObjects contains one or more IfcProduct subtypes as shown in Figure 184. Such relationship indicates the physical material used as input for the resource. Such products are not contained within a building structure but are referenced within a construction spatial zone, specifically IfcSpatialZone with PredefinedType=CONSTRUCTION, which is aggregated within the IfcProject. The IfcGeographicElement object is used to represent the physical material occurrence, which may optionally have placement and representation indicating intended storage on the construction site. There may be multiple chains of production such that the assigned product material(s) may have their own task and resource assignments for transporting or extracting such material. +/// +/// Figure 184 — Construction material resource assignment +class IFC_PARSE_API IfcConstructionMaterialResource : public IfcConstructionResource { +public: + /// Defines types of construction material resources. + /// IFC2x4 New attribute + boost::optional< ::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcConstructionMaterialResource (IfcEntityInstanceData* e); + IfcConstructionMaterialResource (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, ::Ifc4x3_add2::IfcResourceTime* v8_Usage, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v9_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v10_BaseQuantity, boost::optional< ::Ifc4x3_add2::IfcConstructionMaterialResourceTypeEnum::Value > v11_PredefinedType); + typedef aggregate_of< IfcConstructionMaterialResource > list; +}; +/// IfcConstructionProductResource defines the role of a product that is consumed (wholly or partially), or occupied in the performance of construction. +/// +/// HISTORY: New Entity in IFC Release 2.0. Renamed from IfcProductResource in IFC 2x. Base type and documentation extended in IFC2x4. +/// +/// Occurrences of IfcConstructionProductResource are usage of products to assist the process of construction. More specifically, they are usage of products that result from some construction processes and that are then used as resources to facilitate further construction. For instance, formworks can be instantiated as products resulting from the process ‘constructing formwork’. However, they are used as resources in the process ‘pouring concrete’ in a later stage of the project. IfcConstructionProductResource occurrences are explicitly instances of IfcProduct and may be drawn from various of the subtypes, for instance IfcElementComponent, IfcElementAssembly, IfcProxy (for particular cases where more precise usage details are not available). The product that is used as a construction resource is referenced using the IfcRelAssignsToResource.RelatedObjects relationship. +/// +/// Use definitions for composition, assignment, constraints, time series, and baselines are described at the base type IfcConstructionResource. +/// +/// Type use definition +/// IfcConstructionProductResource defines the occurrence of any product resource; common information about product resource types is handled by IfcConstructionProductResourceType. The IfcConstructionProductResourceType (if present) may establish the common type name, common properties, and common productivities for various task types using IfcRelAssignsToProcess. The IfcConstructionProductResourceType is attached using the IfcRelDefinesByType.RelatingType objectified relationship and is accessible by the inverse IsTypedBy attribute. +/// +/// Assignment use definition +/// In addition to assignments specified at the base class IfcConstructionResource, a construction product resource may have assignments of its own using IfcRelAssignsToResource where RelatingResource refers to the IfcConstructionProductResource and RelatedObjects contains one or more IfcProduct subtypes as shown in Figure 185. Such relationship indicates the products used as input for the resource. Such products are not contained within a building structure but are referenced within a construction spatial zone, specifically IfcSpatialZone with PredefinedType=CONSTRUCTION, which is aggregated within the IfcProject. There may be multiple chains of production such that the assigned products may have their own task and resource assignments. +/// +/// Figure 185 — Construction product resource assignment +class IFC_PARSE_API IfcConstructionProductResource : public IfcConstructionResource { +public: + /// Defines types of construction product resources. + /// IFC2x4 New attribute + boost::optional< ::Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcConstructionProductResource (IfcEntityInstanceData* e); + IfcConstructionProductResource (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_Identification, boost::optional< std::string > v7_LongDescription, ::Ifc4x3_add2::IfcResourceTime* v8_Usage, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcAppliedValue >::ptr > v9_BaseCosts, ::Ifc4x3_add2::IfcPhysicalQuantity* v10_BaseQuantity, boost::optional< ::Ifc4x3_add2::IfcConstructionProductResourceTypeEnum::Value > v11_PredefinedType); + typedef aggregate_of< IfcConstructionProductResource > list; +}; + +class IFC_PARSE_API IfcConveyorSegmentType : public IfcFlowSegmentType { +public: + ::Ifc4x3_add2::IfcConveyorSegmentTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcConveyorSegmentTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcConveyorSegmentType (IfcEntityInstanceData* e); + IfcConveyorSegmentType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcConveyorSegmentTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcConveyorSegmentType > list; +}; +/// The energy conversion device type IfcCooledBeamType defines commonly shared information for occurrences of cooled beams. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a cooled beam specification (i.e. the specific product information, that is common to all occurrences of that product type). Cooled Beam types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcCooledBeamType are represented by instances of IfcCooledBeam. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcEnergyConversionDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_CooledBeamTypeCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_CooledBeamTypeActive (ACTIVE) +/// +/// Material Use Definition +/// The material of the IfcCooledBeamType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Body': The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcCooledBeamType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcCooledBeam for standard port definitions. +class IFC_PARSE_API IfcCooledBeamType : public IfcEnergyConversionDeviceType { +public: + /// Defines the type of cooled beam. + ::Ifc4x3_add2::IfcCooledBeamTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcCooledBeamTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCooledBeamType (IfcEntityInstanceData* e); + IfcCooledBeamType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCooledBeamTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcCooledBeamType > list; +}; +/// The energy conversion device type IfcCoolingTowerType defines commonly shared information for occurrences of cooling towers. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a cooling tower specification (i.e. the specific product information, that is common to all occurrences of that product type). Cooling Tower types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcCoolingTowerType are represented by instances of IfcCoolingTower. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcEnergyConversionDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_CoolingTowerTypeCommon +/// +/// Material Use Definition +/// The material of the IfcCoolingTowerType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// 'Fill': Fill material. +/// +/// Composition Use Definition +/// The IfcCoolingTowerType may be aggregated into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcCoolingTowerType and RelatedObjects contains one or more components. Components are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Aggregation use is defined for the following predefined types: +/// +/// MECHANICALFORCEDDRAFT: May contain IfcFan components. Forces air into the cooling tower. +/// MECHANICALINDUCEDDRAFT: May contain IfcFan components. Induces air out of the cooling tower. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcCoolingTowerType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcCoolingTower for standard port definitions. +class IFC_PARSE_API IfcCoolingTowerType : public IfcEnergyConversionDeviceType { +public: + /// Defines the typical types of cooling towers (e.g., OpenTower, ClosedTower, CrossFlow, etc.). + ::Ifc4x3_add2::IfcCoolingTowerTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcCoolingTowerTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCoolingTowerType (IfcEntityInstanceData* e); + IfcCoolingTowerType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcCoolingTowerTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcCoolingTowerType > list; +}; + +class IFC_PARSE_API IfcCourse : public IfcBuiltElement { +public: + boost::optional< ::Ifc4x3_add2::IfcCourseTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCourseTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCourse (IfcEntityInstanceData* e); + IfcCourse (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCourseTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcCourse > list; +}; +/// Definition from ISO 6707-1:1989: term used: Finishing - +/// final coverings and treatments of surfaces and their +/// intersections. +/// A covering is an element which +/// covers some part of another element and is fully dependent on +/// that other element. The IfcCovering defines the occurrence +/// of a covering type, that (if given) is expressed by the +/// IfcCoveringType. Examples of coverings include wall +/// claddings, floorings and suspended ceilings. Coverings are +/// elements with relationships to the covered element and the space +/// on the other side, they may contain openings, assigned by +/// IfcRelVoidsElement, material information, assigned by +/// IfcRelAssociatesMaterial, and others. +/// NOTE A more basic information about claddings, +/// floorings, and ceilings of a space can be attached to +/// IfcSpace's using the Pset_SpaceCommon properties. Then +/// only a name can be provided and the covering quantities would be +/// interpreted from the space quantities. +/// Coverings can be assigned to +/// +/// a space represented by IfcSpace +/// +/// using the inverse relationship CoversSpaces pointing +/// to IfcRelCoversSpaces. The space is then accessible via +/// IfcRelCoversSpaces.RelatedSpace. It defines to which space +/// a covering is facing towards. +/// +/// NOTE The mere containment relationship between an +/// IfcCovering and an IfcSpace is +/// created by using +/// IfcRelContainedInSpatialStructure +/// +/// a space boundary represented by IfcRelSpaceBoundary +/// +/// using the inverse relationship ProvidesBoundaries +/// pointing to IfcRelSpaceBoundary. The space is then +/// accessible via IfcRelSpaceBoundary.RelatingSpace. +/// +/// a building element represented by IfcBuildingElement +/// +/// using the inverse relationship Covers pointing to +/// IfcRelCoversBldgElements. The building element is then +/// accessible via +/// IfcRelCoversBldgElements.RelatingBuildingElement. +/// +/// The following guideline shall apply: +/// +/// (default) if the space has coverings that may not have an own +/// shape representation and no defined relationships to the building +/// elements they cover, then the IfcCovering shall be +/// assigned to IfcSpace using the IfcRelCoversSpaces +/// relationship, +/// if the space has coverings that have an own shape +/// representation and the space has defined space boundaries, then +/// the covering, which relates to that space, may be assigned to the +/// space boundaries using the link +/// toIfcRelSpaceBoundary, +/// if the covering does not relate to a space, then the covering +/// should be assigned to the building element or a distribution +/// element using the IfcRelCoversBldgElements +/// relationship. +/// +/// HISTORY New entity in IFC Release 1.0. +/// IFC2x CHANGE The attribute PredefinedType is now optional and should only be inserted when no type information, given by IfcCoveringType, is assigned to the IfcCovering occurrence by IfcRelDefinesByType. +/// IFC2x4 CHANGE The IfcCovering is restricted to coverings of building elements by having +/// RelatingBuildingElement pointing to IfcBuildingElement. +/// +/// Type Use Definition +/// The IfcCovering defines the occuurence of any covering, +/// common information about covering types (or styles) is handled by +/// IfcCoveringType. The IfcCoveringType (if present) +/// may establish the commontype name, usage (or predefined) type, +/// common set of properties, common material layer set, and common +/// shape representations (using IfcRepresentationMap). The +/// IfcCoveringType is attached using the +/// IfcRelDefinedByType.RelatingType objectified relationship +/// and is accessible by the inverse IsDefinedBy +/// attribute. +/// As an additional use agreement for standard coverings (i.e. +/// slabs with constant thickness along the extrusion direction), the +/// IfcCoveringType should have a unique +/// IfcMaterialLayerSet, that is referenced by +/// theIfcMaterialLayerSetUsage assigned to all occurrences +/// of this covering type. +/// +/// Figure 91 illustrates assignment of IfcMaterialLayerSetUsage and IfcMaterialLayerSet to the covering type and the covering occurrence. +/// +/// Figure 91 — Covering material usage +/// +/// If an IfcCoveringType is assigned to the +/// IfcCovering, the attribute PredefinedType shall not +/// be assigned, or shall be identical to +/// IfcCoveringType.PredefinedType. +/// Property Set Use Definition: +/// The property sets relating to the IfcCovering are +/// defined by the IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// property set definitions specific to the IfcCovering are +/// part of this IFC release: +/// +/// Pset_CoveringCommon: common property set for all +/// covering occurrences +/// +/// Pset_CoveringCeiling: specific property set +/// for all occurrences of coverings with the PredefinedType: +/// CEILING +/// Pset_CoveringFlooring: specific property set +/// for all occurrences of coverings with the PredefinedType: +/// FLOORING +/// +/// Quantity Use Definition: +/// The quantities relating to the IfcCovering are defined +/// by the IfcElementQuantity and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// base quantities are defined and should be exchanged with the +/// IfcElementQuantity.Name = 'BaseQuantities'. Other +/// quantities can be defined being subjected to local standard of +/// measurement with another string value assigned to Name and +/// a value provided for MethodOfMeasurement. Quantities shall +/// never be assigned to the IfcCoveringType. +/// +/// Qto_CoveringBaseQuantities: base quantities +/// for all covering occurrences. +/// +/// Containment Use Definition +/// The IfcCovering has a containment relationship within +/// the hierarchical spatial structure. +/// +/// The IfcCovering is places within the project spatial +/// hierarchy using the objectified relationship +/// IfcRelContainedInSpatialStructure, referring to it by its +/// inverse attribute SELF\IfcElement.ContainedInStructure. +/// Subtypes of IfcSpatialStructureElement are valid spatial +/// containers, with IfcSpace being the default +/// container. +/// +/// Geometry Use Definitions +/// The geometric representation of IfcCovering is given by +/// the IfcProductDefinitionShape, allowing multiple geometric +/// representation. Included are: +/// Local Placement +/// The local placement for IfcCovering is defined in its +/// supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate +/// system that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if given) to the same +/// IfcSpatialStructureElement , which is used in the +/// ContainedInStructure inverse attribute, or to a spatial +/// structure element at a higher level, referenced by that. +/// If the IfcCovering, however, is assigned to an +/// IfcBuildingElement, and this element defines its own local +/// placement, than the PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if given) to the local +/// placement of the IfcBuildingElement. +/// If the relative placement is not used, the absolute placement +/// is defined within the world coordinate system. +/// +/// Geometric Representations +/// The geometric representation of the IfcCovering depends +/// on two criteria: +/// +/// Does it define an area or a volume? +/// Is the base surface (either the IfcRelSpaceBoundary or +/// the surface of the IfcBuildingElement it relates to) a +/// planar surface or a cylindrical surface? +/// +/// GeometricSet Representation +/// The 'GeometricSet' geometric representation of +/// IfcCovering supports area definitions as 3D surfaces. +/// +/// RepresentationIdentifier : 'Surface' +/// RepresentationType : 'GeometricSet' +/// +/// The following additional constraints apply to the +/// 'GeometricSet' representation of IfcCovering: +/// +/// for planar base surfaces - bounded surface +/// representation +/// for cylindrical base surfaces - swept surface +/// representation +/// +/// Figure 92 illustrates a planar surface representation where the area of IfcCovering is given by an IfcPolyLoop for planar base surfaces (here given by the IfcRelSpaceBoundary). +/// +/// The implicit planar surface of the IfcPolyLoop shall be identical with the planar surface defined by the IfcRelSpaceBoundary. +/// +/// Figure 92 — Covering surface planar +/// +/// Figure 93 illustrates a cylindrical surface representation where the area of the IfcCovering is given by an IfcSurfaceOfLinearExtrusion for cylindrical base surfaces (here given by the IfcRelSpaceBoundary - such as caused by a round wall). +/// +/// The geometry representation of the IfcCovering is given by the IfcTrimmedCurved (the Curve parameter of the +/// IfcArbitraryOpenProfileDef - in cases of faceted representation also an IfcPolyline). It is extruded within the plane of the base surface using the Depth parameter of the IfcSurfaceOfLinearExtrusion. +/// +/// Figure 93 — Covering surface cylindrical +/// +/// SweptSolid Representation +/// The 'SweptSolid' geometric representation of +/// IfcCovering supports volume definitions as 3D solids. +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'SweptSolid' +/// +/// The following additional constraints apply to the 'SweptSolid' +/// representation of IfcCovering: +/// +/// for planar base surfaces - swept area representation +/// for cylindrical base surfaces - swept area +/// representation +/// +/// Figure 94 illustrates a body representation where the volume of IfcCovering is given by an IfcExtrudedAreaSolid for planar base surfaces (here given by the IfcRelSpaceBoundary). +/// +/// The extruded area (IfcArbitraryClosedProfileDef) shall be coplanar to the surface defined by the IfcRelSpaceBoundary. +/// +/// Figure 94 — Covering body planar +/// +/// Figure 95 illustrates a body representation where the volume of the IfcCovering is given by an IfcExtrudedAreaSolid for cylindrical base surfaces (here given by the IfcRelSpaceBoundary - such as caused by a round wall). +/// +/// The geometry representation of the IfcCovering is given by the IfcCompositeCurve (the OuterCurve parameter of the +/// IfcArbitraryClosedProfileDef - in cases of faceted representation also a closed IfcPolyline). It is extruded along the plane of the base surface using the Depth parameter of the IfcSurfaceOfLinearExtrusion. +/// +/// Figure 95 — Covering body circular +class IFC_PARSE_API IfcCovering : public IfcBuiltElement { +public: + /// Predefined types to define the particular type of the covering. There may be property set definitions available for each predefined type. + boost::optional< ::Ifc4x3_add2::IfcCoveringTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCoveringTypeEnum::Value > v); + aggregate_of< IfcRelCoversSpaces >::ptr CoversSpaces() const; // INVERSE IfcRelCoversSpaces::RelatedCoverings + aggregate_of< IfcRelCoversBldgElements >::ptr CoversElements() const; // INVERSE IfcRelCoversBldgElements::RelatedCoverings + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCovering (IfcEntityInstanceData* e); + IfcCovering (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCoveringTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcCovering > list; +}; +/// Definition from ISO 6707-1:1989: Non load bearing wall +/// positioned on the outside of a building and enclosing it. +/// A curtain wall is an exterior wall of a building which is +/// an assembly of components, hung from the edge of the floor/roof +/// structure rather than bearing on a floor. Curtain wall is +/// represented as a building element assembly and implemented as a +/// subtype of IfcBuildingElement that uses an +/// IfcRelAggregates relationship. +/// HISTORY New Entity in IFC Release 2.0 +/// +/// Type Use Definition +/// IfcCurtainWall defines the occuurence of any curtain +/// wall, common information about curtain wall types (or styles) is +/// handled by IfcCurtainWallType. The +/// IfcCurtainWallType (if present) may establish the +/// commontype name, usage (or predefined) type, common material +/// information, common set of properties and common shape +/// representations (using IfcRepresentationMap). The +/// IfcCurtainWallType is attached using the +/// IfcRelDefinedByType.RelatingType objectified relationship +/// and is accessible by the inverse IsDefinedBy +/// attribute. +/// If no IfcCurtainWallType is attached(i.e. if only +/// occurrence information is given) the predefined type may be given +/// by using the ObjectType attribute. +/// NOTE Since the IfcCurtainWall might be +/// represented as an aggregate of parts, e.g. represented by +/// IfcMember, or IfcPlate, these individual parts may +/// have type information attached (represented e.g. by +/// IfcMemberType, or +/// IfcPlateType). +/// Property Set Use Definition: +/// The property sets relating to the IfcCurtainWall are +/// defined by the IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// property set definitions specific to the IfcCurtainWall +/// are part of this IFC release: +/// +/// Pset_CurtainWallCommon: common property set +/// for all curtain wall occurrences +/// +/// Quantity Use Definition +/// The quantities relating to the IfcCurtainWall are +/// defined by the IfcElementQuantity and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// base quantities are defined and should be exchanged with the +/// IfcElementQuantity.Name = 'BaseQuantities'. Other +/// quantities can be defined being subjected to local standard of +/// measurement with another string value assigned to Name and +/// a value provided for MethodOfMeasurement. Quantities shall +/// never be assigned to the IfcCurtainWallType. +/// +/// Qto_CurtainWallBaseQuantities: base +/// quantities for all curtain wall occurrences. +/// +/// Geometry Use Definitions: +/// The geometric representation of IfcCurtainWall is given +/// by the IfcProductDefinitionShape, allowing multiple +/// geometric representations. Independent geometric representations, +/// as described below, should only be used when the +/// IfcCurtainWall is not defined as an aggregate. If defined +/// as an aggregate, the geometric representation is the sum of the +/// representations of the components within the aggregate. +/// Local placement +/// The local placement for IfcCurtainWall is defined in +/// its supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate +/// system that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if given) to the same +/// IfcSpatialStructureElement that is used in the +/// ContainedInStructure inverse attribute or to a referenced +/// spatial structure element at a higher level. +/// If the relative placement is not used, the absolute placement +/// is defined within the world coordinate system. +/// +/// If the IfcCurtainWall establishes an aggregate, then +/// all contained elements (defined by the IsDecomposedBy +/// inverse attribute) shall be placed relative to the +/// IfcCurtainWall.ObjectPlacement. +/// Geometric Representation +/// The geometric representation of IfcCurtainWall is +/// defined using the following multiple shape representations for +/// its definition: +/// +/// Axis: A two-dimensional open curve (for restrictions see +/// below) defining the axis for the curtain wall. +/// +/// This is an optional representation for curtain walls. +/// +/// Body: A surface model or boundary representation model +/// representation defining the 3D shape of the curtain wall. +/// +/// If the IfcCurtainWall has components (referenced by +/// SELF\IfcObject.IsDecomposedBy) then no independent shape +/// representation with RepresentationType = 'Body' shall be +/// defined. The body of IfcCurtainWall is then geometrically +/// represented by the shape representation of its components. The +/// components are accessed via +/// SELF\IfcObject.IsDecomposedBy[1].RelatedObjects. +/// +/// If the IfcCurtainWall has no components defined (empty +/// set of SELF\IfcObject.IsDecomposedBy) then the +/// IfcCurtainWall may be represented by an shape +/// representation with the RepresentationIdentifier = +/// 'Body'. +/// +/// Axis Representation +/// The axis geometric representation of IfcCurtainWall is +/// defined using the 'Axis' representation. The following attribute +/// values for the IfcShapeRepresentation holding this +/// geometric representation shall be used: +/// +/// RepresentationIdentifier : 'Axis' +/// RepresentationType : 'Curve2D' +/// +/// The following additional constraints apply to the 'Axis' +/// representation: +/// +/// Axis : IfcPolyline having two Points, or +/// IfcTrimmedCurve with BasisCurve of Type +/// IfcLine or IfcCircle. +/// +/// Body Representation +/// The body shape representation of IfcCurtainWall is +/// defined using the 'Body' representation. The following attribute +/// values for the IfcShapeRepresentation holding this +/// geometric representation shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'SurfaceModel', 'Brep' and +/// 'MappedRepresentation' +/// +/// An own 'Body' representation shall only be included if no +/// components of the curtain wall are defined. +class IFC_PARSE_API IfcCurtainWall : public IfcBuiltElement { +public: + /// Predefined generic type for a curtain wall that is specified in an enumeration. There may be a property set given specificly for the predefined types. + /// NOTE The PredefinedType shall only be used, if no type object IfcCurtainWallType is assigned, providing its own IfcCurtainWallType.PredefinedType. + /// + /// IFC2x4 CHANGE The attribute has been added at the end of the entity definition. + boost::optional< ::Ifc4x3_add2::IfcCurtainWallTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCurtainWallTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCurtainWall (IfcEntityInstanceData* e); + IfcCurtainWall (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCurtainWallTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcCurtainWall > list; +}; +/// The flow controller type IfcDamperType defines commonly shared information for occurrences of dampers. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a damper specification (i.e. the specific product information, that is common to all occurrences of that product type). Damper types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcDamperType are represented by instances of IfcDamper. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowControllerType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_DamperTypeCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_DamperTypeControlDamper (CONTROLDAMPER) +/// Pset_DamperTypeFireDamper (FIREDAMPER) +/// Pset_DamperTypeFireSmokeDamper (FIRESMOKEDAMPER) +/// Pset_DamperTypeSmokeDamper (SMOKEDAMPER) +/// +/// Material Use Definition +/// The material of the IfcDamperType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Blade': The material from which the damper blades are constructed. +/// 'Frame': The material from which the damper frame is constructed. +/// 'Seal': The material from which the damper seals are constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcDamperType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcDamper for standard port definitions. +class IFC_PARSE_API IfcDamperType : public IfcFlowControllerType { +public: + /// Type of damper. + ::Ifc4x3_add2::IfcDamperTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcDamperTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDamperType (IfcEntityInstanceData* e); + IfcDamperType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcDamperTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcDamperType > list; +}; + +class IFC_PARSE_API IfcDeepFoundation : public IfcBuiltElement { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDeepFoundation (IfcEntityInstanceData* e); + IfcDeepFoundation (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcDeepFoundation > list; +}; +/// Definition from IAI: Representation of different kinds of +/// accessories included in or added to elements. +/// HISTORY New entity in IFC +/// Release 2x2 +/// +/// IFC 2x4 change: +/// Attribute PredefinedType added. +/// +/// General usage +/// The exact type information of the IfcDiscreteAccessory is given +/// in the ObjectType attribute inherited from IfcObject. Standard +/// type designations are provided for guideline below. The list is not exhaustive +/// and the list of definitions may be extended based on local national extensions. +/// +/// Accessory type +/// Standard type designation +/// Description +/// +/// Shading devices: +/// 'Shading device' +/// Elements specifically designed to provide shading, often fixed +/// externally and sometimes moving (e.g. by rotation) +/// +/// Corbels as separate components: +/// 'Hidden steel corbel' +/// Corbel system made from steel components embedded into the master +/// element +/// +/// 'Visible steel corbel' +/// Corbel system made from steel components protruding from the master +/// element +/// +/// 'Visible concrete corbel' +/// Corbel system made as a separate precast concrete component added +/// to the master element +/// +/// 'Ladder truss connector' +/// A fixing device in truss form with straight cross bars in ladder +/// form holding two precast conrete panels together in a sandwich wall panel. +/// +/// 'Panel suspender' +/// A straight fixing device holding two precast conrete panels +/// together in a sandwich wall panel. +/// +/// Electrical accessories for precast concrete elements: +/// 'Protective plug' +/// Protective plug used in element for protecting electrical +/// accessories during manufacturing, transportation and assembly. +/// +/// Fixing parts: +/// 'Standard fixing plate' +/// Standard fixing plate. +/// +/// 'Edge fixing plate' +/// Fixing plate attached to the edge of an element. +/// +/// 'Corner fixing plate' +/// Fixing plate attached to the corner of an element. +/// +/// 'Slab fixing plate' +/// Fixing plate for slabs. +/// +/// 'Balcony hinge' +/// Accessory supporting and fixing balconies. +/// +/// 'Frame shoe' +/// Fixing shoe for frames. +/// +/// 'Thermo frame' +/// Thermo frame. +/// +/// 'Column shoe' +/// Fixing shoe for columns. +/// +/// 'Wall shoe' +/// Fixing shoe for walls. +/// +/// 'Fixing socket' +/// Fixing socket. +/// +/// Joint accessories: +/// 'Neoprene bearing plate' +/// Rubber plate used as a bearing in, for example, joints between +/// column corbels and beams. +/// +/// 'Working joint reinforcement' +/// Reinforcement accessory used in working joints. +/// +/// 'Expansion joint reinforcement' +/// Reinforcement accessory used in expansion joints. +/// +/// 'Ribbed steel bar extension' +/// Extension accessory made of a ribbed (reinforcement) bar used in +/// joints. +/// +/// 'Steel pin bolt' +/// Pin bolt used to join together, for example, columns and +/// beams. +/// +/// 'Concrete dowel' +/// Dowel pin used in joints. +/// +/// 'Concrete groove' +/// A groove made in a joint. +/// +/// 'Steel plate' +/// A steel plate used as an accessory in a joint. +/// +/// 'Wire loop' +/// A joint connector accessory made from a wire loop. +/// +/// 'Steel loop' +/// A joint connector accessory made from a steel bar loop. +/// +/// 'Sealing strip' +/// A strip sealing the joint. +/// +/// 'Sealing compound' +/// Sealing compound protecting and sealing the joint. +/// +/// Lifting accessories: +/// 'Wire lifting hook' +/// A lifting aid in the form of a wire loop. +/// +/// 'Steel lifting hook' +/// A lifting aid in the form of a steel bar loop. +/// +/// 'Lifting socket' +/// A lifting aid in the form of a socket. +/// +/// 'Steel lifting anchor' +/// A lifting aid in the form of a steel lifting anchor. +/// +/// 'Lifting hole' +/// A lifting aid in the form of a hole. +/// +/// Accessories mainly used in the building services domain: +/// 'Antivibration' +/// An isolating device to prevent other elements to be effected by +/// vibrations. +/// +/// 'Drop rod' +/// A length of material providing a hanging support to a bracket. Note +/// that a drop rod is considered to include nuts and washers required for +/// securing. +/// +/// 'Duct foot' +/// A base support used to receive a vertical pipe (BS6100 330 3309 - +/// duct foot). +/// +/// 'Framing' +/// A frame placed around a penetration to prevent scraping against the +/// building surface or structure. +/// +/// 'Grommet' +/// An element placed within a penetration that seals the penetration +/// for a particular reason. +/// +/// 'Rack' +/// A set of shelving for the purposes of storage that may be +/// freestanding or bolted to a structure. +/// +/// 'Safety part' +/// A part, typically installed in vertical shafts at each level, to +/// ensure safety from falling when entering the shaft. +/// +/// 'Sleeve' +/// A thin barrier placed between a penetration and a penetrating +/// element. +/// +/// 'Support section' +/// A section of material that is used as an intermediate support upon +/// which multiple brackets can be mounted. +class IFC_PARSE_API IfcDiscreteAccessory : public IfcElementComponent { +public: + /// Subtype of discrete accessory + boost::optional< ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDiscreteAccessory (IfcEntityInstanceData* e); + IfcDiscreteAccessory (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcDiscreteAccessory > list; +}; +/// Definition from IAI: The element type +/// (IfcDiscreteAccessoryType) defines a list of commonly shared property +/// set definitions of a discrete accessory and an optional set of product +/// representations. It is used to define a supporting element mainly within +/// structural and building services domains (i.e. the specific type information +/// common to all occurrences of that type). +/// The occurrences of the IfcDiscreteAccessoryType are represented +/// by instances of IfcDiscreteAccessory. +/// The IfcDiscreteAccessoryType is a specialization of the general +/// building element component type to represent different type of structural and +/// building service related auxiliary elements. +/// HISTORY New entity in IFC +/// Release 2x2 +/// +/// IFC 2x4 change: +/// Attribute PredefinedType added. +/// +/// General usage +/// The exact type information of the IfcDiscreteAccessoryType is +/// given in the ElementType attribute inherited from IfcElementType. +/// Standard type designations are provided for guideline below. The list is not +/// exhaustive and the list of definitions may be extended based on local national +/// extensions. +/// +/// Accessory type +/// Standard type designation +/// Description +/// +/// Shading devices: +/// 'Shading device' +/// Elements specifically designed to provide shading, often fixed +/// externally and sometimes moving (e.g. by rotation) +/// +/// Corbels as separate components: +/// 'Hidden steel corbel' +/// Corbel system made from steel components embedded into the master +/// element +/// +/// 'Visible steel corbel' +/// Corbel system made from steel components protruding from the master +/// element +/// +/// 'Visible concrete corbel' +/// Corbel system made as a separate precast concrete component added +/// to the master element +/// +/// Connecting accessories, for example for sandwich wall panels: +/// 'Diagonal truss connector' +/// A fixing device in truss form with diagonal cross bars holding two +/// precast conrete panels together in a sandwich wall panel. +/// +/// 'Ladder truss connector' +/// A fixing device in truss form with straight cross bars in ladder +/// form holding two precast conrete panels together in a sandwich wall panel. +/// +/// 'Panel suspender' +/// A straight fixing device holding two precast conrete panels +/// together in a sandwich wall panel. +/// +/// Electrical accessories for precast concrete elements: +/// 'Protective plug' +/// Protective plug used in element for protecting electrical +/// accessories during manufacturing, transportation and assembly. +/// +/// Fixing parts: +/// 'Standard fixing plate' +/// Standard fixing plate. +/// +/// 'Edge fixing plate' +/// Fixing plate attached to the edge of an element. +/// +/// 'Corner fixing plate' +/// Fixing plate attached to the corner of an element. +/// +/// 'Slab fixing plate' +/// Fixing plate for slabs. +/// +/// 'Balcony hinge' +/// Accessory supporting and fixing balconies. +/// +/// 'Frame shoe' +/// Fixing shoe for frames. +/// +/// 'Thermo frame' +/// Thermo frame. +/// +/// 'Column shoe' +/// Fixing shoe for columns. +/// +/// 'Wall shoe' +/// Fixing shoe for walls. +/// +/// 'Fixing socket' +/// Fixing socket. +/// +/// Joint accessories: +/// 'Neoprene bearing plate' +/// Rubber plate used as a bearing in, for example, joints between +/// column corbels and beams. +/// +/// 'Working joint reinforcement' +/// Reinforcement accessory used in working joints. +/// +/// 'Expansion joint reinforcement' +/// Reinforcement accessory used in expansion joints. +/// +/// 'Ribbed steel bar extension' +/// Extension accessory made of a ribbed (reinforcement) bar used in +/// joints. +/// +/// 'Steel pin bolt' +/// Pin bolt used to join together, for example, columns and +/// beams. +/// +/// 'Concrete dowel' +/// Dowel pin used in joints. +/// +/// 'Concrete groove' +/// A groove made in a joint. +/// +/// 'Steel plate' +/// A steel plate used as an accessory in a joint. +/// +/// 'Wire loop' +/// A joint connector accessory made from a wire loop. +/// +/// 'Steel loop' +/// A joint connector accessory made from a steel bar loop. +/// +/// 'Sealing strip' +/// A strip sealing the joint. +/// +/// 'Sealing compound' +/// Sealing compound protecting and sealing the joint. +/// +/// Lifting accessories: +/// 'Wire lifting hook' +/// A lifting aid in the form of a wire loop. +/// +/// 'Steel lifting hook' +/// A lifting aid in the form of a steel bar loop. +/// +/// 'Lifting socket' +/// A lifting aid in the form of a socket. +/// +/// 'Steel lifting anchor' +/// A lifting aid in the form of a steel lifting anchor. +/// +/// 'Lifting hole' +/// A lifting aid in the form of a hole. +/// +/// Accessories mainly used in the building services domain: +/// 'Antivibration' +/// An isolating device to prevent other elements to be effected by +/// vibrations. +/// +/// 'Drop rod' +/// A length of material providing a hanging support to a bracket. Note +/// that a drop rod is considered to include nuts and washers required for +/// securing. +/// +/// 'Duct foot' +/// A base support used to receive a vertical pipe (BS6100 330 3309 - +/// duct foot). +/// +/// 'Framing' +/// A frame placed around a penetration to prevent scraping against the +/// building surface or structure. +/// +/// 'Grommet' +/// An element placed within a penetration that seals the penetration +/// for a particular reason. +/// +/// 'Rack' +/// A set of shelving for the purposes of storage that may be +/// freestanding or bolted to a structure. +/// +/// 'Safety part' +/// A part, typically installed in vertical shafts at each level, to +/// ensure safety from falling when entering the shaft. +/// +/// 'Sleeve' +/// A thin barrier placed between a penetration and a penetrating +/// element. +/// +/// 'Support section' +/// A section of material that is used as an intermediate support upon +/// which multiple brackets can be mounted. +class IFC_PARSE_API IfcDiscreteAccessoryType : public IfcElementComponentType { +public: + /// Subtype of discrete accessory + ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDiscreteAccessoryType (IfcEntityInstanceData* e); + IfcDiscreteAccessoryType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcDiscreteAccessoryTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcDiscreteAccessoryType > list; +}; + +class IFC_PARSE_API IfcDistributionBoardType : public IfcFlowControllerType { +public: + ::Ifc4x3_add2::IfcDistributionBoardTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcDistributionBoardTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDistributionBoardType (IfcEntityInstanceData* e); + IfcDistributionBoardType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcDistributionBoardTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcDistributionBoardType > list; +}; +/// The distribution flow element type IfcDistributionChamberElementType defines commonly shared information for occurrences of distribution chamber elements. The set of shared information may include: +/// +/// common properties with shared property sets +/// common materials +/// common ports +/// common composition of elements +/// common assignment of process types +/// common representations of shape and style +/// +/// It is used to define a distribution chamber element specification (i.e. the specific product information, that is common to all occurrences of that product type). Distribution Chamber Element types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcDistributionChamberElementType are represented by instances of IfcDistributionChamberElement. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcDistributionFlowElementType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_DistributionChamberElementCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// +/// Pset_DistributionChamberElementTypeFormedDuct (FORMEDDUCT) +/// Pset_DistributionChamberElementTypeInspectionChamber (INSPECTIONCHAMBER) +/// Pset_DistributionChamberElementTypeInspectionPit (INSPECTIONPIT) +/// Pset_DistributionChamberElementTypeManhole (MANHOLE) +/// Pset_DistributionChamberElementTypeMeterChamber (METERCHAMBER) +/// Pset_DistributionChamberElementTypeSump (SUMP) +/// Pset_DistributionChamberElementTypeTrench (TRENCH) +/// Pset_DistributionChamberElementTypeValveChamber (VALVECHAMBER) +/// +/// Material Use Definition +/// The material of the IfcDistributionChamberElementType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Base': The material from which the base of the duct is constructed. +/// 'Cover': The material from which the access cover to the chamber is constructed. +/// 'Fill': The material that is used to fill the duct (where used). +/// 'Wall': The material from which the wall of the duct is constructed. +class IFC_PARSE_API IfcDistributionChamberElementType : public IfcDistributionFlowElementType { +public: + /// Predefined types of distribution chambers. + ::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDistributionChamberElementType (IfcEntityInstanceData* e); + IfcDistributionChamberElementType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcDistributionChamberElementType > list; +}; +/// The element type IfcDistributionControlElementType defines a list of commonly shared property set definitions of an element and an optional set of product representations. It is used to define an element specification (the specific product information that is common to all occurrences of that product type). +/// +/// Distribution control element types (or the instantiable subtypes) may be exchanged without being already assigned to occurrences. +/// +/// The occurrences of the IfcDistributionControlElementType are represented by instances of IfcDistributionControlElement or its subtypes. +/// +/// HISTORY: New entity in IFC Release 2x2. +/// +/// Declaration Use Definition +/// The IfcDistributionControlElementType may be declared within a project or project library using IfcRelDeclares where RelatingContext refers to the project or library and RelatedDefinitions includes the element type. Inclusion within IfcProject indicates the type is editable within the direct project and may be available to other referencing projects that may incorporate the type. Inclusion within IfcProjectLibrary indicates the type is incorporated from a referenced project. Default units and coordinate systems (used for representations, materials, and property sets) are indicated by the declaring project or library. +/// +/// Classification Use Definition +/// The IfcDistributionControlElementType may be classified using IfcRelAssociatesClassification where RelatingClassification refers to an IfcClassificationReference indicating a classification notation. Classifications may refer to industry standards such as MasterFormat, OmniFormat, or UniFormat. Classifications may also refer to organization-specific, project-specific, or system-specific designations. Classification reference identification schemes are described by IfcClassification.ReferenceTokens. +/// +/// Document Use Definition +/// The IfcDistributionControlElementType may be documented using IfcRelAssociatesDocument where RelatingDocument refers to an IfcDocumentReference indicating content within a document, or IfcDocumentInformation indicating an entire document. Document information may refer to arbitrary attachments such as text or multimedia, while document references may refer to items within particular formats (such as XML element IDs) where there is need to synchronize document information with model information. Document reference identification schemes depend on the particular document format. +/// +/// Library Use Definition +/// The IfcDistributionControlElementType may be published to a model server using IfcRelAssociatesLibrary where RelatingLibrary refers to an IfcLibraryReference indicating the unique identification within the published project. If the published project is IFC format, then IfcLibraryReference.Identification shall match IfcRoot.GlobalID of the published (master) project, using the same encoding as described for IfcGloballyUniqueId. Multiple library references may be provided to indicate alternate names and descriptions for particular languages. If the element type is declared within IfcProject, then IfcLibraryInformation.Location and IfcLibraryInformation.Version indicate the URL and version as last published. If the element type is declared within IfcProjectLibrary, then the library information indicates the location and version of the definition as last retrieved. +/// +/// Composition Use Definition +/// The IfcDistributionControlElementType may be decomposed into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcDistributionFlowElementType and RelatedObjects contains one or more components. For example, a thermostat type may be decomposed into temperature sensors. Standard types for composition are defined at occurrences for subtypes. +/// +/// Connection Use Definition +/// The IfcDistributionControlElementType may be connected to other objects as follows using the indicated relationship: +/// +/// IfcDistributionPort (IfcRelConnectsPortToElement) : Indicates port definitions on the element to be instantiated at occurrences. Standard port names, types, and directions are defined at occurrences for subtypes. +/// +/// Assignment Use Definition +/// The IfcDistributionControlElementType may have assignments of its own using the IfcRelAssignsToProduct relationship where RelatingProduct refers to the IfcDistributionControlElementType and RelatedObjects contains one or more objects of the following types: +/// +/// IfcTaskType: Indicates task types available to purchase, install, renovate, demolish, operate, or otherwise act upon occurrences of the element type. Such task types may be instantiated as task occurrences assigned to occurrences of the element type. Prices (such as for purchasing or shipping) may be established by resource types assigned to task types. +/// IfcProcedureType: Indicates procedure types available to operate occurrences of the element type. Such procedure types may be instantiated as procedure occurrences assigned to occurrences of the element type. +/// IfcEventType: Indicates event types available to be raised by occurrences of the element, sequenced by procedures to be followed. Such event types may be instantiated as event occurrences assigned to occurrences of the element type. +/// +/// Material Use Definition +/// The material of the IfcDistributionControlElementType is defined using one of the following entities: +/// +/// IfcMaterialConstituentSet: For elements containing multiple materials, this indicates materials at named aspects. +/// +/// IfcMaterial: For elements comprised of a single material, this indicates the material. +/// +/// The material is attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. +/// +/// Representation Use Definition +/// The following shape representations are supported for subtypes of IfcDistributionControlElementType, distinguished by IfcShapeRepresentation.RepresentationIdentifier: +/// +/// 'Footprint': Represents the 2D footprint outline of the item having IfcShapeRepresentation.RepresentationType of 'GeometricCurveSet' and containing a single IfcGeometricCurveSet consisting of one or more IfcCurve subtypes such as IfcPolyline, IfcTrimmedCurve, IfcCompositeCurve, or IfcCircle. +/// +/// 'Body': Represents the 3D shape of the item having IfcShapeRepresentation.RepresentationType of 'SurfaceModel', 'SolidModel', or any solid model specializations including 'Brep', 'AdvancedBrep', 'SweptSolid', 'AdvancedSweptSolid', 'CSG', 'Clipping', or 'SectionedSpine'). +/// +/// 'Clearance': Represents the 3D clearance volume of the item having RepresentationType of 'Surface3D'. Such clearance region indicates space that should not intersect with the 'Body' representation between element occurrences, though may intersect with the 'Clearance' representation of other element occurrences. The particular use of clearance space may be for safety, maintenance, or other purpose. +/// +/// NOTE: The product representations are defined as representation maps (at the level of the supertype IfcTypeProduct, which get assigned by an element occurrence instance through the IfcShapeRepresentation.Item[1] being an IfcMappedItem. +class IFC_PARSE_API IfcDistributionControlElementType : public IfcDistributionElementType { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDistributionControlElementType (IfcEntityInstanceData* e); + IfcDistributionControlElementType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType); + typedef aggregate_of< IfcDistributionControlElementType > list; +}; +/// Definition from IAI: Generalization of all elements +/// that participate in a distribution system. Typical examples of +/// IfcDistributionElement are (among others): +/// +/// building service elements within a heating systems +/// building service elements within a cooling system +/// building service elements within a ventilation system +/// building service elements within a plumbing system +/// +/// e.g. sanitary elements, fire suppression elements +/// +/// electrical elements +/// elements within a communication network +/// +/// The IfcDistributionElement is further specialized in +/// the IFC model. Direct instantiation of +/// IfcDistributionElement without an assigned subtype of +/// IfcDistributionElementType provides the meaning of an +/// distribution element proxy. +/// HISTORY New entity in +/// IFC Release 1.5. +/// IFC2x4 CHANGE The entity is marked +/// as deprecated for instantiation - will be made ABSTRACT after +/// IFC2x4. +/// Relationship Use Definition +/// +/// Ports - information, whether the distribution element has +/// ports for system connections +/// +/// objectified relationship: +/// IfcRelConnectsPortToElement +/// object referenced by relationship: IfcPort +/// inverse attribute: HasPorts +/// +/// Type Use Definition +/// The IfcDistributionElement defines the occurrence of +/// any HVAC, electrical, sanitary or other element within a +/// distribution system. Common information about distribution +/// element types (or styles) is handled by subtypes of +/// IfcDistributionElementType. The +/// IfcDistributionElementType (if present) may establish the +/// common type name, usage (or predefined) type, common material, +/// common set of properties and common shape representations (using +/// IfcRepresentationMap). The +/// IfcDistributionElementType is attached using the +/// IfcRelDefinedByType.RelatingType objectified relationship +/// and is accessible by the inverse IsDefinedBy +/// attribute. +/// The assignment of types to distribution element occurrences is +/// vital for providing the additional meaning, or ontology, of the +/// distribution element. Many specialized type are defined in other +/// schemas of the IFC specification. +/// Quantity Use Definition +/// The quantities relating to the IfcDistributionElement +/// are defined by the IfcElementQuantity and attached by the +/// IfcRelDefinesByProperties. A detailed specification for +/// individual quantities is introduced at the level of subtypes of +/// IfcDistributionElement. +/// Containment Use Definition +/// The IfcDistributionElement may participate in two +/// different containment relationships. The first (and in most +/// implementation scenarios mandatory) relationship is the +/// hierachical spatial containment, the second (optional) +/// relationship is the aggregation within anelement assembly. +/// +/// The IfcDistributionElement is places within the +/// project spatial hierarchy using the objectified relationship +/// IfcRelContainedInSpatialStructure, referring to it by its +/// inverse attribute SELF\IfcElement.ContainedInStructure. +/// Subtypes ofIfcSpatialStructureElement are valid spatial +/// containers, with IfcSpace being the default +/// container. +/// The IfcDistributionElement may be aggregated into an +/// element assembly using the objectified relationship +/// IfcRelAggregates, referring to it by its inverse attribute +/// SELF\IfcObjectDefinition.Decomposes. Any subtype of +/// IfcElement can be an element assembly, with +/// IfcElementAssembly as a special focus subtype. In this +/// case it should not be additionally contained in the project +/// spatial hierarchy, +/// i.e.SELF\IfcElement.ContainedInStructure should be +/// NIL. +/// +/// Geometry Use Definitions +/// The geometric representation of IfcDistributionElement +/// is given by the IfcProductDefinitionShape, allowing +/// multiple geometric representation. +/// Local Placement +/// The local placement for IfcDistributionElement is +/// defined in its supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate +/// system that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if given) to the local +/// placement of the same IfcSpatialStructureElement , which +/// is used in the ContainedInStructure inverse attribute, or +/// to a spatial structure element at a higher level, referenced by +/// that. +/// If the relative placement is not used, the absolute placement +/// is defined within the world coordinate system. +/// +/// Geometric Representations +/// The geometric representation of IfcDistributionElement +/// is defined using different geometric representation types for the +/// various subtypes. Only general recommendations are given at the +/// level of the supertype, further constraints are defined at the +/// level of its subtypes. +/// +/// all occurrences of IfcDistributionElement (and its +/// subtypes) should (whenever possible) share a representation map +/// established by the assigned type. The geometric representation of +/// the occurrence is then an IfcMappedItem. The +/// IfcShapeRepresentation has: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'MappedRepresentation' +/// +/// The shared geometric representation of the distribution +/// element type (or in some cases of the distribution element) +/// should follow (if applicable) the the following guidelines: +/// +/// all fixtures (all non distribution flow elements, i.e. +/// everything which is not a duct, a pipe, a cable, or a cable +/// carrier) should be defined by an b-rep geometry. This includes +/// also the complex flow fitting elements (e.g. Y branch or T +/// branch) or distribution flow elements with size changes (e.g. +/// reducer). The IfcShapeRepresentation has: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'Brep' +/// +/// if the geometric model consistency of a b-rep shape +/// representation can not be guaranteed (arcwise connected volume +/// bounded by faces, each being connected, oriented, finite, closed +/// 2-manifold), a surface representation based on open shells should +/// be used. The IfcShapeRepresentation then has: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'SurfaceModel' +/// +/// all "simple" distribution flow elements (general ducts and +/// pipes) are defined by sweep geometry. The +/// IfcShapeRepresentation has: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'SweptSolid' +/// +/// an additional representation type for all "simple" +/// distribution flow elements (general ducts and pipes) is the +/// ability to have a simple line based representation. The +/// IfcShapeRepresentation has: +/// +/// RepresentationIdentifier : 'FootPrint' +/// RepresentationType : 'GeometricCurveSet' +/// +/// if only the analytical shape is required for which the exact +/// interpolation between the cross sections is not required, a +/// sectioned spine can be used. +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'SectionedSpine' +class IFC_PARSE_API IfcDistributionElement : public IfcElement { +public: + aggregate_of< IfcRelConnectsPortToElement >::ptr HasPorts() const; // INVERSE IfcRelConnectsPortToElement::RelatedElement + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDistributionElement (IfcEntityInstanceData* e); + IfcDistributionElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcDistributionElement > list; +}; +/// The distribution element IfcDistributionFlowElement defines occurrence elements of a distribution system that facilitate the distribution of energy or matter, such as air, water or power. +/// +/// EXAMPLEs of distribution flow elements are ducts, pipes, wires, fittings, and equipment. +/// +/// HISTORY: New entity in IFC R2.0. +/// +/// Type Use Definition +/// IfcDistributionFlowElement defines the occurrence of any distribution flow element; common information about distribution flow element types is handled by IfcDistributionFlowElementType. The IfcDistributionFlowElementType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. The IfcDistributionFlowElementType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. If the IfcDistributionFlowElementType has ports or aggregated elements, such objects are reflected at the IfcDistributionFlowElement occurrence using the IfcRelDefinesByObject relationship. Direct instantiation of IfcDistributionFlowElement with IfcObject.ObjectType asserted provides the meaning of a distribution flow element proxy. +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. They are accessible by the IsDefinedBy inverse attribute. Property sets may also be specified at the IfcDistributionFlowElementType, defining the common property data for all occurrences of the same type. They are then accessible by the IsTypedBy inverse attribute pointing to IfcDistributionFlowElementType.HasPropertySets. If both are given, then the properties directly defined at IfcDistributionFlowElement override the properties defined at IfcDistributionFlowElementType. Refer to the documentation at the supertype IfcDistributionElement and ancestors for inherited property set definitions. +/// +/// Composition Use Definition +/// The IfcDistributionFlowElement may be decomposed into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcDistributionFlowElement and RelatedObjects contains one or more components. For example, a cable may be decomposed into wires. Standard types for composition are defined at subtypes. +/// +/// Connection Use Definition +/// The IfcDistributionFlowElement may be connected to other objects as follows using the indicated relationship: +/// +/// IfcSpatialStructureElement (IfcRelContainedInSpatialStructure) : Indicates the spatial location containing the element. +/// IfcElement (IfcRelConnectsElements) : Indicates physical connectivity with another element (but not embedding or flow transmission), such as a light fixture hanging from a ceiling (IfcCovering), or a junction box having a cover plate (IfcDiscreteAccessory). IfcRelConnectsElements.RelatingElement refers to the anchored side (ceiling for fixture, junction box for cover). +/// IfcElement (IfcRelInterferesElements) : Indicates interference with another element and precedence, such as a pipe going through a wall. +/// IfcOpening (IfcRelFillsElement) : Indicates embedding an element within another element (implying a cutout), such as an air terminal or junction box embedded within a wall. +/// IfcDistributionPort (IfcRelConnectsPortToElement) : Indicates ports on the element which may be connected to other elements for flow distribution of solids, liquids, gas, or electricity. Standard port names, types, and directions are defined at subtypes. +/// IfcDistributionControlElement (IfcRelFlowControlElements) : Indicates a control element that senses or controls some aspect of the flow element, such as a level sensor for a tank or an actuator for a valve. +/// +/// Assignment Use Definition +/// The IfcDistributionFlowElement may be assigned to the following entities using relationships as indicated: +/// +/// IfcDistributionSystem (IfcRelAssignsToGroup): Indicates a system containing interconnected devices. +/// IfcPerformanceHistory (IfcRelAssignsToControl): Indicates realtime or historical infomation captured for the device. +/// +/// The IfcDistributionFlowElement may have assignments of its own using the IfcRelAssignsToProduct relationship where RelatingProduct refers to the IfcDistributionFlowElement and RelatedObjects contains one or more objects of the following types: +/// +/// IfcTask: Indicates tasks used to purchase, install, renovate, demolish, operate, or otherwise act upon the element. If the element has a type, available task types are assigned to the element type. +/// IfcProcedure: Indicates procedures used to operate the element. If the element has a type, available procedure types are assigned to the element type. +/// IfcEvent: Indicates events raised by the element, sequenced by procedures to be followed. If the element has a type, available event types are assigned to the element type. +/// +/// Material Use Definition +/// The material of the IfcDistributionFlowElement is defined using one of the following entities: +/// +/// IfcMaterialProfileSetUsage: For parametric segments, this defines the cross section and alignment to the 'Axis' representation, from which the 'Body' representation may be generated. +/// +/// IfcMaterialProfileSet: For non-parametric segments (having fixed length or path), this may define the cross section for analysis purposes, however the 'Body' representation is independently generated. +/// +/// IfcMaterialConstituentSet: For elements containing multiple materials, this indicates materials at named aspects. +/// +/// IfcMaterial: For elements comprised of a single material, this indicates the material. +/// +/// The material is attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcDistributionFlowElementType, defining the common attribute data for all occurrences of the same type. Standard names and material types are defined at subtypes. +/// +/// Representation Use Definition +/// The following shape representations are supported for subtypes of IfcDistributionFlowElement, distinguished by IfcShapeRepresentation.RepresentationIdentifier: +/// +/// 'Axis': Represents the 3D flow path of the item having IfcShapeRepresentation.RepresentationType of 'Curve3D' and containing a single IfcBoundedCurve subtype such as IfcPolyline, IfcTrimmedCurve, or IfcCompositeCurve. For elements containing directional ports (IfcDistributionPort with FlowDirection of SOURCE or SINK), the direction of the curve indicates direction of flow where a SINK port is positioned at the start of the curve and a SOURCE port is positioned at the end of the curve. This representation is most applicable to flow segments (pipes, ducts, cables), however may be used at other elements to define a primary flow path if applicable. +/// +/// 'Footprint': Represents the 2D footprint outline of the item having IfcShapeRepresentation.RepresentationType of 'GeometricCurveSet' and containing a single IfcGeometricCurveSet consisting of one or more IfcCurve subtypes such as IfcPolyline, IfcTrimmedCurve, IfcCompositeCurve, or IfcCircle. +/// +/// 'Body': Represents the 3D shape of the item having IfcShapeRepresentation.RepresentationType of 'SurfaceModel', 'SolidModel', or any solid model specializations including 'Brep', 'AdvancedBrep', 'SweptSolid', 'AdvancedSweptSolid', 'CSG', 'Clipping', or 'SectionedSpine'). +/// +/// 'Clearance': Represents the 3D clearance volume of the item having RepresentationType of 'Surface3D'. Such clearance region indicates space that should not intersect with the 'Body' representation of other elements, though may intersect with the 'Clearance' representation of other elements. The particular use of clearance space may be for safety, maintenance, or other purpose. +/// +/// 'Lighting': Represents the light emission of the item having IfcShapeRepresentation.RepresentationType of 'LightSource' and containing one or more IfcLightSource subtypes. This representation is most applicable to lamps and light fixtures, however may be used at other elements that emit light. +/// +/// For all representations, if a IfcDistributionFlowElement occurrence is defined by a IfcDistributionFlowElementType having a representation of the same identifier, then 'MappedRepresentation' should be used at the occurrence unless overridden. +/// +/// If materials are defined, geometry of each representation (most typically the 'Body' representation) may be organized into shape aspects where styles may be derived by correlating IfcShapeAspect.Name to a corresponding material (IfcMaterialConstituent.Name or IfcMaterialProfile.Name). +/// +/// Representations are further defined at subtypes; for example, parametric flow segments align material profiles with the 'Axis' representation. +class IFC_PARSE_API IfcDistributionFlowElement : public IfcDistributionElement { +public: + aggregate_of< IfcRelFlowControlElements >::ptr HasControlElements() const; // INVERSE IfcRelFlowControlElements::RelatingFlowElement + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDistributionFlowElement (IfcEntityInstanceData* e); + IfcDistributionFlowElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcDistributionFlowElement > list; +}; +/// A distribution port is an inlet or outlet of a product through which a particular substance may flow. +/// +/// Distribution ports are used for passage of solid, liquid, or gas substances, as well as electricity for power or communications. Flow segments (pipes, ducts, cables) may be used to connect ports across products. Distribution ports are defined by system type and flow direction such that for two ports to be connected, they must share the same system type and have opposite flow directions (one side being a SOURCE and the other being a SINK). Ports are similar to openings in that they do not have any visible geometry; such geometry is captured at the shape representation of the enclosing element or element type. Ports may have shape representations that indicate the position, orientation, and cross-section of the connection. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. They are accessible by the IsDefinedBy inverse attribute. Refer to the documentation at the supertype IfcPort and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// +/// Pset_DistributionPortCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// +/// Pset_DistributionPortTypeAirConditioning (AIRCONDITIONING) +/// Pset_DistributionPortTypeAudioVisual (AUDIOVISUAL) +/// Pset_DistributionPortTypeData (DATA) +/// Pset_DistributionPortTypeDomesticColdWater (DOMESTICCOLDWATER) +/// Pset_DistributionPortTypeDomesticHotWater (DOMESTICHOTWATER) +/// Pset_DistributionPortTypeDrainage (DRAINAGE) +/// Pset_DistributionPortTypeElectrical (ELECTRICAL) +/// Pset_DistributionPortTypeFireProtection (FIREPROTECTION) +/// Pset_DistributionPortTypeGas (GAS) +/// Pset_DistributionPortTypeHeating (HEATING) +/// Pset_DistributionPortTypeOil (OIL) +/// Pset_DistributionPortTypeSewage (SEWAGE) +/// Pset_DistributionPortTypeSignal (SIGNAL) +/// Pset_DistributionPortTypeTelephone (TELEPHONE) +/// +/// The following property set definitions are applicable to IfcPerformanceHistory, for which objects are assigned: +/// +/// Pset_DistributionPortPHistoryAirConditioning (AIRCONDITIONING) +/// Pset_DistributionPortPHistoryControl (CONTROL) +/// Pset_DistributionPortPHistoryData (DATA) +/// Pset_DistributionPortPHistoryElectrical (ELECTRICAL) +/// Pset_DistributionPortPHistoryGas (GAS) +/// Pset_DistributionPortPHistoryHeating (HEATING) +/// Pset_DistributionPortPHistoryOil (OIL) +/// Pset_DistributionPortPHistorySignal (SIGNAL) +/// +/// Material Use Definition +/// The material of the IfcDistributionPort is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Media': The solid, liquid, or gas media passing through the port. +/// +/// Composition Use Definition +/// The IfcDistributionPort may be decomposed into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcDistributionPort and RelatedObjects contains one or more components. Composition use is defined for the following predefined types: +/// +/// AUDIOVISUAL: May contain IfcDistributionPort components having PredefinedType AUDIOVISUAL. If needed, audio-visual ports may be aggregated into specific streams (channels).CONTROL: May contain IfcDistributionPort components having PredefinedType SIGNAL. If needed, control ports may be aggregated into signal lines for indicating pinout specification.DATA: May contain IfcDistributionPort components having PredefinedType SIGNAL. If needed, data ports may be aggregated into signal lines for indicating pinout specification.ELECTRICAL: May contain IfcDistributionPort components having PredefinedType SIGNAL. If needed, electrical ports may be aggregated into modulated signals for data or lighting control.ELECTROACCOUSTIC: May contain IfcDistributionPort components having PredefinedType ELECTROACCOUSTIC. If needed, speaker ports may be aggregated into streams (channels) for each speaker.TELEPHONE: May contain IfcDistributionPort components having PredefinedType TELEPHONE. If needed, telephone ports may be aggregated for each line. +/// +/// Connection Use Definition +/// The IfcDistributionPort may be connected to other objects as follows using the indicated relationship: +/// +/// IfcDistributionElement (IfcRelConnectsPortToElement) : Indicates the host element or element type containing the port. +/// IfcDistributionPort (IfcRelConnectsPorts) : Indicates a connection to another port having the same type and opposite flow direction. +/// For port connections between elements, +/// the RelatingPort is set to a port having FlowDirection=SOURCE and +/// the RelatedPort is set to a port having FlowDirection=SINK. +/// For aggregation scenarios, ports on a device may be mapped to aggregated devices within, +/// in which case ports on the outer device indicate a single FlowDirection but have an additional connection internally +/// to a port on an aggregated inner device. +/// Refer to IfcUnitaryEquipment for an example. +/// +/// Figure 149 illustrates distribution port connectivity. +/// +/// Figure 149 — Distribution port connectivity +/// +/// Assignment Use Definition +/// The IfcDistributionPort may be assigned to the following entities using relationships as indicated: +/// +/// IfcDistributionSystem (IfcRelAssignsToGroup): Indicates a system containing interconnected devices. +/// IfcPerformanceHistory (IfcRelAssignsToControl): Indicates realtime or historical infomation captured for the device. +/// +/// The IfcDistributionPort may have assignments of its own using the IfcRelAssignsToProduct relationship where RelatingProduct refers to the IfcDistributionPort and RelatedObjects contains one or more objects of the following types: +/// IfcDistributionSystem: Indicates a system that is hosted by the port, as the origination. +/// +/// Representation Use Definition +/// The representation of IfcDistributionPort is given by IfcProductDefinitionShape, allowing multiple shape and topology representations. Included are: +/// +/// IfcShapeRepresentation: The optional shape representation describes the connection volume and supports indication of the port position and orientation. The position is typically the midpoint of the physical connection, and the orientation points in the flow direction normal to the physical connection. Upon connecting elements through ports with rigid connections, each object is aligned such that the effective Location, Axis, and RefDirection of each port is aligned to be equal. +/// +/// 'Body': The shape of the port. +class IFC_PARSE_API IfcDistributionPort : public IfcPort { +public: + /// Enumeration that identifies if this port is a Sink (inlet), a Source (outlet) or both a SinkAndSource. + boost::optional< ::Ifc4x3_add2::IfcFlowDirectionEnum::Value > FlowDirection() const; + void setFlowDirection(boost::optional< ::Ifc4x3_add2::IfcFlowDirectionEnum::Value > v); + /// Enumeration that identifies the system type. If a system type is defined, the port may only be connected to other ports having the same system type. + boost::optional< ::Ifc4x3_add2::IfcDistributionPortTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcDistributionPortTypeEnum::Value > v); + boost::optional< ::Ifc4x3_add2::IfcDistributionSystemEnum::Value > SystemType() const; + void setSystemType(boost::optional< ::Ifc4x3_add2::IfcDistributionSystemEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDistributionPort (IfcEntityInstanceData* e); + IfcDistributionPort (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< ::Ifc4x3_add2::IfcFlowDirectionEnum::Value > v8_FlowDirection, boost::optional< ::Ifc4x3_add2::IfcDistributionPortTypeEnum::Value > v9_PredefinedType, boost::optional< ::Ifc4x3_add2::IfcDistributionSystemEnum::Value > v10_SystemType); + typedef aggregate_of< IfcDistributionPort > list; +}; +/// A distribution system is a network designed to receive, store, maintain, distribute, or control the flow of a distribution media. A common example is a heating hot water system that consists of a pump, a tank, and an interconnected piping system for distributing hot water to terminals. +/// +/// HISTORY New entity in IFC 2x4. +/// +/// The group IfcDistributionSystem +/// defines the occurrence of a specialized system for use within the context of building services. +/// +/// NOTE: For electrical power systems, IfcElectricalCircuit has been used for low-voltage (12-1000 V) power systems and has been deprecated in IFC2x4; IfcDistributionSystem with PredefinedType 'ELECTRICAL' should now be used instead. +/// +/// Important functionalities for the description of a distribution system are derived from existing IFC entities: +/// +/// From IfcSystem it inherits the ability to couple the distribution system via IfcRelServicesBuildings to one or more IfcSpatialElement subtypes as necessary. +/// +/// From IfcGroup it inherits the inverse attribute IsGroupedBy, pointing to the relationship class IfcRelAssignsToGroup. This allows to group distribution elements (instances of IfcDistributionElement subtypes), and in special cases ports directly (instances of IfcDistributionPort). +/// +/// From IfcObject it inherits the inverse attribute IsDecomposedBy pointing to the relationship class IfcRelAggregates. It provides the hierarchy between the separate (partial) distribution systems. For example, an electrical main circuit may be aggregated into branch circuits. +/// +/// Property Set Use Definition: +/// +/// The property sets relating to this entity are defined by the IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. It is accessible by the inverse IsDefinedBy relationship. The following property set definitions specific to this entity are part of this IFC release: +/// +/// Pset_DistributionSystemCommon: common property set for distribution system occurrences +/// +/// Pset_DistributionSystemTypeElectrical: property set for electrical systems +/// +/// Pset_DistributionSystemTypeVentilation: property set for ventilation systems +/// +/// Assignment Use Definition: +/// +/// For the most common case of an IfcDistributionElement subtype containing ports of a particular PredefinedType that all belong to the same distribution system, the IfcDistributionElement is assigned to the IfcDistributionSystem via the IfcRelAssignsToGroup relationship, where IfcDistributionPort's are implied as part of the corresponding system based on their PredefinedType. An IfcDistributionElement may belong to multiple systems, however only one IfcDistributionSystem of a particular PredefinedType. +/// +/// For rare cases where an IfcDistributionElement subtype contains ports of the same PredefinedType yet different ports belong to different systems, alternatively each IfcDistributionPort may be directly assigned to a single IfcDistributionSystem via the IfcRelAssignsToGroup relationship, where the PredefinedType must match. Such assignment indicates that the IfcDistributionSystem assigned from the IfcDistributionPort overrides any such system of the same PredefinedType assigned from the containing IfcDistributionElement, if any. +/// +/// Additionally, an IfcDistributionSystem may in turn be assigned to an IfcDistributionPort indicating the host or origination of the system using IfcRelAssignsToProduct. +/// +/// EXAMPLE: A gas-powered hot water heater may have three ports: GAS, DOMESTICCOLDWATER, and DOMESTICHOTWATER. The heater is a member of two systems (GAS and DOMESTICCOLDWATER), and hosts one system (DOMESTICHOTWATER) at the corresponding port. +/// +/// Figure 150 illustrates a distribution system for an electrical circuit. +/// +/// Figure 150 — Distribution system assignment +class IFC_PARSE_API IfcDistributionSystem : public IfcSystem { +public: + /// Long name for a system, used for informal purposes. It should be used, if available, in conjunction with the inherited Name attribute. + /// + /// NOTE In many scenarios the Name attribute refers to the short name or number of a distribution system or branch circuit, and the LongName refers to a descriptive name. + boost::optional< std::string > LongName() const; + void setLongName(boost::optional< std::string > v); + /// Predefined types of distribution systems. + boost::optional< ::Ifc4x3_add2::IfcDistributionSystemEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcDistributionSystemEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDistributionSystem (IfcEntityInstanceData* e); + IfcDistributionSystem (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_LongName, boost::optional< ::Ifc4x3_add2::IfcDistributionSystemEnum::Value > v7_PredefinedType); + typedef aggregate_of< IfcDistributionSystem > list; +}; +/// Definition from ISO 6707-1:1989: Construction for +/// closing an opening, intended primarily for access with hinged, +/// pivoted or sliding operation. +/// The door is a building element +/// that is predominately used to provide controlled access for +/// people and goods. It includes constructions with hinged, pivoted, +/// sliding, and additionally revolving and folding operations. A +/// door consists of a lining and one or several panels. +/// The IfcDoor defines a particular occurrence of a door +/// inserted in the spatial context of a project. A door can: +/// +/// be inserted as a filler in an opening using the +/// IfcRelFillsElement relationship, then the IfcDoor +/// has an inverse attribute FillsVoids provided, +/// +/// NOTE View definitions or +/// implementer agreements may restrict the relationship to only +/// include one window (or door) into one opening. +/// +/// be part of an element assembly, in general an +/// IfcCurtainWall, using the IfcRelAggregates +/// relationship, then the inverse attribute Decomposes is +/// provided. +/// or be a "free standing" door, then the IfcDoor has no +/// inverse attributes FillsVoids or Decomposes +/// provided. +/// +/// The IFC specification provides two entities for door +/// occurrences: +/// +/// IfcDoorStandardCase used for all occurrences of doors, +/// that have a 'Profile' shape representation defined to which a set +/// of shape parameters for lining and framing properties apply. +/// Additionally it requires the provision of an IfcDoorType +/// that references one IfcDoorLiningProperties and on to many +/// IfcDoorPanelProperties. +/// +/// NOTE see +/// IfcDoorStandardCase for all specific constraints imposed +/// by this subtype. +/// +/// IfcDoor used for all other occurrences of doors, +/// particularly for doors having only 'Brep', or 'SurfaceModel' +/// geometry without applying shape parameters. +/// +/// The actual parameter of the door and/or its shape are defined +/// by the IfcDoor as the occurrence definition (or project +/// instance), or by the IfcDoorType as the specific definition (or +/// project type). The following parameters are given: +/// +/// at the IfcDoor or IfcDoorStandardCase for +/// occurrence specific parameters. The IfcDoor +/// specifies: +/// +/// the door width and height +/// the door opening direction (by the y-axis of the +/// ObjectPlacement) +/// +/// at the IfcDoorType, to +/// which the IfcDoor is related by the inverse relationship +/// IsDefinedBy pointing to IfcRelDefinesByType, for +/// type parameters common to all occurrences of the same type. +/// +/// the operation type (single swing, double swing, revolving, +/// etc.) +/// the door hinge side (by using two different styles for right +/// and left opening doors) +/// the construction material type +/// the particular attributes for the lining by the +/// IfcDoorLiningProperties +/// the particular attributes for the panels by the +/// IfcDoorPanelProperties +/// +/// HISTORY New entity in IFC Release 1.0. +/// IFC2x4 CHANGE The attributes PredefinedType and OperationType are added, the applicable type object has been changed to IfcDoorType. +/// +/// Material Use Definition +/// The material of the IfcDoor is defined by the +/// IfcMaterialConstituentSet or as fall back by +/// IfcMaterial and attached by the +/// IfcRelAssociatesMaterial.RelatingMaterial. It is +/// accessible by the inverse HasAssociations +/// relationship. +/// The following keywords for +/// IfcMaterialConstituentSet.MaterialConstituents[n].Name +/// shall be used: +/// +/// 'Lining' - to indicate that the material constituent applies +/// to to the door lining +/// 'Framing' - to indicate that the material constituent applies +/// to to the door panel(s), if not provided, the 'Lining' material +/// information applied to panel(s) as well +/// 'Glazing' - to indicate that the material constituent applies +/// to to the glazing part +/// +/// If the fall back single IfcMaterial is referenced, it +/// applies to the lining and framing of the door. +/// Property Set Use Definition: +/// The property sets relating to the IfcDoor are defined +/// by the IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// property set definitions specific to the IfcDoor are part +/// of this IFC release: +/// +/// Pset_DoorCommon: common property set for all +/// door occurrences +/// Pset_DoorWindowGlazingType: specific property +/// set for the glazing properties of the door glazing, if +/// available +/// Pset_DoorWindowShadingType: specific property +/// set for the shading properties of the door glazing, if +/// available +/// +/// Quantity Use Definition +/// The quantities relating to the IfcDoor are defined by +/// the IfcElementQuantity and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// base quantities are defined and should be exchanged with the +/// IfcElementQuantity.Name = 'BaseQuantities'. Other +/// quantities can be defined being subjected to local standard of +/// measurement with another string value assigned to +/// MethodOfMeasurement. Quanties shall be never assigned to +/// the IfcDoorType. +/// +/// Qto_DoorBaseQuantities: base quantities for +/// all door occurrences. +/// +/// Containment Use Definition +/// The IfcDoor, as any subtype of +/// IfcBuildingElement, may participate in two different +/// containment relationships as shown in Figure 96. The first (and in most implementation +/// scenarios mandatory) relationship is the hierachical spatial +/// containment, the second (optional) relationship is the +/// aggregation within anelement assembly. +/// +/// The IfcDoor is places within the project spatial +/// hierarchy using the objectified relationship +/// IfcRelContainedInSpatialStructure, refering to it by its +/// inverse attribute SELF\IfcElement.ContainedInStructure. +/// Subtypes ofIfcSpatialStructureElement are valid spatial +/// containers, with IfcBuildingStorey being the default +/// container. +/// The IfcDoor may be aggregated into an element assembly +/// using the objectified relationship IfcRelAggregates, +/// refering to it by its inverse attribute +/// SELF\IfcObjectDefinition.Decomposes. Doors may be part of +/// an IfcCurtainWall as a special focus subtype. In this case +/// it should not be additionally contained in the project spatial +/// hierarchy, i.e.SELF\IfcElement.ContainedInStructure +/// should be NIL. +/// +/// NOTE The containment shall be defined independently of the +/// filling relationship, that is, even if the IfcDoor is a +/// filling of an opening established by IfcRelFillsElement, +/// it is also contained in the spatial structure by an +/// IfcRelContainedInSpatialStructure. +/// +/// Figure 96 — Door containment +/// +/// Geometry Use Definitions: +/// The geometric representation of IfcDoor is given by the +/// IfcProductDefinitionShape, allowing multiple geometric +/// representations. The IfcDoor, in case of an occurrance +/// object, gets its parameter and shape from the IfcDoorType. +/// If an IfcRepresentationMap (a block definition) is defined +/// for the IfcDoorType, then the IfcDoor inserts it +/// through the IfcMappedItem. +/// Local Placement +/// The local placement for IfcDoor is defined in its +/// supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate +/// system that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point to the local placement of +/// the same element (if given), in which the IfcDoor is used +/// as a filling (normally an IfcOpeningElement), as provided +/// by the IfcRelFillsElement relationship. +/// If the IfcDoor is not inserted into an +/// IfcOpeningElement, then the PlacementRelTo +/// relationship of IfcLocalPlacement shall point (if given) +/// to the local placement of the same +/// IfcSpatialStructureElement that is used in the +/// ContainedInStructure inverse attribute or to a referenced +/// spatial structure element at a higher level. +/// If the relative placement is not used, the absolute placement +/// is defined within the world coordinate system. +/// +/// Geometric Representation +/// Thegeometric representation of IfcDoor is defined +/// using the following (potentiallymultiple) +/// IfcShapeRepresentation's for its +/// IfcProductDefinitionShape: +/// +/// Profile: A'Curve3D' +/// consisting of a single losed curve defining the outer boundary of +/// the door (lining). The door parametric representation uses this +/// profile in order to apply the door lining and panel parameter. If +/// not provided, the profile of the IfcOpeningElement is +/// taken. +/// FootPrint: A 'GeometricCurveSet', or 'Annotation2D' +/// representation defining the 2D shape of the door +/// Body: A 'SweptSolid', 'SurfaceModel', or 'Brep' +/// representation defining the 3D shape of the door. +/// +/// In addition the parametric representation of a (limited) door +/// shape is available by applying the parameters from +/// IfcDoorType referencing IfcDoorLiningProperties and +/// IfcDoorPanelProperties. The purpose of the parameter is +/// described at those entities and below (door opening operation by +/// door type). +/// Profile -'Curve3D' representation +/// The door profile is represented by a three-dimensional closed +/// curve within a particular shape representation. The profile is +/// used to apply the parameter of the parametric door +/// representation.The following attribute values for the +/// IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'Profile' +/// RepresentationType : 'Curve3D', only a single closed +/// curve shall be contained in the set of +/// IfcShapeRepresentation.Items. +/// +/// A 'Profile' representation has to be provided if: +/// +/// a parametric representation shall be applied to the door +/// AND +/// +/// thedoor is 'free standing', or +/// the opening into which thedoor is inserted is not extruded +/// horizontally (i.e. where the opening profile does not match +/// thedoor profile) +/// +/// FootPrint -'GeometricCurveSet' or 'Annotation2D' +/// representation +/// The door foot print is represented by a set of +/// two-dimensionalcurves (or in case of 'Annotation2D' additional +/// hatching and text) within a particular shape representation. The +/// foot print is used for the planview representation of the +/// door.The following attribute values for the +/// IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'FootPrint' +/// RepresentationType : 'GeometricCurveSet', or +/// 'Annotation2D' +/// +/// Body - 'SweptSolid', 'SurfaceModel', or 'Brep' +/// representation +/// The door body is either represented parameterically (see +/// parametric representation) or by explicit 3D shape. The 3D shape +/// is given by using extrusion geometry, or surface models, or Brep +/// models within a particular shape representation. The body is used +/// for the model view representation of the door.The following +/// attribute values for the IfcShapeRepresentation holding +/// this geometric representation shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'SweptSolid', 'SurfaceModel', or +/// 'Brep' +/// +/// MappedRepresentation +/// The 'FootPrint' and 'Body' geometric representation of +/// IfcDoor can be shared among several identical doors using +/// the 'MappedRepresentation'. The following attribute values for +/// the IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'FootPrint', 'Body' +/// RepresentationType : 'MappedRepresentation' +/// +/// The same constraints, as given for the 'FootPrint', 'Body' +/// representation identifiers, shall apply to the +/// MappedRepresentation of the +/// IfcRepresentationMap. +/// Parameteric Representation using parameters at +/// IfcDoorType +/// The parameters that defines the shape of the IfcDoor, +/// are given at the IfcDoorType and the property sets, which +/// are included in the IfcDoorType. The IfcDoor only +/// defines the local placement which determines the opening +/// direction of the door. The overall size of +/// the IfcDoor to be used to apply the lining or panel +/// parameter provided by the IfcDoorType is determined by the +/// IfcShapeRepresentation with the RepresentationIdentifier = +/// 'Profile'. Only in case of an IfcDoor inserted into an +/// IfcOpeningElement using the IfcRelFillsElement +/// relatioship, having a horizontal extrusion (along the y-axis of +/// the IfcDoor), the overall size is determined by the +/// extrusion profile of the IfcOpeningElement. +/// NOTE The OverallWidth and +/// OverallHeight parameters are for informational purpose +/// only. +/// The opening direction is determined by the local placement of +/// IfcDoor and the OperationType of the door +/// style as shown in Figure 97. +/// NOTE There are different definitions in +/// various countries on what a left opening or left hung or left +/// swing door is (same for right). Therefore the IFC definition may +/// derivate from the local standard and need to be mapped +/// appropriately. +/// +/// Opening +/// directions +/// +/// Definitions +/// Reference to other +/// standards +/// +/// The door panel (for swinging doors) opens +/// always into the direction of the positive Y axis of the local +/// placement. The determination of whether the door opens to the +/// left or to the right is done at the level of the +/// IfcDoorType. Here it is a left side opening door given +/// byIfcDoorType.OperationType = +/// SingleSwingLeft +/// refered to as LEFT HAND (LH) in US * +/// +/// refered to as DIN-R (right hung) in Germany +/// +/// If the door should open to the other +/// side, then the local placement has to be changed. It is still a +/// left side opening door, given by IfcDoorType.OperationType +/// = SingleSwingLeft +/// refered to as RIGHT HAND REVERSE (RHR) in +/// US * +/// +/// refered to as DIN-R (right hung) in Germany +/// +/// If the door panel (for swinging doors) +/// opens to the right, a separate door style needs to be used (here +/// IfcDoorTypee.OperationType = SingleSwingRight) and it +/// always opens into the direction of the positive Y axis of the +/// local placement. +/// refered to as RIGHT HAND (RH) in US * +/// +/// refered to as DIN-L (left hung) in Germany +/// +/// If the door panel (for swinging doors) +/// opens to the right, and into the opposite directions, the local +/// placement of the door need to change. The door style is given by +/// IfcDoorType.OperationType = SingleSwingRight. +/// refered to as LEFT HAND REVERSE (LHR) in +/// US * +/// +/// refered to as DIN-L (left hung) in Germany +/// +/// * it assumes that the +/// 'inside/private/primary' space is above (top in the pictures) and +/// the 'outside/public/secondary' space is below (bottom in the +/// pictures). +/// +/// Figure 97 — Door swing +class IFC_PARSE_API IfcDoor : public IfcBuiltElement { +public: + /// Overall measure of the height, it reflects the Z Dimension of a bounding box, enclosing the body of the door opening. If omitted, the OverallHeight should be taken from the geometric representation of the IfcOpening in which the door is inserted. + /// + /// NOTE  The body of the door might be taller then the door opening (e.g. in cases where the door lining includes a casing). In these cases the OverallHeight shall still be given as the door opening height, and not as the total height of the door lining. + boost::optional< double > OverallHeight() const; + void setOverallHeight(boost::optional< double > v); + /// Overall measure of the width, it reflects the X Dimension of a bounding box, enclosing the body of the door opening. If omitted, the OverallWidth should be taken from the geometric representation of the IfcOpening in which the door is inserted. + /// + /// NOTE  The body of the door might be wider then the door opening (e.g. in cases where the door lining includes a casing). In these cases the OverallWidth shall still be given as the door opening width, and not as the total width of the door lining. + boost::optional< double > OverallWidth() const; + void setOverallWidth(boost::optional< double > v); + /// Predefined generic type for a door that is specified in an enumeration. There may be a property set given specificly for the predefined types. + /// NOTE The PredefinedType shall only be used, if no type object IfcDoorType is assigned, providing its own IfcDoorType.PredefinedType. + /// + /// IFC2x4 CHANGE The attribute has been added at the end of the entity definition. + boost::optional< ::Ifc4x3_add2::IfcDoorTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcDoorTypeEnum::Value > v); + /// Type defining the general layout and operation of the door type in terms of the partitioning of panels and panel operations. + /// + /// NOTE The OperationType shall only be used, if no type object IfcDoorType is assigned, providing its own IfcDoorType.OperationType. + /// + /// IFC2x4 CHANGE The attribute has been added at the end of the entity definition. + boost::optional< ::Ifc4x3_add2::IfcDoorTypeOperationEnum::Value > OperationType() const; + void setOperationType(boost::optional< ::Ifc4x3_add2::IfcDoorTypeOperationEnum::Value > v); + boost::optional< std::string > UserDefinedOperationType() const; + void setUserDefinedOperationType(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDoor (IfcEntityInstanceData* e); + IfcDoor (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< double > v9_OverallHeight, boost::optional< double > v10_OverallWidth, boost::optional< ::Ifc4x3_add2::IfcDoorTypeEnum::Value > v11_PredefinedType, boost::optional< ::Ifc4x3_add2::IfcDoorTypeOperationEnum::Value > v12_OperationType, boost::optional< std::string > v13_UserDefinedOperationType); + typedef aggregate_of< IfcDoor > list; +}; +/// The flow fitting type IfcDuctFittingType defines commonly shared information for occurrences of duct fittings. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a duct fitting specification (i.e. the specific product information, that is common to all occurrences of that product type). Duct Fitting types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcDuctFittingType are represented by instances of IfcDuctFitting. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowFittingType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_DuctFittingTypeCommon +/// +/// Material Use Definition +/// The material of the IfcDuctFittingType is defined by IfcMaterialProfileSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialProfileSet.MaterialProfiles[n].Name shall be used: +/// +/// 'Body': Material from which the duct fitting is constructed. +/// 'Coating': The outer coating, if applicable. +/// 'Insulation': The insulating wrapping, if applicable. +/// 'Lining': The inner lining, if applicable. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcDuctFittingType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcDuctFitting for standard port definitions. +class IFC_PARSE_API IfcDuctFittingType : public IfcFlowFittingType { +public: + /// The type of duct fitting. + ::Ifc4x3_add2::IfcDuctFittingTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcDuctFittingTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDuctFittingType (IfcEntityInstanceData* e); + IfcDuctFittingType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcDuctFittingTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcDuctFittingType > list; +}; +/// The flow segment type IfcDuctSegmentType defines commonly shared information for occurrences of duct segments. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a duct segment specification (i.e. the specific product information, that is common to all occurrences of that product type). Duct Segment types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcDuctSegmentType are represented by instances of IfcDuctSegment. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowSegmentType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_DuctSegmentTypeCommon +/// +/// Material Use Definition +/// The material of the IfcDuctSegmentType is defined by IfcMaterialProfileSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialProfileSet.MaterialProfiles[n].Name shall be used: +/// +/// 'Body': Material from which the duct segment is constructed. +/// 'Coating': The outer coating, if applicable. +/// 'Insulation': The insulating wrapping, if applicable. +/// 'Lining': The inner lining, if applicable. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcDuctSegmentType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcDuctSegment for standard port definitions. +class IFC_PARSE_API IfcDuctSegmentType : public IfcFlowSegmentType { +public: + /// The type of duct segment. + ::Ifc4x3_add2::IfcDuctSegmentTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcDuctSegmentTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDuctSegmentType (IfcEntityInstanceData* e); + IfcDuctSegmentType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcDuctSegmentTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcDuctSegmentType > list; +}; +/// The flow treatment device type IfcDuctSilencerType defines commonly shared information for occurrences of duct silencers. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a duct silencer specification (i.e. the specific product information, that is common to all occurrences of that product type). Duct Silencer types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcDuctSilencerType are represented by instances of IfcDuctSilencer. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowTreatmentDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_DuctSilencerTypeCommon +/// +/// Material Use Definition +/// The material of the IfcDuctSilencerType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Body': The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcDuctSilencerType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcDuctSilencer for standard port definitions. +class IFC_PARSE_API IfcDuctSilencerType : public IfcFlowTreatmentDeviceType { +public: + /// The type of duct silencer. + ::Ifc4x3_add2::IfcDuctSilencerTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcDuctSilencerTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDuctSilencerType (IfcEntityInstanceData* e); + IfcDuctSilencerType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcDuctSilencerTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcDuctSilencerType > list; +}; + +class IFC_PARSE_API IfcEarthworksCut : public IfcFeatureElementSubtraction { +public: + boost::optional< ::Ifc4x3_add2::IfcEarthworksCutTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcEarthworksCutTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcEarthworksCut (IfcEntityInstanceData* e); + IfcEarthworksCut (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcEarthworksCutTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcEarthworksCut > list; +}; + +class IFC_PARSE_API IfcEarthworksElement : public IfcBuiltElement { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcEarthworksElement (IfcEntityInstanceData* e); + IfcEarthworksElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcEarthworksElement > list; +}; + +class IFC_PARSE_API IfcEarthworksFill : public IfcEarthworksElement { +public: + boost::optional< ::Ifc4x3_add2::IfcEarthworksFillTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcEarthworksFillTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcEarthworksFill (IfcEntityInstanceData* e); + IfcEarthworksFill (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcEarthworksFillTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcEarthworksFill > list; +}; +/// The flow terminal type IfcElectricApplianceType defines commonly shared information for occurrences of electric appliances. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a electric appliance specification (i.e. the specific product information, that is common to all occurrences of that product type). Electric Appliance types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcElectricApplianceType are represented by instances of IfcElectricAppliance. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowTerminalType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_ElectricalDeviceCommon +/// Pset_ElectricApplianceTypeCommon +/// Pset_ElectricApplianceTypeDishwasher (DISHWASHER) +/// Pset_ElectricApplianceTypeElectricCooker (ELECTRICCOOKER) +/// +/// Material Use Definition +/// The material of the IfcElectricApplianceType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcElectricApplianceType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcElectricAppliance for standard port definitions. +class IFC_PARSE_API IfcElectricApplianceType : public IfcFlowTerminalType { +public: + /// Identifies the predefined types of electrical appliance from which the type required may be set. + ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcElectricApplianceTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcElectricApplianceType (IfcEntityInstanceData* e); + IfcElectricApplianceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcElectricApplianceType > list; +}; +/// The flow controller type IfcElectricDistributionBoardType defines commonly shared information for occurrences of distribution boards. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a distribution board specification (i.e. the specific product information, that is common to all occurrences of that product type). Distribution Board types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcElectricDistributionBoardType are represented by instances of IfcElectricDistributionBoard. +/// +/// HISTORY: New entity in IFC2x4 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowControllerType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_ElectricalDeviceCommon +/// Pset_ElectricDistributionBoardTypeCommon +/// +/// Material Use Definition +/// The material of the IfcElectricDistributionBoardType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcElectricDistributionBoardType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcElectricDistributionBoard for standard port definitions. +class IFC_PARSE_API IfcElectricDistributionBoardType : public IfcFlowControllerType { +public: + /// Identifies the predefined types of electric distribution type from which the type required may be set. + ::Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcElectricDistributionBoardType (IfcEntityInstanceData* e); + IfcElectricDistributionBoardType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcElectricDistributionBoardType > list; +}; +/// The flow storage device type IfcElectricFlowStorageDeviceType defines commonly shared information for occurrences of electric flow storage devices. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a electric flow storage device specification (i.e. the specific product information, that is common to all occurrences of that product type). Electric Flow Storage Device types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcElectricFlowStorageDeviceType are represented by instances of IfcElectricFlowStorageDevice. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowStorageDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_ElectricalDeviceCommon +/// Pset_ElectricFlowStorageDeviceTypeCommon +/// +/// Material Use Definition +/// The material of the IfcElectricFlowStorageDeviceType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcElectricFlowStorageDeviceType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcElectricFlowStorageDevice for standard port definitions. +class IFC_PARSE_API IfcElectricFlowStorageDeviceType : public IfcFlowStorageDeviceType { +public: + /// Identifies the predefined types of electric flow storage devices from which the type required may be set. + ::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcElectricFlowStorageDeviceType (IfcEntityInstanceData* e); + IfcElectricFlowStorageDeviceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcElectricFlowStorageDeviceType > list; +}; + +class IFC_PARSE_API IfcElectricFlowTreatmentDeviceType : public IfcFlowTreatmentDeviceType { +public: + ::Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcElectricFlowTreatmentDeviceType (IfcEntityInstanceData* e); + IfcElectricFlowTreatmentDeviceType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcElectricFlowTreatmentDeviceType > list; +}; +/// The energy conversion device type IfcElectricGeneratorType defines commonly shared information for occurrences of electric generators. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a electric generator specification (i.e. the specific product information, that is common to all occurrences of that product type). Electric Generator types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcElectricGeneratorType are represented by instances of IfcElectricGenerator. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcEnergyConversionDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_ElectricalDeviceCommon +/// Pset_ElectricGeneratorTypeCommon +/// +/// Material Use Definition +/// The material of the IfcElectricGeneratorType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// +/// Composition Use Definition +/// The IfcElectricGeneratorType may be aggregated into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcElectricGeneratorType and RelatedObjects contains one or more components. Components are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Aggregation use is defined for the following predefined types: +/// +/// ENGINEGENERATOR: May contain IfcEngine components. Engine-Generator sets may optionally include an engine to indicate specific detail. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcElectricGeneratorType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcElectricGenerator for standard port definitions. +class IFC_PARSE_API IfcElectricGeneratorType : public IfcEnergyConversionDeviceType { +public: + /// Identifies the predefined types of electric generators from which the type required may be set. + ::Ifc4x3_add2::IfcElectricGeneratorTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcElectricGeneratorTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcElectricGeneratorType (IfcEntityInstanceData* e); + IfcElectricGeneratorType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcElectricGeneratorTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcElectricGeneratorType > list; +}; +/// The energy conversion device type IfcElectricMotorType defines commonly shared information for occurrences of electric motors. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a electric motor specification (i.e. the specific product information, that is common to all occurrences of that product type). Electric Motor types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcElectricMotorType are represented by instances of IfcElectricMotor. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcEnergyConversionDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_ElectricalDeviceCommon +/// Pset_ElectricMotorTypeCommon +/// +/// Material Use Definition +/// The material of the IfcElectricMotorType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcElectricMotorType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcElectricMotor for standard port definitions. +class IFC_PARSE_API IfcElectricMotorType : public IfcEnergyConversionDeviceType { +public: + /// Identifies the predefined types of electric motor from which the type required may be set. + ::Ifc4x3_add2::IfcElectricMotorTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcElectricMotorTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcElectricMotorType (IfcEntityInstanceData* e); + IfcElectricMotorType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcElectricMotorTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcElectricMotorType > list; +}; +/// The flow controller type IfcElectricTimeControlType defines commonly shared information for occurrences of electric time controls. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a electric time control specification (i.e. the specific product information, that is common to all occurrences of that product type). Electric Time Control types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcElectricTimeControlType are represented by instances of IfcElectricTimeControl. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowControllerType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_ElectricalDeviceCommon +/// Pset_ElectricTimeControlTypeCommon +/// +/// Material Use Definition +/// The material of the IfcElectricTimeControlType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcElectricTimeControlType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcElectricTimeControl for standard port definitions. +class IFC_PARSE_API IfcElectricTimeControlType : public IfcFlowControllerType { +public: + /// Identifies the predefined types of electrical time control from which the type required may be set. + ::Ifc4x3_add2::IfcElectricTimeControlTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcElectricTimeControlTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcElectricTimeControlType (IfcEntityInstanceData* e); + IfcElectricTimeControlType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcElectricTimeControlTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcElectricTimeControlType > list; +}; +/// The distribution flow element IfcEnergyConversionDevice defines +/// the occurrence of a device used to perform +/// energy conversion or heat transfer and typically participates +/// in a flow distribution system. Its type is defined by IfcEnergyConversionDeviceType +/// or its subtypes. +/// +/// HISTORY: New entity in IFC R2.0. +/// +/// IFC 2x4 NOTE: This entity has been deprecated for instantiation and will become ABSTRACT in a future release; new subtypes should now be used instead. +class IFC_PARSE_API IfcEnergyConversionDevice : public IfcDistributionFlowElement { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcEnergyConversionDevice (IfcEntityInstanceData* e); + IfcEnergyConversionDevice (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcEnergyConversionDevice > list; +}; +/// An engine is a device that converts fuel into mechanical energy through combustion. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcEngine defines the occurrence of any engine; common information about engine types is handled by IfcEngineType. +/// The IfcEngineType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcEngineType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcEngineType has ports or aggregated elements, such objects are reflected at the IfcEngine occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcEngineType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcEngineType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcEngine override the properties defined at IfcEngineType. +/// Refer to the documentation at the supertype IfcEnergyConversionDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_EngineTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_EngineBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcEngine is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcEngineType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcEngine are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the engine occurrence is defined by IfcEngineType, then the port occurrences must reflect those defined at the IfcEngineType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcEngine PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// Fuel (GAS, SINK): The fuel inlet. +/// Drive (NOTDEFINED, SOURCE): Connection to the driven source. +class IFC_PARSE_API IfcEngine : public IfcEnergyConversionDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcEngineTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcEngineTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcEngine (IfcEntityInstanceData* e); + IfcEngine (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcEngineTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcEngine > list; +}; +/// An evaporative cooler is a device that cools air by saturating it with water vapor. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcEvaporativeCooler defines the occurrence of any evaporative cooler; common information about evaporative cooler types is handled by IfcEvaporativeCoolerType. +/// The IfcEvaporativeCoolerType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcEvaporativeCoolerType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcEvaporativeCoolerType has ports or aggregated elements, such objects are reflected at the IfcEvaporativeCooler occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcEvaporativeCoolerType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcEvaporativeCoolerType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcEvaporativeCooler override the properties defined at IfcEvaporativeCoolerType. +/// Refer to the documentation at the supertype IfcEnergyConversionDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_EvaporativeCoolerPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_EvaporativeCoolerTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_EvaporativeCoolerBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcEvaporativeCooler is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcEvaporativeCoolerType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// Media: Heat exchanger media material. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcEvaporativeCooler are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the evaporative cooler occurrence is defined by IfcEvaporativeCoolerType, then the port occurrences must reflect those defined at the IfcEvaporativeCoolerType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcEvaporativeCooler PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// WaterIn (DOMESTICCOLDWATER, SINK): Incoming water. +/// AirIn (AIRCONDITIONING, SINK): Incoming air. +/// AirOut (AIRCONDITIONING, SOURCE): Outgoing air saturated with vapor. +class IFC_PARSE_API IfcEvaporativeCooler : public IfcEnergyConversionDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcEvaporativeCooler (IfcEntityInstanceData* e); + IfcEvaporativeCooler (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcEvaporativeCoolerTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcEvaporativeCooler > list; +}; +/// An evaporator is a device in which a liquid refrigerent is vaporized and absorbs heat from the surrounding fluid. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcEvaporator defines the occurrence of any evaporator; common information about evaporator types is handled by IfcEvaporatorType. +/// The IfcEvaporatorType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcEvaporatorType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcEvaporatorType has ports or aggregated elements, such objects are reflected at the IfcEvaporator occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcEvaporatorType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcEvaporatorType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcEvaporator override the properties defined at IfcEvaporatorType. +/// Refer to the documentation at the supertype IfcEnergyConversionDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_EvaporatorPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_EvaporatorTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_EvaporatorBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcEvaporator is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcEvaporatorType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// Refrigerant: Refrigerant material. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcEvaporator are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the evaporator occurrence is defined by IfcEvaporatorType, then the port occurrences must reflect those defined at the IfcEvaporatorType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcEvaporator PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// DIRECTEXPANSION +/// +/// RefrigerantIn (REFRIGERATION, SINK): Liquid refrigerant entering the evaporator. +/// RefrigerantOut (REFRIGERATION, SOURCE): Vapor refrigerant leaving the evaporator. +/// AirIn (AIRCONDITIONING, SINK): Air return entering the evaporator. +/// AirOut (AIRCONDITIONING, SOURCE): Air supply leaving the evaporator. +/// +/// FLOODEDSHELLANDTUBE +/// +/// RefrigerantIn (REFRIGERATION, SINK): Liquid refrigerant entering the evaporator. +/// RefrigerantOut (REFRIGERATION, SOURCE): Vapor refrigerant leaving the evaporator. +/// ChilledWaterIn (CHILLEDWATER, SINK): Chilled water return entering the evaporator. +/// ChilledWaterOut (CHILLEDWATER, SOURCE): Chilled water supply leaving the evaporator. +/// ChilledWaterIn (CHILLEDWATER, SINK): Chilled water return entering the evaporator. +/// ChilledWaterOut (CHILLEDWATER, SOURCE): Chilled water supply leaving the evaporator. +/// +/// SHELLANDCOIL +/// +/// RefrigerantIn (REFRIGERATION, SINK): Liquid refrigerant entering the evaporator. +/// RefrigerantOut (REFRIGERATION, SOURCE): Vapor refrigerant leaving the evaporator. +/// +/// Figure 223 illustrates evaporator port use. +/// Figure 223 — Evaporator port use +class IFC_PARSE_API IfcEvaporator : public IfcEnergyConversionDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcEvaporatorTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcEvaporatorTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcEvaporator (IfcEntityInstanceData* e); + IfcEvaporator (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcEvaporatorTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcEvaporator > list; +}; +/// Definition from IAI: The external spatial element +/// defines external regions at the building site. Those regions can +/// be defined: +/// +/// logically - e.g. an instance of +/// IfcExternalSpatialElement could represent the air space +/// around the building without having an own shape representation, +/// or +/// physically - e.g. an instance of +/// IfcExternalSpatialElement could represent the sloping +/// ground around the building to identify the part of the external +/// building envelop that is below ground. +/// +/// HISTORY New entity in +/// IFC2x4. +class IFC_PARSE_API IfcExternalSpatialElement : public IfcExternalSpatialStructureElement, public IfcSpaceBoundarySelect { +public: + /// Predefined generic types for an external spatial element that are specified in an enumeration. There might be property sets defined specifically for each predefined type. + boost::optional< ::Ifc4x3_add2::IfcExternalSpatialElementTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcExternalSpatialElementTypeEnum::Value > v); + aggregate_of< IfcRelSpaceBoundary >::ptr BoundedBy() const; // INVERSE IfcRelSpaceBoundary::RelatingSpace + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcExternalSpatialElement (IfcEntityInstanceData* e); + IfcExternalSpatialElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_LongName, boost::optional< ::Ifc4x3_add2::IfcExternalSpatialElementTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcExternalSpatialElement > list; +}; +/// The flow moving device type IfcFanType defines commonly shared information for occurrences of fans. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a fan specification (i.e. the specific product information, that is common to all occurrences of that product type). Fan types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcFanType are represented by instances of IfcFan. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowMovingDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_FanTypeCommon +/// Pset_FanTypeSmokeControl +/// +/// Material Use Definition +/// The material of the IfcFanType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Housing': The material used to construct the fan housing. +/// 'Wheel': The material used to construct the fan wheel. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcFanType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcFan for standard port definitions. +class IFC_PARSE_API IfcFanType : public IfcFlowMovingDeviceType { +public: + /// Defines the type of fan typically used in building services. + ::Ifc4x3_add2::IfcFanTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcFanTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFanType (IfcEntityInstanceData* e); + IfcFanType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcFanTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcFanType > list; +}; +/// The flow treatment device type IfcFilterType defines commonly shared information for occurrences of filters. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a filter specification (i.e. the specific product information, that is common to all occurrences of that product type). Filter types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcFilterType are represented by instances of IfcFilter. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowTreatmentDeviceType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_FilterTypeCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_FilterTypeAirParticleFilter (AIRPARTICLEFILTER) +/// +/// Material Use Definition +/// The material of the IfcFilterType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Media': The material that is used for filtering particulates from the fluid. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcFilterType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcFilter for standard port definitions. +class IFC_PARSE_API IfcFilterType : public IfcFlowTreatmentDeviceType { +public: + /// The type of air filter. + ::Ifc4x3_add2::IfcFilterTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcFilterTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFilterType (IfcEntityInstanceData* e); + IfcFilterType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcFilterTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcFilterType > list; +}; +/// The flow terminal type IfcFireSuppressionTerminalType defines commonly shared information for occurrences of fire suppression terminals. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a fire suppression terminal specification (i.e. the specific product information, that is common to all occurrences of that product type). Fire Suppression Terminal types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcFireSuppressionTerminalType are represented by instances of IfcFireSuppressionTerminal. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcFlowTerminalType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_FireSuppressionTerminalTypeCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_FireSuppressionTerminalTypeBreechingInlet (BREECHINGINLET) +/// Pset_FireSuppressionTerminalTypeFireHydrant (FIREHYDRANT) +/// Pset_FireSuppressionTerminalTypeHoseReel (HOSEREEL) +/// Pset_FireSuppressionTerminalTypeSprinkler (SPRINKLER) +/// +/// Material Use Definition +/// The material of the IfcFireSuppressionTerminalType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Body': The primary material from which the object is constructed. +/// 'Deflector': The material used to construct the deflector plate. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcFireSuppressionTerminalType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcFireSuppressionTerminal for standard port definitions. +class IFC_PARSE_API IfcFireSuppressionTerminalType : public IfcFlowTerminalType { +public: + /// Identifies the predefined types of fire suppression terminal from which the type required may be set. + ::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFireSuppressionTerminalType (IfcEntityInstanceData* e); + IfcFireSuppressionTerminalType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcFireSuppressionTerminalType > list; +}; +/// The distribution flow element IfcFlowController defines +/// the occurrence of elements of a distribution system that +/// are used to regulate flow through a distribution system. +/// Examples include dampers, valves, switches, and relays. Its type is defined by +/// IfcFlowControllerType or subtypes. +/// +/// HISTORY: New entity in IFC R2.0. +/// +/// IFC 2x4 NOTE: This entity has been deprecated for instantiation and will become ABSTRACT in a future release; new subtypes should now be used instead. +class IFC_PARSE_API IfcFlowController : public IfcDistributionFlowElement { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFlowController (IfcEntityInstanceData* e); + IfcFlowController (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcFlowController > list; +}; +/// The distribution flow element IfcFlowFitting defines the occurrence of a junction or transition in a flow distribution system, such as an elbow or tee. Its type is defined by IfcFlowFittingType or its subtypes. +/// +/// HISTORY: New entity in IFC R2.0. +/// +/// IFC 2x4 NOTE: This entity has been deprecated for instantiation and will become ABSTRACT in a future release; new subtypes should now be used instead. +class IFC_PARSE_API IfcFlowFitting : public IfcDistributionFlowElement { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFlowFitting (IfcEntityInstanceData* e); + IfcFlowFitting (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcFlowFitting > list; +}; +/// The distribution control element type IfcFlowInstrumentType defines commonly shared information for occurrences of flow instruments. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a flow instrument specification (i.e. the specific product information, that is common to all occurrences of that product type). Flow Instrument types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcFlowInstrumentType are represented by instances of IfcFlowInstrument. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcDistributionControlElementType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_FlowInstrumentTypeCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_FlowInstrumentTypePressureGauge (PRESSUREGAUGE) +/// Pset_FlowInstrumentTypeThermometer (THERMOMETER) +/// +/// Material Use Definition +/// The material of the IfcFlowInstrumentType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcFlowInstrumentType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcFlowInstrument for standard port definitions. +class IFC_PARSE_API IfcFlowInstrumentType : public IfcDistributionControlElementType { +public: + /// Identifies the predefined types of flow instrument from which the type required may be set. + ::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFlowInstrumentType (IfcEntityInstanceData* e); + IfcFlowInstrumentType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcFlowInstrumentType > list; +}; +/// A flow meter is a device that is used to measure the flow rate in a system. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcFlowMeter defines the occurrence of any flow meter; common information about flow meter types is handled by IfcFlowMeterType. +/// The IfcFlowMeterType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcFlowMeterType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcFlowMeterType has ports or aggregated elements, such objects are reflected at the IfcFlowMeter occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcFlowMeterType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcFlowMeterType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcFlowMeter override the properties defined at IfcFlowMeterType. +/// Refer to the documentation at the supertype IfcFlowController and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_FlowMeterOccurrence (PSET_OCCURRENCEDRIVEN) +/// Pset_FlowMeterTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// ENERGYMETER +/// +/// Pset_FlowMeterTypeEnergyMeter (PSET_TYPEDRIVENOVERRIDE) +/// +/// GASMETER +/// +/// Pset_FlowMeterTypeGasMeter (PSET_TYPEDRIVENOVERRIDE) +/// +/// OILMETER +/// +/// Pset_FlowMeterTypeOilMeter (PSET_TYPEDRIVENOVERRIDE) +/// +/// WATERMETER +/// +/// Pset_FlowMeterTypeWaterMeter (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_FlowMeterBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcFlowMeter is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcFlowMeterType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcFlowMeter are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the flow meter occurrence is defined by IfcFlowMeterType, then the port occurrences must reflect those defined at the IfcFlowMeterType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcFlowMeter PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// ENERGYMETER +/// +/// Inlet (ELECTRICAL, SINK): Inlet from utility. +/// Outlet (ELECTRICAL, SOURCE): Measured use. +/// +/// GASMETER +/// +/// Inlet (GAS, SINK): Inlet from utility. +/// Outlet (GAS, SOURCE): Measured use. +/// +/// OILMETER +/// +/// Inlet (OIL, SINK): Inlet from utility. +/// Outlet (OIL, SOURCE): Measured use. +/// +/// WATERMETER +/// +/// Inlet (DOMESTICCOLDWATER, SINK): Inlet from utility. +/// Outlet (DOMESTICCOLDWATER, SOURCE): Measured use. +/// +/// Figure 226 illustrates flow meter port use. +/// Figure 226 — Flow meter port use +class IFC_PARSE_API IfcFlowMeter : public IfcFlowController { +public: + boost::optional< ::Ifc4x3_add2::IfcFlowMeterTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcFlowMeterTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFlowMeter (IfcEntityInstanceData* e); + IfcFlowMeter (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcFlowMeterTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcFlowMeter > list; +}; +/// The distribution flow element IfcFlowMovingDevice defines the occurrence of an apparatus used to distribute, circulate or perform conveyance of fluids, including liquids and gases (such as a pump or fan), and typically participates in a flow distribution system. Its type is defined by IfcFlowMovingDeviceType or its subtypes. +/// +/// HISTORY: New entity in IFC R2x. +/// +/// IFC 2x4 NOTE: This entity has been deprecated for instantiation and will become ABSTRACT in a future release; new subtypes should now be used instead. +class IFC_PARSE_API IfcFlowMovingDevice : public IfcDistributionFlowElement { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFlowMovingDevice (IfcEntityInstanceData* e); + IfcFlowMovingDevice (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcFlowMovingDevice > list; +}; +/// The distribution flow element IfcFlowSegment defines the occurrence of a segment of a flow distribution system. +/// +/// HISTORY: New entity in IFC R2.0. +/// IFC 2x4 NOTE: This entity has been deprecated for instantiation and will become ABSTRACT in a future release; new subtypes should now be used instead. +/// +/// The IfcFlowSegment defines a particular occurrence of a segment inserted in the spatial context of a project. The parameters defining the type of the segment and/or its shape are defined by the IfcFlowSegmentType, which is related by the inverse relationship IsDefinedBy pointing to IfcRelDefinesByType. +/// +/// Material Use Definition +/// The material of the IfcFlowSegment is defined using one of the following entities: +/// +/// IfcMaterialProfileSetUsage : for parametric segments, this defines the cross section and alignment to the 'Axis' representation, from which the 'Body' representation may be generated. +/// +/// IfcMaterialProfileSet : for non-parametric segments (having fixed length or path), this may define the cross section for analysis purposes, however the 'Body' representation is independently generated. +/// +/// IfcMaterialConstituentSet : for elements containing multiple materials where profiles are not applicable, this indicates materials at named parts. +/// +/// IfcMaterial : for elements comprised of a single material where profiles are not applicable, this indicates the material. +/// +/// The material is attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcFlowSegmentType, defining the common attribute data for all occurrences of the same type. Standard names and material types are defined at subtypes. +/// +/// Representation Use Definition +/// +/// Standard representations are defined at the supertype IfcDistrubutionFlowElement. For parametric flow segments where IfcMaterialProfileSetUsage is defined and an 'Axis' representation is defined, then the 'Body' representation may be generated using the 'SweptSolid' or 'AdvancedSweptSolid' representation types by sweeping the profile(s) along the axis. +class IFC_PARSE_API IfcFlowSegment : public IfcDistributionFlowElement { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFlowSegment (IfcEntityInstanceData* e); + IfcFlowSegment (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcFlowSegment > list; +}; +/// The distribution flow element IfcFlowStorageDevice defines +/// the occurrence of a device that participates in a distribution +/// system and is used for temporary storage of a fluid +/// such as a liquid or a gas (e.g., tank). Its type is defined by +/// IfcFlowStorageDeviceType or its subtypes. +/// +/// HISTORY: New entity in IFC R2x. +/// +/// IFC 2x4 NOTE: This entity has been deprecated for instantiation and will become ABSTRACT in a future release; new subtypes should now be used instead. +class IFC_PARSE_API IfcFlowStorageDevice : public IfcDistributionFlowElement { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFlowStorageDevice (IfcEntityInstanceData* e); + IfcFlowStorageDevice (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcFlowStorageDevice > list; +}; +/// The distribution flow element IfcFlowTerminal defines the +/// occurrence of a permanently attached element that acts as a terminus or +/// beginning of a distribution system (e.g., air outlet, drain, +/// water closet, sink, etc.). A terminal is typically a point +/// at which a system interfaces with an external environment. +/// Its type is defined by IfcFlowTerminalType or +/// its subtypes. +/// +/// HISTORY: New entity in IFC R2.0. +/// +/// IFC 2x4 NOTE: This entity has been deprecated for instantiation and will become ABSTRACT in a future release; new subtypes should now be used instead. +class IFC_PARSE_API IfcFlowTerminal : public IfcDistributionFlowElement { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFlowTerminal (IfcEntityInstanceData* e); + IfcFlowTerminal (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcFlowTerminal > list; +}; +/// The distribution flow element IfcFlowTreatmentDevice defines the occurrence of a device typically used to remove unwanted matter from a fluid, either liquid or gas, and typically participates in a flow distribution system. Its type is defined by IfcFlowTreatmentDeviceType or its subtypes. +/// +/// HISTORY: New entity in IFC R2x. +/// +/// IFC 2x4 NOTE: This entity has been deprecated for instantiation and will become ABSTRACT in a future release; new subtypes should now be used instead. +class IFC_PARSE_API IfcFlowTreatmentDevice : public IfcDistributionFlowElement { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFlowTreatmentDevice (IfcEntityInstanceData* e); + IfcFlowTreatmentDevice (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcFlowTreatmentDevice > list; +}; +/// A footing is a part of the foundation of a structure that spreads and transmits the load to the soil, either directly or via piles. +/// +/// HISTORY New entity in IFC2x2 +/// +/// Note, slab foundations are not instantiated as IfcFooting but as IfcSlab or IfcSlabStandardCase with a predefined type of IfcSlabTypeEnum.BASESLAB. +/// +/// Property Set Use Definition +/// +/// The following property set definitions are part of this IFC release: +/// +/// Pset_FootingCommon: common property set for all footing occurrences. +/// Pset_ReinforcementBarCountOfIndependentFooting: property set for independent IfcFooting occurrences. +/// Pset_ReinforcementBarPitchOfContinuousFooting: property set for continuous IfcFooting occurrences. +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. They are accessible by the IsDefinedBy inverse attribute. The following base quantities are defined and should be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. Other quantities, being subjected to local standard of measurement, can be defined with another string value assigned to Name. In this case a valid value for MethodOfMeasurement has to be provided. +/// +/// Qto_FootingBaseQuantities +/// +/// Geometry Use Definition +/// +/// Local placement and product representations are defined by the supertype IfcBuildingElement. Standard representations as defined at IfcBeamStandardCase or IfcSlabStandardCase should be used when applicable. +class IFC_PARSE_API IfcFooting : public IfcBuiltElement { +public: + /// The generic type of the footing. + /// + /// IFC 2x4 change:  Attribute made optional. Type information can be provided by IfcRelDefinesByType and IfcFootingType. + boost::optional< ::Ifc4x3_add2::IfcFootingTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcFootingTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFooting (IfcEntityInstanceData* e); + IfcFooting (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcFootingTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcFooting > list; +}; + +class IFC_PARSE_API IfcGeotechnicalAssembly : public IfcGeotechnicalElement { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcGeotechnicalAssembly (IfcEntityInstanceData* e); + IfcGeotechnicalAssembly (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcGeotechnicalAssembly > list; +}; +/// IfcGrid ia a planar design +/// grid defined in 3D space used as an aid in locating structural and +/// design elements. The position of the grid (ObjectPlacement) +/// is defined by a 3D coordinate system (and thereby the design grid +/// can be used in plan, section or in any position relative to the +/// world coordinate system). The position can be relative to the +/// object placement of other products or grids. The XY plane of the 3D +/// coordinate system is used to place the grid axes, which are 2D +/// curves (for example, line, circle, trimmed curve, polyline, or composite +/// curve). +/// The inherited attributes Name and Description can +/// be used to define a descriptive name of the grid and to indicate +/// the grid's purpose. A grid is defined by (normally) two, or +/// (in case of a triangular grid) three lists of grid axes. The +/// following table shows some examples. +/// A grid may support a rectangular layout (Figure 28), a radial layout (Figure 29), or a triangular layout (Figure 30). +/// +/// Figure 28 — Grid rectangular layout +/// Figure 29 — Grid radial layout +/// Figure 30 — Grid triangular layout +/// +/// The grid axes, defined within the design grid, are those +/// elements to which project objects will be placed relatively using +/// the IfcGridPlacement. +/// +/// HISTORY New entity in IFC Release 1.0. +/// Informal Proposition +/// +/// Grid axes, which are referenced in different lists of axes +/// (UAxes, VAxes, WAxes) shall not be parallel. +/// Grid axes should be defined such as there are no two grid axes +/// which intersect twice (see Figure 31). +/// +/// left side: ambiguous intersections A1 and A2, a grid containing +/// such grid axes is not a valid design grid. +/// right side: the conflict can be resolved by splitting one grid +/// axis in a way, such as no ambiguous intersections exist. +/// +/// Figure 31 — Grid intersections +/// +/// Geometry Use Definitions +/// The geometric representation of IfcGrid is given by the +/// IfcProductDefinitionShape, allowing geometric +/// representations. Included are: +/// Local Placement +/// The local placement for IfcGrid is defined in its +/// supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate system +/// that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if given) to the local +/// placement of the same IfcSpatialStructureElement, which is +/// used in the ContainedInStructure inverse attribute, or to a +/// spatial structure element at a higher level, referenced by +/// that. +/// If the relative placement is not used, the absolute placement +/// is defined within the world coordinate system. +/// +/// Geometric Representations +/// Currently, the use of a 2D 'FootPrint' representation of type +/// 'GeometricCurveSet' is supported. +/// GeometricCurveSet representation +/// The 2D geometric representation of IfcGrid is defined +/// using the 'GeometricCurveSet' geometry. The following attribute +/// values should be inserted +/// +/// IfcShapeRepresentation.RepresentationIdentifier = +/// 'FootPrint'. +/// IfcShapeRepresentation.RepresentationType = +/// 'GeometricCurveSet' . +/// +/// The following constraints apply to the 2D representation: +/// +/// The IfcGeometricCurveSet shall be an (and the only) +/// Item of the IfcShapeRepresentation. It should contain +/// an IfcGeometricCurveSet containing subtypes of +/// IfcCurve, each representing a grid axis. Applicable subtypes +/// of IfcCurve are: IfcPolyline, IfcCircle, +/// IfcTrimmedCurve (based on BaseCurve referencing +/// IfcLine or IfcCircle).  +/// Each subtype of IfcCurve may have a curve style +/// assigned, using IfcAnnotationCurveOccurrence referencing +/// IfcCurveStyle. +/// Optionally the grid axis labels may be added as +/// IfcTextLiteral, and they may have text styles assigned, +/// using IfcAnnotationTextOccurrence referencing +/// IfcTextStyle. +/// +/// As shown in Figure 32, the IfcGrid defines a placement coordinate system using the ObjectPlacement. The XY plane of the coordinate system is used to place the 2D grid axes. The Representation of IfcGrid is defined using IfcProductRepresentation, referencing an IfcShapeRepresentation, that includes IfcGeometricCurveSet as Items. All grid axes are added as IfcPolyline to the IfcGeometricCurveSet. +/// +/// Figure 32 — Grid layout +/// +/// As shown in Figure 33, the attributes UAxes and VAxes define lists of IfcGridAxis within the context of the grid. Each instance of IfcGridAxis refers to the same instance of IfcCurve (here the subtype IfcPolyline) that is contained within the IfcGeometricCurveSet that represents the IfcGrid. +/// +/// Figure 33 — Grid representation +class IFC_PARSE_API IfcGrid : public IfcPositioningElement { +public: + /// List of grid axes defining the first row of grid lines. + aggregate_of< ::Ifc4x3_add2::IfcGridAxis >::ptr UAxes() const; + void setUAxes(aggregate_of< ::Ifc4x3_add2::IfcGridAxis >::ptr v); + /// List of grid axes defining the second row of grid lines. + aggregate_of< ::Ifc4x3_add2::IfcGridAxis >::ptr VAxes() const; + void setVAxes(aggregate_of< ::Ifc4x3_add2::IfcGridAxis >::ptr v); + /// List of grid axes defining the third row of grid lines. It may be given in the case of a triangular grid. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcGridAxis >::ptr > WAxes() const; + void setWAxes(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcGridAxis >::ptr > v); + boost::optional< ::Ifc4x3_add2::IfcGridTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcGridTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcGrid (IfcEntityInstanceData* e); + IfcGrid (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, aggregate_of< ::Ifc4x3_add2::IfcGridAxis >::ptr v8_UAxes, aggregate_of< ::Ifc4x3_add2::IfcGridAxis >::ptr v9_VAxes, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcGridAxis >::ptr > v10_WAxes, boost::optional< ::Ifc4x3_add2::IfcGridTypeEnum::Value > v11_PredefinedType); + typedef aggregate_of< IfcGrid > list; +}; +/// A heat exchanger is a device used to provide heat transfer between non-mixing media such as plate and shell and tube heat exchangers. +/// IfcHeatExchanger is commonly used on water-side distribution systems to recover energy from a liquid to another liquid (typically water-based), whereas IfcAirToAirHeatRecovery is commonly used on air-side distribution systems to recover energy from a gas to a gas (usually air). +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcHeatExchanger defines the occurrence of any heat exchanger; common information about heat exchanger types is handled by IfcHeatExchangerType. +/// The IfcHeatExchangerType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcHeatExchangerType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcHeatExchangerType has ports or aggregated elements, such objects are reflected at the IfcHeatExchanger occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcHeatExchangerType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcHeatExchangerType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcHeatExchanger override the properties defined at IfcHeatExchangerType. +/// Refer to the documentation at the supertype IfcEnergyConversionDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_HeatExchangerTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// PLATE +/// +/// Pset_HeatExchangerTypePlate (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_HeatExchangerBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcHeatExchanger is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcHeatExchangerType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcHeatExchanger are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the heat exchanger occurrence is defined by IfcHeatExchangerType, then the port occurrences must reflect those defined at the IfcHeatExchangerType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcHeatExchanger PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// HeatingInlet (NOTDEFINED, SINK): Inlet of substance to be heated. +/// HeatingOutlet (NOTDEFINED, SOURCE): Outlet of substance to be heated. +/// CoolingInlet (NOTDEFINED, SINK): Inlet of substance to be cooled. +/// CoolingOutlet (NOTDEFINED, SOURCE): Outlet of substance to be cooled. +class IFC_PARSE_API IfcHeatExchanger : public IfcEnergyConversionDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcHeatExchangerTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcHeatExchangerTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcHeatExchanger (IfcEntityInstanceData* e); + IfcHeatExchanger (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcHeatExchangerTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcHeatExchanger > list; +}; +/// A humidifier is a device that adds moisture into the air. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcHumidifier defines the occurrence of any humidifier; common information about humidifier types is handled by IfcHumidifierType. +/// The IfcHumidifierType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcHumidifierType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcHumidifierType has ports or aggregated elements, such objects are reflected at the IfcHumidifier occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcHumidifierType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcHumidifierType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcHumidifier override the properties defined at IfcHumidifierType. +/// Refer to the documentation at the supertype IfcEnergyConversionDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_HumidifierPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_HumidifierTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_HumidifierBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcHumidifier is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcHumidifierType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcHumidifier are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the humidifier occurrence is defined by IfcHumidifierType, then the port occurrences must reflect those defined at the IfcHumidifierType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcHumidifier PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// WaterIn (DOMESTICCOLDWATER, SINK): Incoming water. +/// AirIn (AIRCONDITIONING, SINK): Incoming air. +/// AirOut (AIRCONDITIONING, SOURCE): Outgoing air saturated with vapor. +class IFC_PARSE_API IfcHumidifier : public IfcEnergyConversionDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcHumidifierTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcHumidifierTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcHumidifier (IfcEntityInstanceData* e); + IfcHumidifier (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcHumidifierTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcHumidifier > list; +}; +/// An interceptor is a device designed and installed in order to separate and retain deleterious, hazardous or undesirable matter while permitting normal sewage or liquids to discharge into a collection system by gravity. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcInterceptor defines the occurrence of any interceptor; common information about interceptor types is handled by IfcInterceptorType. +/// The IfcInterceptorType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcInterceptorType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcInterceptorType has ports or aggregated elements, such objects are reflected at the IfcInterceptor occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcInterceptorType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcInterceptorType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcInterceptor override the properties defined at IfcInterceptorType. +/// Refer to the documentation at the supertype IfcFlowTreatmentDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_InterceptorTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// GREASE +/// +/// Pset_InterceptorTypeGrease (PSET_TYPEDRIVENOVERRIDE) +/// +/// OIL +/// +/// Pset_InterceptorTypeOil (PSET_TYPEDRIVENOVERRIDE) +/// +/// PETROL +/// +/// Pset_InterceptorTypePetrol (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_InterceptorBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcInterceptor is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcInterceptorType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// Cover: Material from which the cover or grating is constructed. +/// Strainer: Material from which the strainer is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcInterceptor are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the interceptor occurrence is defined by IfcInterceptorType, then the port occurrences must reflect those defined at the IfcInterceptorType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcInterceptor PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// Inlet (DRAINAGE, SINK): Inlet drainage. +/// Outlet (DRAINAGE, SOURCE): Outlet drainage. +class IFC_PARSE_API IfcInterceptor : public IfcFlowTreatmentDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcInterceptorTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcInterceptorTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcInterceptor (IfcEntityInstanceData* e); + IfcInterceptor (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcInterceptorTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcInterceptor > list; +}; +/// A junction box is an enclosure within which cables are connected. +/// Cables may be members of an electrical circuit (for electrical power systems) or be information carriers (in a telecommunications system). A junction box is typically intended to conceal a cable junction from sight, eliminate tampering or provide a safe place for electrical connection. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcJunctionBox defines the occurrence of any junction box; common information about junction box types is handled by IfcJunctionBoxType. +/// The IfcJunctionBoxType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcJunctionBoxType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcJunctionBoxType has ports or aggregated elements, such objects are reflected at the IfcJunctionBox occurrence using the IfcRelDefinesByObject relationship. +/// Figure 200 illustrates junction box type use. +/// Figure 200 — Junction box type use +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcJunctionBoxType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcJunctionBoxType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcJunctionBox override the properties defined at IfcJunctionBoxType. +/// Refer to the documentation at the supertype IfcFlowFitting and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_JunctionBoxTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_JunctionBoxBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcJunctionBox is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcJunctionBoxType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Casing: Material from which the casing is constructed. +/// +/// Connection Use Definition +/// The IfcJunctionBox may be connected to other objects as follows using the indicated relationship: +/// +/// IfcDiscreteAccessory (IfcRelConnectsElements): Indicates a cover plate for the junction box, having ObjectType 'JunctionBoxCoverPlate'. +/// IfcOpeningElement (IfcRelFillsElements): Indicates embedding the junction box in a building element such as a wall. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcJunctionBox are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the junction box occurrence is defined by IfcJunctionBoxType, then the port occurrences must reflect those defined at the IfcJunctionBoxType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcJunctionBox PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// DATA +/// +/// Line#1 (DATA, SINK): A data line, typically a cable connecting from a network router communications device. +/// Line#2 (DATA, SINK): A data line, typically a cable connecting from a network router communications device. +/// Gang#1 (DATA, SOURCE): A slot to house a data outlet containing one or more jacks, ordered from left-to-right. +/// Gang#2 (DATA, SOURCE): A slot to house a data outlet containing one or more jacks, ordered from left-to-right. +/// +/// POWER +/// +/// Line (ELECTRICAL, SINK): The electrical supply line, typically a cable connecting from another junction box or from a protective device within a distribution board. +/// Load (ELECTRICAL, SOURCE): The next load in the circuit, typically a cable connecting to another junction box. +/// Gang#1 (ELECTRICAL, SOURCE): A slot to house a switch or outlet, ordered from left-to-right. +/// Gang#2 (ELECTRICAL, SOURCE): A slot to house a switch or outlet, ordered from left-to-right. +/// Gang#3 (ELECTRICAL, SOURCE): A slot to house a switch or outlet, ordered from left-to-right. +/// Gang#4 (ELECTRICAL, SOURCE): A slot to house a switch or outlet, ordered from left-to-right. +/// +/// Figure 201 illustrates junction box port use. +/// Figure 201 — Junction box port use +class IFC_PARSE_API IfcJunctionBox : public IfcFlowFitting { +public: + boost::optional< ::Ifc4x3_add2::IfcJunctionBoxTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcJunctionBoxTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcJunctionBox (IfcEntityInstanceData* e); + IfcJunctionBox (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcJunctionBoxTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcJunctionBox > list; +}; + +class IFC_PARSE_API IfcKerb : public IfcBuiltElement { +public: + boost::optional< ::Ifc4x3_add2::IfcKerbTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcKerbTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcKerb (IfcEntityInstanceData* e); + IfcKerb (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcKerbTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcKerb > list; +}; +/// A lamp is an artificial light source such as a light bulb or tube. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcLamp defines the occurrence of any lamp; common information about lamp types is handled by IfcLampType. +/// The IfcLampType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcLampType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcLampType has ports or aggregated elements, such objects are reflected at the IfcLamp occurrence using the IfcRelDefinesByObject relationship. +/// Figure 202 illustrates lamp type use. +/// Figure 202 — Lamp type use +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcLampType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcLampType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcLamp override the properties defined at IfcLampType. +/// Refer to the documentation at the supertype IfcFlowTerminal and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_LampTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_LampBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcLamp is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcLampType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Bulb: Material from which the bulb is constructed such as glass. +/// Conductor: Material from which the conductor is constructed. +/// Filament: Material from which the filament is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcLamp are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the lamp occurrence is defined by IfcLampType, then the port occurrences must reflect those defined at the IfcLampType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcLamp PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// Socket (LIGHTING, SINK): The socket providing electricity. +/// +/// Figure 203 illustrates lamp port use. +/// Figure 203 — Lamp port use +class IFC_PARSE_API IfcLamp : public IfcFlowTerminal { +public: + boost::optional< ::Ifc4x3_add2::IfcLampTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcLampTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLamp (IfcEntityInstanceData* e); + IfcLamp (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcLampTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcLamp > list; +}; +/// A light fixture is a container that is designed for the purpose of housing one or more lamps and optionally devices that control, restrict or vary their emission. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcLightFixture defines the occurrence of any light fixture; common information about light fixture types is handled by IfcLightFixtureType. +/// The IfcLightFixtureType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcLightFixtureType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcLightFixtureType has ports or aggregated elements, such objects are reflected at the IfcLightFixture occurrence using the IfcRelDefinesByObject relationship. +/// Figure 204 illustrates light fixture type use. +/// Figure 204 — Light fixture type use +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcLightFixtureType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcLightFixtureType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcLightFixture override the properties defined at IfcLightFixtureType. +/// Refer to the documentation at the supertype IfcFlowTerminal and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_LightFixtureTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// Pset_LightFixtureTypeThermal (PSET_TYPEDRIVENOVERRIDE) +/// +/// SECURITYLIGHTING +/// +/// Pset_LightFixtureTypeSecurityLighting (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_LightFixtureBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcLightFixture is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcLightFixtureType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Casing: Material from which the casing is constructed. +/// +/// Connection Use Definition +/// The IfcLightFixture may be connected to other objects as follows using the indicated relationship: +/// +/// IfcCovering (IfcRelConnectsElements): Indicates a suspended ceiling anchoring the light fixture. +/// IfcOpeningElement (IfcRelFillsElements): Indicates embedding the light fixture in a building element such as a suspended ceiling. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcLightFixture are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the light fixture occurrence is defined by IfcLightFixtureType, then the port occurrences must reflect those defined at the IfcLightFixtureType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcLightFixture PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// Line (ELECTRICAL, SINK): The power supply line, typically a cable connected to a switch. +/// Socket#1 (LIGHTING, SOURCE): A lamp socket within the light fixture. +/// Socket#2 (LIGHTING, SOURCE): A lamp socket within the light fixture. +/// Socket#3 (LIGHTING, SOURCE): A lamp socket within the light fixture. +/// Socket#4 (LIGHTING, SOURCE): A lamp socket within the light fixture. +/// Socket#5 (LIGHTING, SOURCE): A lamp socket within the light fixture. +/// Socket#6 (LIGHTING, SOURCE): A lamp socket within the light fixture. +/// Socket#7 (LIGHTING, SOURCE): A lamp socket within the light fixture. +/// Socket#8 (LIGHTING, SOURCE): A lamp socket within the light fixture. +/// +/// Figure 205 illustrates light fixture port use. +/// Figure 205 — Light fixture port use +class IFC_PARSE_API IfcLightFixture : public IfcFlowTerminal { +public: + boost::optional< ::Ifc4x3_add2::IfcLightFixtureTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcLightFixtureTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLightFixture (IfcEntityInstanceData* e); + IfcLightFixture (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcLightFixtureTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcLightFixture > list; +}; + +class IFC_PARSE_API IfcLinearPositioningElement : public IfcPositioningElement { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLinearPositioningElement (IfcEntityInstanceData* e); + IfcLinearPositioningElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation); + typedef aggregate_of< IfcLinearPositioningElement > list; +}; + +class IFC_PARSE_API IfcLiquidTerminal : public IfcFlowTerminal { +public: + boost::optional< ::Ifc4x3_add2::IfcLiquidTerminalTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcLiquidTerminalTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcLiquidTerminal (IfcEntityInstanceData* e); + IfcLiquidTerminal (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcLiquidTerminalTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcLiquidTerminal > list; +}; +/// A medical device is attached to a medical piping system and operates upon medical gases to perform a specific function. Medical gases include medical air, medical vacuum, oxygen, carbon dioxide, nitrogen, and nitrous oxide. +/// Outlets for medical gasses should use IfcValve with PredefinedType equal to GASTAP, containing an IfcDistributionPort with FlowDirection=SINK and PredefinedType equal to COMPRESSEDAIR, VACUUM, or CHEMICAL, and having property sets on the port further indicating the gas type and pressure. Tanks for medical gasses should use IfcTank with PredefinedType equal to PRESSUREVESSEL, containing an IfcDistributionPort with FlowDirection=SOURCE and PredefinedType=CHEMICAL, and having property sets on the port further indicating the gas type and pressure range. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcMedicalDevice defines the occurrence of any medical device; common information about medical device types is handled by IfcMedicalDeviceType. +/// The IfcMedicalDeviceType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcMedicalDeviceType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcMedicalDeviceType has ports or aggregated elements, such objects are reflected at the IfcMedicalDevice occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcMedicalDeviceType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcMedicalDeviceType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcMedicalDevice override the properties defined at IfcMedicalDeviceType. +/// Refer to the documentation at the supertype IfcFlowTerminal and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_MedicalDeviceTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_MedicalDeviceBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcMedicalDevice is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcMedicalDeviceType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcMedicalDevice are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the medical device occurrence is defined by IfcMedicalDeviceType, then the port occurrences must reflect those defined at the IfcMedicalDeviceType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcMedicalDevice PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// VACUUMSTATION +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// VacuumOut (VACUUM, SOURCE): Provides suction. +class IFC_PARSE_API IfcMedicalDevice : public IfcFlowTerminal { +public: + boost::optional< ::Ifc4x3_add2::IfcMedicalDeviceTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcMedicalDeviceTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMedicalDevice (IfcEntityInstanceData* e); + IfcMedicalDevice (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcMedicalDeviceTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcMedicalDevice > list; +}; +/// An IfcMember is a +/// structural member designed to carry loads between or beyond +/// points of support. It is not required to be load bearing. The +/// orientation of the member (being horizontal, vertical or sloped) +/// is not relevant to its definition (in contrary to IfcBeam +/// and IfcColumn). An IfcMember represents a linear +/// structural element from an architectural or structural modeling +/// point of view and shall be used if it cannot be expressed more +/// specifically as either an IfcBeam or an +/// IfcColumn. +/// NOTE The representation of a member in a +/// structural analysis model is provided by +/// IfcStructuralCurveMember being part of an +/// IfcStructuralAnalysisModel. +/// The IFC specification provides two entities for member +/// occurrences: +/// +/// IfcMemberStandardCase used for all occurrences of +/// members, that have a profile defined that is swept along a +/// directrix. The profile might be changed uniformly by a taper +/// definition along the directrix. The profile parameter and its +/// cardinal point of insertion can be fully described by the +/// IfcMaterialProfileSetUsage. These beams are always +/// represented geometricly by an 'Axis' and a 'SweptSolid' or +/// 'AdvancedSweptSolid' shape representation (or by a 'Clipping' +/// geometry based on the swept solid), if a 3D geometric +/// representation is assigned. In addition they have to have a +/// corresponding IfcMaterialProfileSetUsage assigned. +/// NOTE View definitions and implementer +/// agreements may further constrain the applicable geometry types, +/// e.g. by excluding tapering from an IfcMemberStandardCase +/// implementation. +/// +/// IfcMember used for all other occurrences of members, +/// particularly for members with changing profile sizes along the +/// extrusion, or members defined by non-linear extrusion, or members +/// having only 'Brep', or 'SurfaceModel' geometry. +/// +/// HISTORY New entity in +/// IFC Release 2x2 Addendum. +/// Type Use Definition +/// IfcMember defines the occuurence of any member, common +/// information about member types (or styles) is handled by +/// IfcMemberType. The IfcMemberType (if present) may +/// establish the commontype name, usage (or predefined) type, +/// common material profile set, common set of properties and common +/// shape representations (using IfcRepresentationMap). The +/// IfcMemberType is attached using the +/// IfcRelDefinedByType.RelatingType objectified relationship +/// and is accessible by the inverse IsTypedBy attribute. +/// If no IfcMemberType is attached(i.e. if only +/// occurrence information is given) the PredefinedType should +/// be provided. If set to .USERDEFINED. a user defined value can be +/// provided by the ObjectType attribute. +/// Material Use Definition +/// The material of the IfcMember is defined by the +/// IfcMaterialProfileSet or as fallback by IfcMaterial +/// and attached by the +/// IfcRelAssociatesMaterial.RelatingMaterial. It is +/// accessible by the inverse HasAssociations relationship. +/// Material information can also be given at +/// theIfcMemberType, defining the common attribute data for +/// all occurrences of the same type.It is then accessible by the +/// inverse PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcMemberTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMember (IfcEntityInstanceData* e); + IfcMember (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcMemberTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcMember > list; +}; + +class IFC_PARSE_API IfcMobileTelecommunicationsAppliance : public IfcFlowTerminal { +public: + boost::optional< ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMobileTelecommunicationsAppliance (IfcEntityInstanceData* e); + IfcMobileTelecommunicationsAppliance (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcMobileTelecommunicationsApplianceTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcMobileTelecommunicationsAppliance > list; +}; + +class IFC_PARSE_API IfcMooringDevice : public IfcBuiltElement { +public: + boost::optional< ::Ifc4x3_add2::IfcMooringDeviceTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcMooringDeviceTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMooringDevice (IfcEntityInstanceData* e); + IfcMooringDevice (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcMooringDeviceTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcMooringDevice > list; +}; +/// A motor connection provides the means for connecting a motor as the driving device to the driven device. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcMotorConnection defines the occurrence of any motor connection; common information about motor connection types is handled by IfcMotorConnectionType. +/// The IfcMotorConnectionType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcMotorConnectionType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcMotorConnectionType has ports or aggregated elements, such objects are reflected at the IfcMotorConnection occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcMotorConnectionType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcMotorConnectionType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcMotorConnection override the properties defined at IfcMotorConnectionType. +/// Refer to the documentation at the supertype IfcEnergyConversionDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_MotorConnectionTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_MotorConnectionBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcMotorConnection is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcMotorConnectionType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Casing: Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcMotorConnection are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the motor connection occurrence is defined by IfcMotorConnectionType, then the port occurrences must reflect those defined at the IfcMotorConnectionType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcMotorConnection PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// Motor (NOTDEFINED, SINK): Connection from the motor. +/// Drive (NOTDEFINED, SOURCE): Connection to the driven device. +class IFC_PARSE_API IfcMotorConnection : public IfcEnergyConversionDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcMotorConnectionTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcMotorConnectionTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcMotorConnection (IfcEntityInstanceData* e); + IfcMotorConnection (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcMotorConnectionTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcMotorConnection > list; +}; + +class IFC_PARSE_API IfcNavigationElement : public IfcBuiltElement { +public: + boost::optional< ::Ifc4x3_add2::IfcNavigationElementTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcNavigationElementTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcNavigationElement (IfcEntityInstanceData* e); + IfcNavigationElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcNavigationElementTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcNavigationElement > list; +}; +/// Definition from ISO/CD 10303-42:1992 This is a special subtype of boundary curve which has the additional semantics of defining an outer boundary of a surface. No more than one such curve shall be included in the set of boundaries of a curve bounded surface. +/// +/// NOTE Corresponding ISO 10303 entity: outer_boundary_curve. Please refer to ISO/IS 10303-42:1994, p.89 for the final definition of the formal standard. +/// +/// HISTORY New entity in IFC2x4. +class IFC_PARSE_API IfcOuterBoundaryCurve : public IfcBoundaryCurve { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcOuterBoundaryCurve (IfcEntityInstanceData* e); + IfcOuterBoundaryCurve (aggregate_of< ::Ifc4x3_add2::IfcSegment >::ptr v1_Segments, boost::logic::tribool v2_SelfIntersect); + typedef aggregate_of< IfcOuterBoundaryCurve > list; +}; +/// An outlet is a device installed at a point to receive one or more inserted plugs for electrical power or communications. +/// Power outlets are commonly connected within a junction box; data outlets may be directly connected to a wall. For power outlets sharing the same circuit within a junction box, the ports should indicate the logical wiring relationship to the enclosing junction box, even though they may be physically connected to a cable going to another outlet, switch, or fixture. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcOutlet defines the occurrence of any outlet; common information about outlet types is handled by IfcOutletType. +/// The IfcOutletType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcOutletType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcOutletType has ports or aggregated elements, such objects are reflected at the IfcOutlet occurrence using the IfcRelDefinesByObject relationship. +/// Figure 206 illustrates outlet type use. +/// Figure 206 — Outlet type use +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcOutletType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcOutletType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcOutlet override the properties defined at IfcOutletType. +/// Refer to the documentation at the supertype IfcFlowTerminal and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_OutletTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_OutletBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcOutlet is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcOutletType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Casing: Material from which the casing is constructed. +/// Conductor: Material from which the conductors are constructed. +/// Surface: Material from which the outer plate is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcOutlet are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the outlet occurrence is defined by IfcOutletType, then the port occurrences must reflect those defined at the IfcOutletType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcOutlet PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// DATAOUTLET +/// +/// Line#1 (DATA, SINK): A data line, connecting to a cable commonly originating from a port on a router. +/// Line#2 (DATA, SINK): A data line, connecting to a cable commonly originating from a port on a router. +/// Jack#1 (DATA, SOURCE): Jacks in order of layout, going to the right and then down, which may accept a cable. +/// Jack#2 (DATA, SOURCE): Jacks in order of layout, going to the right and then down, which may accept a cable. +/// +/// POWEROUTLET +/// +/// Line (ELECTRICAL, SINK): The source of power, which may refer to a port on a junction box. +/// Jack#1 (ELECTRICAL, SOURCE): Upper jack, accepting a plug from an appliance or fixture. +/// Jack#2 (ELECTRICAL, SOURCE): Lower jack, accepting a plug from an appliance or fixture. +/// +/// TELEPHONEOUTLET +/// +/// Line#1 (DATA, SINK): A telephone line, connecting to a cable originating from a telecommunications distribution board. +/// Line#2 (DATA, SINK): A telephone line, connecting to a cable originating from a telecommunications distribution board. +/// Jack#1 (DATA, SOURCE): Jacks in order of layout, going to the right and then down, which may accept a cable. +/// Jack#2 (DATA, SOURCE): Jacks in order of layout, going to the right and then down, which may accept a cable. +/// +/// Figure 207 illustrates outlet port use. +/// Figure 207 — Outlet port use +class IFC_PARSE_API IfcOutlet : public IfcFlowTerminal { +public: + boost::optional< ::Ifc4x3_add2::IfcOutletTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcOutletTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcOutlet (IfcEntityInstanceData* e); + IfcOutlet (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcOutletTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcOutlet > list; +}; + +class IFC_PARSE_API IfcPavement : public IfcBuiltElement { +public: + boost::optional< ::Ifc4x3_add2::IfcPavementTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcPavementTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPavement (IfcEntityInstanceData* e); + IfcPavement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcPavementTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcPavement > list; +}; +/// A pile is a slender timber, concrete, or steel structural element, driven, jetted, or otherwise embedded on end in the ground for the purpose of supporting a load. +/// +/// HISTORY New entity in IFC2x2 +/// +/// Property Set Use Definition +/// +/// The following property set definitions are part of this IFC release: +/// +/// Pset_PileCommon: common property set for all pile occurrences. +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. They are accessible by the IsDefinedBy inverse attribute. The following base quantities are defined and should be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. Other quantities, being subjected to local standard of measurement, can be defined with another string value assigned to Name. In this case a valid value for MethodOfMeasurement has to be provided. +/// +/// Qto_PileBaseQuantities +/// +/// Geometry Use Definition +/// +/// Local placement and product representations are defined by the supertype IfcBuildingElement. Standard representations as defined at IfcColumnStandardCase should be used when applicable. +class IFC_PARSE_API IfcPile : public IfcDeepFoundation { +public: + /// The predefined generic type of the pile according to function. + /// + /// IFC 2x4 change:  Attribute made optional. Type information can be provided by IfcRelDefinesByType and IfcPileType. + boost::optional< ::Ifc4x3_add2::IfcPileTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcPileTypeEnum::Value > v); + /// General designator for how the pile is constructed. + /// + /// IFC 2x4 change:  Material profile association capability by means of IfcRelAssociatesMaterial has been added. The attribute ConstructionType should not be used whenever its information can be provided by a material profile set, either associated with the IfcPile object or, if present, with a corresponding instance of IfcPileType. + boost::optional< ::Ifc4x3_add2::IfcPileConstructionEnum::Value > ConstructionType() const; + void setConstructionType(boost::optional< ::Ifc4x3_add2::IfcPileConstructionEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPile (IfcEntityInstanceData* e); + IfcPile (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcPileTypeEnum::Value > v9_PredefinedType, boost::optional< ::Ifc4x3_add2::IfcPileConstructionEnum::Value > v10_ConstructionType); + typedef aggregate_of< IfcPile > list; +}; +/// A pipe fitting is a junction or transition in a piping flow distribution system or used to connect pipe segments, resulting changes in flow characteristics to the fluid such as direction or flow rate. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcPipeFitting defines the occurrence of any pipe fitting; common information about pipe fitting types is handled by IfcPipeFittingType. +/// The IfcPipeFittingType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcPipeFittingType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcPipeFittingType has ports or aggregated elements, such objects are reflected at the IfcPipeFitting occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcPipeFittingType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcPipeFittingType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcPipeFitting override the properties defined at IfcPipeFittingType. +/// Refer to the documentation at the supertype IfcFlowFitting and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_PipeFittingOccurrence (PSET_OCCURRENCEDRIVEN) +/// Pset_PipeFittingPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_PipeFittingTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// BEND +/// +/// Pset_PipeFittingTypeBend (PSET_TYPEDRIVENOVERRIDE) +/// +/// JUNCTION +/// +/// Pset_PipeFittingTypeJunction (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_PipeFittingBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcPipeFitting is defined by IfcMaterialProfileSetUsage or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcPipeFittingType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialProfileSet.MaterialProfiles[n].Name shall be used: +/// +/// Body: Material from which the pipe fitting is constructed. +/// Coating: The outer coating, if applicable. +/// Insulation: The insulating wrapping, if applicable. +/// Lining: The inner lining, if applicable. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcPipeFitting are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the pipe fitting occurrence is defined by IfcPipeFittingType, then the port occurrences must reflect those defined at the IfcPipeFittingType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcPipeFitting PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// BEND +/// +/// Inlet (NOTDEFINED, SINK): The flow inlet. +/// Outlet (NOTDEFINED, SOURCE): The flow outlet. +/// +/// CONNECTOR +/// +/// Inlet (NOTDEFINED, SINK): The flow inlet. +/// Outlet (NOTDEFINED, SOURCE): The flow outlet. +/// +/// ENTRY +/// +/// Outlet (NOTDEFINED, SOURCE): The flow outlet. +/// +/// EXIT +/// +/// Inlet (NOTDEFINED, SINK): The flow inlet. +/// +/// JUNCTION +/// +/// Inlet (NOTDEFINED, SINK): The flow inlet. +/// Outlet#1 (NOTDEFINED, SOURCE): The first flow outlet. +/// Outlet#2 (NOTDEFINED, SOURCE): The second flow outlet. +/// +/// OBSTRUCTION +/// +/// Inlet (NOTDEFINED, SINK): The flow inlet. +/// Outlet (NOTDEFINED, SOURCE): The flow outlet. +/// +/// Figure 227 illustrates pipe fitting port use. +/// Figure 227 — Pipe fitting port use +class IFC_PARSE_API IfcPipeFitting : public IfcFlowFitting { +public: + boost::optional< ::Ifc4x3_add2::IfcPipeFittingTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcPipeFittingTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPipeFitting (IfcEntityInstanceData* e); + IfcPipeFitting (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcPipeFittingTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcPipeFitting > list; +}; +/// A pipe segment is used to typically join two sections of a piping network. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcPipeSegment defines the occurrence of any pipe segment; common information about pipe segment types is handled by IfcPipeSegmentType. +/// The IfcPipeSegmentType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcPipeSegmentType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcPipeSegmentType has ports or aggregated elements, such objects are reflected at the IfcPipeSegment occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcPipeSegmentType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcPipeSegmentType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcPipeSegment override the properties defined at IfcPipeSegmentType. +/// Refer to the documentation at the supertype IfcFlowSegment and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_PipeConnectionFlanged (PSET_OCCURRENCEDRIVEN) +/// Pset_PipeSegmentOccurrence (PSET_OCCURRENCEDRIVEN) +/// Pset_PipeSegmentPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_PipeSegmentTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// CULVERT +/// +/// Pset_PipeSegmentTypeCulvert (PSET_TYPEDRIVENOVERRIDE) +/// +/// GUTTER +/// +/// Pset_PipeSegmentTypeGutter (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_PipeSegmentBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcPipeSegment is defined by IfcMaterialProfileSetUsage or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcPipeSegmentType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialProfileSet.MaterialProfiles[n].Name shall be used: +/// +/// Body: Material from which the duct fitting is constructed. +/// Coating: The outer coating, if applicable. +/// Insulation: The insulating wrapping, if applicable. +/// Lining: The inner lining, if applicable. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcPipeSegment are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the pipe segment occurrence is defined by IfcPipeSegmentType, then the port occurrences must reflect those defined at the IfcPipeSegmentType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcPipeSegment PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// Inlet (NOTDEFINED, SINK): The flow inlet. +/// Outlet (NOTDEFINED, SOURCE): The flow outlet. +/// +/// Figure 228 illustrates pipe segment port use. +/// Figure 228 — Pipe segment port use +class IFC_PARSE_API IfcPipeSegment : public IfcFlowSegment { +public: + boost::optional< ::Ifc4x3_add2::IfcPipeSegmentTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcPipeSegmentTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPipeSegment (IfcEntityInstanceData* e); + IfcPipeSegment (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcPipeSegmentTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcPipeSegment > list; +}; +/// Definition from IAI: An IfcPlate is a planar and +/// often flat part with constant thickness. A plate can be a +/// structural part carrying loads between or beyond points of +/// support, however it is not required to be load bearing.The +/// location of the plate (being horizontal, vertical or sloped) is +/// not relevant to its definition (in contrary to IfcWall and +/// IfcSlab (as floor slab)). +/// NOTE Plates arenormally made of steel, other +/// metallic material, or by glass panels. However the definition of +/// IfcPlate is material independent and specific material +/// information shall be handled by using +/// IfcAssociatesMaterial to assign a material specification +/// to the IfcPlate. +/// +/// NOTE Although not necessarily, plates are often add-on +/// parts. This is represented by the IfcRelAggregates +/// decomposition mechanism used to aggregate parts, such as +/// IfcPlate, into a container element, e.g. +/// IfcElementAssembly, or IfcCurtainWall. +/// +/// NOTE The representation of a plate in a structural +/// analysis model is provided by IfcStructuralSurfaceMember +/// being part of an +/// IfcStructuralAnalysisModel. +/// An instance IfcPlate should preferably get its +/// geometric representation and material assignment through the type +/// definition by IfcPlateType assigned using the +/// IfcRelDefinesByType relationship. This allows identical +/// plates in a construction to be represented by the same instance +/// of IfcPlateType. +/// A plate may have openings, such as voids or recesses. They are +/// defined by an IfcOpeningElement attached to the plate +/// using the inverse relationship HasOpenings pointing to +/// IfcRelVoidsElement. The position number of a plate as +/// often used in steel construction is assigned through the +/// attribute IfcElement.Tag +/// The IFC specification provides two entities for plate +/// occurrences: +/// +/// IfcPlateStandardCase used for all occurrences of +/// plates, that are prismatic and where the thickness parameter can +/// be fully described by the IfcMaterialLayerSetUsage. These +/// plates are always represented geometrically by a 'SweptSolid' +/// geometry (or by a 'Clipping' geometry based on 'SweptSolid'), if +/// a 3D geometric representation is assigned. In addition they have +/// to have a corresponding IfcMaterialLayerSetUsage +/// assigned. +/// IfcPlate used for all other occurrences of plates, +/// particularly for plates with changing thickness, or plates with +/// non planar surfaces, and plates having only 'SurfaceModel' or +/// 'Brep' geometry. +/// +/// HISTORY New entity in +/// IFC Release 2x2 +/// Type Use Definition +/// The IfcPlate defines the occuurence of any plate, +/// common information about plate types (or styles) is handled by +/// IfcPlateType. The IfcPlateType (if present) may +/// establish the commontype name, usage (or predefined) type, +/// common set of properties, common material layer set, and common +/// shape representations (using IfcRepresentationMap). The +/// IfcPlateType is attached using the +/// IfcRelDefinedByType.RelatingType objectified relationship +/// and is accessible by the inverse IsTypedBy attribute. +/// If no IfcPlateType is attached(i.e. if only occurrence +/// information is given) the PredefinedType should be +/// provided. If set to .USERDEFINED. a user defined value can be +/// provided by the ObjectType attribute. +/// Material Use Definition +/// The material of the IfcPlate is defined by +/// IfcMaterialLayerSet, or IfcMaterial and attached by +/// the IfcRelAssociatesMaterial.RelatingMaterial. It +/// is accessible by the inverse HasAssociations +/// relationship. +/// NOTE It is illegal to assign an +/// IfcMaterialLayerSetUsage to an IfcPlate. Only the +/// subtype IfcPlateStandardCase supports this +/// concept. +/// Material information can also be given at the +/// IfcPlateType, defining the common attribute data for all +/// occurrences of the same type.It is then accessible by the +/// inverse IsTypedBy +/// relationship pointing to IfcPlateType.HasAssociations and +/// via IfcRelAssociatesMaterial.RelatingMaterial. +/// Property Set Use Definition +/// The property sets relating to the IfcPlate are defined +/// by the IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// property set definitions specific to the IfcPlate are part +/// of this IFC release: +/// +/// Pset_PlateCommon: common property set for all plate +/// occurrences +/// +/// Quantity Use Definition +/// The quantities relating to the IfcPlate and +/// IfcPlateStandardCase are defined by the +/// IfcElementQuantity and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// base quantities are defined and should be exchanged with the +/// IfcElementQuantity.Name = 'BaseQuantities'. Other +/// quantities can be defined being subjected to local standard of +/// measurement with another string value assigned to Name and +/// a value provided for MethodOfMeasurement. Quanties shall +/// be never assigned to the IfcPlateType. +/// +/// Qto_PlateBaseQuantities: base quantities for +/// all plate occurrences. +/// +/// Containment Use Definitions +/// The IfcPlate, as any subtype of +/// IfcBuildingElement, may participate in two different +/// containment relationships. The first (and in most implementation +/// scenarios mandatory) relationship is the hierachical spatial +/// containment, the second relationship is the aggregation within +/// anelement assembly. +/// +/// TheIfcPlate is places within the project spatial +/// hierarchy using the objectified relationship +/// IfcRelContainedInSpatialStructure, referring to it by its +/// inverse attribute SELF\IfcElement.ContainedInStructure. +/// Subtypes ofIfcSpatialStructureElement are valid spatial +/// containers, with IfcBuildingStorey being the default +/// container. +/// TheIfcPlate may be aggregated into an element +/// assembly using the objectified relationship +/// IfcRelAggregates, referring to it by its inverse attribute +/// SELF\IfcObjectDefinition.Decomposes. Any subtype of +/// IfcElement can be an element assembly, with +/// IfcElementAssembly as a special focus subtype. In this +/// case, no additional relationship to the spatial hierarchy shall +/// be given (i.e.SELF\IfcElement.ContainedInStructure = +/// NIL), the relationship to the spatial container is handled by the +/// element assembly. +/// +/// Geometry Use Definition +/// The geometric representation of IfcPlate is +/// given by the IfcProductDefinitionShape, allowing multiple +/// geometric representations. Included are: +/// Local Placement +/// The local placement for IfcPlate is defined in +/// its supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate +/// system that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if given) to the local +/// placement of the same IfcSpatialStructureElement, which is +/// used in the ContainedInStructure inverse attribute, or to +/// a spatial structure element at a higher level, referenced by +/// that. +/// +/// If the IfcPlate is part of an assembly, the +/// PlacementRelTo relationship of IfcLocalPlacement +/// shall point to the local placement of the container element, e.g. +/// IfcElementAssembly, +/// +/// If the relative placement is not used, the absolute placement +/// is defined within the world coordinate system. +/// +/// Geometric Representation +/// Currently, the 'Surface', +/// 'FootPrint', 'Body', and 'Box' +/// representations are supported. The 'Box' representation includes +/// the representation type 'BoundingBox' and is explained at +/// IfcBuildingElement. +/// Surface Representation +/// The surfacic geometric representation of IfcPlate is +/// defined using the 'Surface' representation. +/// +/// RepresentationIdentifier : 'Surface' +/// RepresentationType : 'Surface3D' +/// +/// NOTE The 'Surface' can be used to define a +/// surfacic model of the building (e.g. for analytical purposes, or +/// for reduced Level of Detail representation). +/// Body Representation +/// The body representation of IfcPlate can be represented +/// using the representation types 'SweptSolid', 'Clipping', +/// 'MappedRepresentation', 'SurfaceModel', and 'Brep'. The +/// representation types 'SurfaceModel' and 'Brep' are explained at +/// IfcBuildingElement. +/// SweptSolid Representation Type +/// The following attribute values for the +/// IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// If a corresponding material definition using +/// IfcMaterialLayerSetUsage can be assigned, the subtype +/// IfcPlateStandardCase shall be used. +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'SweptSolid' +/// +/// The following additional constraints apply to the swept solid +/// representation: +/// +/// Solid: IfcExtrudedAreaSolid is required, +/// Profile: IfcArbitraryClosedProfileDef, +/// IfcArbitraryProfileDefWithVoids, IfcRectangleProfileDef, +/// IfcCircleProfileDef, IfcEllipseProfileDef shall be +/// supported. +/// Extrusion: The profile can be extruded perpendicularly +/// or non-perpendicularly to the plane of the swept profile. +/// +/// Clipping Representation Type +/// The following attribute values for the +/// IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'Clipping' +/// +/// MappedRepresentation Representation Type +/// The 'MappedRepresentation' shall be supported as it allows for +/// reusing the geometry definition of the member type at all +/// occurrences of the same type. The following attribute values for +/// the IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'MappedRepresentation' +/// +/// The same constraints, as given for the 'SweptSolid', +/// 'Clipping', 'SurfaceModel', and 'Brep' geometric representation, +/// shall apply to the MappedRepresentation of the +/// IfcRepresentationMap. +class IFC_PARSE_API IfcPlate : public IfcBuiltElement { +public: + /// Predefined generic type for a plate that is specified in an enumeration. There may be a property set given specificly for the predefined types. + /// NOTE The PredefinedType shall only be used, if no type object IfcPlateType is assigned, providing its own IfcPlateType.PredefinedType. + /// + /// IFC2x4 CHANGE The attribute has been added at the end of the entity definition. + boost::optional< ::Ifc4x3_add2::IfcPlateTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcPlateTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPlate (IfcEntityInstanceData* e); + IfcPlate (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcPlateTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcPlate > list; +}; +/// A protective device breaks an electrical circuit when a stated electric current that passes through it is exceeded. +/// A protective device provides protection against electrical current only (not as a general protective device). It may be used to represent the complete set of elements including both the tripping unit and the breaking unit that provide the protection. This may be particularly useful at earlier stages of design where the approach to breaking the electrical supply may be determined but the method of tripping may not. Alternatively, this entity may be used to specifically represent the breaking unit alone (in which case the tripping unit will also be specifically identified). This entity is specific to dedicated protective devices and excludes electrical outlets that may have circuit protection. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcProtectiveDevice defines the occurrence of any protective device; common information about protective device types is handled by IfcProtectiveDeviceType. +/// The IfcProtectiveDeviceType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcProtectiveDeviceType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcProtectiveDeviceType has ports or aggregated elements, such objects are reflected at the IfcProtectiveDevice occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcProtectiveDeviceType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcProtectiveDeviceType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcProtectiveDevice override the properties defined at IfcProtectiveDeviceType. +/// Refer to the documentation at the supertype IfcFlowController and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_ProtectiveDeviceBreakerUnitI2TCurve (PSET_TYPEDRIVENOVERRIDE) +/// Pset_ProtectiveDeviceBreakerUnitI2TFuseCurve (PSET_TYPEDRIVENOVERRIDE) +/// Pset_ProtectiveDeviceBreakerUnitIPICurve (PSET_TYPEDRIVENOVERRIDE) +/// Pset_ProtectiveDeviceBreakerUnitTypeMotorProtection (PSET_TYPEDRIVENOVERRIDE) +/// Pset_ProtectiveDeviceTrippingCurve (PSET_TYPEDRIVENOVERRIDE) +/// Pset_ProtectiveDeviceTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// CIRCUITBREAKER +/// +/// Pset_ProtectiveDeviceBreakerUnitTypeMCB (PSET_TYPEDRIVENOVERRIDE) +/// Pset_ProtectiveDeviceTypeCircuitBreaker (PSET_TYPEDRIVENOVERRIDE) +/// +/// EARTHLEAKAGECIRCUITBREAKER +/// +/// Pset_ProtectiveDeviceTypeEarthLeakageCircuitBreaker (PSET_TYPEDRIVENOVERRIDE) +/// +/// FUSEDISCONNECTOR +/// +/// Pset_ProtectiveDeviceTypeFuseDisconnector (PSET_TYPEDRIVENOVERRIDE) +/// +/// RESIDUALCURRENTCIRCUITBREAKER +/// +/// Pset_ProtectiveDeviceTypeResidualCurrentCircuitBreaker (PSET_TYPEDRIVENOVERRIDE) +/// +/// RESIDUALCURRENTSWITCH +/// +/// Pset_ProtectiveDeviceTypeResidualCurrentSwitch (PSET_TYPEDRIVENOVERRIDE) +/// +/// VARISTOR +/// +/// Pset_ProtectiveDeviceTypeVaristor (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_ProtectiveDeviceBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcProtectiveDevice is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcProtectiveDeviceType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Casing: Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcProtectiveDevice are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the protective device occurrence is defined by IfcProtectiveDeviceType, then the port occurrences must reflect those defined at the IfcProtectiveDeviceType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcProtectiveDevice PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// CIRCUITBREAKER +/// +/// Line (ELECTRICAL, SINK): The supply line, typically connected from a slot in a distribution board. +/// Load (ELECTRICAL, SOURCE): The load protected by this device, typically a cable connected to a device or the first junction box of a circuit. +class IFC_PARSE_API IfcProtectiveDevice : public IfcFlowController { +public: + boost::optional< ::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcProtectiveDevice (IfcEntityInstanceData* e); + IfcProtectiveDevice (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcProtectiveDeviceTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcProtectiveDevice > list; +}; +/// The distribution control element type IfcProtectiveDeviceTrippingUnitType defines commonly shared information for occurrences of protective device tripping units. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a protective device tripping unit specification (i.e. the specific product information, that is common to all occurrences of that product type). Protective Device Tripping Unit types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcProtectiveDeviceTrippingUnitType are represented by instances of IfcProtectiveDeviceTrippingUnit. +/// +/// HISTORY: New entity in IFC2x4 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcDistributionControlElementType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_ElectricalDeviceCommon +/// Pset_ProtectiveDeviceTrippingCurve +/// Pset_ProtectiveDeviceTrippingFunctionGCurve +/// Pset_ProtectiveDeviceTrippingFunctionICurve +/// Pset_ProtectiveDeviceTrippingFunctionLCurve +/// Pset_ProtectiveDeviceTrippingFunctionSCurve +/// Pset_ProtectiveDeviceTrippingUnitCurrentAdjustment +/// Pset_ProtectiveDeviceTrippingUnitTimeAdjustment +/// Pset_ProtectiveDeviceTrippingUnitTypeCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic (ELECTROMAGNETIC) +/// Pset_ProtectiveDeviceTrippingUnitTypeElectronic (ELECTRONIC) +/// Pset_ProtectiveDeviceTrippingUnitTypeResidualCurrent (RESIDUALCURRENT) +/// Pset_ProtectiveDeviceTrippingUnitTypeThermal (THERMAL) +/// +/// Material Use Definition +/// The material of the IfcProtectiveDeviceTrippingUnitType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcProtectiveDeviceTrippingUnitType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcProtectiveDeviceTrippingUnit for standard port definitions. +class IFC_PARSE_API IfcProtectiveDeviceTrippingUnitType : public IfcDistributionControlElementType { +public: + /// Identifies the predefined types of protective device tripping unit types from which the type required may be set. + ::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcProtectiveDeviceTrippingUnitType (IfcEntityInstanceData* e); + IfcProtectiveDeviceTrippingUnitType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcProtectiveDeviceTrippingUnitType > list; +}; +/// A pump is a device which imparts mechanical work on fluids or slurries to move them through a channel or pipeline. A typical use of a pump is to circulate chilled water or heating hot water in a building services distribution system. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcPump defines the occurrence of any pump; common information about pump types is handled by IfcPumpType. +/// The IfcPumpType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcPumpType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcPumpType has ports or aggregated elements, such objects are reflected at the IfcPump occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcPumpType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcPumpType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcPump override the properties defined at IfcPumpType. +/// Refer to the documentation at the supertype IfcFlowMovingDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_PumpOccurrence (PSET_OCCURRENCEDRIVEN) +/// Pset_PumpPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_PumpTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_PumpBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcPump is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcPumpType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// Impeller: Material from which the impeller of the pump is constructed. In the case of a positive displacement pump, the piston acts as the impeller. +/// Seal: Material from which the impeller shaft seal of the pump is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcPump are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the pump occurrence is defined by IfcPumpType, then the port occurrences must reflect those defined at the IfcPumpType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcPump PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// In (NOTDEFINED, SINK): Fluid entering pump. +/// Out (NOTDEFINED, SOURCE): Fluid leaving pump. +/// +/// Figure 229 illustrates pump port use. +/// Figure 229 — Pump port use +class IFC_PARSE_API IfcPump : public IfcFlowMovingDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcPumpTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcPumpTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcPump (IfcEntityInstanceData* e); + IfcPump (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcPumpTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcPump > list; +}; + +class IFC_PARSE_API IfcRail : public IfcBuiltElement { +public: + boost::optional< ::Ifc4x3_add2::IfcRailTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcRailTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRail (IfcEntityInstanceData* e); + IfcRail (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcRailTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcRail > list; +}; +/// Definition of IAI: The railing is a frame assembly +/// adjacent to human circulation spaces and at some space boundaries +/// where it is used in lieu of walls or to compliment walls. +/// Designed to aid humans, either as an optional physical support, +/// or to prevent injury by falling. +/// HISTORY New Entity in +/// IFC Release 2.0 +/// Type Use Definition +/// IfcRailing defines the occuurence of any railing, +/// common information about railing types (or styles) is handled by +/// IfcRailingType. The IfcRailingType (if present) may +/// establish the commontype name, usage (or predefined) type, +/// common material, common set of properties and common shape +/// representations (using IfcRepresentationMap). The +/// IfcRailingType is attached using the +/// IfcRelDefinedByType.RelatingType objectified relationship +/// and is accessible by the inverse IsDefinedBy +/// attribute. +/// Material Use Definition +/// The material of the IfcRailing is defined by the +/// IfcMaterial and attached by the +/// IfcRelAssociatesMaterial.RelatingMaterial. It is +/// accessible by the inverse HasAssociations +/// relationship. +/// Material information can also be given at the +/// IfcRailingType, defining the common attribute data for all +/// occurrences of the same type.It is then accessible by the +/// inverse IsDefinedBy relationship pointing to +/// IfcRailingType.HasAssociations and via +/// IfcRelAssociatesMaterial.RelatingMaterial to +/// IfcMaterial. If both are given, then the material directly +/// assigned to IfcRailing overrides the material assigned to +/// IfcRailingType. +/// Property Set Use Definition +/// The property sets relating to the IfcRailing are +/// defined by the IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// property set definitions specific to the IfcRailing are +/// part of this IFC release: +/// +/// Pset_RailingCommon: common property set for all +/// railing occurrences +/// +/// Quantity Use Definition +/// The quantities relating to the IfcRailing are defined +/// by the IfcElementQuantity and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// base quantities are defined and should be exchanged with the +/// IfcElementQuantity.MethodOfMeasurement = 'BaseQuantities'. +/// Other quantities can be defined being subjected to local standard +/// of measurement with another string value assigned to +/// MethodOfMeasurement. +/// +/// Qto_RailingBaseQuantities: base quantities +/// for all railing occurrences. +/// +/// Containment Use Definition +/// The IfcRailing, as any subtype of +/// IfcBuildingElement, may participate in two different +/// containment relationships. The first (and in most implementation +/// scenarios mandatory) relationship is the hierachical spatial +/// containment, the second (optional) relationship is the +/// aggregation within anelement assembly. +/// +/// The IfcRailing is places within the project spatial +/// hierarchy using the objectified relationship +/// IfcRelContainedInSpatialStructure, refering to it by its +/// inverse attribute SELF\IfcElement.ContainedInStructure. +/// Subtypes ofIfcSpatialStructureElement are valid spatial +/// containers, with IfcBuildingStorey being the default +/// container. +/// The IfcRailing may be aggregated into an element +/// assembly using the objectified relationship +/// IfcRelAggregates, refering to it by its inverse attribute +/// SELF\IfcObjectDefinition.Decomposes. Any subtype of +/// IfcElement can be an element assembly, with +/// IfcStair, or IfcRamp as a special focus subtypes. +/// In this case it should not be additionally contained in the +/// project spatial hierarchy, +/// i.e.SELF\IfcElement.ContainedInStructure should be +/// NIL. +/// +/// Geometry Use Definition +/// The geometric representation of IfcRailing is given by +/// the IfcProductDefinitionShape, allowing multiple geometric +/// representations. Included are: +/// Local placement +/// The local placement for IfcRailing is defined in its +/// supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate +/// system that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if given) to the same +/// IfcSpatialStructureElement that is used in the +/// ContainedInStructure inverse attribute or to a referenced +/// spatial structure element at a higher level +/// If the IfcRailing, however, is used by an +/// IfcStair or IfcRamp, and this container class +/// defines its own local placement, then the PlacementRelTo +/// relationship of IfcLocalPlacement shall point to the local +/// placement of IfcStair or IfcRamp. +/// If the relative placement is not used, the absolute placement +/// is defined within the world coordinate system. +/// +/// Geometric Representation +/// Currently, the 'Axis', 'Body', +/// and 'Box' representations are supported. The 'Box' representation +/// includes the representation type 'BoundingBox' and is explained +/// at IfcBuildingElement. +/// Axis Representation +/// The axis geometric representation of IfcRailing is +/// defined using the 'Axis' representation. The following attribute +/// values for the IfcShapeRepresentation holding this +/// geometric representation shall be used: +/// +/// RepresentationIdentifier : 'Axis' +/// RepresentationType : 'Curve2D', 'Curve3D' +/// +/// Body Representation +/// Currently the use of 'SurfaceModel', 'Brep' and +/// 'MappedRepresentation' representations of IfcRailing are +/// supported. The conventions to use these representations are given +/// at the level of the supertype, IfcBuildingElement. No +/// further constraints or provisions on how to use the +/// representation types are defined for IfcRailing. +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'SurfaceModel', 'Brep', +/// 'MappedRepresentation' +class IFC_PARSE_API IfcRailing : public IfcBuiltElement { +public: + /// Predefined generic types for a railing that are specified in an enumeration. There may be a property set given for the predefined types. + /// NOTE: The use of the predefined type directly at the occurrence object level of IfcRailing is only permitted, if no type object IfcRailingType is assigned. + /// IFC2x PLATFORM CHANGE: The attribute has been changed into an OPTIONAL attribute. + boost::optional< ::Ifc4x3_add2::IfcRailingTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcRailingTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRailing (IfcEntityInstanceData* e); + IfcRailing (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcRailingTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcRailing > list; +}; +/// Definition from ISO 6707-1:1989: Inclined way or floor +/// joining two surfaces at different levels. +/// A ramp is a vertical passageway which +/// provides a human circulation link between one floor level and +/// another floor level at a different elevation. It may include a +/// landing as an intermediate floor slab. A ramp normally does not +/// include steps (stepped ramps are out of scope for this IFC +/// Release). +/// The ramp is a container entity that aggregates all components +/// of the ramp, it represents. The aggregation is handled via the +/// IfcRelAggregates relationship, relating an IfcRamp +/// with the related flights (IfcRampFlight) and landings +/// (IfcSlab with type 'Landing'). Railings belonging to the +/// ramp may be included into the aggregation as +/// IfcRailing. +/// +/// HISTORY New Entity in IFC Release 2.0. +/// IFC2x4 CHANGE Attribute ShapeType renamed to PredefinedType +/// +/// Type Use Definition +/// IfcRamp defines the occuurence of any ramp, common +/// information about ramp types (or styles) is handled by +/// IfcRampType. The IfcRampType (if present) may +/// establish the commontype name, usage (or predefined) type, +/// common material, common set of properties and common shape +/// representations (using IfcRepresentationMap). The +/// IfcRampType is attached using the +/// IfcRelDefinedByType.RelatingType objectified relationship +/// and is accessible by the inverse IsDefinedBy +/// attribute. +/// NOTE Since the IfcRamp might be +/// represented as an aggregate of parts, e.g. represented by +/// IfcRampFlight, or IfcSlab, these individual parts +/// may have type information attached (represented e.g. by +/// IfcRampFlightType, or +/// IfcSlabType). +/// Material Use Definition +/// The material of the IfcRamp is defined by the +/// IfcMaterial and attached by the +/// IfcRelAssociatesMaterial.RelatingMaterial. It is +/// accessible by the inverse HasAssociations +/// relationship. +/// Material information can also be given at the +/// IfcRampType, defining the common attribute data for all +/// occurrences of the same type.It is then accessible by the +/// inverse IsDefinedBy relationship pointing to +/// IfcRampType.HasAssociations and via +/// IfcRelAssociatesMaterial.RelatingMaterial to +/// IfcMaterial. If both are given, then the material directly +/// assigned to IfcRamp overrides the material assigned to +/// IfcRampType. +/// Property Set Use Definition: +/// The property sets relating to the IfcRamp are defined +/// by the IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// property set definitions specific to the IfcRamp are part +/// of this IFC release: +/// +/// Pset_RampCommon: common property set for all +/// ramp occurrences +/// +/// Quantity Use Definition +/// The quantities relating to the IfcRamp are defined by +/// the IfcElementQuantity and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// base quantities are defined and should be exchanged with the +/// IfcElementQuantity.MethodOfMeasurement = 'BaseQuantities'. +/// Other quantities can be defined being subjected to local standard +/// of measurement with another string value assigned to Name +/// and a value provided for MethodOfMeasurement. Quantities +/// shall never be assigned to the IfcRampType. +/// The individual quantities shall only be given at +/// IfcRamp, it is not decomposed into the individual parts, +/// IfcRampFlight and IfcSlab. +/// +/// Qto_RampBaseQuantities: base quantities for +/// all ramp occurrences. +/// +/// Geometry Use Definitions: +/// The geometric representation of IfcRamp is given by the +/// IfcProductDefinitionShape, allowing multiple geometric +/// representations. Independent geometric representations should +/// only be used when the IfcRamp is not defined as an +/// aggregate. If defined as an aggregate, the geometric +/// representation is the sum of the representation of the components +/// within the aggregate. +/// Local placement +/// The local placement for IfcRamp is defined in its +/// supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate +/// system that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if given) to the local +/// placement of the same IfcSpatialStructureElement that is +/// used in the ContainedInStructure inverse attribute or to a +/// referenced spatial structure element at a higher level. +/// If the relative placement is not used, the absolute placement +/// is defined within the world coordinate system. +/// +/// If the LocalPlacement is given for the IfcRamp, +/// then all components, which are aggregated to the ramp should use +/// this placement as their relative placement. +/// Geometric representations +/// Geometric representation by own shape +/// representation +/// If the IfcRamp has no components defined (empty set of +/// SELF\IfcProduct.IsDecomposedBy) then the IfcRamp +/// may be represented by an own IfcShapeRepresentation with +/// the following values: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'SweptSolid', 'Clipping', +/// 'SurfaceModel', or 'Brep' +/// +/// The conventions to use these representations are provided at +/// IfcBuildingElement. No further constraints or provisions +/// on how to use the representation types are defined for +/// IfcRamp. +/// Geometric representation by aggregated elements +/// If the IfcRamp has components (referenced by +/// SELF\IfcProduct.IsDecomposedBy) then no independent +/// geometric representation shall be defined for the IfcRamp. +/// The IfcRamp is then geometrically represented by the +/// geometric representation of its components. The components are +/// accessed via +/// SELF\IfcProduct.IsDecomposedBy[1].RelatedObjects. +/// +/// Figure 111 illustrates IfcRamp defining the local placement for all components. +/// +/// Figure 111 — Ramp placement +class IFC_PARSE_API IfcRamp : public IfcBuiltElement { +public: + /// Predefined shape types for a ramp that are specified in an enumeration. + /// + /// NOTE The PredefinedType shall only be used, if no type object IfcRampType is assigned, providing its own IfcRampType.PredefinedType. + /// + /// IFC2x4 CHANGE The attribute has been renamed from ShapeType and changed to be OPTIONAL with upward compatibility for file based exchange. + boost::optional< ::Ifc4x3_add2::IfcRampTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcRampTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRamp (IfcEntityInstanceData* e); + IfcRamp (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcRampTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcRamp > list; +}; +/// A ramp is an inclined slab segment, normally +/// providing a human circulation link between two landings, floors or +/// slabs at different elevations. +/// An IfcRampFlight is normally aggregated by an +/// IfcRamp through the IfcRelAggregates relationship, +/// the ramp flight is then included in the set of +/// IfcRelAggregates.RelatedObjects. An IfcRampFlight +/// normally connects the floor slab of zero to two different storeys +/// (or partial storeys or landings) within a building. The connection +/// relationship between the IfcRampFlight and the +/// IfcSlab is expressed using the IfcRelConnectsElements +/// relationship. +/// HISTORY New Entity in IFC Release 2.0. +/// +/// Type Use Definition +/// IfcRampFlight defines the occurrence of any ramp flight, +/// common information about ramp flight types (or styles) is handled +/// by IfcRampFlightType. The IfcRampFlightType (if +/// present) may establish the common type name, usage (or +/// predefined) type, common material layer set, common set of +/// properties and common shape representations (using +/// IfcRepresentationMap). The IfcRampFlightType is +/// attached using the IfcRelDefinedByType.RelatingType +/// objectified relationship and is accessible by the inverse +/// IsDefinedBy attribute. +/// Material Use Definition +/// The material of the IfcRampFlight is defined by the +/// IfcMaterial and attached by the +/// IfcRelAssociatesMaterial.RelatingMaterial. It is +/// accessible by the inverse HasAssociations relationship. +/// Property Set Use Definition: +/// The property sets relating to the IfcRampFlight are +/// defined by the IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible by +/// the inverse IsDefinedBy relationship. The following property +/// set definitions specific to the IfcRampFlight are part of +/// this IFC release: +/// +/// Pset_RampFlightCommon: common property set for all +/// ramp flight occurrences +/// +/// Quantity Use Definition +/// The quantities relating to the IfcRampFlight are defined +/// by the IfcElementQuantity and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible by +/// the inverse IsDefinedBy relationship. The following base +/// quantities are defined and should be exchanged with the +/// IfcElementQuantity.Name = 'BaseQuantities'. Other quantities +/// can be defined being subjected to local standard of measurement +/// with another string value assigned to Name and a value +/// provided for MethodOfMeasurement. Quantities shall never be +/// assigned to the IfcRampFlightType. +/// +/// Qto_RampFlightBaseQuantities: base quantities +/// for all ramp flight occurrences. +/// +/// Containment Use Definition +/// The IfcRampFlight, as any subtype of +/// IfcBuildingElement, may participate in two different +/// containment relationships. The first relationship is the +/// hierachical spatial containment, the second relationship is the +/// aggregation within an element assembly. +/// +/// The IfcRampFlight is placed within the project spatial +/// hierarchy using the objectified relationship +/// IfcRelContainedInSpatialStructure, refering to it by its +/// inverse attribute SELF\IfcElement.ContainedInStructure. +/// Subtypes of IfcSpatialStructureElement are valid +/// spatial containers, with IfcBuildingStorey being the default +/// container. +/// The IfcRampFlight may be aggregated into an element +/// assembly using the objectified relationship +/// IfcRelAggregates, refering to it by its inverse attribute +/// SELF\IfcObjectDefinition.Decomposes. Any subtype of +/// IfcElement can be an element assembly, with IfcRamp +/// as a special focus subtype. In this case it should not be +/// additionally contained in the project spatial hierarchy, +/// i.e. SELF\IfcElement.ContainedInStructure should be +/// NIL. +/// +/// Geometry Use Definition +/// The geometric representation of IfcRampFlight is given by +/// the IfcProductDefinitionShape, allowing multiple geometric +/// representations. Included are: +/// Local placement +/// The local placement for IfcRampFlight is defined in its +/// supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate system +/// that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if given) to the local +/// placement of the same IfcSpatialStructureElement that is +/// used in the ContainedInStructure inverse attribute or to a +/// referenced spatial structure element at a higher level. +/// If the IfcRampFlight, however, is used by an +/// IfcRamp, and this container class defines its own local +/// placement, then the PlacementRelTo relationship of +/// IfcLocalPlacement shall point to the local placement of the +/// IfcRamp. +/// +/// Geometric Representations +/// Currently, the 'Axis', 'FootPrint', 'Body', and 'Box' +/// representations are supported. The 'Box' representation includes +/// the representation type 'BoundingBox' and is explained at +/// IfcBuildingElement. +/// +/// Axis: A two-dimensional open curve +/// IfcBoundedCurve defining the walking line for the ramp +/// flight. +/// FootPrint: A geometric curve set defining the footing +/// print, including the boundary of the ramp flight. +/// Body: A solid representation defining the 3D shape of +/// the ramp flight +/// +/// Axis Representation +/// The walking line is represented by a two-dimensional open curve +/// as the axis. The curve is directed into the upward direction +/// (direction has to be interpreted as specified at the subtypes of +/// IfcCurve). The following attribute values for the +/// IfcShapeRepresentation holding this geometric representation +/// shall be used: +/// +/// RepresentationIdentifier : 'Axis' +/// RepresentationType : 'Curve2D' +/// +/// Figure 112 illustrates the axis representation which has the following constraints: +/// +/// In case of straight flights the curve shall be a single item of type IfcPolyline. +/// In case of winding flights the curve shall be a single item of type IfcCompositeCurve. +/// In case of a curved flight or a spiral flight the curve shall be a single item of type IfcTrimmedCurve. +/// +/// Figure 112 — Ramp flight axis +/// +/// FootPrint Representation +/// The flight foot print, including the flight boundary is represented by a two-dimensional geometric curve set. The following attribute values for the IfcShapeRepresentation holding this geometric representation shall be used: +/// +/// RepresentationIdentifier : 'FootPrint' +/// RepresentationType : 'GeometricCurveSet' +/// +/// Figure 113 illustrates the footprint representation which has the following constraints: +/// +/// In case of straight flights the curve set shall consist of a single item of type IfcPolyline. +/// In case of winding flights or curved flights the curve set shall consists of a single item of type +/// IfcCompositeCurve. +/// In case of a spiral flight the curve set shall consists of a single item of type IfcConic or +/// IfcPolyline. +/// +/// Figure 113 — Ramp flight footprint +/// +/// Body Representation +/// The body representation of IfcRampFlight can be +/// represented using the representation types 'SweptSolid', +/// 'SurfaceModel', 'Brep', and 'MappedRepresentation'. The general +/// usage of representation is are explained at +/// IfcBuildingElement. For further constraints on the +/// 'SweptSolid' the representation types see below.. +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'SweptSolid', 'SurfaceModel', +/// 'Brep', 'MappedRepresentation' +/// +/// SweptSolid Representation Type +/// The 'SweptSolid' representation type is a valid body +/// representation of IfcRampFlight is defined using the swept +/// area geometry. The following attribute values for the +/// IfcShapeRepresentation holding this geometric representation +/// shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'SweptSolid' +/// +/// The following additional constraints apply to the 'SweptSolid' +/// representation type: +/// +/// Solid: IfcExtrudedAreaSolid is required, +/// Profile: IfcRectangleProfileDef and +/// IfcArbitraryClosedProfileDef shall be supported. +/// Extrusion: The profile shall be extruded in any +/// direction relative to the XY plane of the position coordinate +/// system of the IfcExtrudedAreaSolid. Therefore +/// non-perpendicular sweep operation has to be supported. It might be +/// further constrained to be in the direction of the global z-axis in +/// implementers agreements. +/// +/// Figure 114 illustrates the body representation. +/// +/// Figure 114 — Ramp flight body +class IFC_PARSE_API IfcRampFlight : public IfcBuiltElement { +public: + /// Predefined generic type for a ramp flight that is specified in an enumeration. There may be a property set given specificly for the predefined types. + /// NOTE The PredefinedType shall only be used, if no type object IfcRampFlightType is assigned, providing its own IfcRampFlightType.PredefinedType. + /// + /// IFC2x4 CHANGE The attribute has been added at the end of the entity definition. + boost::optional< ::Ifc4x3_add2::IfcRampFlightTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcRampFlightTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRampFlight (IfcEntityInstanceData* e); + IfcRampFlight (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcRampFlightTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcRampFlight > list; +}; +/// A rational B-spline curve with knots is a B-spline curve +/// described in terms of control points and basic functions. It +/// describes weights in addition to the control points defined at the +/// supertype IfcBSplineCurve. +/// +/// NOTE: The +/// IfcRationalBSplineCurveWithKnots is an entity that had been +/// adopted from ISO 10303, Industrial automation systems and +/// integration — Product data representation and exchange, Part +/// 42: Integrated generic resource: Geometric and topological +/// representation. +/// +/// NOTE: The specific subtype +/// IfcRationalBSplineCurveWithKnots has been introduced to +/// avoid the complexity of ANDOR subtype relationships in the ISO +/// 10303-42 specification +/// +/// All weights shall be positive and the curve is given by: +/// +/// where +/// +/// k+1 +/// number of control points +/// +/// Pi +/// control points +/// +/// wi +/// weights +/// +/// d +/// degree +/// +/// NOTE  Corresponding ISO 10303 entity: rational_b_spline_curve. Please refer to ISO/IS 10303-42:1994, p. 45 for the final definition of the formal standard. +/// +/// HISTORY  New entity in IFC2x4. +class IFC_PARSE_API IfcRationalBSplineCurveWithKnots : public IfcBSplineCurveWithKnots { +public: + /// The supplied values of the weights. + std::vector< double > /*[2:?]*/ WeightsData() const; + void setWeightsData(std::vector< double > /*[2:?]*/ v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRationalBSplineCurveWithKnots (IfcEntityInstanceData* e); + IfcRationalBSplineCurveWithKnots (int v1_Degree, aggregate_of< ::Ifc4x3_add2::IfcCartesianPoint >::ptr v2_ControlPointsList, ::Ifc4x3_add2::IfcBSplineCurveForm::Value v3_CurveForm, boost::logic::tribool v4_ClosedCurve, boost::logic::tribool v5_SelfIntersect, std::vector< int > /*[2:?]*/ v6_KnotMultiplicities, std::vector< double > /*[2:?]*/ v7_Knots, ::Ifc4x3_add2::IfcKnotType::Value v8_KnotSpec, std::vector< double > /*[2:?]*/ v9_WeightsData); + typedef aggregate_of< IfcRationalBSplineCurveWithKnots > list; +}; + +class IFC_PARSE_API IfcReinforcedSoil : public IfcEarthworksElement { +public: + boost::optional< ::Ifc4x3_add2::IfcReinforcedSoilTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcReinforcedSoilTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcReinforcedSoil (IfcEntityInstanceData* e); + IfcReinforcedSoil (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcReinforcedSoilTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcReinforcedSoil > list; +}; +/// Definition from IAI: A steel bar, usually with manufactured deformations in the surface, +/// used in concrete and masonry construction to provide additional strength. A single instance +/// of this class may represent one or many of actual rebars, for example a row of rebars. +/// +/// HISTORY New entity in IFC Release 2x2 +/// +/// IFC 2x4 CHANGE All attributes removed; information now provided by IfcReinforcingBarType. +/// +/// Geometry Use Definition +/// +/// The geometric representation of IfcReinforcingBar is given by the IfcProductDefinitionShape, +/// allowing multiple geometric representations. Included are: +/// +/// Local Placement +/// The use of local placement is defined at the supertype IfcElementComponent. +/// +/// Multiple Mapped Representation +/// See supertype IfcElementComponent. This method of representation allows for several rebars +/// represented by a single instance of IfcReinforcingBar. The representation map should contain +/// one IfcSweptDiskSolidPolygonal. +/// +/// An IfcElementQuantity, +/// attached via IfcRelDefinesByProperties, should contain an IfcQuantityCount named 'Count' +/// with the number rebars and, if this is a regularly spaced arrangement of rebars, an +/// IfcQuantityLength named 'Spacing' which expresses the center-to-center distances of bars. +/// +/// Simplified Geometric Representation +/// Simplified geometric representations may be used based on local agreements. +class IFC_PARSE_API IfcReinforcingBar : public IfcReinforcingElement { +public: + boost::optional< double > NominalDiameter() const; + void setNominalDiameter(boost::optional< double > v); + boost::optional< double > CrossSectionArea() const; + void setCrossSectionArea(boost::optional< double > v); + boost::optional< double > BarLength() const; + void setBarLength(boost::optional< double > v); + /// The predefined type is always BAR. + boost::optional< ::Ifc4x3_add2::IfcReinforcingBarTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcReinforcingBarTypeEnum::Value > v); + boost::optional< ::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::Value > BarSurface() const; + void setBarSurface(boost::optional< ::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcReinforcingBar (IfcEntityInstanceData* e); + IfcReinforcingBar (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_SteelGrade, boost::optional< double > v10_NominalDiameter, boost::optional< double > v11_CrossSectionArea, boost::optional< double > v12_BarLength, boost::optional< ::Ifc4x3_add2::IfcReinforcingBarTypeEnum::Value > v13_PredefinedType, boost::optional< ::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::Value > v14_BarSurface); + typedef aggregate_of< IfcReinforcingBar > list; +}; +/// Definition from IAI: A steel bar, usually with manufactured deformations in the surface, +/// used in concrete and masonry construction to provide additional strength. +/// +/// HISTORY New entity in IFC Release 2x4 +/// +/// Material Use Definition: +/// +/// An associated material denotes the steel grade, preferrably by material classification. +/// +/// Geometry Use Definition: +/// +/// The IfcReinforcingBarType may define the shared geometric representation for all rebar occurrences. The RepresentationMaps attribute refers to a list of IfcRepresentationMap's, that allow for multiple geometric representations (e.g. with IfcShapeRepresentation's having an RepresentationIdentifier 'Box', 'Axis', or 'Body'). +/// +/// A 'Body' representation map should contain one IfcSweptDiskSolidPolygonal. +/// +/// Simplified geometric representations may be used based on local agreements. +class IFC_PARSE_API IfcReinforcingBarType : public IfcReinforcingElementType { +public: + /// The predefined type is always BAR. + ::Ifc4x3_add2::IfcReinforcingBarTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcReinforcingBarTypeEnum::Value v); + /// The nominal diameter defining the cross-section size of the reinforcing bar. + boost::optional< double > NominalDiameter() const; + void setNominalDiameter(boost::optional< double > v); + /// The effective cross-section area of the reinforcing bar. + boost::optional< double > CrossSectionArea() const; + void setCrossSectionArea(boost::optional< double > v); + /// The total length of the reinforcing bar. The total length of bended bars are calculated according to local standards with corrections for the bends. + boost::optional< double > BarLength() const; + void setBarLength(boost::optional< double > v); + /// Indicator for whether the bar surface is plain or textured. + boost::optional< ::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::Value > BarSurface() const; + void setBarSurface(boost::optional< ::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::Value > v); + boost::optional< std::string > BendingShapeCode() const; + void setBendingShapeCode(boost::optional< std::string > v); + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcBendingParameterSelect >::ptr > BendingParameters() const; + void setBendingParameters(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcBendingParameterSelect >::ptr > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcReinforcingBarType (IfcEntityInstanceData* e); + IfcReinforcingBarType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcReinforcingBarTypeEnum::Value v10_PredefinedType, boost::optional< double > v11_NominalDiameter, boost::optional< double > v12_CrossSectionArea, boost::optional< double > v13_BarLength, boost::optional< ::Ifc4x3_add2::IfcReinforcingBarSurfaceEnum::Value > v14_BarSurface, boost::optional< std::string > v15_BendingShapeCode, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcBendingParameterSelect >::ptr > v16_BendingParameters); + typedef aggregate_of< IfcReinforcingBarType > list; +}; +/// Definition from ISO 6707-1:1989: Construction enclosing the building from above. +/// The IfcRoof is a description of the total roof. It acts as a container entity, that aggregates all components of the roof, it represents. The aggregation is handled via the IfcRelAggregates relationship, relating an IfcRoof with the related roof elements, like slabs (represented by IfcSlab), rafters and purlins (represented by IfcBeam), or other included roofs, such as dormers (represented by IfcRoof). +/// +/// HISTORY New Entity in IFC Release 2.0. +/// IFC2x4 CHANGE Attribute ShapeType renamed to PredefinedType. +/// +/// Property Set Use Definition: +/// The property sets relating to the IfcRoof are defined +/// by the IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// property set definitions specific to the IfcRoof are part +/// of this IFC release: +/// +/// Pset_RoofCommon: common property set for all +/// roof occurrences +/// +/// The quantities relating to the IfcRoof are defined by +/// the IfcElementQuantity and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// base quantities are defined and should be exchanged with the +/// IfcElementQuantity.MethodOfMeasurement = 'BaseQuantities'. +/// Other quantities can be defined being subjected to local standard +/// of measurement with another string value assigned to Name +/// and a value provided for MethodOfMeasurement. Quantities +/// shall never be assigned to the IfcRoofType. +/// The individual quantities shall only be given at +/// IfcRoof, it is not decomposed into the individual parts, +/// e.g. IfcSlab as roof slabs. +/// +/// Qto_RoofBaseQuantities: base quantities for +/// all roof occurrences. +/// +/// Containment Use Definition +/// The IfcRoof, as any subtype of +/// IfcBuildingElement, may participate in two different +/// containment relationships. The first (and in most implementation +/// scenarios mandatory) relationship is the hierachical spatial +/// containment, the second (optional) relationship is the +/// aggregation within an element assembly. +/// +/// The IfcRoof is placed within the project spatial +/// hierarchy using the objectified relationship +/// IfcRelContainedInSpatialStructure, referring to it by its +/// inverse attribute SELF\IfcElement.ContainedInStructure. +/// Subtypes of IfcSpatialStructureElement are valid spatial +/// containers, with IfcBuildingStorey being the default +/// container. +/// The IfcRoof may be aggregated into an element assembly +/// using the objectified relationship IfcRelAggregates, +/// referring to it by its inverse attribute +/// SELF\IfcObjectDefinition.Decomposes. Any subtype of +/// IfcElement can be an element assembly, with +/// IfcRoof, the overall roof, as a special focus subtype. In +/// this case it should not be additionally contained in the project +/// spatial hierarchy, i.e. +/// SELF\IfcElement.ContainedInStructure should be NIL. +/// +/// NOTE A roof contained in another roof could +/// be the representation of a dormer. +/// The IfcRoof may be an aggregate i.e. being composed by +/// other elements and acting as an assembly using the objectified +/// relationship IfcRelAggregates, referring to it by its +/// inverse attribute SELF\IfcObjectDefinition.IsDecomposedBy. +/// Components of a roof are described by instances of subtypes of +/// IfcBuildingElement (e.g. IfcSlab, IfcBeam, +/// IfcColumn, IfcBuildingElementPart) that are +/// aggregated to form a complex roof. In this case, the contained +/// elements should not be additionally contained in the project +/// spatial hierarchy, i.e. the inverse attribute +/// SELF\IfcElement.ContainedInStructure of the aggregated +/// elements should be NIL. +/// +/// Figure 118 illustrates roof containment, where only the IfcRoof as the aggregate +/// is included in the spatial structure. +/// +/// Figure 118 — Roof containment +/// +/// Geometry Use Definitions: +/// The geometric representation of IfcRoof is given by the +/// IfcProductDefinitionShape, allowing multiple geometric +/// representations. Independent geometric representations should +/// only be used when the IfcRoof is not defined as an +/// aggregate. If defined as an aggregate, the geometric +/// representation is the sum of the representation of the components +/// within the aggregate. +/// NOTE View definitions and implementer +/// agreements may restrict the IfcRoof to not have an +/// independent geometry, but to always require aggregated elements +/// to represent the shape of the roof. +/// NOTE If the IfcRoof has aggregated elements to +/// represent the shape of the roof, then only those elements shall +/// have openings, not the IfcRoof +/// itself. +/// Local Position +/// The local placement for IfcRoof is defined in its +/// supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate +/// system that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if given) to the local +/// placement of the same IfcSpatialStructureElement that is +/// used in the ContainedInStructure inverse attribute or to a +/// referenced spatial structure element at a higher level.. +/// If the relative placement is not used, the absolute placement +/// is defined within the world coordinate system. +/// +/// If the LocalPlacement is given for the IfcRoof, +/// then all components, which are aggregated to the roof should use +/// this placement as their relative placement. +/// Geometric Representation +/// The IfcRoof may have an independent geometric representation +/// or may be an aggregate with elements holding the geometric +/// representation of the roof. +/// Geometric representation by own shape +/// representation +/// If the IfcRoof has no components defined (empty set of +/// SELF\IfcObject.IsDecomposedBy) then the IfcRoof may +/// be represented by an independent IfcShapeRepresentation. +/// The following attribute values for the IfcShapeRepresentation +/// holding this geometric representation shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'SweptSolid', 'Clipping', +/// 'SurfaceModel', or 'Brep' +/// +/// Geometric representation by aggregated elements +/// If the IfcRoof has components (referenced by +/// SELF\IfcObject.IsDecomposedBy) then no independent +/// geometric representation shall defined for the IfcRoof. +/// The IfcRoof is then geometrically represented by the +/// geometric representation of its components. The components are +/// accessed via +/// SELF\IfcObject.IsDecomposedBy[1].RelatedObjects. The +/// geometric representations that are supported for the aggregated +/// elements are defined with each element. See geometric use +/// definition for IfcSlab, IfcBeam, IfcColumn, +/// IfcBuildingElementPart and other subtypes of +/// IfcBuildingElement. +/// +/// Figure 119 illustrates roof placement, with an IfcRoof defining the local placement for all aggregated elements. +/// +/// Figure 119 — Roof placement +class IFC_PARSE_API IfcRoof : public IfcBuiltElement { +public: + /// Predefined shape types for a roof that are specified in an enumeration. + /// + /// IFC2x4 CHANGE The attribute has been renamed from ShapeType and changed to be OPTIONAL with upward compatibility for file based exchange. + boost::optional< ::Ifc4x3_add2::IfcRoofTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcRoofTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcRoof (IfcEntityInstanceData* e); + IfcRoof (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcRoofTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcRoof > list; +}; +/// A sanitary terminal is a fixed appliance or terminal usually supplied with water and used for drinking, cleaning or foul water disposal or that is an item of equipment directly used with such an appliance or terminal. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcSanitaryTerminal defines the occurrence of any sanitary terminal; common information about sanitary terminal types is handled by IfcSanitaryTerminalType. +/// The IfcSanitaryTerminalType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcSanitaryTerminalType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcSanitaryTerminalType has ports or aggregated elements, such objects are reflected at the IfcSanitaryTerminal occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcSanitaryTerminalType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcSanitaryTerminalType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcSanitaryTerminal override the properties defined at IfcSanitaryTerminalType. +/// Refer to the documentation at the supertype IfcFlowTerminal and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_SanitaryTerminalTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// BATH +/// +/// Pset_SanitaryTerminalTypeBath (PSET_TYPEDRIVENOVERRIDE) +/// +/// BIDET +/// +/// Pset_SanitaryTerminalTypeBidet (PSET_TYPEDRIVENOVERRIDE) +/// +/// CISTERN +/// +/// Pset_SanitaryTerminalTypeCistern (PSET_TYPEDRIVENOVERRIDE) +/// +/// SANITARYFOUNTAIN +/// +/// Pset_SanitaryTerminalTypeSanitaryFountain (PSET_TYPEDRIVENOVERRIDE) +/// +/// SHOWER +/// +/// Pset_SanitaryTerminalTypeShower (PSET_TYPEDRIVENOVERRIDE) +/// +/// SINK +/// +/// Pset_SanitaryTerminalTypeSink (PSET_TYPEDRIVENOVERRIDE) +/// +/// TOILETPAN +/// +/// Pset_SanitaryTerminalTypeToiletPan (PSET_TYPEDRIVENOVERRIDE) +/// +/// URINAL +/// +/// Pset_SanitaryTerminalTypeUrinal (PSET_TYPEDRIVENOVERRIDE) +/// +/// WASHHANDBASIN +/// +/// Pset_SanitaryTerminalTypeWashHandBasin (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_SanitaryTerminalBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcSanitaryTerminal is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcSanitaryTerminalType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcSanitaryTerminal are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the sanitary terminal occurrence is defined by IfcSanitaryTerminalType, then the port occurrences must reflect those defined at the IfcSanitaryTerminalType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcSanitaryTerminal PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// BATH +/// +/// ColdWater (DOMESTICCOLDWATER, SINK): Cold water supply. +/// HotWater (DOMESTICHOTWATER, SINK): Hot water supply. +/// Drainage (DRAINAGE, SOURCE): Drainage. +/// +/// BIDET +/// +/// ColdWater (DOMESTICCOLDWATER, SINK): Cold water supply. +/// HotWater (DOMESTICHOTWATER, SINK): Hot water supply. +/// Drainage (DRAINAGE, SOURCE): Drainage. +/// +/// CISTERN +/// +/// ColdWater (DOMESTICCOLDWATER, SINK): Cold water supply. +/// HotWater (DOMESTICHOTWATER, SINK): Hot water supply. +/// +/// SANITARYFOUNTAIN +/// +/// ColdWater (DOMESTICCOLDWATER, SINK): Cold water supply. +/// HotWater (DOMESTICHOTWATER, SINK): Hot water supply. +/// +/// SHOWER +/// +/// ColdWater (DOMESTICCOLDWATER, SINK): Cold water supply. +/// HotWater (DOMESTICHOTWATER, SINK): Hot water supply. +/// Drainage (DRAINAGE, SOURCE): Drainage. +/// +/// SINK +/// +/// ColdWater (DOMESTICCOLDWATER, SINK): Cold water supply. +/// HotWater (DOMESTICHOTWATER, SINK): Hot water supply. +/// Drainage (DRAINAGE, SOURCE): Drainage. +/// +/// TOILETPAN +/// +/// ColdWater (DOMESTICCOLDWATER, SINK): Cold water supply. +/// HotWater (DOMESTICHOTWATER, SINK): Hot water supply. +/// +/// URINAL +/// +/// ColdWater (DOMESTICCOLDWATER, SINK): Cold water supply. +/// HotWater (DOMESTICHOTWATER, SINK): Hot water supply. +/// +/// WASHHANDBASIN +/// +/// ColdWater (DOMESTICCOLDWATER, SINK): Cold water supply. +/// HotWater (DOMESTICHOTWATER, SINK): Hot water supply. +/// Drainage (DRAINAGE, SOURCE): Drainage. +class IFC_PARSE_API IfcSanitaryTerminal : public IfcFlowTerminal { +public: + boost::optional< ::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSanitaryTerminal (IfcEntityInstanceData* e); + IfcSanitaryTerminal (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcSanitaryTerminalTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcSanitaryTerminal > list; +}; +/// The distribution control element type IfcSensorType defines commonly shared information for occurrences of sensors. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a sensor specification (i.e. the specific product information, that is common to all occurrences of that product type). Sensor types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcSensorType are represented by instances of IfcSensor. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcDistributionControlElementType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_SensorTypeCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_SensorTypeConductanceSensor (CONDUCTANCESENSOR) +/// Pset_SensorTypeContactSensor (CONTACTSENSOR) +/// Pset_SensorTypeFireSensor (FIRESENSOR) +/// Pset_SensorTypeFlowSensor (FLOWSENSOR) +/// Pset_SensorTypeGasSensor (GASSENSOR) +/// Pset_SensorTypeHeatSensor (HEATSENSOR) +/// Pset_SensorTypeHumiditySensor (HUMIDITYSENSOR) +/// Pset_SensorTypeIonConcentrationSensor (IONCONCENTRATIONSENSOR) +/// Pset_SensorTypeLevelSensor (LEVELSENSOR) +/// Pset_SensorTypeLightSensor (LIGHTSENSOR) +/// Pset_SensorTypeMoistureSensor (MOISTURESENSOR) +/// Pset_SensorTypeMovementSensor (MOVEMENTSENSOR) +/// Pset_SensorTypePHSensor (PHSENSOR) +/// Pset_SensorTypePressureSensor (PRESSURESENSOR) +/// Pset_SensorTypeRadiationSensor (RADIATIONSENSOR) +/// Pset_SensorTypeRadioactivitySensor (RADIOACTIVITYSENSOR) +/// Pset_SensorTypeSmokeSensor (SMOKESENSOR) +/// Pset_SensorTypeSoundSensor (SOUNDSENSOR) +/// Pset_SensorTypeTemperatureSensor (TEMPERATURESENSOR) +/// Pset_SensorTypeWindSensor (WINDSENSOR) +/// +/// Material Use Definition +/// The material of the IfcSensorType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcSensorType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcSensor for standard port definitions. +class IFC_PARSE_API IfcSensorType : public IfcDistributionControlElementType { +public: + /// Identifies the predefined types of sensor from which the type required may be set. + ::Ifc4x3_add2::IfcSensorTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcSensorTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSensorType (IfcEntityInstanceData* e); + IfcSensorType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcSensorTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcSensorType > list; +}; +/// Definition from IAI: Shading devices are purpose built +/// devices to protect from the sunlight, from natural light, or +/// screening them from view. Shading devices can form part of the +/// facade or can be mounted inside the building, they can be fixed +/// or operable. +/// NOTE Also other building elements such as +/// protruding slabs or balconies can act as shading devices. Those +/// elements however have another primary purpose and are defined as +/// IfcSlab or by other subtypes of IfcBuildingElement. +/// The particular additional purpose as a shading device is provided +/// by assigning the property set Pset_ElementShading to those +/// building elements. +/// HISTORY New entity in +/// IFC2x4 +class IFC_PARSE_API IfcShadingDevice : public IfcBuiltElement { +public: + /// Predefined generic type for a shading device that is specified in an enumeration. There may be a property set given specificly for the predefined types. + /// NOTE The PredefinedType shall only be used, if no type object IfcShadingDeviceType is assigned, providing its own IfcShadingDeviceType.PredefinedType. + boost::optional< ::Ifc4x3_add2::IfcShadingDeviceTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcShadingDeviceTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcShadingDevice (IfcEntityInstanceData* e); + IfcShadingDevice (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcShadingDeviceTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcShadingDevice > list; +}; + +class IFC_PARSE_API IfcSignal : public IfcFlowTerminal { +public: + boost::optional< ::Ifc4x3_add2::IfcSignalTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSignalTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSignal (IfcEntityInstanceData* e); + IfcSignal (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcSignalTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcSignal > list; +}; +/// A slab is a component of the +/// construction that normally encloses a space vertically. The slab +/// may provide the lower support (floor) or upper construction (roof +/// slab) in any space in a building. It shall be noted, that only +/// the core or constructional part of this construction is +/// considered to be a slap. The upper finish (flooring, roofing) and +/// the lower finish (ceiling, suspended ceiling) are considered to +/// be coverings. A special type of slab is the landing, described as +/// a floor section to which one or more stair flights or ramp +/// flights connect. +/// NOTE There is a representation of slabs for +/// structural analysis provided by a proper subtype of +/// IfcStructuralMember being part of the +/// IfcStructuralAnalysisModel. +/// +/// NOTE An arbitrary planar element to which this semantic +/// information is not applicable or irrelevant shall be modeled as +/// IfcPlate. +/// A slab may have openings, such as floor openings, or recesses. +/// They are defined by an IfcOpeningElement attached to the +/// slab using the inverse relationship HasOpenings pointing +/// to IfcRelVoidsElement. +/// The IFC specification provides three entities for slab +/// occurrences: +/// +/// IfcSlabStandardCase used for all occurrences of slabs, +/// that are prismatic and where the thickness parameter can be fully +/// described by the IfcMaterialLayerSetUsage. These slabs are +/// always represented geometrically by a 'SweptSolid' geometry (or +/// by a 'Clipping' geometry based on 'SweptSolid'), if a 3D +/// geometric representation is assigned. In addition they have to +/// have a corresponding IfcMaterialLayerSetUsage +/// assigned. +/// IfcSlabElementedCase used for occurrences of slabs +/// which are aggregated from subordinate elements, following +/// specific decomposition rules expressed by the mandatory use of +/// IfcRelAggregates relationship. +/// IfcSlab used for all other occurrences of slabs, +/// particularly for slabs with changing thickness, or slabs with non +/// planar surfaces, and slabs having only 'SweptSolid' or 'Brep' +/// geometry. +/// +/// HISTORY New entity in IFC Release 2.0, it is a merger of the two previous entities +/// IfcFloor, IfcRoofSlab, introduced in IFC Release 1.0 +/// +/// Type Use Definition +/// The IfcSlab defines the occurrence of any slab, common +/// information about slab types (or styles) is handled by +/// IfcSlabType. The IfcSlabType (if present) may +/// establish the commontype name, usage (or predefined) type, +/// common set of properties, common material layer set, and common +/// shape representations (using IfcRepresentationMap). The +/// IfcSlabType is attached using the +/// IfcRelDefinedByType.RelatingType objectified relationship +/// and is accessible by the inverse IsTypedBy attribute. +/// If no IfcSlabType is attached(i.e. if only occurrence +/// information is given) the PredefinedType should be +/// provided. Values of the enumeration are .FLOOR. (the default), +/// .ROOF., .LANDING., .BASESLAB. If set to .USERDEFINED. a user +/// defined value can be provided by the ObjectType +/// attribute. +/// Material Use Definition +/// The material of the IfcSlab is defined by +/// IfcMaterialLayerSet, or IfcMaterial and attached by +/// the IfcRelAssociatesMaterial.RelatingMaterial. It +/// is accessible by the inverse HasAssociations relationship. +/// Multi-layer slabs can be represented by referring to several +/// IfcMaterialLayer's within the +/// IfcMaterialLayerSet. +/// NOTE It is illegal to assign an +/// IfcMaterialLayerSetUsage to an IfcSlab. Only the +/// subtype IfcSlabStandardCase supports this +/// concept. +/// NOTE Prismatic slabs, where the main face of +/// the slab is extruded along the slab thickness, are exchanged as +/// IfcSlabStandardCase, The material for +/// IfcSlabStandardCase shall be defined +/// byIfcMaterialLayerSetUsage. Multi-layer slabs can be +/// represented by referring to several IfcMaterialLayer's +/// within the IfcMaterialLayerSet. +/// Material information can also be given at the +/// IfcSlabType, defining the common attribute data for all +/// occurrences of the same type.It is then accessible by the +/// inverse IsTypedBy +/// relationship pointing to IfcSlabType.HasAssociations and +/// via IfcRelAssociatesMaterial.RelatingMaterial. +/// Property Set Use Definition: +/// The property sets relating to the IfcSlab are defined +/// by the IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// property set definitions specific to the IfcSlab are part +/// of this IFC release: +/// +/// Pset_SlabCommon: common property set for all +/// slab occurrences +/// +/// Property sets can also be given at the IfcSlabType, +/// defining the common property data for all occurrences of the same +/// type.It is then accessible by the inverse IsTypedBy relationship pointing to +/// IfcSlabType.HasPropertySets. If both are given, then the +/// properties directly assigned to IfcSlab overrides the +/// properties assigned to IfcSlabType. +/// Quantity Use Definition +/// The quantities relating to the IfcSlab and +/// IfcSlabStandardCase are defined by the +/// IfcElementQuantity and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// base quantities are defined and should be exchanged with the +/// IfcElementQuantity.Name = 'BaseQuantities'. Other +/// quantities can be defined being subjected to local standard of +/// measurement with another string value assigned to Name and +/// a value provided for MethodOfMeasurement. Quantities shall +/// never be assigned to the IfcSlabType. +/// +/// Qto_SlabBaseQuantities: base quantities for +/// all slab occurrences. +/// +/// Containment Use Definition +/// The IfcSlab, as any subtype of +/// IfcBuildingElement, may participate in two different +/// containment relationships. The first (and in most implementation +/// scenarios mandatory) relationship is the hierarchical spatial +/// containment, the second (optional) relationship is the +/// aggregation within anelement assembly. +/// +/// TheIfcSlab is places within the project spatial +/// hierarchy using the objectified relationship +/// IfcRelContainedInSpatialStructure, referring to it by its +/// inverse attribute SELF\IfcElement.ContainedInStructure. +/// Subtypes ofIfcSpatialStructureElement are valid spatial +/// containers, with IfcBuildingStorey being the default +/// container. +/// TheIfcSlab may be aggregated into an element assembly +/// using the objectified relationship IfcRelAggregates, +/// referring to it by its inverse attribute +/// SELF\IfcObjectDefinition.Decomposes. Any subtype of +/// IfcElement can be an element assembly, with +/// IfcElementAssembly as a special focus subtype. +/// In this case it should not be additionally contained in the +/// project spatial hierarchy, +/// i.e.SELF\IfcElement.ContainedInStructure should be +/// NIL. +/// +/// The IfcSlabmay also be an aggregate i.e. being +/// composed by other elements and acting as an assembly using the +/// objectified relationship IfcRelAggregates, referring to it +/// by its inverse attribute +/// SELF\IfcObjectDefinition.IsDecomposedBy. Components of a +/// slab are described by instances of subtypes of +/// IfcBuildingElement, with IfcBuildingElementPart as +/// a special focus subtype that are aggregated to form a complex +/// slab. In this case, the contained elements should not be +/// additionally contained in the project spatial hierarchy, i.e. the +/// inverse attribute SELF\IfcElement.ContainedInStructure of +/// IfcBuildingElementPart (or other subtypes of +/// IfcBuildingElement) should be NIL. +/// Geometry Use Definition +/// The geometric representation of IfcSlab is given by the +/// IfcProductDefinitionShape, allowing multiple geometric +/// representation. Included are: +/// NOTE. If the IfcSlab is of type Landing +/// and is used within an IfcStair or IfcRamp, the +/// special agreements to handle stair and ramp geometry will also +/// affect the geometric representation of the +/// IfcSlab. +/// Local Placement +/// The local placement for IfcSlab is defined in its +/// supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate +/// system that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if given) to the placement +/// of the local placement of the same +/// IfcSpatialStructureElement that is used in the +/// ContainedInStructure inverse attribute or to a referenced +/// spatial structure element at a higher level. +/// If the IfcSlab is of type Landing and is used by an +/// IfcStair or IfcRamp, and this container class +/// defines its own local placement, then the PlacementRelTo +/// relationship of IfcLocalPlacement shall point (if given) +/// to the local placement of the aggregate. +/// If the relative placement is not used, the absolute placement +/// is defined within the world coordinate system. +/// +/// Geometric Representation +/// Currently, the 'Surface', +/// 'FootPrint', 'Body', and 'Box' +/// representations are supported. The 'Box' representation includes +/// the representation type 'BoundingBox' and is explained at +/// IfcBuildingElement. +/// Surface Representation +/// The surfacic geometric representation of IfcSlab is +/// defined using the 'Surface' representation. +/// +/// RepresentationIdentifier : 'Surface' +/// RepresentationType : 'Surface3D' +/// +/// NOTE The 'Surface' can be used to define a +/// surfacic model of the building (e.g. for analytical purposes, or +/// for reduced Level of Detail representation). +/// Body Representation +/// The body representation of IfcSlab can be represented +/// using the representation types 'SweptSolid', 'Clipping', +/// 'SurfaceModel', and 'Brep'. The representation types +/// 'SurfaceModel' and 'Brep' are explained at +/// IfcBuildingElement. +/// SweptSolid Representation Type +/// The following attribute values for the +/// IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// If a corresponding material definition using +/// IfcMaterialLayerSetUsage can be assigned, the subtype +/// IfcSlabStandardCase shall be used. +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'SweptSolid' +/// +/// The following additional constraints apply to the swept solid +/// representation: +/// +/// Solid: IfcExtrudedAreaSolid is required, +/// Profile: IfcArbitraryClosedProfileDef, +/// IfcRectangleProfileDef, IfcCircleProfileDef, +/// IfcEllipseProfileDef shall be supported. +/// Extrusion: The profile can be extruded perpendicularly +/// or non-perpendicularly to the plane of the swept profile. +/// +/// Figure 120 illustrates a 'SweptSolid' geometric representation. +/// NOTE The following interpretation of dimension parameter applies for polygonal slabs (in ground floor view): +/// +/// IfcArbitraryClosedProfileDef.OuterCurve: closed bounded curve interpreted as area (or foot print) of the slab. +/// +/// Figure 120 — Slab body extrusion +/// +/// Clipping Representation Type +/// The following attribute values for the +/// IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'Clipping' +/// +/// The following constraints apply to the 'Clipping' +/// representation: +/// +/// Solid: see 'SweptSolid' shape representation, +/// Profile:see 'SweptSolid' shape representation, +/// Extrusion:see 'SweptSolid' shape representation, +/// Boolean result: The IfcBooleanClippingResult +/// shall be supported, allowing for Boolean differences between the +/// swept solid (here IfcExtrudedAreaSolid) and one or several +/// IfcHalfSpaceSolid. +/// +/// Figure 121 illustrates a 'Clipping' geometric representation with definition of a roof slab using advanced +/// geometric representation. The profile is extruded non-perpendicular and the slab body is clipped at the eave. +/// +/// Figure 121 — Slab body clipping +class IFC_PARSE_API IfcSlab : public IfcBuiltElement { +public: + /// Predefined generic type for a slab that is specified in an enumeration. There may be a property set given specifically for the predefined types. + /// NOTE The PredefinedType shall only be used, if no type object IfcSlabType is assigned, providing its own IfcSlabType.PredefinedType. + /// + /// FC2x PLATFORM CHANGE: The attribute has been changed into an OPTIONAL attribute. + boost::optional< ::Ifc4x3_add2::IfcSlabTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSlabTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSlab (IfcEntityInstanceData* e); + IfcSlab (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcSlabTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcSlab > list; +}; +/// A solar device converts solar radiation into other energy such as electric current or thermal energy. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcSolarDevice defines the occurrence of any solar device; common information about solar device types is handled by IfcSolarDeviceType. +/// The IfcSolarDeviceType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcSolarDeviceType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcSolarDeviceType has ports or aggregated elements, such objects are reflected at the IfcSolarDevice occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcSolarDeviceType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcSolarDeviceType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcSolarDevice override the properties defined at IfcSolarDeviceType. +/// Refer to the documentation at the supertype IfcEnergyConversionDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_SolarDeviceTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_SolarDeviceBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcSolarDevice is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcSolarDeviceType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Casing: Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcSolarDevice are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the solar device occurrence is defined by IfcSolarDeviceType, then the port occurrences must reflect those defined at the IfcSolarDeviceType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcSolarDevice PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// SOLARCOLLECTOR +/// +/// Heating (HEATING, SOURCE): Incoming water. +/// Heating (HEATING, SINK): Outgoing heated water. +/// +/// SOLARPANEL +/// +/// PowerGeneration (POWERGENERATION, SOURCE): Converted electrical power. +class IFC_PARSE_API IfcSolarDevice : public IfcEnergyConversionDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcSolarDeviceTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSolarDeviceTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSolarDevice (IfcEntityInstanceData* e); + IfcSolarDevice (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcSolarDeviceTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcSolarDevice > list; +}; +/// Space heaters utilize a combination of radiation and/or natural convection using a heating source such as electricity, steam or hot water to heat a limited space or area. Examples of space heaters include radiators, convectors, baseboard and finned-tube heaters. +/// IfcUnitaryEquipment should be used for packaged units supporting a combination of heating, cooling, and/or dehumidification; IfcCoil should be used for coil-based floor heating. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcSpaceHeater defines the occurrence of any space heater; common information about space heater types is handled by IfcSpaceHeaterType. +/// The IfcSpaceHeaterType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcSpaceHeaterType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcSpaceHeaterType has ports or aggregated elements, such objects are reflected at the IfcSpaceHeater occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcSpaceHeaterType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcSpaceHeaterType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcSpaceHeater override the properties defined at IfcSpaceHeaterType. +/// Refer to the documentation at the supertype IfcFlowTerminal and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_SpaceHeaterPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_SpaceHeaterTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// CONVECTOR +/// +/// Pset_SpaceHeaterTypeConvector (PSET_TYPEDRIVENOVERRIDE) +/// +/// RADIATOR +/// +/// Pset_SpaceHeaterTypeRadiator (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_SpaceHeaterBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcSpaceHeater is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcSpaceHeaterType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcSpaceHeater are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the space heater occurrence is defined by IfcSpaceHeaterType, then the port occurrences must reflect those defined at the IfcSpaceHeaterType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcSpaceHeater PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// CONVECTOR +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// +/// RADIATOR +/// +/// Inlet (HEATING, SINK): Water or steam supply. +/// Outlet (HEATING, SOURCE): Water or steam return. +/// +/// Figure 230 illustrates space heater port use. +/// Figure 230 — Space heater port use +class IFC_PARSE_API IfcSpaceHeater : public IfcFlowTerminal { +public: + boost::optional< ::Ifc4x3_add2::IfcSpaceHeaterTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSpaceHeaterTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSpaceHeater (IfcEntityInstanceData* e); + IfcSpaceHeater (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcSpaceHeaterTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcSpaceHeater > list; +}; +/// A stack terminal is placed at the top of a ventilating stack (such as to prevent ingress by birds or rainwater) or rainwater pipe (to act as a collector or hopper for discharge from guttering). +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcStackTerminal defines the occurrence of any stack terminal; common information about stack terminal types is handled by IfcStackTerminalType. +/// The IfcStackTerminalType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcStackTerminalType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcStackTerminalType has ports or aggregated elements, such objects are reflected at the IfcStackTerminal occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcStackTerminalType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcStackTerminalType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcStackTerminal override the properties defined at IfcStackTerminalType. +/// Refer to the documentation at the supertype IfcFlowTerminal and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_StackTerminalTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_StackTerminalBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcStackTerminal is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcStackTerminalType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcStackTerminal are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the stack terminal occurrence is defined by IfcStackTerminalType, then the port occurrences must reflect those defined at the IfcStackTerminalType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcStackTerminal PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// BIRDCAGE +/// +/// Exhaust (EXHAUST, SINK): Exhaust inlet. +/// +/// COWL +/// +/// Exhaust (EXHAUST, SINK): Exhaust inlet. +/// +/// RAINWATERHOPPER +/// +/// Rain (RAINWATER, SOURCE): Rainwater outlet. +class IFC_PARSE_API IfcStackTerminal : public IfcFlowTerminal { +public: + boost::optional< ::Ifc4x3_add2::IfcStackTerminalTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcStackTerminalTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStackTerminal (IfcEntityInstanceData* e); + IfcStackTerminal (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcStackTerminalTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcStackTerminal > list; +}; +/// Definition from ISO 6707-1:1989: Construction comprising +/// a succession of horizontal stages (steps or landings) that make it +/// possible to pass on foot to other levels. +/// A stair is a vertical passageway allowing +/// occupants to walk (step) from one floor level to another floor +/// level at a different elevation. It may include a landing as an +/// intermediate floor slab. The stair should either be +/// represented: +/// +/// as a stair assembly entity that aggregates all components +/// (stair flight, landing, etc. with own representations), or +/// as a single stair entity without decomposition including all +/// representation directly at the stair entity. +/// +/// In case of a stair container, the aggregation is handled via the +/// IfcRelAggregates relationship, relating an IfcStair +/// with the related IfcStairFlight's and landings (represented +/// by IfcSlab with IfcSlab.PredefinedType = 'LANDING'). +/// IfcRailing's belonging to the stair may be included into the +/// aggregation as well. +/// +/// HISTORY New Entity in IFC Release 2.0. +/// IFC2x4 CHANGE Attribute ShapeType renamed to PredefinedType. +/// +/// Type Use Definition +/// IfcStair defines the occurrence of any stair, common +/// information about stair types (or styles) is handled by +/// IfcStairType. The IfcStairType (if present) may +/// establish the common type name, usage (or predefined) type, common +/// material, common set of properties and common shape representations +/// (using IfcRepresentationMap). The IfcStairType is +/// attached using the IfcRelDefinedByType.RelatingType +/// objectified relationship and is accessible by the inverse +/// IsDefinedBy attribute. +/// NOTE Since the IfcStair might be +/// represented as an aggregate of parts, e.g. represented by +/// IfcStairFlight, or IfcSlab, these individual parts +/// may have type information attached (represented e.g. by +/// IfcStairFlightType, or +/// IfcSlabType). +/// Material Use Definition +/// The material of the IfcStair is defined by the +/// IfcMaterial and attached by the +/// IfcRelAssociatesMaterial.RelatingMaterial. It is +/// accessible by the inverse HasAssociations relationship. +/// Material information can also be given at the +/// IfcStairType, defining the common attribute data for all +/// occurrences of the same type. It is then accessible by the inverse +/// IsDefinedBy relationship pointing to +/// IfcStair.HasAssociations and via +/// IfcRelAssociatesMaterial.RelatingMaterial to +/// IfcMaterial. If both are given, then the material directly +/// assigned to IfcStair overrides the material assigned to +/// IfcStairType. +/// +/// Property Set Use Definition: +/// The property sets relating to the IfcStair are defined by +/// the IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible by +/// the inverse IsDefinedBy relationship. The following property +/// set definitions specific to the IfcStair are part of this +/// IFC release: +/// +/// Pset_StairCommon: common property set for all +/// stair occurrences +/// +/// Figure 127 shows the use of property sets Pset_StairCommon and +/// Pset_StairFlightCommon for the various stair properties. +/// +/// Figure 127 — Stair properties +/// +/// Geometry Use Definitions: +/// The geometric representation of IfcStair is given by the +/// IfcProductDefinitionShape, allowing multiple geometric +/// representation. Independent geometric representations should only +/// be used when the IfcStair is not defined as an aggregate. If +/// defined as an aggregate, the geometric representation is the sum of +/// the representation of the components within the aggregate. +/// Local placement +/// The local placement for IfcStair is defined in its +/// supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate system +/// that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if given) to the local +/// placement of the same IfcSpatialStructureElement that is +/// used in the ContainedInStructure inverse attribute or to a +/// referenced spatial structure element at a higher level. +/// If the relative placement is not used, the absolute placement +/// is defined within the world coordinate system. +/// +/// If the LocalPlacement is given for the IfcStair, +/// then all components, which are aggregated to the stair should use +/// this placement as their relative placement. +/// Geometric Representation +/// Currently, the 'Axis', 'FootPrint', 'Body', and 'Box' +/// representations are supported. The 'Box' representation includes +/// the representation type 'BoundingBox' and is explained at +/// IfcBuildingElement. +/// +/// Axis: A two-dimensional open curve +/// IfcBoundedCurve defining the walking line for the +/// stair. +/// FootPrint: A geometric curve set defining the footing +/// print, including the boundary of the stair. +/// Body: A solid representation defining the 3D shape of +/// the stair. +/// +/// Axis Representation +/// The walking line is represented by a two-dimensional open curve +/// as the axis. The curve is directed into the upward direction +/// (direction has to be interpreted as specified at the subtypes of +/// IfcCurve). The following attribute values for the +/// IfcShapeRepresentation holding this geometric representation +/// shall be used: +/// +/// RepresentationIdentifier : 'Axis' +/// RepresentationType : 'Curve2D' +/// +/// NOTE  The 'Axis' representation of IfcStair +/// may be provided even if the IfcStair has components with own +/// shape representations. +/// +/// FootPrint Representation +/// The stair foot print, including the stair boundary is +/// represented by a two-dimensional geometric curve set. The following +/// attribute values for the IfcShapeRepresentation holding this +/// geometric representation shall be used: +/// +/// RepresentationIdentifier : 'FootPrint' +/// RepresentationType : 'GeometricCurveSet' +/// +/// NOTE  The 'Footprint' representation of +/// IfcStair may be provided even if the IfcStair has +/// components with own shape representations. +/// +/// Body Representation +/// The body representation of IfcStair can be represented +/// using the representation types 'SweptSolid', 'SurfaceModel', +/// 'Brep', and 'MappedRepresentation'. The general usage of +/// representation is are explained at IfcBuildingElement. No +/// further constraints or provisions on how to use the representation +/// types are defined for IfcStairFlight. +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'SweptSolid', 'SurfaceModel', +/// 'Brep', 'MappedRepresentation' +/// +/// The 'Body' representation shall only be provided if the +/// IfcStair has no components defined (empty set of +/// SELF\IfcObject.IsDecomposedBy) or if the components defined +/// no not carry an own 'Body' representation. +/// Geometric representation by aggregated elements +/// If the IfcStair has components (referenced by +/// SELF\IfcObject.IsDecomposedBy) with own 'Body' +/// representation, then no 'Body' representation shall defined for the +/// IfcStair. The IfcStair shape is then represented by +/// the geometric representation of its components. The components are +/// accessed via +/// SELF\IfcObject.IsDecomposedBy[1].RelatedObjects. +/// +/// Figure 128 illustrates stair placement, where the IfcStair defines the local placement for all components and the common 'Axis' representation, and each component has its own 'Body' representation. +/// +/// Figure 128 — Stair placement +class IFC_PARSE_API IfcStair : public IfcBuiltElement { +public: + /// Predefined shape types for a stair that are specified in an enumeration. + /// + /// IFC2x4 CHANGE The attribute has been renamed from ShapeType and changed to be OPTIONAL with upward compatibility for file based exchange. + boost::optional< ::Ifc4x3_add2::IfcStairTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcStairTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStair (IfcEntityInstanceData* e); + IfcStair (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcStairTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcStair > list; +}; +/// A stair flight is an assembly of +/// building components in a single "run" of stair steps (not +/// interrupted by a landing). The stair steps and any stringers are +/// included in the stair flight. A winder is also regarded a part of +/// a stair flight. +/// An IfcStairFlight is normally aggregated by an +/// IfcStair through the IfcRelAggregates relationship, +/// the stair flight is then included in the set of +/// IfcRelAggregates.RelatedObjects. An IfcStairFlight +/// normally connects the floor slab of zero to two different storeys +/// (or partial storeys, or landings) within a building. The +/// connection relationship between the IfcStairFlight and the +/// IfcSlab is expressed using the +/// IfcRelConnectsElements relationship. +/// +/// HISTORY: New Entity in IFC Release 2.0. +/// +/// Type Use Definition +/// IfcStairFlight defines the occurrence of any stair +/// flight, common information about stair flight types (or styles) +/// is handled by IfcStairFlightType. The +/// IfcStairFlightType (if present) may establish the +/// commontype name, usage (or predefined) type, common material +/// layer set, common set of properties and common shape +/// representations (using IfcRepresentationMap). The +/// IfcStairFlightType is attached using the +/// IfcRelDefinedByType.RelatingType objectified relationship +/// and is accessible by the inverse IsDefinedBy +/// attribute. +/// Material Use Definition +/// The material of the IfcStairFlight is defined by the +/// IfcMaterial and attached by the +/// IfcRelAssociatesMaterial.RelatingMaterial. It is +/// accessible by the inverse HasAssociations +/// relationship. +/// Property Set Use Definition: +/// The property sets relating to the IfcStairFlight are +/// defined by the IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// property set definitions specific to the IfcStairFlight +/// are part of this IFC release: +/// +/// Pset_StairFlightCommon: common property set +/// for all stair flight occurrences +/// +/// Quantity Use Definition +/// The quantities relating to the IfcStairFlight are +/// defined by the IfcElementQuantity and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// base quantities are defined and should be exchanged with the +/// IfcElementQuantity.Name = 'BaseQuantities'. Other +/// quantities can be defined being subjected to local standard of +/// measurement with another string value assigned to Name and +/// a value provided for MethodOfMeasurement. Quantities shall +/// never be assigned to the IfcStairFlightType. +/// +/// Qto_StairFlightBaseQuantities: base +/// quantities for all stair flight occurrences. +/// +/// Containment Use Definition +/// The IfcStairFlight, as any subtype of +/// IfcBuildingElement, may participate in two different +/// containment relationships. The first relationship is the +/// hierachical spatial containment, the second relationship is the +/// aggregation within anelement assembly. +/// +/// The IfcStairFlight is placed within the project +/// spatial hierarchy using the objectified relationship +/// IfcRelContainedInSpatialStructure, refering to it by its +/// inverse attribute SELF\IfcElement.ContainedInStructure. +/// Subtypes ofIfcSpatialStructureElement are valid spatial +/// containers, with IfcBuildingStorey being the default +/// container. +/// The IfcStairFlight may be aggregated into an element +/// assembly using the objectified relationship +/// IfcRelAggregates, refering to it by its inverse attribute +/// SELF\IfcObjectDefinition.Decomposes. Any subtype of +/// IfcElement can be an element assembly, with +/// IfcStair as a special focus subtype. In this case it +/// shall not be additionally contained in the project spatial +/// hierarchy, i.e.SELF\IfcElement.ContainedInStructure +/// shall be NIL. +/// +/// Geometry Use Definition +/// The geometric representation of IfcStairFlight is given +/// by the IfcProductDefinitionShape, allowing multiple +/// geometric representation. Included are: +/// Local placement +/// The local placement for IfcStairFlight is defined in +/// its supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate +/// system that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if given) to the local +/// placement of the same IfcSpatialStructureElement that is +/// used in the ContainedInStructure inverse attribute or to a +/// referenced spatial structure element at a higher level. +/// If the IfcStairFlight, however, is used by an +/// IfcStair, and this container class defines its own local +/// placement, then the PlacementRelTo relationship of +/// IfcLocalPlacement shall point to the local placement of +/// the IfcStair. +/// +/// Geometric Representations +/// Currently, the 'Axis', 'FootPrint', 'Body', and 'Box' +/// representations are supported. The 'Box' representation includes +/// the representation type 'BoundingBox' and is explained at +/// IfcBuildingElement. +/// +/// Axis: A two-dimensional open curve +/// IfcBoundedCurve defining the walking line for the stair +/// flight. +/// FootPrint: A geometric curve set defining the footing +/// print, including the boundary of the stair flight. +/// Body: A solid representation defining the 3D shape of +/// the stair flight +/// +/// Axis Representation +/// The walking line is represented by a two-dimensional open +/// curve as the axis. The curve is directed into the upward +/// direction (direction has to be interpreted as specified at the +/// subtypes of IfcCurve). The following attribute values for +/// the IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'Axis' +/// RepresentationType : 'Curve2D' +/// +/// Figure 129 illustrates the axis representation which has the following constraints: +/// +/// In case of straight flights the curve shall be a single item of type IfcPolyline. +/// In case of winding flights the curve shall be a single item of type IfcCompositeCurve. +/// In case of a curved flight or a spiral flight the curve shall be a single item of type IfcTrimmedCurve. +/// +/// Figure 129 — Stair flight axis +/// +/// FootPrint Representation +/// The flight foot print, including the flight boundary is +/// represented by a two-dimensional geometric curve set. The +/// following attribute values for the IfcShapeRepresentation +/// holding this geometric representation shall be used: +/// +/// RepresentationIdentifier : 'FootPrint' +/// RepresentationType : 'GeometricCurveSet' +/// +/// Figure 130 illustrates the footprint representation which has the following constraints: +/// +/// In case of straight flights the curve set shall consists of a single item of type IfcPolyline. +/// In case of winding flights or curved flights the curve set shall consists of a single item of type IfcCompositeCurve. +/// In case of a spiral flight the curve set shall consists of a single item of type IfcConic or IfcPolyline. +/// +/// Figure 130 — Stair flight footprint +/// +/// Body Representation +/// The body representation of IfcStairFlight can be represented using the representation types 'SweptSolid', 'SurfaceModel', 'Brep', and 'MappedRepresentation'. The general usage of representation is are explained at +/// IfcBuildingElement. No further constraints or provisions on how to use the representation types are defined for +/// IfcStairFlight. +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'SweptSolid', 'SurfaceModel', 'Brep', 'MappedRepresentation' +/// +/// Figure 131 illustrates the body representation. +/// +/// Figure 131 — Stair flight body +class IFC_PARSE_API IfcStairFlight : public IfcBuiltElement { +public: + boost::optional< int > NumberOfRisers() const; + void setNumberOfRisers(boost::optional< int > v); + /// Number of treads included in the stair flight. + /// + /// IFC2x4 CHANGE The attribute has been deprecated it shall only be exposed with a NIL value. Use Pset_StairFlightCommon.NumberOfTreads instead. + boost::optional< int > NumberOfTreads() const; + void setNumberOfTreads(boost::optional< int > v); + /// Vertical distance from tread to tread. The riser height is supposed to be equal for all stairs in a stair flight. + /// + /// IFC2x4 CHANGE The attribute has been deprecated it shall only be exposed with a NIL value. Use Pset_StairFlightCommon.RiserHeight instead. + boost::optional< double > RiserHeight() const; + void setRiserHeight(boost::optional< double > v); + /// Horizontal distance from the front to the back of the tread. The tread length is supposed to be equal for all steps of the stair flight. + /// + /// IFC2x4 CHANGE The attribute has been deprecated it shall only be exposed with a NIL value. Use Pset_StairFlightCommon.TreadLength instead. + boost::optional< double > TreadLength() const; + void setTreadLength(boost::optional< double > v); + /// Predefined generic type for a stair flight that is specified in an enumeration. There may be a property set given specificly for the predefined types. + /// NOTE The PredefinedType shall only be used, if no type object IfcStairFlightType is assigned, providing its own IfcStairFlightType.PredefinedType. + /// + /// IFC2x4 CHANGE The attribute has been added at the end of the entity definition. + boost::optional< ::Ifc4x3_add2::IfcStairFlightTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcStairFlightTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStairFlight (IfcEntityInstanceData* e); + IfcStairFlight (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< int > v9_NumberOfRisers, boost::optional< int > v10_NumberOfTreads, boost::optional< double > v11_RiserHeight, boost::optional< double > v12_TreadLength, boost::optional< ::Ifc4x3_add2::IfcStairFlightTypeEnum::Value > v13_PredefinedType); + typedef aggregate_of< IfcStairFlight > list; +}; +/// Definition from IAI: The IfcStructuralAnalysisModel is used to assemble all information needed to represent a structural analysis model. It encompasses certain general properties (such as analysis type), references to all contained structural members, structural supports or connections, as well as loads and the respective load results. +/// +/// Important functionalities for the description of an analysis model are derived from existing IFC entities: +/// +/// From IfcSystem it inherits the ability to couple the analysis model via IfcRelServicesBuildings to one or more IfcBuildings as necessary. +/// From IfcGroup it inherits the inverse attribute IsGroupedBy, pointing to the relationship class IfcRelAssignsToGroup. This allows to group structural members (instances of IfcStructuralMember), and supports (instances of IfcStructuralConnection) which belong to a specific analysis model. +/// NOTE: Loads (as instances of IfcStructuralAction) are not included through IsGroupedBy. Loads are assigned through the LoadedBy attribute relationship, using load groups as a grouping mechanism. Only top-level load groups should be referenced via LoadedBy, i.e. load combinations if any load combinations exist, or load cases if no load combinations exist in this analysis model. +/// NOTE: Results (as instances of IfcStructuralReaction) are not included through IsGroupedBy. Results are assigned through the HasResults attribute relationship, using result groups as a grouping mechanism. +/// +/// From IfcObject it inherits the inverse attribute IsDecomposedBy pointing to the relationship class IfcRelNests. It provides the hierarchy between the separate (partial) analysis models. +/// +/// HISTORY: New entity in IFC 2x2. +/// +/// IFC 2x4 change: Attribute SharedPlacement and informal propositions added, allowing for easy retrieval of the common object placement and for specification of the analysis model's coordiante system before any structural item is instantiated. WHERE rule added. +/// +/// Informal propositions: +/// +/// If one or more structural item (instance of a subtype of IfcStructuralItem) is grouped into an IfcStructuralAnalysisModel, the attribute SharedPlacement shall be provided with a value. +/// The ObjectPlacements of all structural items which are grouped into the same instance of IfcStructuralAnalysisModel shall refer to the same instance of IfcObjectPlacement as IfcStructuralAnalysisModel.SharedPlacement. +/// +/// NOTE  This rule is necessary to achieve consistent topology representations. The topology representations of structural items in an analysis model are meant to share vertices and edges und must therefore have the same object placement. +/// +/// NOTE  A structural item may be grouped into more than one analysis model. In this case, all these models must use the same instance of IfcObjectPlacement. +class IFC_PARSE_API IfcStructuralAnalysisModel : public IfcSystem { +public: + /// Defines the type of the structural analysis model. + ::Ifc4x3_add2::IfcAnalysisModelTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcAnalysisModelTypeEnum::Value v); + /// If the selected model type (PredefinedType) describes a 2D system, the orientation defines + /// the analysis plane (P[1], P[2]) and the normal to the analysis plane (P[3]). This is needed because + /// structural items and activities are always defined in three-dimensional space even if they are + /// meant to be analysed in a two-dimensional manner. + /// + /// In case of predefined type IN_PLANE_LOADING_2D, the analysis is to be performed within the + /// projection into the P[1], P[2] plane. + /// In case of predefined type OUT_PLANE_LOADING_2D, only the P[3] component of loads and their + /// effects is meant to be analyzed. This is used for beam grids and for typical slab analyses. + /// In case of predefined type LOADING_3D, OrientationOf2DPlane shall be omitted. + ::Ifc4x3_add2::IfcAxis2Placement3D* OrientationOf2DPlane() const; + void setOrientationOf2DPlane(::Ifc4x3_add2::IfcAxis2Placement3D* v); + /// References to all load groups to be analyzed. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcStructuralLoadGroup >::ptr > LoadedBy() const; + void setLoadedBy(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcStructuralLoadGroup >::ptr > v); + /// References to all result groups available for this structural analysis model. + boost::optional< aggregate_of< ::Ifc4x3_add2::IfcStructuralResultGroup >::ptr > HasResults() const; + void setHasResults(boost::optional< aggregate_of< ::Ifc4x3_add2::IfcStructuralResultGroup >::ptr > v); + /// Object placement which shall be common to all items and activities which are grouped into this instance of IfcStructuralAnalysisModel. This placement establishes a coordinate system which is referred to as 'global coordinate system' in use definitions of various classes of structural items and activities. + /// + /// NOTE  Most commonly, but not necessarily, the SharedPlacement is an IfcLocalPlacement whose z axis is parallel with the z axis of the IfcProject's world coordinate system and directed like the WCS z axis (i.e. pointing "upwards") or directed against the WCS z axis (i.e. points "downwards"). + /// + /// NOTE  Per informal proposition, this attribute is not optional as soon as at least one IfcStructuralItem is grouped into the instance of IfcStructuralAnalysisModel. + ::Ifc4x3_add2::IfcObjectPlacement* SharedPlacement() const; + void setSharedPlacement(::Ifc4x3_add2::IfcObjectPlacement* v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralAnalysisModel (IfcEntityInstanceData* e); + IfcStructuralAnalysisModel (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcAnalysisModelTypeEnum::Value v6_PredefinedType, ::Ifc4x3_add2::IfcAxis2Placement3D* v7_OrientationOf2DPlane, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcStructuralLoadGroup >::ptr > v8_LoadedBy, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcStructuralResultGroup >::ptr > v9_HasResults, ::Ifc4x3_add2::IfcObjectPlacement* v10_SharedPlacement); + typedef aggregate_of< IfcStructuralAnalysisModel > list; +}; +/// Definition from IAI: A load case is a load group, commonly used to group loads from the same action source. +/// +/// HISTORY: New entity in IFC 2x4. +class IFC_PARSE_API IfcStructuralLoadCase : public IfcStructuralLoadGroup { +public: + /// The self weight coefficients specify ratios at which loads due to weight of members shall be included in the load case. These loads are not explicitly modeled as instances of IfcStructuralAction. Instead they shall be calculated according to geometry, section, and material of each member. + /// + /// The three components of the self weight vector correspond with the x,y,z directions of the so-called global coordinates, i.e. the directions of the shared ObjectPlacement of all items in an IfcStructuralAnalysisModel. For example, if the object placement defines a z axis which is upright like the IfcProject's world coordinate system, then the self weight coefficients would typically be [0.,0.,-1.] in a load case of dead loads with self weight. + /// + /// The overall coefficient in the inherited attribute Coefficient shall not be applied to SelfWeightCoefficients of the same instance of IfcStructuralLoadCase. It only applies to actions and load groups which are grouped below the load case, not to the load case's computed self weight. + boost::optional< std::vector< double > /*[3:3]*/ > SelfWeightCoefficients() const; + void setSelfWeightCoefficients(boost::optional< std::vector< double > /*[3:3]*/ > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralLoadCase (IfcEntityInstanceData* e); + IfcStructuralLoadCase (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcLoadGroupTypeEnum::Value v6_PredefinedType, ::Ifc4x3_add2::IfcActionTypeEnum::Value v7_ActionType, ::Ifc4x3_add2::IfcActionSourceTypeEnum::Value v8_ActionSource, boost::optional< double > v9_Coefficient, boost::optional< std::string > v10_Purpose, boost::optional< std::vector< double > /*[3:3]*/ > v11_SelfWeightCoefficients); + typedef aggregate_of< IfcStructuralLoadCase > list; +}; +/// Definition from IAI: Defines an action with constant value which is distributed over a surface. +/// +/// HISTORY: New entity in IFC 2x2. +/// +/// IFC 2x4 change: Intermediate supertype IfcStructuralSurfaceAction inserted. Derived attribute PredefinedType added. +/// +/// NOTE  Like its supertype IfcStructuralSurfaceAction, this action type may also act on curved faces. +class IFC_PARSE_API IfcStructuralPlanarAction : public IfcStructuralSurfaceAction { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcStructuralPlanarAction (IfcEntityInstanceData* e); + IfcStructuralPlanarAction (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, ::Ifc4x3_add2::IfcStructuralLoad* v8_AppliedLoad, ::Ifc4x3_add2::IfcGlobalOrLocalEnum::Value v9_GlobalOrLocal, boost::optional< bool > v10_DestabilizingLoad, boost::optional< ::Ifc4x3_add2::IfcProjectedOrTrueLengthEnum::Value > v11_ProjectedOrTrue, ::Ifc4x3_add2::IfcStructuralSurfaceActivityTypeEnum::Value v12_PredefinedType); + typedef aggregate_of< IfcStructuralPlanarAction > list; +}; +/// A switch is used in a cable distribution system (electrical circuit) to control or modulate the flow of electricity. +/// Switches include those used for electrical power, communications, audio-visual, or other distribution system types as determined by the available ports. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcSwitchingDevice defines the occurrence of any switching device; common information about switching device types is handled by IfcSwitchingDeviceType. +/// The IfcSwitchingDeviceType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcSwitchingDeviceType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcSwitchingDeviceType has ports or aggregated elements, such objects are reflected at the IfcSwitchingDevice occurrence using the IfcRelDefinesByObject relationship. +/// Figure 208 illustrates switching device type use. +/// Figure 208 — Switching device type use +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcSwitchingDeviceType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcSwitchingDeviceType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcSwitchingDevice override the properties defined at IfcSwitchingDeviceType. +/// Refer to the documentation at the supertype IfcFlowController and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_SwitchingDeviceTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// Pset_SwitchingDeviceTypePHistory (PSET_PERFORMANCEDRIVEN) +/// +/// CONTACTOR +/// +/// Pset_SwitchingDeviceTypeContactor (PSET_TYPEDRIVENOVERRIDE) +/// +/// DIMMERSWITCH +/// +/// Pset_SwitchingDeviceTypeDimmerSwitch (PSET_TYPEDRIVENOVERRIDE) +/// +/// EMERGENCYSTOP +/// +/// Pset_SwitchingDeviceTypeEmergencyStop (PSET_TYPEDRIVENOVERRIDE) +/// +/// KEYPAD +/// +/// Pset_SwitchingDeviceTypeKeypad (PSET_TYPEDRIVENOVERRIDE) +/// +/// MOMENTARYSWITCH +/// +/// Pset_SwitchingDeviceTypeMomentarySwitch (PSET_TYPEDRIVENOVERRIDE) +/// +/// SELECTORSWITCH +/// +/// Pset_SwitchingDeviceTypeSelectorSwitch (PSET_TYPEDRIVENOVERRIDE) +/// +/// STARTER +/// +/// Pset_SwitchingDeviceTypeStarter (PSET_TYPEDRIVENOVERRIDE) +/// +/// SWITCHDISCONNECTOR +/// +/// Pset_SwitchingDeviceTypeSwitchDisconnector (PSET_TYPEDRIVENOVERRIDE) +/// +/// TOGGLESWITCH +/// +/// Pset_SwitchingDeviceTypeToggleSwitch (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_SwitchingDeviceBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcSwitchingDevice is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcSwitchingDeviceType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Casing: Material from which the casing is constructed. +/// Conductor: Material from which the conductors are constructed. +/// Surface: Material from which the switch surface is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcSwitchingDevice are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the switching device occurrence is defined by IfcSwitchingDeviceType, then the port occurrences must reflect those defined at the IfcSwitchingDeviceType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcSwitchingDevice PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// Line (ELECTRICAL, SINK): The supply line. +/// Load (ELECTRICAL, SOURCE): The load controlled by the switch. +/// +/// Figure 209 illustrates switching device port use. +/// Figure 209 — Switching device port use +class IFC_PARSE_API IfcSwitchingDevice : public IfcFlowController { +public: + boost::optional< ::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSwitchingDevice (IfcEntityInstanceData* e); + IfcSwitchingDevice (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcSwitchingDeviceTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcSwitchingDevice > list; +}; +/// A tank is a vessel or container in which a fluid or gas is stored for later use. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcTank defines the occurrence of any tank; common information about tank types is handled by IfcTankType. +/// The IfcTankType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcTankType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcTankType has ports or aggregated elements, such objects are reflected at the IfcTank occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcTankType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcTankType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcTank override the properties defined at IfcTankType. +/// Refer to the documentation at the supertype IfcFlowStorageDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_TankOccurrence (PSET_OCCURRENCEDRIVEN) +/// Pset_TankTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// EXPANSION +/// +/// Pset_TankTypeExpansion (PSET_TYPEDRIVENOVERRIDE) +/// +/// PREFORMED +/// +/// Pset_TankTypePreformed (PSET_TYPEDRIVENOVERRIDE) +/// +/// PRESSUREVESSEL +/// +/// Pset_TankTypePressureVessel (PSET_TYPEDRIVENOVERRIDE) +/// +/// SECTIONAL +/// +/// Pset_TankTypeSectional (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_TankBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcTank is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcTankType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcTank are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the tank occurrence is defined by IfcTankType, then the port occurrences must reflect those defined at the IfcTankType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcTank PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// Inlet (NOTDEFINED, SINK): Inlet. +/// Outlet (NOTDEFINED, SOURCE): Outlet. +class IFC_PARSE_API IfcTank : public IfcFlowStorageDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcTankTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcTankTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTank (IfcEntityInstanceData* e); + IfcTank (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcTankTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcTank > list; +}; + +class IFC_PARSE_API IfcTrackElement : public IfcBuiltElement { +public: + boost::optional< ::Ifc4x3_add2::IfcTrackElementTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcTrackElementTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTrackElement (IfcEntityInstanceData* e); + IfcTrackElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcTrackElementTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcTrackElement > list; +}; +/// A transformer is an inductive stationary device that transfers electrical energy from one circuit to another. +/// IfcTransformer is used to transform electric power; conversion of electric signals for other purposes is handled at other entities: IfcController converts arbitrary signals, IfcAudioVisualAppliance converts signals for audio or video streams, and IfcCommunicationsAppliance converts signals for data or other communications usage. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcTransformer defines the occurrence of any transformer; common information about transformer types is handled by IfcTransformerType. +/// The IfcTransformerType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcTransformerType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcTransformerType has ports or aggregated elements, such objects are reflected at the IfcTransformer occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcTransformerType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcTransformerType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcTransformer override the properties defined at IfcTransformerType. +/// Refer to the documentation at the supertype IfcEnergyConversionDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_TransformerTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_TransformerBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcTransformer is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcTransformerType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Casing: Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcTransformer are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the transformer occurrence is defined by IfcTransformerType, then the port occurrences must reflect those defined at the IfcTransformerType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcTransformer PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// Line (ELECTRICAL, SINK): Line to be transformed. +/// Load (ELECTRICAL, SOURCE): Transformed load. +class IFC_PARSE_API IfcTransformer : public IfcEnergyConversionDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcTransformerTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcTransformerTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTransformer (IfcEntityInstanceData* e); + IfcTransformer (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcTransformerTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcTransformer > list; +}; +/// Definition from IAI: Generalization of all transport +/// related objects that move people, animals or goods within a +/// building or building complex. The IfcTransportElement +/// defines the occurrence of a transport element, that (if given), +/// is expressed by the IfcTransportElementType. +/// EXAMPLE Transportation elements include +/// elevator (lift), escalator, moving walkway, etc. +/// NOTE More detailed equipment that may be a part of a +/// transportation device, like a lifting hook, is defined as +/// IfcDiscreteAccessory +/// Depending on local classification systems transport elements +/// and transportation systems in buildings are either considered as +/// part of a building system, or as part of a building service +/// system. Within IFC they are considered as part of a building +/// system and may have to be mapped appropriately. +/// HISTORY New entity in +/// IFC Release 2x. +/// IFC2x PLATFORM CHANGE The attribute +/// PredefinedType (previously OperationType) is made +/// optional. +/// Type Use Definition +/// IfcTransportElement defines the occuurence of any +/// transportation device, common information about transportation +/// device types (or styles) is handled by +/// IfcTransportElementType. The +/// IfcTransportElementType (if present) may establish the +/// commontype name, usage (or predefined) type, common material +/// layer set, common set of properties and common shape +/// representations (using IfcRepresentationMap). The +/// IfcTransportElementType is attached using the +/// IfcRelDefinedByType.RelatingType objectified relationship +/// and is accessible by the inverse IsTypedBy attribute. +/// If no IfcTransportElementType is attached(i.e. if only +/// occurrence information is given) the PredefinedType should +/// be provided. If set to .USERDEFINED. a user defined value can be +/// provided by the ObjectType attribute. +/// Property Set Use Definition: +/// The property sets relating to the IfcTransportElement +/// are defined by the IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// property set definitions specific to the +/// IfcTransportElement are part of this IFC release: +/// +/// Pset_TransportElementCommon: common property +/// set for all transport element occurrences +/// +/// Pset_TransportElementElevator: specific +/// property set for all occurrences of transport elements with the +/// PredefinedType: ELEVATOR +/// +/// Containment Use Definition +/// The IfcTransportElement, as any subtype of +/// IfcElement, may have a hierarchical spatial containment +/// relationships that is mandatory in most implementation +/// scenarios. +/// +/// The IfcTransportElement is placed within the project +/// spatial hierarchy using the objectified relationship +/// IfcRelContainedInSpatialStructure, refering to it by its +/// inverse attribute SELF\IfcElement.ContainedInStructure. +/// Subtypes ofIfcSpatialStructureElement are valid spatial +/// containers, with IfcBuilding being the default +/// container. +/// +/// Geometry Use Definitions: +/// The geometric representation of IfcTransportElement is +/// given by the IfcProductDefinitionShape, allowing multiple +/// geometric representation. +/// Local Placement +/// The local placement for IfcTransportElement is defined +/// in its supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate +/// system that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if given) to the local +/// placement of the same IfcSpatialStructureElement , which +/// is used in the ContainedInStructure inverse attribute, or +/// to a spatial structure element at a higher level, referenced by +/// that. +/// If the relative placement is not used, the absolute placement +/// is defined within the world coordinate system. +/// +/// SurfaceModel Representation +/// Any IfcTransportElement (so far no further constraints +/// are defined at the level of its subtypes) may be represented as a +/// single or multiple surface models, based on either shell or face +/// based models. Then the following attribute values for the +/// IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'SurfaceModel' +/// +/// Brep Representation +/// Any IfcTransportElement (so far no further constraints +/// are defined at the level of its subtypes) may be represented as a +/// single or multiple Boundary Representation elements (which are +/// restricted to faceted Brep with or without voids). Then the +/// following attribute values for the IfcShapeRepresentation +/// holding this geometric representation shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'Brep' +/// +/// MappedRepresentation +/// The mapped item, IfcMappedItem, should be used if +/// appropriate as it allows for reusing the geometry definition of +/// the property element type at occurrences of the same equipement +/// type. Then the following attribute values for the +/// IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'MappedRepresentation' +class IFC_PARSE_API IfcTransportElement : public IfcTransportationDevice { +public: + /// Predefined generic types for a transportation element that are specified in an enumeration. There might be property sets defined specifically for each predefined type. + /// + /// IFC2x4 CHANGE  The attribute has been changed to be optional. + boost::optional< ::Ifc4x3_add2::IfcTransportElementTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcTransportElementTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTransportElement (IfcEntityInstanceData* e); + IfcTransportElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcTransportElementTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcTransportElement > list; +}; +/// A tube bundle is a device consisting of tubes and bundles of tubes used for heat transfer and contained typically within other energy conversion devices, such as a chiller or coil. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcTubeBundle defines the occurrence of any tube bundle; common information about tube bundle types is handled by IfcTubeBundleType. +/// The IfcTubeBundleType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcTubeBundleType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcTubeBundleType has ports or aggregated elements, such objects are reflected at the IfcTubeBundle occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcTubeBundleType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcTubeBundleType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcTubeBundle override the properties defined at IfcTubeBundleType. +/// Refer to the documentation at the supertype IfcEnergyConversionDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_TubeBundleTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// FINNED +/// +/// Pset_TubeBundleTypeFinned (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_TubeBundleBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcTubeBundle is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcTubeBundleType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcTubeBundle are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the tube bundle occurrence is defined by IfcTubeBundleType, then the port occurrences must reflect those defined at the IfcTubeBundleType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcTubeBundle PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// Inlet (NOTDEFINED, SINK): Inlet. +/// Outlet (NOTDEFINED, SOURCE): Outlet. +class IFC_PARSE_API IfcTubeBundle : public IfcEnergyConversionDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcTubeBundleTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcTubeBundleTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcTubeBundle (IfcEntityInstanceData* e); + IfcTubeBundle (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcTubeBundleTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcTubeBundle > list; +}; +/// The distribution control element type IfcUnitaryControlElementType defines commonly shared information for occurrences of unitary control elements. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a unitary control element specification (i.e. the specific product information, that is common to all occurrences of that product type). Unitary Control Element types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcUnitaryControlElementType are represented by instances of IfcUnitaryControlElement. +/// +/// HISTORY: New entity in IFC2x4 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcDistributionControlElementType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_UnitaryControlElementTypeCommon +/// +/// Material Use Definition +/// The material of the IfcUnitaryControlElementType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcUnitaryControlElementType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcUnitaryControlElement for standard port definitions. +class IFC_PARSE_API IfcUnitaryControlElementType : public IfcDistributionControlElementType { +public: + /// Identifies the predefined types of unitary control element from which the type required may be set. + ::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcUnitaryControlElementType (IfcEntityInstanceData* e); + IfcUnitaryControlElementType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcUnitaryControlElementType > list; +}; +/// Unitary equipment typically combine a number of components into a single product, such as air handlers, pre-packaged rooftop air-conditioning units, and split systems. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcUnitaryEquipment defines the occurrence of any unitary equipment; common information about unitary equipment types is handled by IfcUnitaryEquipmentType. +/// The IfcUnitaryEquipmentType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcUnitaryEquipmentType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcUnitaryEquipmentType has ports or aggregated elements, such objects are reflected at the IfcUnitaryEquipment occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcUnitaryEquipmentType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcUnitaryEquipmentType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcUnitaryEquipment override the properties defined at IfcUnitaryEquipmentType. +/// Refer to the documentation at the supertype IfcEnergyConversionDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_UnitaryEquipmentTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// AIRCONDITIONINGUNIT +/// +/// Pset_UnitaryEquipmentTypeAirConditioningUnit (PSET_TYPEDRIVENOVERRIDE) +/// +/// AIRHANDLER +/// +/// Pset_UnitaryEquipmentTypeAirHandler (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_UnitaryEquipmentBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcUnitaryEquipment is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcUnitaryEquipmentType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// +/// Composition Use Definition +/// The IfcUnitaryEquipment may be aggregated into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcUnitaryEquipment and RelatedObjects contains one or more components. Aggregation use is defined for the following predefined types: +/// +/// May contain IfcDistributionElement components. Unitary equipment (air handlers in particular) may elaborate contained elements such as dampers, fans, coils, sensors, actuators, and controllers. Such breakdown provides access to component information and tracking of performance history for embedded elements. +/// +/// Figure 231 illustrates unitary equipment composition use. +/// Figure 231 — Unitary equipment composition use +/// +/// Port Use Definition +/// The distribution ports relating to the IfcUnitaryEquipment are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the unitary equipment occurrence is defined by IfcUnitaryEquipmentType, then the port occurrences must reflect those defined at the IfcUnitaryEquipmentType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcUnitaryEquipment PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// AIRHANDLER +/// +/// ReturnAirIn (AIRCONDITIONING, SINK): Return air entering mixture or exhausted. +/// SupplyAirOut (AIRCONDITIONING, SOURCE): Chilled supply air. +/// OutsideAirIn (VENTILATION, SINK): Outside air entering mixture. +/// ExhaustAirOut (EXHAUST, SOURCE): Exhaust air leaving to outside. +/// ChilledWaterIn (CHILLEDWATER, SINK): Chilled water entering cooling coil. +/// ChilledWaterOut (CHILLEDWATER, SOURCE): Chilled water leaving cooling coil. +/// HeatingIn (HEATING, SINK): Steam entering heating coil. +/// HeatingOut (HEATING, SOURCE): Steam leaving heating coil. +/// Power (ELECTRICAL, SINK): Electrical power source. +/// Control (CONTROL, SINK): Control system communication. +/// +/// Figure 232 illustrates unitary equipment port use. +/// Figure 232 — Unitary equipment port use +class IFC_PARSE_API IfcUnitaryEquipment : public IfcEnergyConversionDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcUnitaryEquipment (IfcEntityInstanceData* e); + IfcUnitaryEquipment (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcUnitaryEquipmentTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcUnitaryEquipment > list; +}; +/// A valve is used in a building services piping distribution system to control or modulate the flow of the fluid. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcValve defines the occurrence of any valve; common information about valve types is handled by IfcValveType. +/// The IfcValveType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcValveType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcValveType has ports or aggregated elements, such objects are reflected at the IfcValve occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcValveType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcValveType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcValve override the properties defined at IfcValveType. +/// Refer to the documentation at the supertype IfcFlowController and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_ValvePHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_ValveTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// AIRRELEASE +/// +/// Pset_ValveTypeAirRelease (PSET_TYPEDRIVENOVERRIDE) +/// +/// DRAWOFFCOCK +/// +/// Pset_ValveTypeDrawOffCock (PSET_TYPEDRIVENOVERRIDE) +/// +/// FAUCET +/// +/// Pset_ValveTypeFaucet (PSET_TYPEDRIVENOVERRIDE) +/// +/// FLUSHING +/// +/// Pset_ValveTypeFlushing (PSET_TYPEDRIVENOVERRIDE) +/// +/// GASTAP +/// +/// Pset_ValveTypeGasTap (PSET_TYPEDRIVENOVERRIDE) +/// +/// ISOLATING +/// +/// Pset_ValveTypeIsolating (PSET_TYPEDRIVENOVERRIDE) +/// +/// MIXING +/// +/// Pset_ValveTypeMixing (PSET_TYPEDRIVENOVERRIDE) +/// +/// PRESSUREREDUCING +/// +/// Pset_ValveTypePressureReducing (PSET_TYPEDRIVENOVERRIDE) +/// +/// PRESSURERELIEF +/// +/// Pset_ValveTypePressureRelief (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_ValveBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcValve is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcValveType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// Operation: Material from which the operating mechanism (such as gate, globe, plug, needle, or clack) of the valve is constructed. +/// +/// Connection Use Definition +/// The IfcValve may be connected to other objects as follows using the indicated relationship: +/// +/// IfcActuator (IfcRelFlowControlElements): Indicates an actuator operating on the valve. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcValve are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the valve occurrence is defined by IfcValveType, then the port occurrences must reflect those defined at the IfcValveType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcValve PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// AIRRELEASE +/// +/// Inlet (NOTDEFINED, SINK): Incoming fluid. +/// +/// ANTIVACUUM +/// +/// Outlet (NOTDEFINED, SOURCE): Outgoing fluid. +/// +/// CHANGEOVER +/// +/// Inlet (NOTDEFINED, SINK): Incoming fluid. +/// Outlet#1 (NOTDEFINED, SOURCE): Switched outgoing fluid. +/// Outlet#2 (NOTDEFINED, SOURCE): Switched outgoing fluid. +/// +/// CHECK +/// +/// Inlet (NOTDEFINED, SINK): Incoming fluid. +/// Outlet (NOTDEFINED, SOURCE): Outgoing fluid. +/// +/// COMMISSIONING +/// +/// Inlet (NOTDEFINED, SINK): Incoming fluid. +/// Outlet (NOTDEFINED, SOURCE): Outgoing fluid. +/// +/// DIVERTING +/// +/// Inlet (NOTDEFINED, SINK): Incoming fluid. +/// Outlet#1 (NOTDEFINED, SOURCE): Outgoing fluid. +/// Outlet#2 (NOTDEFINED, SOURCE): Outgoing fluid. +/// +/// DOUBLECHECK +/// +/// Inlet (NOTDEFINED, SINK): Incoming fluid. +/// Outlet (NOTDEFINED, SOURCE): Outgoing fluid. +/// +/// DOUBLEREGULATING +/// +/// Inlet (NOTDEFINED, SINK): Incoming fluid. +/// Outlet (NOTDEFINED, SOURCE): Outgoing fluid. +/// +/// DRAWOFFCOCK +/// +/// Inlet (NOTDEFINED, SINK): Incoming fluid. +/// +/// FAUCET +/// +/// Inlet (NOTDEFINED, SINK): Incoming fluid. +/// +/// FLUSHING +/// +/// Inlet (NOTDEFINED, SINK): Incoming fluid. +/// Outlet (NOTDEFINED, SOURCE): Outgoing fluid. +/// +/// GASCOCK +/// +/// Inlet (NOTDEFINED, SINK): Incoming fluid. +/// +/// GASTAP +/// +/// Inlet (NOTDEFINED, SINK): Incoming fluid. +/// +/// ISOLATING +/// +/// Inlet (NOTDEFINED, SINK): Incoming fluid. +/// Outlet (NOTDEFINED, SOURCE): Outgoing fluid. +/// +/// MIXING +/// +/// Inlet#1 (NOTDEFINED, SINK): Incoming fluid to be mixed. +/// Inlet#2 (NOTDEFINED, SINK): Incoming fluid to be mixed. +/// Outlet (NOTDEFINED, SOURCE): Outgoing fluid. +/// +/// PRESSUREREDUCING +/// +/// Inlet (NOTDEFINED, SINK): Incoming fluid. +/// Outlet (NOTDEFINED, SOURCE): Outgoing fluid. +/// +/// PRESSURERELIEF +/// +/// Inlet (NOTDEFINED, SINK): Incoming fluid. +/// +/// REGULATING +/// +/// Inlet (NOTDEFINED, SINK): Incoming fluid. +/// Outlet (NOTDEFINED, SOURCE): Outgoing fluid. +/// +/// SAFETYCUTOFF +/// +/// Inlet (NOTDEFINED, SINK): Incoming fluid. +/// Outlet (NOTDEFINED, SOURCE): Outgoing fluid. +/// +/// STEAMTRAP +/// +/// Inlet (NOTDEFINED, SINK): Incoming fluid. +/// Outlet (NOTDEFINED, SOURCE): Outgoing fluid. +/// +/// STOPCOCK +/// +/// Inlet (DOMESTICCOLDWATER, SINK): Incoming fluid. +/// +/// Figure 233 illustrates valve port use. +/// Figure 233 — Valve port use +class IFC_PARSE_API IfcValve : public IfcFlowController { +public: + boost::optional< ::Ifc4x3_add2::IfcValveTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcValveTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcValve (IfcEntityInstanceData* e); + IfcValve (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcValveTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcValve > list; +}; +/// Definition from ISO 6707-1:1989: Vertical construction +/// usually in masonry or in concrete which bounds or subdivides a +/// construction works and fulfils a load bearing or retaining +/// function. +/// Definition from IAI: The wall represents a vertical +/// construction that bounds or subdivides spaces. Wall are usually +/// vertical, or nearly vertical, planar elements, often designed to +/// bear structural loads. A wall is howevernot required to be load +/// bearing. +/// NOTE NOTE There is a representation of walls +/// for structural analysis provided by a proper subtype of +/// IfcStructuralMember being part of the +/// IfcStructuralAnalysisModel. +/// +/// NOTE An arbitrary planar element to which this semantic +/// information is not applicable, e.g. is not predominantly +/// vertical, shall be modeled as +/// IfcPlate +/// A wall may have openings, such as wall openings, openings used +/// for windows or doors, or niches and recesses. They are defined by +/// an IfcOpeningElement attached to the wall using the +/// inverse relationship HasOpenings pointing to +/// IfcRelVoidsElement. +/// The IFC specification provides two entities for wall +/// occurrences: +/// +/// IfcWallStandardCase used for all occurrences of +/// walls, that have a non-changing thickness along the wall path and +/// where the thickness parameter can be fully described by a +/// material layer set. These walls are always represented +/// geometrically by an 'Axis' and a 'SweptSolid' shape +/// representation (or by a 'Clipping' geometry based on +/// 'SweptSolid'), if a 3D geometric representation is assigned. In +/// addition they have to have a corresponding +/// IfcMaterialProfileSetUsage assigned. +/// IfcWallElementedCase used for occurrences of walls +/// which are aggregated from subordinate elements, following +/// specific decomposition rules expressed by the mandatory use of +/// IfcRelAggregates relationship. +/// IfcWall used for all other occurrences of wall, +/// particularly for walls with changing thickness along the wall +/// path (e.g. polygonal walls), or walls with a non-rectangular +/// cross sections (e.g. L-shaped retaining walls), and walls having +/// an extrusion axis that is unequal to the global Z axis of the +/// project (i.e. non-vertical walls), or walls having only 'Brep', +/// or 'SurfaceModel' geometry. +/// +/// HISTORY New entity in +/// IFC Release 1.0 +/// Type Use Definition +/// IfcWall defines the occurrence of any wall, common +/// information aboutwall types (or styles) is handled by +/// IfcWallType. The IfcWallType (if present) may +/// establish the commontype name, usage (or predefined) type, +/// common material layer set, common set of properties and common +/// shape representations (using IfcRepresentationMap). The +/// IfcWallType is attached using the +/// IfcRelDefinedByType.RelatingType objectified relationship +/// and is accessible by the inverse IsTypedBy attribute. +/// If no IfcWallType is attached(i.e. if only occurrence +/// information is given) the PredefinedType should be +/// provided. If set to .USERDEFINED. a user defined value can be +/// provided by the ObjectType attribute. +/// Material Use Definition +/// The material of the IfcWall is defined by +/// IfcMaterialLayerSet and attached by the +/// IfcRelAssociatesMaterial.RelatingMaterial. It is +/// accessible by the inverse HasAssociations relationship. +/// Multi-layer walls can be represented by referring to several +/// IfcMaterialLayer's within the +/// IfcMaterialLayerSet. +/// Note: It is illegal to assign an +/// IfcMaterialLayerSetUsage to an IfcWall. Only the +/// subtype IfcWallStandardCase supports this +/// concept. +/// Material information can also be given at the +/// IfcWallType, defining the common attribute data for all +/// occurrences of the same type.It is then in addition accessible +/// by the inverse IsTypedBy +/// relationship pointing to IfcWallType.HasAssociations and +/// via IfcRelAssociatesMaterial.RelatingMaterial. +/// Property Set Use Definition +/// The property sets relating to the IfcWall are defined +/// by the IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// property set definitions specific to the IfcWall are part +/// of this IFC release: +/// +/// Pset_WallCommon: common property set for all +/// wall occurrences +/// +/// Property sets can also be given at the IfcWallType, +/// defining the common property data for all occurrences of the same +/// type.It is then accessible by the inverse IsTypedBy relationship pointing to +/// IfcWallType.HasPropertySets. If both are given, then the +/// properties directly assigned to IfcWall overrides the +/// properties assigned to IfcWallType. +/// Quantity Use Definition +/// The quantities relating to the IfcWall and +/// IfcWallStandardCase are defined by the +/// IfcElementQuantity and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// base quantities are defined and should be exchanged with the +/// IfcElementQuantity.Name = 'BaseQuantities'. Other +/// quantities can be defined being subjected to local standard of +/// measurement with another string value assigned to Name and +/// a value provided for MethodOfMeasurement. Quantities shall +/// never be assigned to the IfcWallType. +/// +/// Qto_WallBaseQuantities: base quantities for +/// all wall occurrences. +/// +/// Containment Use Definition +/// The IfcWall (and the subtype +/// IfcWallStandardCase) as any subtype of +/// IfcBuildingElement, may participate in two different +/// containment relationships. The first (and in most implementation +/// scenarios mandatory) relationship is the hierarchical spatial +/// containment, the second (optional) relationship is the +/// aggregation within anelement assembly. +/// +/// The IfcWall is places within the project spatial +/// hierarchy using the objectified relationship +/// IfcRelContainedInSpatialStructure, referring to it by its +/// inverse attribute SELF\IfcElement.ContainedInStructure. +/// Subtypes ofIfcSpatialStructureElement are valid spatial +/// containers, with IfcBuildingStorey being the default +/// container. +/// TheIfcWall may be aggregated into an element assembly +/// using the objectified relationship IfcRelAggregates, +/// referring to it by its inverse attribute +/// SELF\IfcObjectDefinition.Decomposes. Any subtype of +/// IfcElement can be an element assembly, with +/// IfcElementAssembly as a special focus subtype. +/// In this case the wall should not be additionally contained in the +/// project spatial hierarchy, +/// i.e.SELF\IfcElement.ContainedInStructure should be +/// NIL. +/// +/// TheIfcWallmay also be an aggregate i.e. being +/// composed by other elements and acting as an assembly using the +/// objectified relationship IfcRelAggregates, referring to it +/// by its inverse attribute +/// SELF\IfcObjectDefinition.IsDecomposedBy. Components of a +/// wall are described by instances of IfcBuildingElementPart +/// that are aggregated to form a complex wall. +/// In this case, the containedIfcBuildingElementPart's +/// should not be additionally contained in the project spatial +/// hierarchy, i.e. the inverse attribute +/// SELF\IfcElement.ContainedInStructure of +/// IfcBuildingElementPart should be NIL. +/// Geometry Use Definition +/// The geometric representation of IfcWall is given by the +/// IfcProductDefinitionShape, allowing multiple geometric +/// representation. Included are: +/// Local Placement +/// The local placement for IfcWall is defined in its +/// supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate +/// system that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if given) to the local +/// placement of the same IfcSpatialStructureElement that is +/// used in the ContainedInStructure inverse attribute or to a +/// referenced spatial structure element at a higher level. +/// If the relative placement is not used, the absolute placement +/// is defined within the world coordinate system. +/// +/// Geometric Representation +/// Currently, the 'Axis', 'Surface', +/// 'FootPrint', 'Body', and 'Box' +/// representations are supported. The 'Box' representation includes +/// the representation type 'BoundingBox' and is explained at +/// IfcBuildingElement. +/// Axis Representation +/// The axis geometric representation of IfcWall is defined +/// using the 'Axis' representation. +/// +/// RepresentationIdentifier : 'Axis' +/// RepresentationType : 'Curve2D' +/// +/// NOTE The 'Axis' is not used to locate the +/// material layer set, only the subtype IfcWallStandardCase +/// provides this capability. +/// Surface Representation +/// The surfacic geometric representation of IfcWall is +/// defined using the 'Surface' representation. +/// +/// RepresentationIdentifier : 'Surface' +/// RepresentationType : 'Surface3D' +/// +/// NOTE The 'Surface' can be used to define a +/// surfacic model of the building (e.g. for analytical purposes, or +/// for reduced Level of Detail representation). +/// Body Representation +/// The body representation of IfcWall can be represented +/// using the representation types 'SweptSolid', 'Clipping', +/// 'SurfaceModel', and 'Brep'. The representation types +/// 'SurfaceModel' and 'Brep' are explained at +/// IfcBuildingElement. +/// SweptSolid Representation Type +/// The following attribute values for the +/// IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// If the wall body can be described by a +/// vertical extrusion of a polygonal footprint with constant +/// thickness along the axis (where vertical = into the direction of +/// the global Z axis), the subtype IfcWallStandardCase should +/// be used. If the extrusion is not equal to global Z, then the +/// IfcWall should be used. +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'SweptSolid' +/// +/// The following additional constraints apply to the 'SweptSolid' +/// representation: +/// +/// Solid: IfcExtrudedAreaSolid is required, +/// Profile: IfcArbitraryClosedProfileDef is +/// required. +/// Extrusion:All extrusion directions shall be +/// supported. +/// +/// Clipping Representation Type +/// The following attribute values for the +/// IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'Clipping' +/// +/// The same additional constraints apply as defined for the +/// 'SweptSolid' representation. +/// Connection Geometry +/// The connection between two walls is represented by the +/// IfcRelConnectsPathElements. The use of the parameter of +/// that relationship object is defined at the level of the subtypes +/// of IfcWall and at the +/// IfcRelConnectsPathElements. +class IFC_PARSE_API IfcWall : public IfcBuiltElement { +public: + /// Predefined generic type for a wall that is specified in an enumeration. There may be a property set given specifically for the predefined types. + /// NOTE The PredefinedType shall only be used, if no type object IfcWallType is assigned, providing its own IfcWallType.PredefinedType. + /// + /// IFC2x4 CHANGE The attribute has been added at the end of the entity definition. + boost::optional< ::Ifc4x3_add2::IfcWallTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcWallTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcWall (IfcEntityInstanceData* e); + IfcWall (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcWallTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcWall > list; +}; +/// The IfcWallStandardCase defines a wall with certain +/// constraints for the provision of parameters and with certain +/// constraints for the geometric representation. The +/// IfcWallStandardCase handles all cases of walls, that are +/// extruded vertically: +/// +/// along the positive z axis of the wall object coordinate system, +/// and +/// along the positve z axis of the global (world) coordinate +/// system +/// +/// and have a single thickness along the path for each wall layer, +/// i.e.: +/// +/// parallel sides for straight walls +/// co-centric sides for curved walls. +/// +/// and have either: +/// +/// a straight line axis (straight wall), or +/// a circular arc axis (round wall). +/// +/// and shall not have +/// +/// aggregated components, that is, parts aggregated to a wall by IfcRelAggregates +/// shape representation for 'Body' not being an extrusion, or clipped extrusion +/// +/// The following parameter have to be provided: +/// +/// Wall height, taken from the depth of extrusion, provided by the geometric representation. +/// Wall thickness, taken from the material layer set usage, attached to the wall +/// Wall offset from axis, taken from the material layer set usage, attached to the wall +/// +/// The IfcWallStandardCase requires the provision of the +/// wall axis either a straight line that is parallel to the x-axis of +/// the object coordinate system, or a circular arc where the tangent +/// at start is parallel to the x-axis of the object coordinate system. +/// The direction of the wall axis shall be the positive direction of +/// that x-axis. +/// The material of the wall is defined by the +/// IfcMaterialLayerSetUsage and is attached by the +/// IfcRelAssociatesMaterial objectified relationship. It is +/// accessible by the inverse HasAssociations relationship. +/// The material layer set usage has to be given (enforced by where +/// rule). +/// HISTORY New entity in IFC Release 2x. +/// +/// Type Use Definition +/// The type information relating to the +/// IfcWallStandardCase is defined at the supertype +/// IfcWall. As an additional use agreement for standard +/// walls, the IfcWallType should have a unique +/// IfcMaterialLayerSet, that is referenced by +/// the IfcMaterialLayerSetUsage assigned to all +/// occurrences of this IfcWallType. +/// +/// Figure 134 illustrates assignment of IfcMaterialLayerSetUsage and IfcMaterialLayerSet to the wall type and the wall occurrence. +/// +/// Figure 134 +/// +/// Material Use Definition +/// The material of the IfcWallStandardCase is defined by +/// IfcMaterialLayerSetUsage and attached by the +/// IfcRelAssociatesMaterial.RelatingMaterial. It is +/// accessible by the inverse HasAssociations relationship. +/// Multi-layer walls can be represented by refering to several +/// IfcMaterialLayer's within the IfcMaterialLayerSet +/// that is referenced from the +/// IfcMaterialLayerSetUsage.  +/// Material information can also be given at the +/// IfcWallType, defining the common attribute data for all +/// occurrences of the same type. It is then accessible by the +/// inverse IsDefinedBy relationship pointing to +/// IfcSlabType.HasAssociations and via +/// IfcRelAssociatesMaterial.RelatingMaterial. See Type Use +/// Definition for additional agreements for standard slabs. +/// +/// Figure 134 illustrates material layer usage, where the following conventions shall be met: +/// +/// The reference coordinate system is the local coordinate system established by the ObjectPlacement of the IfcWallStandardCase. +/// The reference axis is the axis defined by the IfcShapeRepresentation with RepresentationType='Axis' as one of the +/// Representation.Representations of the IfcWallStandardCase. +/// The IfcMaterialLayerSetUsage.OffsetFromReferenceLine is given as a distance from this axis. +/// The IfcMaterialLayerSetUsage.OffsetFromReferenceLine is the distance parallel to the reference axis and always within the base +/// (XY) plane of the reference coordinate system. A positve value of IfcMaterialLayerSetUsage.OffsetFromReferenceLine would +/// then point into the positive y-axis of the reference coordinate system. +/// The IfcMaterialLayerSetUsage.DirectionSense defines how the IfcMaterialLayer's are assigned to the reference axis. POSITIVE means in direction to the positive y-axis of the reference coordinate system. +/// The Thickness of each IfcMaterialLayer is provided starting from the OffsetFromReferenceLine and in the direction given by DirectionSense. It is applied without any gap or overlap between two consecutive layers. The TotalThickness of the IfcMaterialLayerSet is the sum of all layer thicknesses. +/// The IfcMaterialLayerSetUsage.LayerSetDirection is always AXIS2. +/// +/// Figure 134 — Wall material layers +/// +/// Property Set Use Definition: +/// The property sets relating to the IfcWallStandardCase +/// are defined at the supertype IfcWall. +/// Quantity Use Definition: +/// The quantities relating to the IfcWallStandardCase are +/// defined at the supertype IfcWall. +/// Geometry Use Definitions: +/// The geometric representation of IfcWallStandardCase is +/// given by the IfcProductDefinitionShape, allowing multiple +/// geometric representation. Included are: +/// Local Placement +/// The use of local placement defining the wall object coordinate +/// system is defined at the supertype IfcWall. +/// Geometric Representation +/// The standard geometric representation of +/// IfcWallStandardCase is defined using the following +/// multiple shape representations for its definition: +/// +/// Axis: A two-dimensional open curve +/// (IfcBoundedCurve) defining the axis for the standard wall. +/// The material layer offset is measured from the wall axis. +/// Body: A Swept Solid Representation or a CSG +/// representation defining the 3D shape of the standard wall +/// +/// NOTE  It is invalid to exhange a +/// 'SurfaceModel', or 'Brep' or 'MappedRepresentation' representation +/// for the 'Body' shape representation of an +/// IfcWallStandardCase. +/// Axis Representation +/// The wall axis is represented by a two-dimensional open curve +/// within a particular shape representation. The wall axis is used to +/// apply the material layer set usage parameter to the wall geometry. +/// The following attribute values shall be used +/// +/// RepresentationIdentifier : 'Axis' +/// RepresentationType : 'Curve2D' +/// +/// Figure 135 illustrates an axis representation for a straight wall. In case of a straight wall, the set of items shall +/// include a single geometric representation item of type IfcPolyline or IfcTrimmedCurve with the BasisCurve being an IfcLine. The IfcPolyline or IfcTrimmedCurve shall be parallel (here in a special case co-linear) to the x-axis +/// of the object coordinate system. The direction shall be identical to the direction of the x-axis. +/// +/// Figure 136 illustrates an axis representation for a curved wall. In case of a curved wall, the set of items shall include +/// a single geometric representation item of type IfcTrimmedCurve. The curve shall have a BasisCurve of type IfcCircle. The tangent of the IfcTrimmedCurve shall be parallel at start to the x-axis of the object coordinate system. The direction shall be identical to the direction of the x-axis. +/// +/// Figure 135 — Wall axis straight +/// Figure 136 — Wall axis curved +/// +/// Body Representation +/// The body representation of IfcWallStandardCase is +/// defined by using 'SweptSolid' representation for walls without +/// clippings or 'Clipping' representation for walls with clippings +/// (e.g. under sloped roof slabs). +/// SweptSolid Representation Type +/// The following attribute values for the +/// IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'SweptSolid' +/// +/// The following additional constraints apply to the 'SweptSolid' +/// representation: +/// +/// Solid: IfcExtrudedAreaSolid is required, +/// Profile: IfcArbitraryClosedProfileDef and +/// IfcRectangleProfileDef shall be supported. +/// Extrusion: The profile shall be extruded vertically, +/// i.e., in the direction of the z-axis of the co-ordinate system of +/// the referred spatial structure element. It might be further +/// constraint to be in the direction of the global z-axis in +/// implementers agreements. The extrusion axis shall be perpendicular +/// to the swept profile, i.e. pointing into the direction of the +/// z-axis of the Position of the IfcExtrudedAreaSolid. +/// +/// The profile of a wall is described in the ground view and extruded vertically. The profile (also identical with the foot print of the wall) is defined by the IfcArbitraryClosedProfileDef (excluding its subtypes). The profile is given with all wall connections already resolved. +/// +/// Figure 137 illustrates a body representation for a straight wall. In case of a straight wall, the two sides of the profile shall be parallel to the wall axis, that is, the wall has a single unchanged thickness. +/// +/// Figure 138 illustrates a body representation for a curved wall. In case of a curved wall, the two sides of the profile shall be parallel (with defined offset) to the wall axis, that is, the wall has a single unchanged thickness. +/// +/// Figure 137 — Wall body extrusion straight +/// Figure 138 — Wall body extrusion curved +/// +/// Clipping Representation Type +/// The following attribute values for the +/// IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'Clipping' +/// +/// The following constraints apply to the 'Clipping' +/// representation: +/// +/// Solid: see standard geometric representation +/// Profile: see standard geometric representation +/// Extrusion: see standard geometric representation +/// Boolean result: The IfcBooleanClippingResult +/// shall be supported, allowing for Boolean differences between the +/// swept solid (here IfcExtrudedAreaSolid) and one or several +/// IfcHalfSpaceSolid (or subtypes). +/// +/// Figure 139 illustrates a clipping for a straight wall using an IfcPolygonalBoundedHalfSpace as SecondOperand in +/// the IfcBooleanClippingResult. +/// +/// Figure 140 illustrates a clipping for a curved wall using an IfcHalfSpaceSolid as SecondOperand in the +/// IfcBooleanClippingResult. +/// +/// Figure 139 — Wall body clipping straight +/// Figure 140 — Wall body clipping curved +class IFC_PARSE_API IfcWallStandardCase : public IfcWall { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcWallStandardCase (IfcEntityInstanceData* e); + IfcWallStandardCase (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcWallTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcWallStandardCase > list; +}; +/// A waste terminal has the purpose of collecting or intercepting waste from one or more sanitary terminals or other fluid waste generating equipment and discharging it into a single waste/drainage system. +/// A waste terminal provides for all forms of trap and waste point that collects discharge from a sanitary terminal and discharges it into a waste/drainage subsystem or that collects waste from several terminals and passes it into a single waste/drainage subsystem. This includes the P and S traps from soil sanitary terminals, sinks, and basins as well as floor wastes and gully traps that provide collection points. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcWasteTerminal defines the occurrence of any waste terminal; common information about waste terminal types is handled by IfcWasteTerminalType. +/// The IfcWasteTerminalType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcWasteTerminalType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcWasteTerminalType has ports or aggregated elements, such objects are reflected at the IfcWasteTerminal occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcWasteTerminalType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcWasteTerminalType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcWasteTerminal override the properties defined at IfcWasteTerminalType. +/// Refer to the documentation at the supertype IfcFlowTerminal and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_WasteTerminalTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// FLOORTRAP +/// +/// Pset_WasteTerminalTypeFloorTrap (PSET_TYPEDRIVENOVERRIDE) +/// +/// FLOORWASTE +/// +/// Pset_WasteTerminalTypeFloorWaste (PSET_TYPEDRIVENOVERRIDE) +/// +/// GULLYSUMP +/// +/// Pset_WasteTerminalTypeGullySump (PSET_TYPEDRIVENOVERRIDE) +/// +/// GULLYTRAP +/// +/// Pset_WasteTerminalTypeGullyTrap (PSET_TYPEDRIVENOVERRIDE) +/// +/// ROOFDRAIN +/// +/// Pset_WasteTerminalTypeRoofDrain (PSET_TYPEDRIVENOVERRIDE) +/// +/// WASTEDISPOSALUNIT +/// +/// Pset_WasteTerminalTypeWasteDisposalUnit (PSET_TYPEDRIVENOVERRIDE) +/// +/// WASTETRAP +/// +/// Pset_WasteTerminalTypeWasteTrap (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_WasteTerminalBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcWasteTerminal is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcWasteTerminalType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// Cover: Material from which the cover or grating is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcWasteTerminal are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the waste terminal occurrence is defined by IfcWasteTerminalType, then the port occurrences must reflect those defined at the IfcWasteTerminalType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcWasteTerminal PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// FLOORTRAP +/// +/// Inlet (DRAINAGE, SINK): Drainage inlet. +/// Outlet (DRAINAGE, SOURCE): Drainage outlet. +/// +/// FLOORWASTE +/// +/// Inlet (WASTE, SOURCE): Waste inlet. +/// Outlet (WASTE, SINK): Waste outlet. +/// +/// GULLYSUMP +/// +/// Inlet (WASTE, SINK): Drainage inlet. +/// Outlet (WASTE, SOURCE): Drainage outlet. +/// +/// GULLYTRAP +/// +/// Inlet (WASTE, SOURCE): Waste inlet. +/// Outlet (WASTE, SINK): Waste outlet. +/// +/// ROOFDRAIN +/// +/// Outlet (RAINWATER, SOURCE): Rainwater. +/// +/// WASTEDISPOSALUNIT +/// +/// Inlet (WASTE, SINK): Waste inlet. +/// Outlet (DRAINAGE, SOURCE): Drainage outlet. +/// +/// WASTETRAP +/// +/// Inlet (WASTE, SINK): Waste inlet. +/// Outlet (WASTE, SOURCE): Waste outlet. +class IFC_PARSE_API IfcWasteTerminal : public IfcFlowTerminal { +public: + boost::optional< ::Ifc4x3_add2::IfcWasteTerminalTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcWasteTerminalTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcWasteTerminal (IfcEntityInstanceData* e); + IfcWasteTerminal (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcWasteTerminalTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcWasteTerminal > list; +}; +/// Definition form ISO 6707-1:1989: Construction for +/// closing a vertical or near vertical opening in a wall or pitched +/// roof that will admit light and may admit fresh air. +/// The window is a building element +/// that is predominately used to provide natural light and fresh +/// air. It includes vertical and horizontal opening (e.g. skylights +/// or light domes). It includes constructions with swinging, +/// pivoting, sliding, or revolving panels and fixed panels. A window +/// consists of a lining and one or several panels. +/// The IfcWindow defines a particular occurrence of a +/// window inserted in the spatial context of a project. A window +/// can: +/// +/// be inserted into an IfcOpeningElement using the +/// IfcRelFillsElement relationship, , then the IfcDoor +/// has an inverse attribute FillsVoids provided, +/// +/// NOTE View definitions or +/// implementer agreements may restrict the relationship to only +/// include one window (or door) into one opening. +/// +/// be part of an element assembly, often an +/// IfcCurtainWall, using the IfcRelAggregates +/// relationship, then the inverse attribute Decomposes is +/// provided. +/// or be a "free standing" window, then the IfcWindow has +/// no inverse attributes FillsVoids or Decomposes +/// provided. +/// +/// The IFC specification provides two entities for window +/// occurrences: +/// +/// IfcWindowStandardCase used for all occurrences of +/// windows, that have a 'Profile' shape representation defined to +/// which a set of shape parameters for lining and framing properties +/// apply. Additionally it requires the provision of an +/// IfcWindowType that references one +/// IfcWindowLiningProperties and on to many +/// IfcWindowPanelProperties. +/// +/// NOTE see +/// IfcWindowStandardCase for all specific constraints imposed +/// by this subtype. +/// +/// IfcWindow used for all other occurrences of windows, +/// particularly for windows having only 'Brep', or 'SurfaceModel' +/// geometry without applying shape parameters. +/// +/// The actual parameter of the window and/or its shape is defined +/// at the IfcWindow as the occurrence definition (or project +/// instance), or by the IfcWindowType as the specific definition (or +/// project type). The following parameters are given: +/// +/// at the IfcWindow or IfcWindowStandardCase for +/// occurrence specific parameters. The IfcWindow +/// specifies: +/// +/// the window width and height +/// the window opening direction (by the y-axis of the +/// ObjectPlacement) +/// +/// at the IfcWindowType to +/// which the IfcWindow is related by the inverse relationship +/// IsDefinedBy pointing to IfcRelDefinesByType, for +/// type parameters common to all occurrences of the same type. +/// +/// the partitioning type (single panel, double panel, tripel +/// panel, more panels) +/// the operation type (swing, tilt and turn, pivot revolve, +/// fixed case ment, etc.) +/// the window panel hinge side (by using two different styles +/// for right and left opening windows) +/// the construction material type +/// the particular attributes for the lining by the +/// IfcWindowLiningProperties +/// the particular attributes for the panels by the +/// IfcWindowPanelProperties +/// +/// HISTORY New entity in IFC Release 1.0. +/// IFC2x4 CHANGE The attributes PredefinedType and OperationType are added, the applicable type object has been changed to IfcDoorType. +/// +/// Material Use Definition +/// The material of the IfcWindow is defined by the +/// IfcMaterialConstituentSet or as fall back by +/// IfcMaterial and attached by the +/// IfcRelAssociatesMaterial.RelatingMaterial. It is +/// accessible by the inverse HasAssociations +/// relationship. +/// The following keywords for +/// IfcMaterialConstituentSet.MaterialConstituents[n].Name +/// shall be used: +/// +/// 'Lining' - to indicate that the material constituent applies +/// to to the window lining +/// 'Framing' - to indicate that the material constituent applies +/// to to the window panel(s), if not provided, the 'Lining' material +/// information applied to panel(s) as well +/// 'Glazing' - to indicate that the material constituent applies +/// to to the glazing part +/// +/// If the fall back single IfcMaterial is referenced, it +/// applies to the lining and framing of the window. +/// Property Set Use Definition: +/// The property sets relating to the IfcWindow are defined +/// by the IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// property set definitions specific to the IfcWindow are +/// part of this IFC release: +/// +/// Pset_WindowCommon: common property set for all +/// window occurrences +/// Pset_DoorWindowGlazingType: specific property +/// set for the glazing properties of the window glazing, if +/// available +/// Pset_DoorWindowShadingType: specific property +/// set for the shading properties of the window glazing, if +/// available +/// +/// Quantity Use Definition +/// The quantities relating to the IfcWindow are defined by +/// the IfcElementQuantity and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible +/// by the inverse IsDefinedBy relationship. The following +/// base quantities are defined and should be exchanged with the +/// IfcElementQuantity.Name = 'BaseQuantities'. Other +/// quantities can be defined being subjected to local standard of +/// measurement with another string value assigned to +/// MethodOfMeasurement. Quanties shall be never assigned to +/// the IfcWindowStyle. +/// +/// Qto_WindowBaseQuantities: base quantities for +/// all window occurrences. +/// +/// Containment Use Definition +/// +/// The IfcWindow, as any subtype of +/// IfcBuildingElement, may participate in two different +/// containment relationships. The first (and in most implementation +/// scenarios mandatory) relationship is the hierachical spatial +/// containment, the second (optional) relationship is the +/// aggregation within anelement assembly. +/// +/// The IfcWindow is placed within the project spatial +/// hierarchy using the objectified relationship +/// IfcRelContainedInSpatialStructure, refering to it by its +/// inverse attribute SELF\IfcElement.ContainedInStructure. +/// Subtypes ofIfcSpatialStructureElement are valid spatial +/// containers, with IfcBuildingStorey being the default +/// container. +/// The IfcWindow may be aggregated into an element +/// assembly using the objectified relationship +/// IfcRelAggregates, refering to it by its inverse attribute +/// SELF\IfcObjectDefinition.Decomposes. Windows may be part +/// of an IfcCurtainWall as a special focus subtype. In this +/// case it should not be additionally contained in the project +/// spatial hierarchy, +/// i.e.SELF\IfcElement.ContainedInStructure should be +/// NIL. +/// +/// Figure 141 illustrates window containment. +/// NOTE The containment shall be defined independently of the filling relationship, that is, even if the IfcWindow is a filling of an opening established by IfcRelFillsElement, it is also contained in the spatial structure by an IfcRelContainedInSpatialStructure. +/// +/// Figure 141 — Window containment +/// +/// Geometry Use Definitions: +/// The geometric representation of IfcWindow is given by +/// the IfcProductDefinitionShape, allowing multiple geometric +/// representation. The IfcWindow, in case of an occurrence +/// object, gets its parameter and shape from the +/// IfcWindowType. If an IfcRepresentationMap (a block +/// definition) is defined for the IfcWindowType, then the +/// IfcWindow inserts it through the IfcMappedItem +/// (refered to by IfcShapeRepresentation.Items). +/// Local Placement +/// The local placement for IfcWindow is defined in its +/// supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate +/// system that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point to the local placement of +/// the same element (if given), in which the IfcWindow is +/// used as a filling (normally an IfcOpeningElement), as +/// provided by the IfcRelFillsElement relationship. +/// If the IfcWindow is not inserted into an +/// IfcOpeningElement, then the PlacementRelTo +/// relationship of IfcLocalPlacement shall point (if given) +/// to the local placement of the same +/// IfcSpatialStructureElement that is used in the +/// ContainedInStructure inverse attribute or to a referenced +/// spatial structure element at a higher level. +/// If the relative placement is not used, the absolute placement +/// is defined within the world coordinate system. +/// +/// Geometric Representation +/// Thegeometric representation of IfcWindow is defined +/// using the following (potentiallymultiple) +/// IfcShapeRepresentation's for its +/// IfcProductDefinitionShape: +/// +/// Profile: A'Curve3D' +/// consisting of a single losed curve defining the outer boundary of +/// the window (lining). Thewindow parametric representation uses +/// this profile in order to apply thewindow lining and panel +/// parameter. If not provided, the profile of the +/// IfcOpeningElement is taken. +/// FootPrint: A 'GeometricCurveSet', or 'Annotation2D' +/// representation defining the 2D shape of thewindow +/// Body: A 'SweptSolid', 'SurfaceModel', or 'Brep' +/// representation defining the 3D shape of thewindow. +/// +/// In addition the parametric representation of a +/// (limited)window shape is available by applying the parameters +/// fromIfcWindowType +/// referencingIfcWindowLiningProperties +/// andIfcWindowPanelProperties. The purpose of the parameter +/// is described at those entities and below (parametric +/// representation). +/// Profile -'Curve3D' representation +/// Thewindow profile is represented by a three-dimensional +/// closed curve within a particular shape representation. The +/// profile is used to apply the parameter of the parametricwindow +/// representation.The following attribute values for the +/// IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'Profile' +/// RepresentationType : 'Curve3D', only a single closed +/// curve shall be contained in the set of +/// IfcShapeRepresentation.Items. +/// +/// A 'Profile' representation has to be provided if: +/// +/// a parametric representation shall be applied to the +/// windowAND +/// +/// the window is 'free standing', or +/// the opening into which the window is inserted is not extruded +/// horizontally (i.e. where the opening profile does not match the +/// window profile) +/// +/// FootPrint -'GeometricCurveSet' or 'Annotation2D' +/// representation +/// Thewindow foot print is represented by a set of +/// two-dimensionalcurves (or in case of 'Annotation2D' additional +/// hatching and text) within a particular shape representation. The +/// foot print is used for the plan view representation of +/// thewindow.The following attribute values for the +/// IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'FootPrint' +/// RepresentationType : 'GeometricCurveSet', or +/// 'Annotation2D' +/// +/// Body - 'SweptSolid', 'SurfaceModel', or 'Brep' +/// representation +/// Thewindow body is either represented parameterically (see +/// parametric representation) or by explicit 3D shape. The 3D shape +/// is given by using extrusion geometry, or surface models, or Brep +/// models within a particular shape representation. The body is used +/// for the model view representation of thewindow.The following +/// attribute values for the IfcShapeRepresentation holding +/// this geometric representation shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'SweptSolid', 'SurfaceModel', or +/// 'Brep' +/// +/// MappedRepresentation +/// The 'FootPrint' and 'Body' geometric representation +/// ofIfcWindow can be shared among several identicalwindows +/// using the 'MappedRepresentation'. The following attribute values +/// for the IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'FootPrint', 'Body' +/// RepresentationType : 'MappedRepresentation' +/// +/// The same constraints, as given for the 'FootPrint', 'Body' +/// representation identifiers, shall apply to the +/// MappedRepresentation of the +/// IfcRepresentationMap. +/// Parameteric Representation using parameters at +/// IfcWindowType +/// The parameters, which define the shape of the +/// IfcWindow, are given at the IfcWindowType and the +/// property sets, which are included in the IfcWindowType. +/// The IfcWindow only defines the local placement. +/// The overall size of the IfcWindow to +/// be used to apply the lining or panel parameter provided by the +/// IfcWindowType is determined by the IfcShapeRepresentation +/// with the RepresentationIdentifier = 'Profile'. Only in case of an +/// IfcWindow inserted into an IfcOpeningElement using +/// the IfcRelFillsElement relatioship, having a horizontal +/// extrusion (along the y-axis of the IfcDoor), the overall +/// size is determined by the extrusion profile of the +/// IfcOpeningElement. +/// +/// Figure 142 illustrates the insertion of a window into the IfcOpeningElement by creating an instance of +/// IfcWindow with PartitioningType = DoublePanelHorizontal. The parameters OverallHeight and OverallWidth show the extent of the window in the positive Z and X axis of the local placement of the window. The lining and the transom are created by the given parameters. +/// +/// Figure 142 — Window placement +/// +/// Figure 143 illustrates the final window (DoublePanelHorizontal) with first panel having PanelPosition = TOP, OperationType = BOTTOMHUNG and second panel having PanelPosition = BOTTOM and OperationType = TILTANDTURNLEFTHAND. +/// +/// Figure 143 — Window planes +/// +/// Window opening operation by window type +/// The parameters that defines the shape of the IfcWindow, +/// are given at the IfcWindowType and the property sets, +/// which are included in the IfcWindowType. The +/// IfcWindow only defines the local placement which +/// determines the opening direction of the window. The overall +/// layout of the IfcWindow is determined by +/// itsIfcWindowType.PartitioningType. Each window panel has +/// its own operation type, provided by +/// IfcWindowPanelProperties.OperationType. All window panels +/// are assumed to open into the same direction (if relevant for the +/// particular window panel operation. The hindge side (whether a +/// window opens to the left or to the right) is determined by the +/// IfcWindowPanelProperties.OperationType. +/// NOTE There are different conventions in +/// different countries on how to show the symbolic presentation of +/// the window panel operation (the "triangles"). Either as seen from +/// the exterior, or from the interior side. The following figures +/// show the symbolics from the exterior side (the convention as used +/// predominately in Europe). +/// +/// Figure 144 illustrates window operation types. +/// +/// The window panel (for side hung windows) opens always +/// into the direction of the positive Y axis of the local placement. +/// The determination of whether the window opens to the left or to +/// the right is done at +/// IfcWindowPanelProperties.OperationType. Here it is a left +/// side opening window given byOperationType = +/// SideHungLeftHand. +/// +/// If the window should open to the other side, then the +/// local placement has to be changed. It is still a left hung +/// window, given by IfcWindowPanelProperties.OperationType +/// =SideHungLeftHand. +/// +/// If the window panel (for side hung windows) opens to +/// the right, a separate window panel style needs to be used (here +/// IfcWindowPanelProperties.OperationType +/// =SideHungRightHand) and it always opens into the direction of +/// the positive Y axis of the local placement. +/// +/// If the window should open to the other side, then the +/// local placement has to be changed. It is still a right hung +/// window, given by IfcWindowPanelProperties.OperationType +/// =SideHungRightHand. +/// . +/// +/// Figure 144 — Window operations +class IFC_PARSE_API IfcWindow : public IfcBuiltElement { +public: + /// Overall measure of the height, it reflects the Z Dimension of a bounding box, enclosing the body of the window opening. If omitted, the OverallHeight should be taken from the geometric representation of the IfcOpening in which the window is inserted. + /// + /// NOTE  The body of the window might be taller then the window opening (e.g. in cases where the window lining includes a casing). In these cases the OverallHeight shall still be given as the window opening height, and not as the total height of the window lining. + boost::optional< double > OverallHeight() const; + void setOverallHeight(boost::optional< double > v); + /// Overall measure of the width, it reflects the X Dimension of a bounding box, enclosing the body of the window opening. If omitted, the OverallWidth should be taken from the geometric representation of the IfcOpening in which the window is inserted. + /// + /// NOTE  The body of the window might be wider then the window opening (e.g. in cases where the window lining includes a casing). In these cases the OverallWidth shall still be given as the window opening width, and not as the total width of the window lining. + boost::optional< double > OverallWidth() const; + void setOverallWidth(boost::optional< double > v); + /// Predefined generic type for a window that is specified in an enumeration. There may be a property set given specificly for the predefined types. + /// NOTE The PredefinedType shall only be used, if no type object IfcWindowType is assigned, providing its own IfcWindowType.PredefinedType. + /// + /// IFC2x4 CHANGE The attribute has been added at the end of the entity definition. + boost::optional< ::Ifc4x3_add2::IfcWindowTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcWindowTypeEnum::Value > v); + /// Type defining the general layout of the window in terms of the partitioning of panels. + /// + /// NOTE The PartitioningType shall only be used, if no type object IfcWindowType is assigned, providing its own IfcWindowType.PartitioningType. + /// + /// IFC2x4 CHANGE The attribute has been added at the end of the entity definition. + boost::optional< ::Ifc4x3_add2::IfcWindowTypePartitioningEnum::Value > PartitioningType() const; + void setPartitioningType(boost::optional< ::Ifc4x3_add2::IfcWindowTypePartitioningEnum::Value > v); + boost::optional< std::string > UserDefinedPartitioningType() const; + void setUserDefinedPartitioningType(boost::optional< std::string > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcWindow (IfcEntityInstanceData* e); + IfcWindow (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< double > v9_OverallHeight, boost::optional< double > v10_OverallWidth, boost::optional< ::Ifc4x3_add2::IfcWindowTypeEnum::Value > v11_PredefinedType, boost::optional< ::Ifc4x3_add2::IfcWindowTypePartitioningEnum::Value > v12_PartitioningType, boost::optional< std::string > v13_UserDefinedPartitioningType); + typedef aggregate_of< IfcWindow > list; +}; +/// The distribution control element type IfcActuatorType defines commonly shared information for occurrences of actuators. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a actuator specification (i.e. the specific product information, that is common to all occurrences of that product type). Actuator types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcActuatorType are represented by instances of IfcActuator. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcDistributionControlElementType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_ActuatorTypeCommon +/// Pset_ActuatorTypeElectricActuator (ELECTRICACTUATOR) +/// Pset_ActuatorTypeHydraulicActuator (HYDRAULICACTUATOR) +/// Pset_ActuatorTypeLinearActuation +/// Pset_ActuatorTypePneumaticActuator (PNEUMATICACTUATOR) +/// Pset_ActuatorTypeRotationalActuation +/// +/// Material Use Definition +/// The material of the IfcActuatorType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcActuatorType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcActuator for standard port definitions. +class IFC_PARSE_API IfcActuatorType : public IfcDistributionControlElementType { +public: + /// Identifies the predefined types of actuator from which the type required may be set. + ::Ifc4x3_add2::IfcActuatorTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcActuatorTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcActuatorType (IfcEntityInstanceData* e); + IfcActuatorType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcActuatorTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcActuatorType > list; +}; +/// An air terminal is a terminating or origination point for the transfer of air between distribution system(s) and one or more spaces. It can also be used for the transfer of air between adjacent spaces. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcAirTerminal defines the occurrence of any air terminal; common information about air terminal types is handled by IfcAirTerminalType. +/// The IfcAirTerminalType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcAirTerminalType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcAirTerminalType has ports or aggregated elements, such objects are reflected at the IfcAirTerminal occurrence using the IfcRelDefinesByObject relationship. +/// Figure 210 illustrates air terminal type use. +/// Figure 210 — Air terminal type use +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcAirTerminalType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcAirTerminalType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcAirTerminal override the properties defined at IfcAirTerminalType. +/// Refer to the documentation at the supertype IfcFlowTerminal and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_AirTerminalOccurrence (PSET_OCCURRENCEDRIVEN) +/// Pset_AirTerminalPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_AirTerminalTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_AirTerminalBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcAirTerminal is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcAirTerminalType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcAirTerminal are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the air terminal occurrence is defined by IfcAirTerminalType, then the port occurrences must reflect those defined at the IfcAirTerminalType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcAirTerminal PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// DIFFUSER +/// +/// Air (AIRCONDITIONING, SINK): Supply air, typically connected from a duct segment or fitting. +/// +/// GRILLE +/// +/// Air (VENTILATION, SOURCE): Return air, typically connected to a duct segment or fitting. +/// +/// REGISTER +/// +/// Air (AIRCONDITIONING, SINK): Supply air, typically connected from a duct segment or fitting. +/// +/// Figure 211 illustrates air terminal port use. +/// Figure 211 — Air terminal port use +class IFC_PARSE_API IfcAirTerminal : public IfcFlowTerminal { +public: + boost::optional< ::Ifc4x3_add2::IfcAirTerminalTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcAirTerminalTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAirTerminal (IfcEntityInstanceData* e); + IfcAirTerminal (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcAirTerminalTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcAirTerminal > list; +}; +/// An air terminal box typically participates in an HVAC duct distribution system and is used to control or modulate the amount of air delivered to its downstream ductwork. An air terminal box type is often referred to as an "air flow regulator". +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcAirTerminalBox defines the occurrence of any air terminal box; common information about air terminal box types is handled by IfcAirTerminalBoxType. +/// The IfcAirTerminalBoxType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcAirTerminalBoxType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcAirTerminalBoxType has ports or aggregated elements, such objects are reflected at the IfcAirTerminalBox occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcAirTerminalBoxType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcAirTerminalBoxType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcAirTerminalBox override the properties defined at IfcAirTerminalBoxType. +/// Refer to the documentation at the supertype IfcFlowController and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_AirTerminalBoxPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_AirTerminalBoxTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_AirTerminalBoxBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcAirTerminalBox is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcAirTerminalBoxType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcAirTerminalBox are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the air terminal box occurrence is defined by IfcAirTerminalBoxType, then the port occurrences must reflect those defined at the IfcAirTerminalBoxType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcAirTerminalBox PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// Inlet (AIRCONDITIONING, SINK): Incoming air. +/// Outlet (AIRCONDITIONING, SOURCE): Outgoing regulated air. +class IFC_PARSE_API IfcAirTerminalBox : public IfcFlowController { +public: + boost::optional< ::Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAirTerminalBox (IfcEntityInstanceData* e); + IfcAirTerminalBox (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcAirTerminalBoxTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcAirTerminalBox > list; +}; +/// An air-to-air heat recovery device employs a counter-flow heat exchanger between inbound and outbound air flow. It is typically used to transfer heat from warmer air in one chamber to cooler air in the second chamber (i.e., typically used to recover heat from the conditioned air being exhausted and the outside air being supplied to a building), resulting in energy savings from reduced heating (or cooling) requirements. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcAirToAirHeatRecovery defines the occurrence of any air to air heat recovery; common information about air to air heat recovery types is handled by IfcAirToAirHeatRecoveryType. +/// The IfcAirToAirHeatRecoveryType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcAirToAirHeatRecoveryType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcAirToAirHeatRecoveryType has ports or aggregated elements, such objects are reflected at the IfcAirToAirHeatRecovery occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcAirToAirHeatRecoveryType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcAirToAirHeatRecoveryType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcAirToAirHeatRecovery override the properties defined at IfcAirToAirHeatRecoveryType. +/// Refer to the documentation at the supertype IfcEnergyConversionDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_AirToAirHeatRecoveryPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_AirToAirHeatRecoveryTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_AirToAirHeatRecoveryBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcAirToAirHeatRecovery is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcAirToAirHeatRecoveryType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// Media: The primary media material used for heat transfer. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcAirToAirHeatRecovery are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the air to air heat recovery occurrence is defined by IfcAirToAirHeatRecoveryType, then the port occurrences must reflect those defined at the IfcAirToAirHeatRecoveryType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcAirToAirHeatRecovery PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// AirInlet (AIRCONDITIONING, SINK): Cold air in. +/// AirOutlet (AIRCONDITIONING, SOURCE): Colder air out. +/// ExhaustInlet (VENTILATION, SINK): Hot return air in. +/// ExhaustOutlet (VENTILATION, SOURCE): Hotter return air out. +class IFC_PARSE_API IfcAirToAirHeatRecovery : public IfcEnergyConversionDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAirToAirHeatRecovery (IfcEntityInstanceData* e); + IfcAirToAirHeatRecovery (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcAirToAirHeatRecoveryTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcAirToAirHeatRecovery > list; +}; +/// The distribution control element type IfcAlarmType defines commonly shared information for occurrences of alarms. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a alarm specification (i.e. the specific product information, that is common to all occurrences of that product type). Alarm types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcAlarmType are represented by instances of IfcAlarm. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcDistributionControlElementType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_AlarmTypeCommon +/// +/// Material Use Definition +/// The material of the IfcAlarmType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcAlarmType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcAlarm for standard port definitions. +class IFC_PARSE_API IfcAlarmType : public IfcDistributionControlElementType { +public: + /// Identifies the predefined types of alarm from which the type required may be set. + ::Ifc4x3_add2::IfcAlarmTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcAlarmTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAlarmType (IfcEntityInstanceData* e); + IfcAlarmType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcAlarmTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcAlarmType > list; +}; + +class IFC_PARSE_API IfcAlignment : public IfcLinearPositioningElement { +public: + boost::optional< ::Ifc4x3_add2::IfcAlignmentTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcAlignmentTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAlignment (IfcEntityInstanceData* e); + IfcAlignment (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< ::Ifc4x3_add2::IfcAlignmentTypeEnum::Value > v8_PredefinedType); + typedef aggregate_of< IfcAlignment > list; +}; +/// An audio-visual appliance is a device that displays, captures, transmits, or receives audio or video. +/// Audio-visual appliances may be fixed in place or may be able to be moved from one space to another. They may require an electrical supply that may be supplied either by an electrical circuit or provided from a local battery source. Audio-visual appliances may be connected to data circuits including specialist circuits for audio visual purposes only. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcAudioVisualAppliance defines the occurrence of any audio visual appliance; common information about audio visual appliance types is handled by IfcAudioVisualApplianceType. +/// The IfcAudioVisualApplianceType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcAudioVisualApplianceType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcAudioVisualApplianceType has ports or aggregated elements, such objects are reflected at the IfcAudioVisualAppliance occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcAudioVisualApplianceType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcAudioVisualApplianceType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcAudioVisualAppliance override the properties defined at IfcAudioVisualApplianceType. +/// Refer to the documentation at the supertype IfcFlowTerminal and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_AudioVisualAppliancePHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_AudioVisualApplianceTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// AMPLIFIER +/// +/// Pset_AudioVisualApplianceTypeAmplifier (PSET_TYPEDRIVENOVERRIDE) +/// +/// CAMERA +/// +/// Pset_AudioVisualApplianceTypeCamera (PSET_TYPEDRIVENOVERRIDE) +/// +/// DISPLAY +/// +/// Pset_AudioVisualApplianceTypeDisplay (PSET_TYPEDRIVENOVERRIDE) +/// +/// PLAYER +/// +/// Pset_AudioVisualApplianceTypePlayer (PSET_TYPEDRIVENOVERRIDE) +/// +/// PROJECTOR +/// +/// Pset_AudioVisualApplianceTypeProjector (PSET_TYPEDRIVENOVERRIDE) +/// +/// RECEIVER +/// +/// Pset_AudioVisualApplianceTypeReceiver (PSET_TYPEDRIVENOVERRIDE) +/// +/// SPEAKER +/// +/// Pset_AudioVisualApplianceTypeSpeaker (PSET_TYPEDRIVENOVERRIDE) +/// +/// TUNER +/// +/// Pset_AudioVisualApplianceTypeTuner (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_AudioVisualApplianceBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcAudioVisualAppliance is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcAudioVisualApplianceType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Casing: Material from which the casing is constructed. +/// +/// Composition Use Definition +/// The IfcAudioVisualAppliance may be aggregated into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcAudioVisualAppliance and RelatedObjects contains one or more components. Aggregation use is defined for the following predefined types: +/// +/// May contain IfcAudioVisualAppliance components. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcAudioVisualAppliance are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the audio visual appliance occurrence is defined by IfcAudioVisualApplianceType, then the port occurrences must reflect those defined at the IfcAudioVisualApplianceType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcAudioVisualAppliance PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// AMPLIFIER +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// Input (AUDIOVISUAL, SINK): Input audio. +/// Speakers (ELECTROACCOUSTIC, SOURCE): Audio speaker(s), which may be aggregated for separate speaker channels. +/// +/// CAMERA +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// Control (CONTROL, SINK): Receives control signal. +/// Network (DATA, SOURCE): Network access. +/// Output (AUDIOVISUAL, SOURCE): Captured video. +/// +/// DISPLAY +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// Control (CONTROL, SINK): Receives control signal. +/// Input#1 (AUDIOVISUAL, SINK): Input audio/video source. +/// Input#2 (AUDIOVISUAL, SINK): Input audio/video source. +/// Input#3 (AUDIOVISUAL, SINK): Input audio/video source. +/// Input#4 (AUDIOVISUAL, SINK): Input audio/video source. +/// Input#5 (AUDIOVISUAL, SINK): Input audio/video source. +/// Input#6 (AUDIOVISUAL, SINK): Input audio/video source. +/// Input#7 (AUDIOVISUAL, SINK): Input audio/video source. +/// Input#8 (AUDIOVISUAL, SINK): Input audio/video source. +/// +/// MICROPHONE +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// Output (AUDIOVISUAL, SOURCE): Captured audio. +/// +/// PLAYER +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// Control (CONTROL, SINK): Receives control signal. +/// Output (AUDIOVISUAL, SOURCE): Rendered media content. +/// +/// PROJECTOR +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// Control (CONTROL, SINK): Receives control signal. +/// Input (AUDIOVISUAL, SOURCE): Input audio/video source. +/// +/// RECEIVER +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// Control (CONTROL, SINK): Receives control signal. +/// Network (DATA, SOURCE): Network access. +/// Input#1 (AUDIOVISUAL, SINK): Input audio/video source. +/// Input#2 (AUDIOVISUAL, SINK): Input audio/video source. +/// Input#3 (AUDIOVISUAL, SINK): Input audio/video source. +/// Input#4 (AUDIOVISUAL, SINK): Input audio/video source. +/// Input#5 (AUDIOVISUAL, SINK): Input audio/video source. +/// Input#6 (AUDIOVISUAL, SINK): Input audio/video source. +/// Input#7 (AUDIOVISUAL, SINK): Input audio/video source. +/// Input#8 (AUDIOVISUAL, SINK): Input audio/video source. +/// Output#1 (AUDIOVISUAL, SOURCE): Output audio/video zone. +/// Output#2 (AUDIOVISUAL, SOURCE): Output audio/video zone. +/// Speakers#1 (ELECTROACCOUSTIC, SOURCE): Audio speaker(s), which may be aggregated for separate speaker channels. +/// Speakers#2 (ELECTROACCOUSTIC, SOURCE): Audio speaker(s), which may be aggregated for separate speaker channels. +/// +/// SPEAKER +/// +/// Input (ELECTROACCOUSTIC, SINK): Amplified audio input. +/// +/// SWITCHER +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// Control (CONTROL, SINK): Receives control signal. +/// Network (DATA, SOURCE): Network access. +/// Input#1 (AUDIOVISUAL, SINK): Input audio/video source. +/// Input#2 (AUDIOVISUAL, SINK): Input audio/video source. +/// Input#3 (AUDIOVISUAL, SINK): Input audio/video source. +/// Input#4 (AUDIOVISUAL, SINK): Input audio/video source. +/// Input#5 (AUDIOVISUAL, SINK): Input audio/video source. +/// Input#6 (AUDIOVISUAL, SINK): Input audio/video source. +/// Input#7 (AUDIOVISUAL, SINK): Input audio/video source. +/// Input#8 (AUDIOVISUAL, SINK): Input audio/video source. +/// Output#1 (AUDIOVISUAL, SOURCE): Output audio/video zone. +/// Output#2 (AUDIOVISUAL, SOURCE): Output audio/video zone. +/// Output#3 (AUDIOVISUAL, SOURCE): Output audio/video zone. +/// Output#4 (AUDIOVISUAL, SOURCE): Output audio/video zone. +/// Output#5 (AUDIOVISUAL, SOURCE): Output audio/video zone. +/// Output#6 (AUDIOVISUAL, SOURCE): Output audio/video zone. +/// Output#7 (AUDIOVISUAL, SOURCE): Output audio/video zone. +/// Output#8 (AUDIOVISUAL, SOURCE): Output audio/video zone. +/// +/// TELEPHONE +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// Phone (TELEPHONE, SINK): Telecommunications network. +/// +/// TUNER +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// Control (CONTROL, SINK): Receives control signal. +/// Input (TV, SINK): Receives modulated data feed such as satellite, cable, or over-the-air. +/// Output (AUDIOVISUAL, SOURCE): Rendered media content. +class IFC_PARSE_API IfcAudioVisualAppliance : public IfcFlowTerminal { +public: + boost::optional< ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAudioVisualAppliance (IfcEntityInstanceData* e); + IfcAudioVisualAppliance (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcAudioVisualApplianceTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcAudioVisualAppliance > list; +}; +/// Definition from ISO 6707-1:1989: Structural member designed to carry loads between or beyond points of support, usually narrow in relation to its length and horizontal or nearly so. +/// +/// An IfcBeam is a horizontal, or nearly horizontal, structural member that is capable of withstanding load primarily by resisting bending. It represents such a member from an architectural point of view. It is not required to be load bearing. +/// +/// NOTE  The representation of a beam in a structural analysis model is provided by +/// IfcStructuralCurveMember being part of an IfcStructuralAnalysisModel. +/// +/// NOTE  For any longitudial structural member, not constrained to be predominately horizontal nor vertical, or where this semantic information is irrelevant, the entity IfcMember should be used. +/// +/// The IFC specification provides two entities for beam occurrences: +/// +/// IfcBeamStandardCase used for all occurrences of beams, that have a profile defined that is swept along a directrix. The profile might be changed uniformly by a taper definition along the directrix. The profile parameter and its cardinal point of insertion can be fully described by the IfcMaterialProfileSetUsage. These beams are always represented geometricly by an 'Axis' and a 'SweptSolid' or 'AdvancedSweptSolid' shape representation (or by a 'Clipping' geometry based on the swept solid), if a 3D geometric representation is assigned. In addition they have to have a corresponding IfcMaterialProfileSetUsage assigned. +/// NOTE  View definitions and implementer agreements may further constrain the applicable geometry types, for example, by excluding tapering from an IfcBeamStandardCase implementation. +/// +/// IfcBeam used for all other occurrences of beams, particularly for beams with changing profile sizes along the extrusion, or beams defined by non-linear extrusion, or beams having only 'Brep', or 'SurfaceModel' geometry. +/// +/// HISTORY New entity in IFC Release 1.0 +/// +/// Type Use Definition +/// IfcBeam defines the occuurence of any beam, common +/// information about beam types (or styles) is handled by +/// IfcBeamType. The IfcBeamType (if present) may +/// establish the common type name, usage (or predefined) type, +/// common material layer set, common set of properties and common +/// shape representations (using IfcRepresentationMap). The +/// IfcBeamType is attached using the +/// IfcRelDefinedByType.RelatingType objectified relationship +/// and is accessible by the inverse IsTypedBy attribute. +/// If no IfcBeamType is attached (i.e. if only occurrence +/// information is given) the PredefinedType should be provided. +/// If set to .USERDEFINED. a user defined value can be provided by the +/// ObjectType attribute. +/// Material Use Definition +/// The material of the IfcBeam is defined by the +/// IfcMaterialProfileSet or as fallback by IfcMaterial +/// and attached by the +/// IfcRelAssociatesMaterial.RelatingMaterial. It is +/// accessible by the inverse HasAssociations relationship. +/// Note It is illegal to assign an +/// IfcMaterialProfileSetUsage to an IfcBeam. Only the +/// subtype IfcBeamStandardCase supports this +/// concept. +/// Material information can also be given at the +/// IfcBeamType, defining the common attribute data for all +/// occurrences of the same type. It is then accessible by the inverse +/// IsTypedBy relationship pointing +/// to IfcBeamType.HasAssociations and via +/// IfcRelAssociatesMaterial.RelatingMaterial to +/// IfcMaterialProfileSet or IfcMaterial. If both are +/// given, then the material directly assigned to IfcBeam +/// overrides the material assigned to IfcBeamType. +/// Property Set Use Definition +/// The property sets relating to the IfcBeam are defined by +/// the IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible by +/// the inverse IsDefinedBy relationship. The following property +/// set definitions specific to the IfcBeam are part of this IFC +/// release: +/// +/// Pset_BeamCommon: common property set for all +/// beam occurrences +/// +/// Property sets can also be given at the IfcBeamType, +/// defining the common property data for all occurrences of the same +/// type. It is then accessible by the inverse IsTypedBy relationship pointing to +/// IfcBeamType.HasPropertySets. If both are given, then the +/// properties directly assigned to IfcBeam overrides the +/// properties assigned to IfcBeamType. +/// Quantity Use Definition +/// The quantities relating to the IfcBeam are defined by the +/// IfcElementQuantity and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible by +/// the inverse IsDefinedBy relationship. The following base +/// quantities are defined and should be exchanged with the +/// IfcElementQuantity.Name = 'BaseQuantities'. Other quantities +/// can be defined being subjected to local standard of measurement +/// with another string value assigned to MethodOfMeasurement. +/// Quanties shall be never assigned to the IfcBeamType. +/// +/// Qto_BeamBaseQuantities: base quantities for all +/// beam occurrences. +/// +/// Containment Use Definition +/// The IfcBeam, as any subtype of IfcBuildingElement, +/// may participate in two different containment relationships. The +/// first (and in most implementation scenarios mandatory) relationship +/// is the hierachical spatial containment, the second (optional) +/// relationship is the aggregation within an element assembly. +/// +/// The IfcBeam is places within the project spatial +/// hierarchy using the objectified relationship +/// IfcRelContainedInSpatialStructure, refering to it by its +/// inverse attribute SELF\IfcElement.ContainedInStructure. +/// Subtypes of IfcSpatialStructureElement are valid spatial +/// containers, with IfcBuildingStorey being the default +/// container. +/// The IfcBeam may be aggregated into an element assembly +/// using the objectified relationship IfcRelAggregates, +/// refering to it by its inverse attribute +/// SELF\IfcObjectDefinition.Decomposes. Any subtype of +/// IfcElement can be an element assembly, with +/// IfcElementAssembly as a special focus subtype. In this case +/// it should not be additionally contained in the project spatial +/// hierarchy, i.e. SELF\IfcElement.ContainedInStructure should +/// be NIL. +/// +/// Geometry Use Definition +/// The geometric representation of IfcBeam is given by the +/// IfcProductDefinitionShape, allowing multiple geometric +/// representations. Included are: +/// Local Placement +/// The local placement for IfcBeam is defined in its +/// supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate system +/// that is referenced by all geometric representations. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if given) to the local +/// placement of the same IfcSpatialStructureElement, which is +/// used in the ContainedInStructure inverse attribute, or to a +/// spatial structure element at a higher level, referenced by that. +/// +/// Exception: If the IfcBeam is part of an assembly, the +/// PlacementRelTo relationship of IfcLocalPlacement +/// shall point to the local placement of the container element, e.g. +/// IfcElementAssembly, +/// +/// If the relative placement is not used, the absolute placement +/// is defined within the world coordinate system. +/// +/// Geometric Representation +/// Currently, the 'Axis', 'Body', and +/// 'Box' representations are supported. The 'Box' representation +/// includes the representation type 'BoundingBox' and is explained at +/// IfcBuildingElement. +/// Axis Representation +/// The axis geometric representation of IfcBeam is defined +/// using the 'Axis' representation. +/// +/// RepresentationIdentifier : 'Axis' +/// RepresentationType : 'Curve2D', 'Curve3D' +/// +/// The 'Axis' can be used to represent the system +/// axis and length of a beam that may extent the body +/// length. +/// Body Representation +/// The body representation of IfcBeam can be represented +/// using the representation types 'SweptSolid', 'Clipping', +/// 'AdvancedSweptSolid', 'MappedRepresentation', 'SurfaceModel', and +/// 'Brep'. The representation types 'SurfaceModel' and 'Brep' are +/// explained at IfcBuildingElement. +/// SweptSolid Representation Type +/// The following attribute values for the +/// IfcShapeRepresentation holding this geometric representation +/// shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'SweptSolid' +/// +/// The following additional constraints apply to the 'SweptSolid' +/// representation type: +/// +/// Solid: IfcExtrudedAreaSolid, +/// IfcRevolvedAreaSolid shall be supported +/// Profile: all subtypes of IfcProfileDef (with +/// exception of IfcArbitraryOpenProfileDef) +/// Extrusion:  All extrusion directions shall be +/// supported. +/// +/// Figure 71 illustrates the 'SweptSolid' geometric representation. There are no restrictions or conventions on how to use the local placement (black), solid of extrusion placement (red) and profile placement (green). +/// +/// Figure 71 — Beam swept solid +/// +/// Figure 72 illustrates the use of non-perpendicular extrusion to create the IfcExtrudedAreaSolid. +/// +/// Figure 72 — Beam non-perpendicular extrusion +/// +/// Clipping Representation Type +/// The following attribute values for the +/// IfcShapeRepresentation holding this geometric representation +/// shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'Clipping' +/// +/// The following constraints apply to the advanced +/// representation: +/// +/// Solid: see 'SweptSolid' geometric representation +/// Profile: see 'SweptSolid' geometric representation +/// Extrusion: see 'SweptSolid' geometric +/// representation +/// Boolean result: The IfcBooleanClippingResult +/// shall be supported, allowing for Boolean differences between the +/// swept solid (here IfcExtrudedAreaSolid) and one or several +/// IfcHalfSpaceSolid (or its subtypes). +/// +/// Figure 73 illustrates use of IfcBooleanClippingResult between an IfcExtrudedAreaSolid and an IfcHalfSpaceSolid to create a clipped body. +/// +/// Figure 73 — Beam clipping +/// +/// AdvancedSweptSolid Representation Type +/// The following attribute values for the +/// IfcShapeRepresentation holding this geometric representation +/// shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'AdvancedSweptSolid' +/// +/// The following additional constraints apply to the +/// 'AdvancedSweptSolid' representation type: +/// +/// Solid: IfcSurfaceCurveSweptAreaSolid, +/// IfcFixedReferenceSweptAreaSolid, +/// IfcExtrudedAreaSolidTapered, +/// IfcRevolvedAreaSolidTapered shall be supported. +/// NOTE View definitions and implementer agreement +/// can further constrain the allowed swept solid +/// types. +/// +/// Profile: see 'SweptSolid' geometric representation +/// Extrusion: not applicable +/// +/// MappedRepresentation Representation Type +/// The 'MappedRepresentation' representation is supported as it +/// allows for reusing the geometry definition of the beam type at all +/// occurrences of the same type. The following attribute values for +/// the IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier : 'Body' +/// RepresentationType : 'MappedRepresentation' +/// +/// The same constraints, as given for the 'SweptSolid', 'Clipping', +/// 'AdvancedSweptSolid', 'SurfaceModel', and 'Brep' geometric +/// representation, shall apply to the MappedRepresentation of +/// the IfcRepresentationMap. +class IFC_PARSE_API IfcBeam : public IfcBuiltElement { +public: + /// Predefined generic type for a beam that is specified in an enumeration. There may be a property set given specificly for the predefined types. + /// NOTE The PredefinedType shall only be used, if no type object IfcBeamType is assigned, providing its own IfcBeamType.PredefinedType. + /// + /// IFC2x4 CHANGE The attribute has been added at the end of the entity definition. + boost::optional< ::Ifc4x3_add2::IfcBeamTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcBeamTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBeam (IfcEntityInstanceData* e); + IfcBeam (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcBeamTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcBeam > list; +}; + +class IFC_PARSE_API IfcBearing : public IfcBuiltElement { +public: + boost::optional< ::Ifc4x3_add2::IfcBearingTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcBearingTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBearing (IfcEntityInstanceData* e); + IfcBearing (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcBearingTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcBearing > list; +}; +/// A boiler is a closed, pressure-rated vessel in which water or other fluid is heated using an energy source such as natural gas, heating oil, or electricity. The fluid in the vessel is then circulated out of the boiler for use in various processes or heating applications. +/// IfcBoiler is a vessel solely used for heating of water or other fluids. Storage vessels, such as for drinking water storage are considered as tanks and use the IfcTank entity. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcBoiler defines the occurrence of any boiler; common information about boiler types is handled by IfcBoilerType. +/// The IfcBoilerType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcBoilerType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcBoilerType has ports or aggregated elements, such objects are reflected at the IfcBoiler occurrence using the IfcRelDefinesByObject relationship. +/// Figure 212 illustrates boiler type use. +/// Figure 212 — Boiler type use +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcBoilerType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcBoilerType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcBoiler override the properties defined at IfcBoilerType. +/// Refer to the documentation at the supertype IfcEnergyConversionDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_BoilerPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_BoilerTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// STEAM +/// +/// Pset_BoilerTypeSteam (PSET_TYPEDRIVENOVERRIDE) +/// +/// WATER +/// +/// Pset_BoilerTypeWater (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_BoilerBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcBoiler is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcBoilerType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcBoiler are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the boiler occurrence is defined by IfcBoilerType, then the port occurrences must reflect those defined at the IfcBoilerType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcBoiler PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// STEAM +/// +/// Gas (GAS, SINK): Gas inlet for burner. +/// Exhaust (EXHAUST, SOURCE): Exhaust sent to chimney. +/// Condenser (CONDENSERWATER, SOURCE): Water feed such as from condenser. +/// Heating (HEATING, SOURCE): Steam sent to heating coils and space heaters. +/// +/// WATER +/// +/// Gas (GAS, SINK): Gas inlet for burner. +/// Exhaust (EXHAUST, SOURCE): Exhaust sent to chimney. +/// ColdWater (DOMESTICCOLDWATER, SINK): Cold water to be heated. +/// HotWater (DOMESTICHOTWATER, SOURCE): Hot water heated. +/// +/// Figure 213 illustrates boiler port use. +/// Figure 213 — Boiler port use +class IFC_PARSE_API IfcBoiler : public IfcEnergyConversionDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcBoilerTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcBoilerTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBoiler (IfcEntityInstanceData* e); + IfcBoiler (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcBoilerTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcBoiler > list; +}; + +class IFC_PARSE_API IfcBorehole : public IfcGeotechnicalAssembly { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBorehole (IfcEntityInstanceData* e); + IfcBorehole (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcBorehole > list; +}; +/// Definition from IAI: The IfcBuildingElementProxy +/// is a proxy definition that provides the same functionality as an +/// IfcBuildingElement, but without having a predefined meaning +/// of the special type of building element, it represents. Proxies can +/// also be used as spatial place holders or provisions, that maybe +/// later replaced by special types of elements. +/// One use of the proxy object is a provision for voids, i.e. where +/// a particular volume of space is requested by some engineering +/// function that might later be accepted or rejected and if accepted +/// potentially transformed into a void within a building element, like +/// a wall opening, or a slab opening. The provision for voids is +/// exchanged as an IfcBuildingElementProxy with the +/// PredefinedType = ProvisionForVoid. +/// Other usages of IfcBuildingElementProxy include: +/// +/// The IfcBuildingElementProxy can be used to exchange +/// special types of building elements for which the current IFC +/// Release does not yet provide a semantic definition. +/// The IfcBuildingElementProxy can also be used to +/// represent building elements for which the participating +/// applications can not provide additional semantic +/// classification. +/// +/// HISTORY  New entity +/// in IFC Release 2x. +/// IFC2x4 CHANGE  The attribute +/// CompositionType has been replaced by PredefinedType, +/// being a superset of the enumerators. +/// Type Use Definition +/// The IfcBuildingElementProxy defines the occuurence of any +/// building element, common information about the types (or styles) is +/// handled by IfcBuildingElementProxyType. +/// The IfcBuildingElementProxyType (if present) may +/// establish the common type name, usage (or predefined) type, common +/// material, common set of properties and common shape representations +/// (using IfcRepresentationMap). The +/// IfcBuildingElementProxyType is attached using the +/// IfcRelDefinedByType.RelatingType objectified relationship +/// and is accessible by the inverse IsTypedBy attribute. +/// +/// NOTE The IfcBuildingElementProxyType can be used +/// to share common information among many occurrences of the same +/// proxy without establishing a particular semantic meaning of the +/// type. +/// +/// If no IfcBuildingElementProxyType is attached (i.e. if +/// only occurrence information is given) the PredefinedType +/// should be provided. If set to .USERDEFINED. a user defined value +/// can be provided by the ObjectType attribute. +/// Material Use Definition +/// The material of the IfcBuildingElementProxy is defined by +/// IfcMaterial and attached by the +/// IfcRelAssociatesMaterial.RelatingMaterial. It is +/// accessible by the inverse HasAssociations relationship. +/// Note It is illegal to assign an +/// IfcMaterial to an IfcBuildingElementProxy with the +/// PredefinedType = ProvisionForVoid. +/// Material information can also be given at the +/// IfcBuildingElementProxyType, defining the common attribute +/// data for all occurrences of the same type. It is then +/// accessible by the inverse IsTypedBy relationship pointing to +/// IfcBuildingElementProxyType.HasAssociations and via +/// IfcRelAssociatesMaterial.RelatingMaterial to +/// IfcMaterial. If both are given, then the material directly +/// assigned to IfcBuildingElementProxy overrides the material +/// assigned to IfcBuildingElementProxyType. +/// Property Set Use Definition: +/// The property sets relating to the IfcBuildingElementProxy +/// are defined by the IfcPropertySet and attached by the +/// IfcRelDefinesByProperties relationship. It is accessible by +/// the inverse IsDefinedBy relationship. The following property +/// set definitions specific to the IfcBuildingElementProxy are +/// part of this IFC release: +/// +/// Pset_BuildingElementProxyCommon: common +/// property set for all occurrences of building element proxies. +/// Pset_BuildingElementProxyProvisionForVoid: +/// specific property set for all occurrences of building element proxy +/// with the PredefinedType: PROVISIONFORVOID. +/// +/// Property sets can also be given at the +/// IfcBuildingElementProxyType, defining the common property +/// data for all occurrences of the same type. It is then +/// accessible by the inverse IsTypedBy relationship pointing to +/// IfcBuildingElementProxyType.HasPropertySets. If both are +/// given, then the properties directly assigned to +/// IfcBuildingElementProxy overrides the properties assigned to +/// IfcBuildingElementProxyType. +/// Containment Use Definition +/// The IfcBuildingElementProxy, as any subtype of +/// IfcBuildingElement, may participate in two different +/// containment relationships. The first (and in most implementation +/// scenarios mandatory) relationship is the hierachical spatial +/// containment, the second (optional) relationship is the aggregation +/// within an element assembly. +/// +/// The IfcBuildingElementProxy is places within the project +/// spatial hierarchy using the objectified relationship +/// IfcRelContainedInSpatialStructure, refering to it by its +/// inverse attribute SELF\IfcElement.ContainedInStructure. +/// Subtypes of IfcSpatialStructureElement are valid +/// spatial containers, with IfcBuildingStorey being the default +/// container. +/// The IfcBuildingElementProxy may be aggregated into an +/// element assembly using the objectified relationship +/// IfcRelAggregates, refering to it by its inverse attribute +/// SELF\IfcObjectDefinition.Decomposes. Any subtype of +/// IfcElement can be an element assembly, with +/// IfcElementAssembly as a special focus subtype. In this case +/// it should not be additionally contained in the project spatial +/// hierarchy, i.e. SELF\IfcElement.ContainedInStructure +/// should be NIL. +/// +/// Geometry Use Definition +/// The geometric representation of IfcBuildingElementProxy +/// is given by the IfcProductDefinitionShape, allowing multiple +/// geometric representations. Included are: +/// Local Placement +/// The local placement for any IfcBuildingElementProxy is +/// defined in its supertype IfcProduct. It is defined by the +/// IfcLocalPlacement, which defines the local coordinate system +/// that is referenced by all geometric representations. The local +/// placement can be given relativly. +/// +/// The PlacementRelTo relationship of +/// IfcLocalPlacement shall point (if given) to the local +/// placement of the same IfcSpatialStructureElement, which is +/// used in the ContainedInStructure inverse attribute, or to a +/// spatial structure element at a higher level, referenced by +/// that. +/// If the relative placement is not used, the absolute placement +/// is defined within the world coordinate system. +/// +/// Geometric Representation +/// Currently, the 'FootPrint', 'Body', and 'Box' representations +/// are supported. The 'Box' representation includes the representation +/// type 'BoundingBox' and is explained at +/// IfcBuildingElement. +/// FootPrint Representation +/// Any building element proxy may be represented by a geometric +/// curve set, given by a collection of 2D points and curves. The foot +/// pring geometric representation of IfcBuildingElementProxy is +/// defined using the 'FootPrint' representation. +/// +/// RepresentationIdentifier: 'FootPrint' +/// RepresentationType: 'GeometricCurveSet', +/// 'Annotation2D' +/// +/// Body Representation +/// The body representation of IfcBuildingElementProxy can be +/// represented using the representation types 'GeometricSet', +/// 'SweptSolid', 'CSG' 'SurfaceModel', 'Brep', and +/// 'MappedRepresentation'. The representation types 'SurfaceModel', +/// 'Brep', and 'MappedRepresentation' are explained at +/// IfcBuildingElement. +/// GeometricSet Representation Type +/// Any building element proxy may be represented by a geometric +/// set, given by a collection of 2D and 3D points, curves, and +/// surfaces. It represents the body of the proxy object, when no +/// topological structure is available. The following attribute values +/// for the IfcShapeRepresentation holding this geometric +/// representation shall be used: +/// +/// RepresentationIdentifier: 'Body' +/// RepresentationType: 'GeometricSet' +/// +/// SweptSolid Representation Type +/// Any building element proxy may be represented by swept solid +/// geometry (either by extrusion or by revolution). The following +/// attribute values for the IfcShapeRepresentation holding this +/// geometric representation shall be used: +/// +/// RepresentationIdentifier: 'Body' +/// RepresentationType: 'SweptSolid' +/// +/// No further restrictions (e.g., for the profile or extrusion +/// direction) are defined at this level. A single or multiple swept +/// area solid(s) can be the Items of the +/// IfcShapeRepresentation. +/// CSG Representation Type +/// Any building element proxy may be represented by a CSG primitive +/// or CSG tree. The following attribute values for the +/// IfcShapeRepresentation holding this geometric representation +/// shall be used: +/// +/// RepresentationIdentifier: 'Body' +/// RepresentationType: 'CSG' +/// +/// No further restrictions (e.g., for the depths of the CSG tree) +/// are defined at this level. +class IFC_PARSE_API IfcBuildingElementProxy : public IfcBuiltElement { +public: + boost::optional< ::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBuildingElementProxy (IfcEntityInstanceData* e); + IfcBuildingElementProxy (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcBuildingElementProxyTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcBuildingElementProxy > list; +}; +/// A burner is a device that converts fuel into heat through combustion. It includes gas, oil, and wood burners. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcBurner defines the occurrence of any burner; common information about burner types is handled by IfcBurnerType. +/// The IfcBurnerType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcBurnerType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcBurnerType has ports or aggregated elements, such objects are reflected at the IfcBurner occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcBurnerType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcBurnerType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcBurner override the properties defined at IfcBurnerType. +/// Refer to the documentation at the supertype IfcEnergyConversionDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_BurnerTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_BurnerBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcBurner is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcBurnerType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// Fuel: Material designed to be burned. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcBurner are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the burner occurrence is defined by IfcBurnerType, then the port occurrences must reflect those defined at the IfcBurnerType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcBurner PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// Gas (GAS, SINK): Gas inlet for burner. +class IFC_PARSE_API IfcBurner : public IfcEnergyConversionDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcBurnerTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcBurnerTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcBurner (IfcEntityInstanceData* e); + IfcBurner (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcBurnerTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcBurner > list; +}; +/// A cable carrier fitting is a fitting that is placed at junction or transition in a cable carrier system. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcCableCarrierFitting defines the occurrence of any cable carrier fitting; common information about cable carrier fitting types is handled by IfcCableCarrierFittingType. +/// The IfcCableCarrierFittingType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcCableCarrierFittingType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcCableCarrierFittingType has ports or aggregated elements, such objects are reflected at the IfcCableCarrierFitting occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcCableCarrierFittingType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcCableCarrierFittingType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcCableCarrierFitting override the properties defined at IfcCableCarrierFittingType. +/// Refer to the documentation at the supertype IfcFlowFitting and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_CableCarrierFittingTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_CableCarrierFittingBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcCableCarrierFitting is defined by IfcMaterialProfileSetUsage or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcCableCarrierFittingType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialProfileSet.MaterialProfiles[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcCableCarrierFitting are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the cable carrier fitting occurrence is defined by IfcCableCarrierFittingType, then the port occurrences must reflect those defined at the IfcCableCarrierFittingType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcCableCarrierFitting PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// BEND +/// +/// Head (NOTDEFINED, SINK): Head connection. +/// Tail (NOTDEFINED, SOURCE): Tail connection. +/// +/// CROSS +/// +/// Head (NOTDEFINED, SINK): Head connection. +/// Tail (NOTDEFINED, SOURCE): Tail connection. +/// Left (NOTDEFINED, SOURCE): Left connection. +/// Right (NOTDEFINED, SOURCE): Right connection. +/// +/// REDUCER +/// +/// Head (NOTDEFINED, SINK): Head connection. +/// Tail (NOTDEFINED, SOURCE): Tail connection. +/// +/// TEE +/// +/// Head (NOTDEFINED, SINK): Head connection. +/// Left (NOTDEFINED, SOURCE): Left connection. +/// Right (NOTDEFINED, SOURCE): Right connection. +class IFC_PARSE_API IfcCableCarrierFitting : public IfcFlowFitting { +public: + /// Identifies the predefined types of cable carrier fitting from which the type required may be set. + boost::optional< ::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCableCarrierFitting (IfcEntityInstanceData* e); + IfcCableCarrierFitting (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCableCarrierFittingTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcCableCarrierFitting > list; +}; +/// A cable carrier segment is a flow segment that is specifically used to carry and support cabling. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcCableCarrierSegment defines the occurrence of any cable carrier segment; common information about cable carrier segment types is handled by IfcCableCarrierSegmentType. +/// The IfcCableCarrierSegmentType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcCableCarrierSegmentType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcCableCarrierSegmentType has ports or aggregated elements, such objects are reflected at the IfcCableCarrierSegment occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcCableCarrierSegmentType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcCableCarrierSegmentType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcCableCarrierSegment override the properties defined at IfcCableCarrierSegmentType. +/// Refer to the documentation at the supertype IfcFlowSegment and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_CableCarrierSegmentTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// CABLELADDERSEGMENT +/// +/// Pset_CableCarrierSegmentTypeCableLadderSegment (PSET_TYPEDRIVENOVERRIDE) +/// +/// CABLETRAYSEGMENT +/// +/// Pset_CableCarrierSegmentTypeCableTraySegment (PSET_TYPEDRIVENOVERRIDE) +/// +/// CABLETRUNKINGSEGMENT +/// +/// Pset_CableCarrierSegmentTypeCableTrunkingSegment (PSET_TYPEDRIVENOVERRIDE) +/// +/// CONDUITSEGMENT +/// +/// Pset_CableCarrierSegmentTypeConduitSegment (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_CableCarrierSegmentBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcCableCarrierSegment is defined by IfcMaterialProfileSetUsage or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcCableCarrierSegmentType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialProfileSet.MaterialProfiles[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcCableCarrierSegment are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the cable carrier segment occurrence is defined by IfcCableCarrierSegmentType, then the port occurrences must reflect those defined at the IfcCableCarrierSegmentType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcCableCarrierSegment PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// Head (NOTDEFINED, SINK): Head connection. +/// Tail (NOTDEFINED, SOURCE): Tail connection. +class IFC_PARSE_API IfcCableCarrierSegment : public IfcFlowSegment { +public: + /// Identifies the predefined types of cable carrier segment from which the type required may be set. + boost::optional< ::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCableCarrierSegment (IfcEntityInstanceData* e); + IfcCableCarrierSegment (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCableCarrierSegmentTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcCableCarrierSegment > list; +}; +/// A cable fitting is a fitting that is placed at a junction, transition or termination in a cable system. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcCableFitting defines the occurrence of any cable fitting; common information about cable fitting types is handled by IfcCableFittingType. +/// The IfcCableFittingType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcCableFittingType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcCableFittingType has ports or aggregated elements, such objects are reflected at the IfcCableFitting occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcCableFittingType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcCableFittingType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcCableFitting override the properties defined at IfcCableFittingType. +/// Refer to the documentation at the supertype IfcFlowFitting and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_CableFittingTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_CableFittingBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcCableFitting is defined by IfcMaterialProfileSetUsage or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcCableFittingType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialProfileSet.MaterialProfiles[n].Name shall be used: +/// +/// Casing: Material from which the casing is constructed. +/// Conductor: Material from which the conductors are constructed, such as Aluminium or Copper. +/// +/// Connection Use Definition +/// The IfcCableFitting may be connected to other objects as follows using the indicated relationship: +/// +/// ENTRY +/// +/// IfcPipeSegment (IfcRelConnectsElements): For equipotential bonding, may represent a clamp that is attached from a pipe or other conducting element of an earthing system. +/// +/// EXIT +/// +/// IfcPipeSegment (IfcRelConnectsElements): For equipotential bonding, may represent a clamp that is attached to a pipe or other conducting element of an earthing system. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcCableFitting are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the cable fitting occurrence is defined by IfcCableFittingType, then the port occurrences must reflect those defined at the IfcCableFittingType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcCableFitting PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// CONNECTOR +/// +/// Input (NOTDEFINED, SINK): The input of the connector. +/// Output (NOTDEFINED, SOURCE): The output of the connector. +/// +/// ENTRY +/// +/// Output (NOTDEFINED, SOURCE): The output of the connector. +/// +/// EXIT +/// +/// Input (NOTDEFINED, SOURCE): The input of the connector. +/// +/// JUNCTION +/// +/// Head (NOTDEFINED, SOURCE): The input of the connector. +/// Output#1 (NOTDEFINED, SINK): An output of the connector. +/// Output#2 (NOTDEFINED, SINK): An output of the connector. +/// +/// TRANSITION +/// +/// Input (NOTDEFINED, SINK): The input of the connector. +/// Output (NOTDEFINED, SOURCE): The output of the connector. +class IFC_PARSE_API IfcCableFitting : public IfcFlowFitting { +public: + /// Identifies the predefined types of cable fitting from which the type required may be set. + boost::optional< ::Ifc4x3_add2::IfcCableFittingTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCableFittingTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCableFitting (IfcEntityInstanceData* e); + IfcCableFitting (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCableFittingTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcCableFitting > list; +}; +/// A cable segment is a flow segment used to carry electrical power, data, or telecommunications signals. +/// A cable segment is used to typically join two sections of an electrical network or a network of components carrying the electrical service. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcCableSegment defines the occurrence of any cable segment; common information about cable segment types is handled by IfcCableSegmentType. +/// The IfcCableSegmentType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcCableSegmentType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcCableSegmentType has ports or aggregated elements, such objects are reflected at the IfcCableSegment occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcCableSegmentType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcCableSegmentType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcCableSegment override the properties defined at IfcCableSegmentType. +/// Refer to the documentation at the supertype IfcFlowSegment and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_CableSegmentTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// BUSBARSEGMENT +/// +/// Pset_CableSegmentTypeBusBarSegment (PSET_TYPEDRIVENOVERRIDE) +/// +/// CABLESEGMENT +/// +/// Pset_CableSegmentTypeCableSegment (PSET_TYPEDRIVENOVERRIDE) +/// +/// CONDUCTORSEGMENT +/// +/// Pset_CableSegmentTypeConductorSegment (PSET_TYPEDRIVENOVERRIDE) +/// +/// CORESEGMENT +/// +/// Pset_CableSegmentTypeCoreSegment (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_CableSegmentBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcCableSegment is defined by IfcMaterialProfileSetUsage or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcCableSegmentType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialProfileSet.MaterialProfiles[n].Name shall be used: +/// +/// Conductor: Material from which the conductors are constructed, such as Aluminium or Copper. +/// Insulation: The material from which the insulation is constructed such as PVC, PEX, or EPR. +/// Screen: The material from which the screen that covers the sheath is constructed (mantel) such as Aluminium, Copper, Steel, or Lead. +/// Sheath: The outer sheathing of the cable which may be color-coded. +/// +/// Composition Use Definition +/// The IfcCableSegment may be aggregated into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcCableSegment and RelatedObjects contains one or more components. Aggregation use is defined for the following predefined types: +/// +/// CABLESEGMENT +/// +/// May contain IfcCableSegment components having PredefinedType=CORESEGMENT. Cable segments may be aggregated into cable cores. +/// +/// CORESEGMENT +/// +/// May contain IfcCableSegment components having PredefinedType=CONDUCTORSEGMENT. Cable cores may be aggregated into cable conductors. +/// +/// Connection Use Definition +/// The IfcCableSegment may be connected to other objects as follows using the indicated relationship: +/// +/// IfcCableCarrierSegment (IfcRelConnectsElements): Indicates a cable carrier segment housing the cable. +/// IfcWall (IfcRelConnectsElements): Indicates a wall housing the cable. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcCableSegment are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the cable segment occurrence is defined by IfcCableSegmentType, then the port occurrences must reflect those defined at the IfcCableSegmentType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcCableSegment PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// CABLESEGMENT +/// +/// Input (NOTDEFINED, SINK): Input end of the cable. +/// Output (NOTDEFINED, SOURCE): Output end of the cable. +/// +/// CONDUCTORSEGMENT +/// +/// Input (NOTDEFINED, SINK): Input end of the conductor. +/// Output (NOTDEFINED, SOURCE): Output end of the cable. +class IFC_PARSE_API IfcCableSegment : public IfcFlowSegment { +public: + /// Identifies the predefined types of cable segment from which the type required may be set. + boost::optional< ::Ifc4x3_add2::IfcCableSegmentTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCableSegmentTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCableSegment (IfcEntityInstanceData* e); + IfcCableSegment (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCableSegmentTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcCableSegment > list; +}; + +class IFC_PARSE_API IfcCaissonFoundation : public IfcDeepFoundation { +public: + boost::optional< ::Ifc4x3_add2::IfcCaissonFoundationTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCaissonFoundationTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCaissonFoundation (IfcEntityInstanceData* e); + IfcCaissonFoundation (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCaissonFoundationTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcCaissonFoundation > list; +}; +/// A chiller is a device used to remove heat from a liquid via a vapor-compression or absorption refrigeration cycle to cool a fluid, typically water or a mixture of water and glycol. The chilled fluid is then used to cool and dehumidify air in a building. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcChiller defines the occurrence of any chiller; common information about chiller types is handled by IfcChillerType. +/// The IfcChillerType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcChillerType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcChillerType has ports or aggregated elements, such objects are reflected at the IfcChiller occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcChillerType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcChillerType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcChiller override the properties defined at IfcChillerType. +/// Refer to the documentation at the supertype IfcEnergyConversionDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_ChillerPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_ChillerTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_ChillerBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcChiller is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcChillerType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// Refrigerant: Refrigerant material. +/// +/// Composition Use Definition +/// The IfcChiller may be aggregated into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcChiller and RelatedObjects contains one or more components. Aggregation use is defined for the following predefined types: +/// +/// May contain IfcDistributionElement components. Chillers may aggregate distribution flow elements forming a refrigeration cycle (compressor, condenser, valve, evaporator), as well as control elements. +/// +/// Figure 214 illustrates chiller composition use. +/// Figure 214 — Chiller composition use +/// +/// Port Use Definition +/// The distribution ports relating to the IfcChiller are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the chiller occurrence is defined by IfcChillerType, then the port occurrences must reflect those defined at the IfcChillerType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcChiller PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// AIRCOOLED +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// Control (CONTROL, SINK): Control unit accessing internal sensors and actuators. +/// ChilledWaterIn (CHILLEDWATER, SINK): Chilled water return. +/// ChilledWaterOut (CHILLEDWATER, SOURCE): Chilled water supply. +/// VentilationIn (VENTILATION, SINK): Incoming cooler air. +/// VentilationOut (VENTILATION, SOURCE): Outgoing hotter air. +/// +/// WATERCOOLED +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// Control (CONTROL, SINK): Control unit accessing internal sensors and actuators. +/// ChilledWaterIn (CHILLEDWATER, SINK): Chilled water return. +/// ChilledWaterOut (CHILLEDWATER, SOURCE): Chilled water supply. +/// CondenserWaterIn (CONDENSERWATER, SINK): Incoming cooled condenser water. +/// CondenserWaterOut (CONDENSERWATER, SOURCE): Outgoing heated condenser water. +/// +/// Figure 215 illustrates chiller port use. +/// Figure 215 — Chiller port use +class IFC_PARSE_API IfcChiller : public IfcEnergyConversionDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcChillerTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcChillerTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcChiller (IfcEntityInstanceData* e); + IfcChiller (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcChillerTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcChiller > list; +}; +/// A coil is a device used to provide heat transfer between non-mixing media. A common example is a cooling coil, which utilizes a finned coil in which circulates chilled water, antifreeze, or refrigerant that is used to remove heat from air moving across the surface of the coil. A coil may be used either for heating or cooling purposes by placing a series of tubes (the coil) carrying a heating or cooling fluid into an airstream. The coil may be constructed from tubes bundled in a serpentine form or from finned tubes that give a extended heat transfer surface. +/// Coils may also be used for non-airflow cases such as embedded in a floor slab. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcCoil defines the occurrence of any coil; common information about coil types is handled by IfcCoilType. +/// The IfcCoilType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcCoilType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcCoilType has ports or aggregated elements, such objects are reflected at the IfcCoil occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcCoilType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcCoilType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcCoil override the properties defined at IfcCoilType. +/// Refer to the documentation at the supertype IfcEnergyConversionDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_CoilOccurrence (PSET_OCCURRENCEDRIVEN) +/// Pset_CoilPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_CoilTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// Pset_CoilTypeHydronic (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_CoilBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcCoil is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcCoilType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcCoil are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the coil occurrence is defined by IfcCoilType, then the port occurrences must reflect those defined at the IfcCoilType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcCoil PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// DXCOOLINGCOIL +/// +/// RefrigerantIn (REFRIGERATION, SINK): Refrigerant entering the coil. +/// RefrigerantOut (REFRIGERATION, SOURCE): Refrigerant leaving the coil. +/// AirIn (AIRCONDITIONING, SINK): Air entering the surface of the coil. +/// AirOut (AIRCONDITIONING, SOURCE): Air leaving the surface of the coil. +/// +/// WATERCOOLINGCOIL +/// +/// ChilledWaterIn (CHILLEDWATER, SINK): Chilled water entering the coil. +/// ChilledWaterOut (CHILLEDWATER, SOURCE): Chilled water leaving the coil. +/// AirIn (AIRCONDITIONING, SINK): Air entering the surface of the coil. +/// AirOut (AIRCONDITIONING, SOURCE): Air leaving the surface of the coil. +/// +/// WATERHEATINGCOIL +/// +/// HeatingIn (HEATING, SINK): Heated water entering the coil. +/// HeatingOut (HEATING, SOURCE): Heated water leaving the coil. +/// AirIn (AIRCONDITIONING, SINK): Air entering the surface of the coil. +/// AirOut (AIRCONDITIONING, SOURCE): Air leaving the surface of the coil. +/// +/// Figure 216 illustrates coil port use. +/// Figure 216 — Coil port use +class IFC_PARSE_API IfcCoil : public IfcEnergyConversionDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcCoilTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCoilTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCoil (IfcEntityInstanceData* e); + IfcCoil (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCoilTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcCoil > list; +}; +/// A communications appliance transmits and receives electronic or digital information as data or sound. +/// Communication appliances may be fixed in place or may be able to be moved from one space to another. Communication appliances require an electrical supply that may be supplied either by an electrical circuit or provided from a local battery source. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcCommunicationsAppliance defines the occurrence of any communications appliance; common information about communications appliance types is handled by IfcCommunicationsApplianceType. +/// The IfcCommunicationsApplianceType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcCommunicationsApplianceType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcCommunicationsApplianceType has ports or aggregated elements, such objects are reflected at the IfcCommunicationsAppliance occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcCommunicationsApplianceType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcCommunicationsApplianceType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcCommunicationsAppliance override the properties defined at IfcCommunicationsApplianceType. +/// Refer to the documentation at the supertype IfcFlowTerminal and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_CommunicationsAppliancePHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_CommunicationsApplianceTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_CommunicationsApplianceBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcCommunicationsAppliance is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcCommunicationsApplianceType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Casing: Material from which the casing is constructed. +/// +/// Composition Use Definition +/// The IfcCommunicationsAppliance may be aggregated into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcCommunicationsAppliance and RelatedObjects contains one or more components. Aggregation use is defined for the following predefined types: +/// +/// COMPUTER +/// +/// May contain IfcAudioVisualAppliance components. Computers may be aggregated into audio-visual components such as displays, cameras, speakers, or microphones. +/// +/// Connection Use Definition +/// The IfcCommunicationsAppliance may be connected to other objects as follows using the indicated relationship: +/// +/// IfcSystemFurnitureElement (IfcRelConnectsElements): Servers and other networking equipment may be installed in racks. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcCommunicationsAppliance are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the communications appliance occurrence is defined by IfcCommunicationsApplianceType, then the port occurrences must reflect those defined at the IfcCommunicationsApplianceType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcCommunicationsAppliance PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// ANTENNA +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// Radio (SIGNAL, SINK): Electromagnetic waves. +/// Signal (SIGNAL, SOURCE): The modulated analog signal in a circuit, such as a cable connected to a modem. +/// +/// COMPUTER +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// Network (DATA, SINK): A network connection, may be wired or wireless (implicit antenna), such as a cable connected from a data outlet jack or from a router communications appliance. While communication is bidirectional, the router-end is considered to be the source. +/// Device (CONTROL, SOURCE): A device connection such as USB or serial, which may connect to equipment such as a building automation controller. +/// Display (AUDIOVISUAL, SOURCE): Audio/video output, such as a cable connected to a display, which may be aggregated into separate channels. +/// +/// FAX +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// Telephone (TELEPHONE, SINK): Telephone connection. +/// +/// MODEM +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// Signal (SIGNAL, SINK): Modulated analog signal, typically a cable connecting from a communications junction box or an antenna. +/// Internet (DATA, SOURCE): Internet data network. +/// Television (TV, SOURCE): Television modulated signal. +/// Telephone (TELEPHONE, SOURCE): Telephone communications. +/// +/// PRINTER +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// Network (DATA, SINK): A network connection, may be wired or wireless (implicit antenna), such as a cable connected from a data outlet jack or from a router communications appliance. While communication is bidirectional, the router-end is considered to be the source. +/// +/// REPEATER +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// Input (SIGNAL, SINK): The receiving signal. +/// Output (SIGNAL, SOURCE): The transmittes signal. +/// +/// ROUTER +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// Uplink (DATA, SINK): Uplink from another network, such as a cable connected to another router or the Internet. +/// Link#1 (DATA, SOURCE): A network link to a routed device such as a cable connecting to a computer. +/// Link#2 (DATA, SOURCE): A network link to a routed device such as a cable connecting to a computer. +/// Link#3 (DATA, SOURCE): A network link to a routed device such as a cable connecting to a computer. +/// Link#4 (DATA, SOURCE): A network link to a routed device such as a cable connecting to a computer. +/// Link#5 (DATA, SOURCE): A network link to a routed device such as a cable connecting to a computer. +/// Link#6 (DATA, SOURCE): A network link to a routed device such as a cable connecting to a computer. +/// Link#7 (DATA, SOURCE): A network link to a routed device such as a cable connecting to a computer. +/// Link#8 (DATA, SOURCE): A network link to a routed device such as a cable connecting to a computer. +class IFC_PARSE_API IfcCommunicationsAppliance : public IfcFlowTerminal { +public: + boost::optional< ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCommunicationsAppliance (IfcEntityInstanceData* e); + IfcCommunicationsAppliance (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCommunicationsApplianceTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcCommunicationsAppliance > list; +}; +/// A compressor is a device that compresses a fluid typically used in a refrigeration circuit. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcCompressor defines the occurrence of any compressor; common information about compressor types is handled by IfcCompressorType. +/// The IfcCompressorType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcCompressorType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcCompressorType has ports or aggregated elements, such objects are reflected at the IfcCompressor occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcCompressorType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcCompressorType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcCompressor override the properties defined at IfcCompressorType. +/// Refer to the documentation at the supertype IfcFlowMovingDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_CompressorPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_CompressorTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_CompressorBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcCompressor is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcCompressorType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// Refrigerant: Refrigerant material. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcCompressor are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the compressor occurrence is defined by IfcCompressorType, then the port occurrences must reflect those defined at the IfcCompressorType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcCompressor PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// RefrigerantIn (REFRIGERATION, SINK): Uncompressed vapor refrigerant entering the compressor. +/// RefrigerantOut (REFRIGERATION, SOURCE): Compressed vapor refrigerant leaving the compressor. +/// +/// Figure 217 illustrates compressor port use. +/// Figure 217 — Compressor port use +class IFC_PARSE_API IfcCompressor : public IfcFlowMovingDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcCompressorTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCompressorTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCompressor (IfcEntityInstanceData* e); + IfcCompressor (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCompressorTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcCompressor > list; +}; +/// A condenser is a device that is used to dissipate heat, typically by condensing a substance such as a refrigerant from its gaseous to its liquid state. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcCondenser defines the occurrence of any condenser; common information about condenser types is handled by IfcCondenserType. +/// The IfcCondenserType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcCondenserType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcCondenserType has ports or aggregated elements, such objects are reflected at the IfcCondenser occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcCondenserType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcCondenserType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcCondenser override the properties defined at IfcCondenserType. +/// Refer to the documentation at the supertype IfcEnergyConversionDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_CondenserPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_CondenserTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_CondenserBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcCondenser is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcCondenserType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// Refrigerant: Refrigerant material. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcCondenser are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the condenser occurrence is defined by IfcCondenserType, then the port occurrences must reflect those defined at the IfcCondenserType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcCondenser PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// AIRCOOLED +/// +/// RefrigerantIn (REFRIGERATION, SINK): Vapor refrigerant entering the condenser. +/// RefrigerantOut (REFRIGERATION, SOURCE): Liquid refrigerant leaving the condenser. +/// CompressedAirIn (COMPRESSEDAIR, SINK): Cooler air entering the condenser. +/// CompressedAirOut (COMPRESSEDAIR, SOURCE): Warmer air leaving the condenser. +/// +/// EVAPORATIVECOOLED +/// +/// RefrigerantIn (REFRIGERATION, SINK): Vapor refrigerant entering the condenser. +/// RefrigerantOut (REFRIGERATION, SOURCE): Liquid refrigerant leaving the condenser. +/// CondenserWaterIn (CONDENSERWATER, SINK): Makeup water entering the condenser. +/// CondenserWaterOut (CONDENSERWATER, SOURCE): Purged water leaving the condenser. +/// VentilationIn (VENTILATION, SINK): Air entering the condenser. +/// VentilationOut (VENTILATION, SOURCE): Air leaving the condenser. +/// +/// WATERCOOLED +/// +/// RefrigerantIn (REFRIGERATION, SINK): Vapor refrigerant entering the condenser. +/// RefrigerantOut (REFRIGERATION, SOURCE): Liquid refrigerant leaving the condenser. +/// CondenserWaterIn (CONDENSERWATER, SINK): Cooler water entering the condenser, optionally from cooling tower. +/// CondenserWaterOut (CONDENSERWATER, SOURCE): Warmer water leaving the condenser, optionally to cooling tower. +/// +/// Figure 218 illustrates condenser port use. +/// Figure 218 — Condenser port use +class IFC_PARSE_API IfcCondenser : public IfcEnergyConversionDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcCondenserTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCondenserTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCondenser (IfcEntityInstanceData* e); + IfcCondenser (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCondenserTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcCondenser > list; +}; +/// The distribution control element type IfcControllerType defines commonly shared information for occurrences of controllers. The set of shared information may include: +/// +/// common properties with shared property sets +/// common representations of shape +/// common materials +/// common composition of elements +/// common ports +/// applicable assignment of process types +/// +/// It is used to define a controller specification (i.e. the specific product information, that is common to all occurrences of that product type). Controller types may be exchanged without being already assigned to occurrences. +/// Occurrences of IfcControllerType are represented by instances of IfcController. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the HasPropertySets attribute. Refer to the documentation at the supertype IfcDistributionControlElementType and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_ControllerTypeCommon +/// Pset_ControllerTypeFloating (FLOATING) +/// Pset_ControllerTypeMultiPosition (MULTIPOSITION) +/// Pset_ControllerTypeProgrammable (PROGRAMMABLE) +/// Pset_ControllerTypeProportional (PROPORTIONAL) +/// Pset_ControllerTypeTwoPosition (TWOPOSITION) +/// +/// Material Use Definition +/// The material of the IfcControllerType is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Casing': Material from which the casing is constructed. +/// +/// Composition Use Definition +/// The IfcControllerType may be aggregated into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcControllerType and RelatedObjects contains one or more components. Components are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Aggregation use is defined for the following predefined types: +/// +/// PROGRAMMABLE: May contain IfcController components. Programmable Logic Controllers may be decomposed into logical elements for values and operations. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcControllerType type are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. Ports are reflected at occurrences of this type using the IfcRelDefinesByObject relationship. Refer to the documentation at IfcController for standard port definitions. +class IFC_PARSE_API IfcControllerType : public IfcDistributionControlElementType { +public: + /// Identifies the predefined types of controller from which the type required may be set. + ::Ifc4x3_add2::IfcControllerTypeEnum::Value PredefinedType() const; + void setPredefinedType(::Ifc4x3_add2::IfcControllerTypeEnum::Value v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcControllerType (IfcEntityInstanceData* e); + IfcControllerType (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ApplicableOccurrence, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcPropertySetDefinition >::ptr > v6_HasPropertySets, boost::optional< aggregate_of< ::Ifc4x3_add2::IfcRepresentationMap >::ptr > v7_RepresentationMaps, boost::optional< std::string > v8_Tag, boost::optional< std::string > v9_ElementType, ::Ifc4x3_add2::IfcControllerTypeEnum::Value v10_PredefinedType); + typedef aggregate_of< IfcControllerType > list; +}; + +class IFC_PARSE_API IfcConveyorSegment : public IfcFlowSegment { +public: + boost::optional< ::Ifc4x3_add2::IfcConveyorSegmentTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcConveyorSegmentTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcConveyorSegment (IfcEntityInstanceData* e); + IfcConveyorSegment (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcConveyorSegmentTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcConveyorSegment > list; +}; +/// A cooled beam (or chilled beam) is a device typically used to cool air by circulating a fluid such as chilled water through exposed finned tubes above a space. Typically mounted overhead near or within a ceiling, the cooled beam uses convection to cool the space below it by acting as a heat sink for the naturally rising warm air of the space. Once cooled, the air naturally drops back to the floor where the cycle begins again. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcCooledBeam defines the occurrence of any cooled beam; common information about cooled beam types is handled by IfcCooledBeamType. +/// The IfcCooledBeamType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcCooledBeamType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcCooledBeamType has ports or aggregated elements, such objects are reflected at the IfcCooledBeam occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcCooledBeamType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcCooledBeamType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcCooledBeam override the properties defined at IfcCooledBeamType. +/// Refer to the documentation at the supertype IfcEnergyConversionDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_CooledBeamPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_CooledBeamTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// ACTIVE +/// +/// Pset_CooledBeamPHistoryActive (PSET_PERFORMANCEDRIVEN) +/// Pset_CooledBeamTypeActive (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_CooledBeamBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcCooledBeam is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcCooledBeamType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcCooledBeam are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the cooled beam occurrence is defined by IfcCooledBeamType, then the port occurrences must reflect those defined at the IfcCooledBeamType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcCooledBeam PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// ChilledWaterIn (CHILLEDWATER, SINK): Chilled water entering. +/// ChilledWaterOut (CHILLEDWATER, SOURCE): Chilled water leaving. +class IFC_PARSE_API IfcCooledBeam : public IfcEnergyConversionDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcCooledBeamTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCooledBeamTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCooledBeam (IfcEntityInstanceData* e); + IfcCooledBeam (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCooledBeamTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcCooledBeam > list; +}; +/// A cooling tower is a device which rejects heat to ambient air by circulating a fluid such as water through it to reduce its temperature by partial evaporation. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcCoolingTower defines the occurrence of any cooling tower; common information about cooling tower types is handled by IfcCoolingTowerType. +/// The IfcCoolingTowerType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcCoolingTowerType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcCoolingTowerType has ports or aggregated elements, such objects are reflected at the IfcCoolingTower occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcCoolingTowerType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcCoolingTowerType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcCoolingTower override the properties defined at IfcCoolingTowerType. +/// Refer to the documentation at the supertype IfcEnergyConversionDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_CoolingTowerPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_CoolingTowerTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_CoolingTowerBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcCoolingTower is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcCoolingTowerType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// Fill: Fill material. +/// +/// Composition Use Definition +/// The IfcCoolingTower may be aggregated into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcCoolingTower and RelatedObjects contains one or more components. Aggregation use is defined for the following predefined types: +/// +/// MECHANICALFORCEDDRAFT +/// +/// May contain IfcFan components for forcing air into the cooling tower. +/// +/// MECHANICALINDUCEDDDRAFT +/// +/// May contain IfcFan components for inducing air out of the cooling tower. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcCoolingTower are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the cooling tower occurrence is defined by IfcCoolingTowerType, then the port occurrences must reflect those defined at the IfcCoolingTowerType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcCoolingTower PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// CondenserWaterIn (CONDENSERWATER, SINK): Warmer water entering the cooling tower. +/// CondenserWaterOut (CONDENSERWATER, SOURCE): Cooler water leaving the cooling tower. +/// +/// Figure 219 illustrates cooling tower port use. +/// Figure 219 — Cooling tower port use +class IFC_PARSE_API IfcCoolingTower : public IfcEnergyConversionDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcCoolingTowerTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcCoolingTowerTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcCoolingTower (IfcEntityInstanceData* e); + IfcCoolingTower (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcCoolingTowerTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcCoolingTower > list; +}; +/// A damper typically participates in an HVAC duct distribution system and is used to control or modulate the flow of air. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcDamper defines the occurrence of any damper; common information about damper types is handled by IfcDamperType. +/// The IfcDamperType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcDamperType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcDamperType has ports or aggregated elements, such objects are reflected at the IfcDamper occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcDamperType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcDamperType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcDamper override the properties defined at IfcDamperType. +/// Refer to the documentation at the supertype IfcFlowController and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_DamperOccurrence (PSET_OCCURRENCEDRIVEN) +/// Pset_DamperPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_DamperTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// CONTROLDAMPER +/// +/// Pset_DamperTypeControlDamper (PSET_TYPEDRIVENOVERRIDE) +/// +/// FIREDAMPER +/// +/// Pset_DamperTypeFireDamper (PSET_TYPEDRIVENOVERRIDE) +/// +/// FIRESMOKEDAMPER +/// +/// Pset_DamperTypeFireSmokeDamper (PSET_TYPEDRIVENOVERRIDE) +/// +/// SMOKEDAMPER +/// +/// Pset_DamperTypeSmokeDamper (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_DamperBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcDamper is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcDamperType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Blade: The material from which the damper blades are constructed. +/// Frame: The material from which the damper frame is constructed. +/// Seal: The material from which the damper seals are constructed. +/// +/// Connection Use Definition +/// The IfcDamper may be connected to other objects as follows using the indicated relationship: +/// +/// IfcActuator (IfcRelFlowControlElements): Indicates an actuator operating on the damper. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcDamper are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the damper occurrence is defined by IfcDamperType, then the port occurrences must reflect those defined at the IfcDamperType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcDamper PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// AirIn (AIRCONDITIONING, SINK): Air entering damper. +/// AirOut (AIRCONDITIONING, SOURCE): Air leaving damper, with flow regulated according to position of damper. +/// +/// Figure 220 illustrates damper port use. +/// Figure 220 — Damper port use +class IFC_PARSE_API IfcDamper : public IfcFlowController { +public: + boost::optional< ::Ifc4x3_add2::IfcDamperTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcDamperTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDamper (IfcEntityInstanceData* e); + IfcDamper (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcDamperTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcDamper > list; +}; + +class IFC_PARSE_API IfcDistributionBoard : public IfcFlowController { +public: + boost::optional< ::Ifc4x3_add2::IfcDistributionBoardTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcDistributionBoardTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDistributionBoard (IfcEntityInstanceData* e); + IfcDistributionBoard (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcDistributionBoardTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcDistributionBoard > list; +}; +/// A distribution chamber element defines a place at which distribution systems and their constituent elements may be inspected or through which they may travel. +/// +/// An IfcDistributionChamberElement is a formed volume used in a distribution system, such as a sump, trench or manhole. Instances of IfcDistributionSystem or IfcDistributionFlowElement may be related to the IfcDistributionChamberElement enabling their location in or at the chamber to be determined. +/// +/// HISTORY: New entity in IFC2x2 +/// +/// Type Use Definition +/// IfcDistributionChamberElement defines the occurrence of any distribution chamber element; common information about distribution chamber element types is handled by IfcDistributionChamberElementType. The IfcDistributionChamberElementType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. The IfcDistributionChamberElementType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. If the IfcDistributionChamberElementType has ports or aggregated elements, such objects are reflected at the IfcDistributionChamberElement occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. They are accessible by the IsDefinedBy inverse attribute. Property sets may also be specified at the IfcDistributionChamberElementType, defining the common property data for all occurrences of the same type. They are then accessible by the IsTypedBy inverse attribute pointing to IfcDistributionChamberElementType.HasPropertySets. If both are given, then the properties directly defined at IfcDistributionChamberElement override the properties defined at IfcDistributionChamberElementType. Refer to the documentation at the supertype IfcDistributionFlowElement and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_DistributionChamberElementCommon +/// +/// The following property set definitions are applicable to this entity according to the PredefinedType attribute: +/// Pset_DistributionChamberElementTypeFormedDuct (FORMEDDUCT) +/// Pset_DistributionChamberElementTypeInspectionChamber (INSPECTIONCHAMBER) +/// Pset_DistributionChamberElementTypeInspectionPit (INSPECTIONPIT) +/// Pset_DistributionChamberElementTypeManhole (MANHOLE) +/// Pset_DistributionChamberElementTypeMeterChamber (METERCHAMBER) +/// Pset_DistributionChamberElementTypeSump (SUMP) +/// Pset_DistributionChamberElementTypeTrench (TRENCH) +/// Pset_DistributionChamberElementTypeValveChamber (VALVECHAMBER) +/// +/// Material Use Definition +/// The material of the IfcDistributionChamberElement is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcDistributionChamberElementType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// 'Base': The material from which the base of the duct is constructed. +/// 'Cover': The material from which the access cover to the chamber is constructed. +/// 'Fill': The material that is used to fill the duct (where used). +/// 'Wall': The material from which the wall of the duct is constructed. +class IFC_PARSE_API IfcDistributionChamberElement : public IfcDistributionFlowElement { +public: + boost::optional< ::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDistributionChamberElement (IfcEntityInstanceData* e); + IfcDistributionChamberElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcDistributionChamberElementTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcDistributionChamberElement > list; +}; + +class IFC_PARSE_API IfcDistributionCircuit : public IfcDistributionSystem { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDistributionCircuit (IfcEntityInstanceData* e); + IfcDistributionCircuit (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, boost::optional< std::string > v6_LongName, boost::optional< ::Ifc4x3_add2::IfcDistributionSystemEnum::Value > v7_PredefinedType); + typedef aggregate_of< IfcDistributionCircuit > list; +}; +/// The distribution element IfcDistributionControlElement defines occurrence elements of a building automation control system that are used to impart control over elements of a distribution system. +/// +/// This class defines elements of a building automation control system. These are typically used to control distribution system elements to maintain variables such as temperature, humidity, pressure, flow, power, or lighting levels, through the modulation, staging or sequencing of mechanical or electrical devices. The three general functional categories of control elements are as follows: +/// +/// Impart control over flow control elements (IfcFlowController) in a distribution system such as dampers, valves, or relays, typically through the use of actuation (IfcActuator). +/// Sensing elements (IfcSensor) that measure changes in the controlled variable such as temperature, humidity, pressure, or flow. +/// Controllers (IfcController) typically classified according to the control action they seek to perform and generally responsible for making decisions about the elements under control. +/// +/// Since this class and its subtypes typically relate to many different distribution flow elements (IfcDistributionFlowElement), the objectified relationship IfcRelFlowControlElements has been provided to relate control and flow elements as required. +/// +/// IFC2x4 CHANGE: ControlElementId attribute deleted; replaced by classification usage. +/// HISTORY: New entity in IFC R2.0. +/// +/// Type Use Definition +/// IfcDistributionControlElement defines the occurrence of any distribution control element; common information about distribution control element types is handled by IfcDistributionControlElementType. The IfcDistributionControlElementType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. The IfcDistributionControlElementType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. If the IfcDistributionControlElementType has ports or aggregated elements, such objects are reflected at the IfcDistributionControlElement occurrence using the IfcRelDefinesByObject relationship. Direct instantiation of IfcDistributionControlElement with IfcObject.ObjectType asserted provides the meaning of a distribution control element proxy. +/// +/// Property Set Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. They are accessible by the IsDefinedBy inverse attribute. Property sets may also be specified at the IfcDistributionControlElementType, defining the common property data for all occurrences of the same type. They are then accessible by the IsTypedBy inverse attribute pointing to IfcDistributionControlElementType.HasPropertySets. If both are given, then the properties directly defined at IfcDistributionControlElement override the properties defined at IfcDistributionControlElementType. Refer to the documentation at the supertype IfcDistributionElement and ancestors for inherited property set definitions. +/// +/// Classification Use Definition +/// In addition to general product and project classification (UniFormat, etc.), classifications may also be applied to indicate a device address or addressing scheme using IfcRelAssociatesClassification where RelatedObjects contains the IfcDistributionControlElement and RelatingClassification refers to an IfcClassification or IfcClassificationReference. +/// +/// IfcClassification: Indicates an addressing scheme managed by the device where ReferenceTokens defines the format of the address to be specified at IfcClassificationReference.ItemReference. A classification hierarchy may optionally be provided indicating detected or provisioned device addresses. +/// IfcClassificationReference: Indicates the address of the control element where Identification uniquely identifies the element within the control system as determined by the ClassificationSource. Several examples are illustrated: +/// +/// 'BACnet': BACnetObjectIdentifier in the decimal form '12.15' (Digital Input #15) indicating type ID and instance ID. +/// 'IP': IP Address in the decimal form '192.168.1.2' such as for an IPv4 network. +/// 'OPC': Hierarchical ItemID in the alphanumeric form 'B204.Tank2.Temperature' +/// 'X-10': Alphabetic and numeric code in the form 'B12' (House B, Device 12) indicating House Code and Device Code. +/// +/// Figure 147 illustrates classification usage. +/// +/// Figure 147 — Distribution control classification +/// +/// Composition Use Definition +/// The IfcDistributionControlElement may be decomposed into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcDistributionControlElement and RelatedObjects contains one or more components. Likewise, a control element may be aggregated within another element. For example, a thermostat may contain temperature sensors, and a programmable logic controller may contain virtual (software-based) control elements. Standard types for composition are defined at subtypes. +/// +/// Connection Use Definition +/// The IfcDistributionControlElement may be connected to other objects as follows using the indicated relationship: +/// +/// IfcSpatialStructureElement (IfcRelContainedInSpatialStructure) : Indicates the spatial location containing the element. If an element is aggregated within another element, then only the top-level element participates in this relationship. +/// IfcElement (IfcRelConnectsElements) : Indicates physical connectivity with another element (but not embedding or flow control), such as a sensor attached to a wall. IfcRelConnectsElements.RelatingElement refers to the anchored side (for example, wall hosting sensor). +/// IfcDistributionPort (IfcRelConnectsPortToElement) : Indicates ports on the element which may be connected to other elements for control signal transmission or electric power. Standard port names, types, and directions are defined at subtypes. +/// IfcDistributionFlowElement (IfcRelFlowControlElements) : Indicates a flow element is sensed or controlled by the control element, such as a tank for a level sensor or a valve for an actuator. +/// +/// Assignment Use Definition +/// The IfcDistributionControlElement may be assigned to the following entities using relationships as indicated: +/// +/// IfcDistributionSystem (IfcRelAssignsToGroup): Indicates a system containing interconnected devices, where control elements are typically part of a control system having PredefinedType=CONTROL. +/// IfcPerformanceHistory (IfcRelAssignsToControl): Indicates realtime or historical infomation captured for the device. +/// +/// The IfcDistributionControlElement may have assignments of its own using the IfcRelAssignsToProduct relationship where RelatingProduct refers to the IfcDistributionControlElement and RelatedObjects contains one or more objects of the following types: +/// +/// IfcTask: Indicates tasks used to purchase, install, renovate, demolish, operate, or otherwise act upon the element. If the element has a type, available task types are assigned to the element type. +/// IfcProcedure: Indicates procedures used to operate the element. If the element has a type, available procedure types are assigned to the element type. +/// IfcEvent: Indicates events raised by the element, sequenced by procedures to be followed. If the element has a type, available event types are assigned to the element type. +/// +/// Material Use Definition +/// The material of the IfcDistributionControlElement is defined using one of the following entities: +/// +/// IfcMaterialConstituentSet: For elements containing multiple materials, this indicates materials at named aspects. +/// +/// IfcMaterial: For elements comprised of a single material, this indicates the material. +/// +/// The material is attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcDistributionControlElementType, defining the common attribute data for all occurrences of the same type. Standard names and material types are defined at subtypes. +/// +/// Representation Use Definition +/// The following shape representations are supported for subtypes of IfcDistributionControlElement, distinguished by IfcShapeRepresentation.RepresentationIdentifier: +/// +/// 'Footprint': Represents the 2D footprint outline of the item having IfcShapeRepresentation.RepresentationType of 'GeometricCurveSet' and containing a single IfcGeometricCurveSet consisting of one or more IfcCurve subtypes such as IfcPolyline, IfcTrimmedCurve, IfcCompositeCurve, or IfcCircle. +/// +/// 'Body': Represents the 3D shape of the item having IfcShapeRepresentation.RepresentationType of 'SurfaceModel', 'SolidModel', or any solid model specializations including 'Brep', 'AdvancedBrep', 'SweptSolid', 'AdvancedSweptSolid', 'CSG', 'Clipping', or 'SectionedSpine'). +/// +/// 'Clearance': Represents the 3D clearance volume of the item having RepresentationType of 'Surface3D'. Such clearance region indicates space that should not intersect with the 'Body' representation of other elements, though may intersect with the 'Clearance' representation of other elements. The particular use of clearance space may be for safety, maintenance, or other purpose. +/// +/// For all representations, if a IfcDistributionControlElement occurrence is defined by a IfcDistributionControlElementType having a representation of the same identifier, then 'MappedRepresentation' should be used at the occurrence unless overridden. +/// +/// If materials are defined, geometry of each representation (most typically the 'Body' representation) may be organized into shape aspects where styles may be derived by correlating IfcShapeAspect.Name to a corresponding material (IfcMaterialConstituent.Name). +class IFC_PARSE_API IfcDistributionControlElement : public IfcDistributionElement { +public: + aggregate_of< IfcRelFlowControlElements >::ptr AssignedToFlowElement() const; // INVERSE IfcRelFlowControlElements::RelatedControlElements + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDistributionControlElement (IfcEntityInstanceData* e); + IfcDistributionControlElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcDistributionControlElement > list; +}; +/// A duct fitting is a junction or transition in a ducted flow distribution system or used to connect duct segments, resulting changes in flow characteristics to the fluid such as direction and flow rate. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcDuctFitting defines the occurrence of any duct fitting; common information about duct fitting types is handled by IfcDuctFittingType. +/// The IfcDuctFittingType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcDuctFittingType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcDuctFittingType has ports or aggregated elements, such objects are reflected at the IfcDuctFitting occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcDuctFittingType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcDuctFittingType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcDuctFitting override the properties defined at IfcDuctFittingType. +/// Refer to the documentation at the supertype IfcFlowFitting and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_DuctFittingOccurrence (PSET_OCCURRENCEDRIVEN) +/// Pset_DuctFittingPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_DuctFittingTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_DuctFittingBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcDuctFitting is defined by IfcMaterialProfileSetUsage or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcDuctFittingType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialProfileSet.MaterialProfiles[n].Name shall be used: +/// +/// Body: Material from which the duct fitting is constructed. +/// Coating: The outer coating, if applicable. +/// Insulation: The insulating wrapping, if applicable. +/// Lining: The inner lining, if applicable. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcDuctFitting are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the duct fitting occurrence is defined by IfcDuctFittingType, then the port occurrences must reflect those defined at the IfcDuctFittingType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcDuctFitting PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// BEND +/// +/// Inlet (NOTDEFINED, SINK): The flow inlet. +/// Outlet (NOTDEFINED, SOURCE): The flow outlet. +/// +/// CONNECTOR +/// +/// Inlet (NOTDEFINED, SINK): The flow inlet. +/// Outlet (NOTDEFINED, SOURCE): The flow outlet. +/// +/// ENTRY +/// +/// Outlet (NOTDEFINED, SOURCE): The flow outlet. +/// +/// EXIT +/// +/// Inlet (NOTDEFINED, SINK): The flow inlet. +/// +/// JUNCTION +/// +/// Inlet (NOTDEFINED, SINK): The flow inlet. +/// Outlet#1 (NOTDEFINED, SOURCE): The first flow outlet. +/// Outlet#2 (NOTDEFINED, SOURCE): The second flow outlet. +/// +/// OBSTRUCTION +/// +/// Inlet (NOTDEFINED, SINK): The flow inlet. +/// Outlet (NOTDEFINED, SOURCE): The flow outlet. +/// +/// Figure 221 illustrates duct fitting port use. +/// Figure 221 — Duct fitting port use +class IFC_PARSE_API IfcDuctFitting : public IfcFlowFitting { +public: + boost::optional< ::Ifc4x3_add2::IfcDuctFittingTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcDuctFittingTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDuctFitting (IfcEntityInstanceData* e); + IfcDuctFitting (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcDuctFittingTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcDuctFitting > list; +}; +/// A duct segment is used to typically join two sections of duct network. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcDuctSegment defines the occurrence of any duct segment; common information about duct segment types is handled by IfcDuctSegmentType. +/// The IfcDuctSegmentType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcDuctSegmentType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcDuctSegmentType has ports or aggregated elements, such objects are reflected at the IfcDuctSegment occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcDuctSegmentType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcDuctSegmentType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcDuctSegment override the properties defined at IfcDuctSegmentType. +/// Refer to the documentation at the supertype IfcFlowSegment and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_DuctSegmentOccurrence (PSET_OCCURRENCEDRIVEN) +/// Pset_DuctSegmentPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_DuctSegmentTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_DuctSegmentBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcDuctSegment is defined by IfcMaterialProfileSetUsage or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcDuctSegmentType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialProfileSet.MaterialProfiles[n].Name shall be used: +/// +/// Body: Material from which the duct fitting is constructed. +/// Coating: The outer coating, if applicable. +/// Insulation: The insulating wrapping, if applicable. +/// Lining: The inner lining, if applicable. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcDuctSegment are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the duct segment occurrence is defined by IfcDuctSegmentType, then the port occurrences must reflect those defined at the IfcDuctSegmentType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcDuctSegment PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// Inlet (NOTDEFINED, SINK): The flow inlet. +/// Outlet (NOTDEFINED, SOURCE): The flow outlet. +/// +/// Figure 222 illustrates duct segment port use. +/// Figure 222 — Duct segment port use +class IFC_PARSE_API IfcDuctSegment : public IfcFlowSegment { +public: + boost::optional< ::Ifc4x3_add2::IfcDuctSegmentTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcDuctSegmentTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDuctSegment (IfcEntityInstanceData* e); + IfcDuctSegment (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcDuctSegmentTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcDuctSegment > list; +}; +/// A duct silencer is a device that is typically installed inside a duct distribution system for the purpose of reducing the noise levels from air movement, fan noise, etc. in the adjacent space or downstream of the duct silencer device. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcDuctSilencer defines the occurrence of any duct silencer; common information about duct silencer types is handled by IfcDuctSilencerType. +/// The IfcDuctSilencerType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcDuctSilencerType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcDuctSilencerType has ports or aggregated elements, such objects are reflected at the IfcDuctSilencer occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcDuctSilencerType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcDuctSilencerType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcDuctSilencer override the properties defined at IfcDuctSilencerType. +/// Refer to the documentation at the supertype IfcFlowTreatmentDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_DuctSilencerPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_DuctSilencerTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_DuctSilencerBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcDuctSilencer is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcDuctSilencerType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcDuctSilencer are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the duct silencer occurrence is defined by IfcDuctSilencerType, then the port occurrences must reflect those defined at the IfcDuctSilencerType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcDuctSilencer PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// Inlet (NOTDEFINED, SINK): The flow inlet. +/// Outlet (NOTDEFINED, SOURCE): The flow outlet. +class IFC_PARSE_API IfcDuctSilencer : public IfcFlowTreatmentDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcDuctSilencerTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcDuctSilencerTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcDuctSilencer (IfcEntityInstanceData* e); + IfcDuctSilencer (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcDuctSilencerTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcDuctSilencer > list; +}; +/// A communications appliance transmits and receives electronic or digital information as data or sound. +/// Communication appliances may be fixed in place or may be able to be moved from one space to another. Communication appliances require an electrical supply that may be supplied either by an electrical circuit or provided from a local battery source. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcElectricAppliance defines the occurrence of any electric appliance; common information about electric appliance types is handled by IfcElectricApplianceType. +/// The IfcElectricApplianceType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcElectricApplianceType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcElectricApplianceType has ports or aggregated elements, such objects are reflected at the IfcElectricAppliance occurrence using the IfcRelDefinesByObject relationship. +/// Figure 196 illustrates electric appliance type use. +/// Figure 196 — Electric appliance type use +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcElectricApplianceType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcElectricApplianceType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcElectricAppliance override the properties defined at IfcElectricApplianceType. +/// Refer to the documentation at the supertype IfcFlowTerminal and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_ElectricAppliancePHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_ElectricApplianceTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// DISHWASHER +/// +/// Pset_ElectricApplianceTypeDishwasher (PSET_TYPEDRIVENOVERRIDE) +/// +/// ELECTRICCOOKER +/// +/// Pset_ElectricApplianceTypeElectricCooker (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_ElectricApplianceBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcElectricAppliance is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcElectricApplianceType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Casing: Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcElectricAppliance are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the electric appliance occurrence is defined by IfcElectricApplianceType, then the port occurrences must reflect those defined at the IfcElectricApplianceType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcElectricAppliance PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// DISHWASHER +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// HotWater (DOMESTICHOTWATER, SINK): Hot water used for washing dishes. +/// +/// ELECTRICCOOKER +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// +/// FREEZER +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// +/// FRIDGE_FREEZER +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// ColdWater (DOMESTICCOLDWATER, SINK): Cold water used for icemaking and/or drinking water. +/// +/// HANDDRYER +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// +/// MICROWAVE +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// +/// REFRIGERATOR +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// +/// TUMBLEDRYER +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// Gas (GAS, SINK): Gas source if applicable. +/// Exhaust (EXHAUST, SOURCE): Exhaust air. +/// +/// WASHINGMACHINE +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// ColdWater (DOMESTICCOLDWATER, SINK): Cold water used for washing. +/// HotWater (DOMESTICHOTWATER, SINK): Hot water used for washing. +/// Drain (DRAINAGE, SOURCE): Drainage for water. +/// +/// Figure 197 illustrates electric appliance port use. +/// Figure 197 — Electric appliance port use +class IFC_PARSE_API IfcElectricAppliance : public IfcFlowTerminal { +public: + boost::optional< ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcElectricAppliance (IfcEntityInstanceData* e); + IfcElectricAppliance (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcElectricApplianceTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcElectricAppliance > list; +}; +/// A distribution board is a flow controller in which instances of electrical devices are brought together at a single place for a particular purpose. +/// A distribution provides a housing for connected electrical distribution elements so that they can be viewed, operated or acted upon from a single place. Each connected item may have its own geometric representation and location. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcElectricDistributionBoard defines the occurrence of any electric distribution board; common information about electric distribution board types is handled by IfcElectricDistributionBoardType. +/// The IfcElectricDistributionBoardType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcElectricDistributionBoardType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcElectricDistributionBoardType has ports or aggregated elements, such objects are reflected at the IfcElectricDistributionBoard occurrence using the IfcRelDefinesByObject relationship. +/// Figure 198 illustrates electric distribution board type use. +/// Figure 198 — Electric distribution board type use +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcElectricDistributionBoardType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcElectricDistributionBoardType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcElectricDistributionBoard override the properties defined at IfcElectricDistributionBoardType. +/// Refer to the documentation at the supertype IfcFlowController and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_ElectricDistributionBoardTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_ElectricDistributionBoardBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcElectricDistributionBoard is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcElectricDistributionBoardType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Casing: Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcElectricDistributionBoard are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the electric distribution board occurrence is defined by IfcElectricDistributionBoardType, then the port occurrences must reflect those defined at the IfcElectricDistributionBoardType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcElectricDistributionBoard PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// CONSUMERUNIT +/// +/// Line (ELECTRICAL, SINK): Incoming power, such as a cable connecting from the electrical utility or another distribution board. +/// Ground (EARTHING, SOURCE): Grounding connection, such as a cable connecting to a cable fitting connected to a cold water pipe segment coming from the ground. +/// Circuit#1 (ELECTRICAL, SOURCE): A downstream circuit, typically a circuit breaker protective device. +/// Circuit#2 (ELECTRICAL, SOURCE): A downstream circuit, typically a circuit breaker protective device. +/// Circuit#3 (ELECTRICAL, SOURCE): A downstream circuit, typically a circuit breaker protective device. +/// Circuit#4 (ELECTRICAL, SOURCE): A downstream circuit, typically a circuit breaker protective device. +/// Circuit#5 (ELECTRICAL, SOURCE): A downstream circuit, typically a circuit breaker protective device. +/// Circuit#6 (ELECTRICAL, SOURCE): A downstream circuit, typically a circuit breaker protective device. +/// Circuit#7 (ELECTRICAL, SOURCE): A downstream circuit, typically a circuit breaker protective device. +/// Circuit#8 (ELECTRICAL, SOURCE): A downstream circuit, typically a circuit breaker protective device. +/// +/// Figure 199 illustrates electric distribution board port use. +/// Figure 199 — Electric distribution board port use +class IFC_PARSE_API IfcElectricDistributionBoard : public IfcFlowController { +public: + boost::optional< ::Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcElectricDistributionBoard (IfcEntityInstanceData* e); + IfcElectricDistributionBoard (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcElectricDistributionBoardTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcElectricDistributionBoard > list; +}; +/// An electric flow storage device is a device in which electrical energy is stored and from which energy may be progressively released. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcElectricFlowStorageDevice defines the occurrence of any electric flow storage device; common information about electric flow storage device types is handled by IfcElectricFlowStorageDeviceType. +/// The IfcElectricFlowStorageDeviceType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcElectricFlowStorageDeviceType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcElectricFlowStorageDeviceType has ports or aggregated elements, such objects are reflected at the IfcElectricFlowStorageDevice occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcElectricFlowStorageDeviceType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcElectricFlowStorageDeviceType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcElectricFlowStorageDevice override the properties defined at IfcElectricFlowStorageDeviceType. +/// Refer to the documentation at the supertype IfcFlowStorageDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_ElectricFlowStorageDeviceTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_ElectricFlowStorageDeviceBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcElectricFlowStorageDevice is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcElectricFlowStorageDeviceType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Casing: Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcElectricFlowStorageDevice are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the electric flow storage device occurrence is defined by IfcElectricFlowStorageDeviceType, then the port occurrences must reflect those defined at the IfcElectricFlowStorageDeviceType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcElectricFlowStorageDevice PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// Line (ELECTRICAL, SINK): Incoming power used to charge the flow storage device. +/// Load (ELECTRICAL, SOURCE): Outgoing power backed by the flow storage device. +class IFC_PARSE_API IfcElectricFlowStorageDevice : public IfcFlowStorageDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcElectricFlowStorageDevice (IfcEntityInstanceData* e); + IfcElectricFlowStorageDevice (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcElectricFlowStorageDeviceTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcElectricFlowStorageDevice > list; +}; + +class IFC_PARSE_API IfcElectricFlowTreatmentDevice : public IfcFlowTreatmentDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcElectricFlowTreatmentDevice (IfcEntityInstanceData* e); + IfcElectricFlowTreatmentDevice (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcElectricFlowTreatmentDeviceTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcElectricFlowTreatmentDevice > list; +}; +/// An electric generator is an engine that is a machine for converting mechanical energy into electrical energy. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcElectricGenerator defines the occurrence of any electric generator; common information about electric generator types is handled by IfcElectricGeneratorType. +/// The IfcElectricGeneratorType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcElectricGeneratorType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcElectricGeneratorType has ports or aggregated elements, such objects are reflected at the IfcElectricGenerator occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcElectricGeneratorType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcElectricGeneratorType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcElectricGenerator override the properties defined at IfcElectricGeneratorType. +/// Refer to the documentation at the supertype IfcEnergyConversionDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_ElectricGeneratorTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_ElectricGeneratorBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcElectricGenerator is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcElectricGeneratorType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Casing: Material from which the casing is constructed. +/// +/// Composition Use Definition +/// The IfcElectricGenerator may be aggregated into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcElectricGenerator and RelatedObjects contains one or more components. Aggregation use is defined for the following predefined types: +/// +/// ENGINEGENERATOR +/// +/// May contain IfcEngine components. Engine-Generator sets may optionally include an engine to indicate specific detail. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcElectricGenerator are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the electric generator occurrence is defined by IfcElectricGeneratorType, then the port occurrences must reflect those defined at the IfcElectricGeneratorType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcElectricGenerator PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// Load (ELECTRICAL, SOURCE): Outgoing power from generator. +class IFC_PARSE_API IfcElectricGenerator : public IfcEnergyConversionDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcElectricGeneratorTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcElectricGeneratorTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcElectricGenerator (IfcEntityInstanceData* e); + IfcElectricGenerator (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcElectricGeneratorTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcElectricGenerator > list; +}; +/// An electric motor is an engine that is a machine for converting electrical energy into mechanical energy. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcElectricMotor defines the occurrence of any electric motor; common information about electric motor types is handled by IfcElectricMotorType. +/// The IfcElectricMotorType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcElectricMotorType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcElectricMotorType has ports or aggregated elements, such objects are reflected at the IfcElectricMotor occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcElectricMotorType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcElectricMotorType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcElectricMotor override the properties defined at IfcElectricMotorType. +/// Refer to the documentation at the supertype IfcEnergyConversionDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_ElectricMotorTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_ElectricMotorBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcElectricMotor is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcElectricMotorType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Casing: Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcElectricMotor are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the electric motor occurrence is defined by IfcElectricMotorType, then the port occurrences must reflect those defined at the IfcElectricMotorType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcElectricMotor PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// Line (ELECTRICAL, SINK): Receives electrical power. +/// Drive (NOTDEFINED, SOURCE): Motor connection to a driven device. +class IFC_PARSE_API IfcElectricMotor : public IfcEnergyConversionDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcElectricMotorTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcElectricMotorTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcElectricMotor (IfcEntityInstanceData* e); + IfcElectricMotor (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcElectricMotorTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcElectricMotor > list; +}; +/// An electric time control is a device that applies control to the provision or flow of electrical energy over time. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcElectricTimeControl defines the occurrence of any electric time control; common information about electric time control types is handled by IfcElectricTimeControlType. +/// The IfcElectricTimeControlType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcElectricTimeControlType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcElectricTimeControlType has ports or aggregated elements, such objects are reflected at the IfcElectricTimeControl occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcElectricTimeControlType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcElectricTimeControlType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcElectricTimeControl override the properties defined at IfcElectricTimeControlType. +/// Refer to the documentation at the supertype IfcFlowController and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_ElectricTimeControlTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_ElectricTimeControlBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcElectricTimeControl is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcElectricTimeControlType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Casing: Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcElectricTimeControl are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the electric time control occurrence is defined by IfcElectricTimeControlType, then the port occurrences must reflect those defined at the IfcElectricTimeControlType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcElectricTimeControl PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// Line (ELECTRICAL, SINK): Receives electrical power. +/// Load (ELECTRICAL, SOURCE): Transmits electrical power according to time. +class IFC_PARSE_API IfcElectricTimeControl : public IfcFlowController { +public: + boost::optional< ::Ifc4x3_add2::IfcElectricTimeControlTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcElectricTimeControlTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcElectricTimeControl (IfcEntityInstanceData* e); + IfcElectricTimeControl (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcElectricTimeControlTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcElectricTimeControl > list; +}; +/// A fan is a device which imparts mechanical work on a gas. A typical usage of a fan is to induce airflow in a building services air distribution system. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcFan defines the occurrence of any fan; common information about fan types is handled by IfcFanType. +/// The IfcFanType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcFanType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcFanType has ports or aggregated elements, such objects are reflected at the IfcFan occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcFanType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcFanType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcFan override the properties defined at IfcFanType. +/// Refer to the documentation at the supertype IfcFlowMovingDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_FanOccurrence (PSET_OCCURRENCEDRIVEN) +/// Pset_FanPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_FanTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// Pset_FanTypeSmokeControl (PSET_TYPEDRIVENOVERRIDE) +/// +/// CENTRIFUGAL +/// +/// Pset_FanCentrifugal (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_FanBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcFan is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcFanType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Frame: The material used to construct the fan housing. +/// Wheel: The material used to construct the fan wheel. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcFan are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the fan occurrence is defined by IfcFanType, then the port occurrences must reflect those defined at the IfcFanType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcFan PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// In (NOTDEFINED, SINK): Incoming air. +/// Out (NOTDEFINED, SOURCE): Outgoing air. +/// +/// Figure 224 illustrates fan port use. +/// Figure 224 — Fan port use +class IFC_PARSE_API IfcFan : public IfcFlowMovingDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcFanTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcFanTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFan (IfcEntityInstanceData* e); + IfcFan (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcFanTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcFan > list; +}; +/// A filter is an apparatus used to remove particulate or gaseous matter from fluids and gases. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcFilter defines the occurrence of any filter; common information about filter types is handled by IfcFilterType. +/// The IfcFilterType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcFilterType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcFilterType has ports or aggregated elements, such objects are reflected at the IfcFilter occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcFilterType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcFilterType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcFilter override the properties defined at IfcFilterType. +/// Refer to the documentation at the supertype IfcFlowTreatmentDevice and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_FilterPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_FilterTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// AIRPARTICLEFILTER +/// +/// Pset_FilterTypeAirParticleFilter (PSET_TYPEDRIVENOVERRIDE) +/// +/// COMPRESSEDAIRFILTER +/// +/// Pset_FilterTypeCompressedAirFilter (PSET_TYPEDRIVENOVERRIDE) +/// +/// WATERFILTER +/// +/// Pset_FilterTypeWaterFilter (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_FilterBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcFilter is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcFilterType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Frame: The material used to construct the filter housing. +/// Media: The material that is used for filtering particulates. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcFilter are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the filter occurrence is defined by IfcFilterType, then the port occurrences must reflect those defined at the IfcFilterType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcFilter PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// AIRPARTICLEFILTER +/// +/// In (AIRCONDITIONING, SINK): Incoming fluid. +/// Out (AIRCONDITIONING, SOURCE): Outgoing fluid. +/// +/// COMPRESSEDAIRFILTER +/// +/// In (COMPRESSEDAIR, SINK): Incoming fluid. +/// Out (COMPRESSEDAIR, SOURCE): Outgoing fluid. +/// +/// ODORFILTER +/// +/// In (EXHAUST, SINK): Incoming fluid. +/// Out (EXHAUST, SOURCE): Outgoing fluid. +/// +/// OILFILTER +/// +/// In (OIL, SINK): Incoming fluid. +/// Out (OIL, SOURCE): Outgoing fluid. +/// +/// STRAINER +/// +/// In (DRAINAGE, SINK): Incoming fluid. +/// Out (DRAINAGE, SOURCE): Outgoing fluid. +/// +/// WATERFILTER +/// +/// In (DOMESTICCOLDWATER, SINK): Incoming fluid. +/// Out (DOMESTICCOLDWATER, SOURCE): Outgoing fluid. +/// +/// Figure 225 illustrates filter port use. +/// Figure 225 — Filter port use +class IFC_PARSE_API IfcFilter : public IfcFlowTreatmentDevice { +public: + boost::optional< ::Ifc4x3_add2::IfcFilterTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcFilterTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFilter (IfcEntityInstanceData* e); + IfcFilter (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcFilterTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcFilter > list; +}; +/// A fire suppression terminal has the purpose of delivering a fluid (gas or liquid) that will suppress a fire. +/// A fire suppression terminal provides for all forms of sprinkler, spreader and other form of terminal that is connected to a pipework system and intended to act in the role of suppressing a fire. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcFireSuppressionTerminal defines the occurrence of any fire suppression terminal; common information about fire suppression terminal types is handled by IfcFireSuppressionTerminalType. +/// The IfcFireSuppressionTerminalType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcFireSuppressionTerminalType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcFireSuppressionTerminalType has ports or aggregated elements, such objects are reflected at the IfcFireSuppressionTerminal occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcFireSuppressionTerminalType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcFireSuppressionTerminalType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcFireSuppressionTerminal override the properties defined at IfcFireSuppressionTerminalType. +/// Refer to the documentation at the supertype IfcFlowTerminal and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_FireSuppressionTerminalTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// BREECHINGINLET +/// +/// Pset_FireSuppressionTerminalTypeBreechingInlet (PSET_TYPEDRIVENOVERRIDE) +/// +/// FIREHYDRANT +/// +/// Pset_FireSuppressionTerminalTypeFireHydrant (PSET_TYPEDRIVENOVERRIDE) +/// +/// HOSEREEL +/// +/// Pset_FireSuppressionTerminalTypeHoseReel (PSET_TYPEDRIVENOVERRIDE) +/// +/// SPRINKLER +/// +/// Pset_FireSuppressionTerminalTypeSprinkler (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_FireSuppressionTerminalBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcFireSuppressionTerminal is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcFireSuppressionTerminalType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Body: The primary material from which the object is constructed. +/// Deflector: The material used to construct the deflector plate. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcFireSuppressionTerminal are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the fire suppression terminal occurrence is defined by IfcFireSuppressionTerminalType, then the port occurrences must reflect those defined at the IfcFireSuppressionTerminalType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcFireSuppressionTerminal PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// FIREHYDRANT +/// +/// Hose (FIREPROTECTION, SOURCE): Fire protection. +/// +/// SPRINKLER +/// +/// Line (FIREPROTECTION, SINK): Fire protection. +class IFC_PARSE_API IfcFireSuppressionTerminal : public IfcFlowTerminal { +public: + boost::optional< ::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFireSuppressionTerminal (IfcEntityInstanceData* e); + IfcFireSuppressionTerminal (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcFireSuppressionTerminalTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcFireSuppressionTerminal > list; +}; +/// A flow instrument reads and displays the value of a particular property of a system at a point, or displays the difference in the value of a property between two points. +/// Instrumentation is typically for the purpose of determining the value of the property at a point in time. It is not the purpose of an instrument to record or integrate the values over time (although they may be connected to recording devices that do perform such a function). This entity provides for all forms of mechanical flow instrument (thermometers, pressure gauges etc.) and electrical flow instruments (ammeters, voltmeters etc.) +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcFlowInstrument defines the occurrence of any flow instrument; common information about flow instrument types is handled by IfcFlowInstrumentType. +/// The IfcFlowInstrumentType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcFlowInstrumentType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcFlowInstrumentType has ports or aggregated elements, such objects are reflected at the IfcFlowInstrument occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcFlowInstrumentType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcFlowInstrumentType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcFlowInstrument override the properties defined at IfcFlowInstrumentType. +/// Refer to the documentation at the supertype IfcDistributionControlElement and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_FlowInstrumentPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_FlowInstrumentTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// PRESSUREGAUGE +/// +/// Pset_FlowInstrumentTypePressureGauge (PSET_TYPEDRIVENOVERRIDE) +/// +/// THERMOMETER +/// +/// Pset_FlowInstrumentTypeThermometer (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_FlowInstrumentBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcFlowInstrument is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcFlowInstrumentType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Casing: Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcFlowInstrument are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the flow instrument occurrence is defined by IfcFlowInstrumentType, then the port occurrences must reflect those defined at the IfcFlowInstrumentType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcFlowInstrument PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// Input (SIGNAL, SINK): Receives signal. +class IFC_PARSE_API IfcFlowInstrument : public IfcDistributionControlElement { +public: + boost::optional< ::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcFlowInstrument (IfcEntityInstanceData* e); + IfcFlowInstrument (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcFlowInstrumentTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcFlowInstrument > list; +}; + +class IFC_PARSE_API IfcGeomodel : public IfcGeotechnicalAssembly { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcGeomodel (IfcEntityInstanceData* e); + IfcGeomodel (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcGeomodel > list; +}; + +class IFC_PARSE_API IfcGeoslice : public IfcGeotechnicalAssembly { +public: + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcGeoslice (IfcEntityInstanceData* e); + IfcGeoslice (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag); + typedef aggregate_of< IfcGeoslice > list; +}; +/// Entity Definition +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcProtectiveDeviceTrippingUnit defines the occurrence of any protective device tripping unit; common information about protective device tripping unit types is handled by IfcProtectiveDeviceTrippingUnitType. +/// The IfcProtectiveDeviceTrippingUnitType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcProtectiveDeviceTrippingUnitType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcProtectiveDeviceTrippingUnitType has ports or aggregated elements, such objects are reflected at the IfcProtectiveDeviceTrippingUnit occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcProtectiveDeviceTrippingUnitType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcProtectiveDeviceTrippingUnitType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcProtectiveDeviceTrippingUnit override the properties defined at IfcProtectiveDeviceTrippingUnitType. +/// Refer to the documentation at the supertype IfcDistributionControlElement and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_ProtectiveDeviceTrippingFunctionGCurve (PSET_TYPEDRIVENOVERRIDE) +/// Pset_ProtectiveDeviceTrippingFunctionICurve (PSET_TYPEDRIVENOVERRIDE) +/// Pset_ProtectiveDeviceTrippingFunctionLCurve (PSET_TYPEDRIVENOVERRIDE) +/// Pset_ProtectiveDeviceTrippingFunctionSCurve (PSET_TYPEDRIVENOVERRIDE) +/// Pset_ProtectiveDeviceTrippingUnitCurrentAdjustment (PSET_TYPEDRIVENOVERRIDE) +/// Pset_ProtectiveDeviceTrippingUnitTimeAdjustment (PSET_TYPEDRIVENOVERRIDE) +/// Pset_ProtectiveDeviceTrippingUnitTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// ELECTROMAGNETIC +/// +/// Pset_ProtectiveDeviceTrippingUnitTypeElectroMagnetic (PSET_TYPEDRIVENOVERRIDE) +/// +/// ELECTRONIC +/// +/// Pset_ProtectiveDeviceTrippingUnitTypeElectronic (PSET_TYPEDRIVENOVERRIDE) +/// +/// RESIDUALCURRENT +/// +/// Pset_ProtectiveDeviceTrippingUnitTypeResidualCurrent (PSET_TYPEDRIVENOVERRIDE) +/// +/// THERMAL +/// +/// Pset_ProtectiveDeviceTrippingUnitTypeThermal (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_ProtectiveDeviceTrippingUnitBaseQuantities +class IFC_PARSE_API IfcProtectiveDeviceTrippingUnit : public IfcDistributionControlElement { +public: + boost::optional< ::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcProtectiveDeviceTrippingUnit (IfcEntityInstanceData* e); + IfcProtectiveDeviceTrippingUnit (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcProtectiveDeviceTrippingUnitTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcProtectiveDeviceTrippingUnit > list; +}; +/// A sensor is a device that measures a physical quantity and converts it into a signal which can be read by an observer or by an instrument. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcSensor defines the occurrence of any sensor; common information about sensor types is handled by IfcSensorType. +/// The IfcSensorType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcSensorType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcSensorType has ports or aggregated elements, such objects are reflected at the IfcSensor occurrence using the IfcRelDefinesByObject relationship. +/// Figure 179 illustrates sensor type use. +/// Figure 179 — Sensor type use +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcSensorType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcSensorType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcSensor override the properties defined at IfcSensorType. +/// Refer to the documentation at the supertype IfcDistributionControlElement and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_SensorPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_SensorTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// CONDUCTANCESENSOR +/// +/// Pset_SensorTypeConductanceSensor (PSET_TYPEDRIVENOVERRIDE) +/// +/// CONTACTSENSOR +/// +/// Pset_SensorTypeContactSensor (PSET_TYPEDRIVENOVERRIDE) +/// +/// FIRESENSOR +/// +/// Pset_SensorTypeFireSensor (PSET_TYPEDRIVENOVERRIDE) +/// +/// FLOWSENSOR +/// +/// Pset_SensorTypeFlowSensor (PSET_TYPEDRIVENOVERRIDE) +/// +/// GASSENSOR +/// +/// Pset_SensorTypeGasSensor (PSET_TYPEDRIVENOVERRIDE) +/// +/// HEATSENSOR +/// +/// Pset_SensorTypeHeatSensor (PSET_TYPEDRIVENOVERRIDE) +/// +/// HUMIDITYSENSOR +/// +/// Pset_SensorTypeHumiditySensor (PSET_TYPEDRIVENOVERRIDE) +/// +/// IONCONCENTRATIONSENSOR +/// +/// Pset_SensorTypeIonConcentrationSensor (PSET_TYPEDRIVENOVERRIDE) +/// +/// LEVEL +/// +/// Pset_SensorTypeLevelSensor (PSET_TYPEDRIVENOVERRIDE) +/// +/// LIGHTSENSOR +/// +/// Pset_SensorTypeLightSensor (PSET_TYPEDRIVENOVERRIDE) +/// +/// MOISTURESENSOR +/// +/// Pset_SensorTypeMoistureSensor (PSET_TYPEDRIVENOVERRIDE) +/// +/// MOVEMENTSENSOR +/// +/// Pset_SensorTypeMovementSensor (PSET_TYPEDRIVENOVERRIDE) +/// +/// PHSENSOR +/// +/// Pset_SensorTypePHSensor (PSET_TYPEDRIVENOVERRIDE) +/// +/// PRESSURESENSOR +/// +/// Pset_SensorTypePressureSensor (PSET_TYPEDRIVENOVERRIDE) +/// +/// RADIATIONSENSOR +/// +/// Pset_SensorTypeRadiationSensor (PSET_TYPEDRIVENOVERRIDE) +/// +/// RADIOACTIVITYSENSOR +/// +/// Pset_SensorTypeRadioactivitySensor (PSET_TYPEDRIVENOVERRIDE) +/// +/// SMOKESENSOR +/// +/// Pset_SensorTypeSmokeSensor (PSET_TYPEDRIVENOVERRIDE) +/// +/// SOUNDSENSOR +/// +/// Pset_SensorTypeSoundSensor (PSET_TYPEDRIVENOVERRIDE) +/// +/// TEMPERATURESENSOR +/// +/// Pset_SensorTypeTemperatureSensor (PSET_TYPEDRIVENOVERRIDE) +/// +/// WINDSENSOR +/// +/// Pset_SensorTypeWindSensor (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_SensorBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcSensor is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcSensorType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Casing: Material from which the casing is constructed. +/// +/// Connection Use Definition +/// The IfcSensor may be connected to other objects as follows using the indicated relationship: +/// +/// IfcDistributionFlowElement (IfcRelFlowControlElements): Sensors may be connected to a flow element for which an aspect of the fluid or flow is measured. +/// IfcElement (IfcRelConnectsElements): Sensors may be attached to the exterior of an element. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcSensor are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the sensor occurrence is defined by IfcSensorType, then the port occurrences must reflect those defined at the IfcSensorType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcSensor PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// Output (SIGNAL, SOURCE): Transmits signal. +/// +/// Figure 180 illustrates sensor port use. +/// Figure 180 — Sensor port use +class IFC_PARSE_API IfcSensor : public IfcDistributionControlElement { +public: + boost::optional< ::Ifc4x3_add2::IfcSensorTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcSensorTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcSensor (IfcEntityInstanceData* e); + IfcSensor (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcSensorTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcSensor > list; +}; +/// A unitary control element combines a number of control components into a single product, such as a thermostat or humidistat. +/// A unitary control element provides a housing for an aggregation of control or electrical distribution elements that, in combination, perform a singular (unitary) purpose. Each item in the aggregation may have its own geometric representation and location. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcUnitaryControlElement defines the occurrence of any unitary control element; common information about unitary control element types is handled by IfcUnitaryControlElementType. +/// The IfcUnitaryControlElementType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcUnitaryControlElementType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcUnitaryControlElementType has ports or aggregated elements, such objects are reflected at the IfcUnitaryControlElement occurrence using the IfcRelDefinesByObject relationship. +/// Figure 181 illustrates unitary control element type use. +/// Figure 181 — Unitary control element type use +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcUnitaryControlElementType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcUnitaryControlElementType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcUnitaryControlElement override the properties defined at IfcUnitaryControlElementType. +/// Refer to the documentation at the supertype IfcDistributionControlElement and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_UnitaryControlElementPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_UnitaryControlElementTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_UnitaryControlElementBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcUnitaryControlElement is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcUnitaryControlElementType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Casing: Material from which the casing is constructed. +/// +/// Connection Use Definition +/// The IfcUnitaryControlElement may be connected to other objects as follows using the indicated relationship: +/// +/// IfcDistributionFlowElement (IfcRelFlowControlElements): Sensors may be connected to a flow element for which an aspect of the fluid or flow is measured. +/// IfcElement (IfcRelConnectsElements): Sensors may be attached to the exterior of an element. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcUnitaryControlElement are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the unitary control element occurrence is defined by IfcUnitaryControlElementType, then the port occurrences must reflect those defined at the IfcUnitaryControlElementType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcUnitaryControlElement PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// THERMOSTAT +/// +/// Control (CONTROL, SOURCE): Receives power (typically 24V), and closes the circuit for Fan, Heat, and Cool. Port may be aggregated into sub-ports: 'Fan'(SIGNAL,SOURCE), 'Heat'(SIGNAL,SOURCE), and 'Cool'(SIGNAL,SOURCE) +/// +/// Figure 182 illustrates unitary control element port use. +/// Figure 182 — Unitary control element port use +class IFC_PARSE_API IfcUnitaryControlElement : public IfcDistributionControlElement { +public: + boost::optional< ::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcUnitaryControlElement (IfcEntityInstanceData* e); + IfcUnitaryControlElement (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcUnitaryControlElementTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcUnitaryControlElement > list; +}; +/// An actuator is a mechanical device for moving or controlling a mechanism or system. An actuator takes energy, usually created by air, electricity, or liquid, and converts that into some kind of motion. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcActuator defines the occurrence of any actuator; common information about actuator types is handled by IfcActuatorType. +/// The IfcActuatorType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcActuatorType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcActuatorType has ports or aggregated elements, such objects are reflected at the IfcActuator occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcActuatorType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcActuatorType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcActuator override the properties defined at IfcActuatorType. +/// Refer to the documentation at the supertype IfcDistributionControlElement and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_ActuatorPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_ActuatorTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// Pset_ActuatorTypeLinearActuation (PSET_TYPEDRIVENOVERRIDE) +/// Pset_ActuatorTypeRotationalActuation (PSET_TYPEDRIVENOVERRIDE) +/// +/// ELECTRICACTUATOR +/// +/// Pset_ActuatorTypeElectricActuator (PSET_TYPEDRIVENOVERRIDE) +/// +/// HYDRAULICACTUATOR +/// +/// Pset_ActuatorTypeHydraulicActuator (PSET_TYPEDRIVENOVERRIDE) +/// +/// PNEUMATICACTUATOR +/// +/// Pset_ActuatorTypePneumaticActuator (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_ActuatorBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcActuator is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcActuatorType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Casing: Material from which the casing is constructed. +/// +/// Connection Use Definition +/// The IfcActuator may be connected to other objects as follows using the indicated relationship: +/// +/// IfcFlowController (IfcRelFlowControlElements): Indicates a connected valve, damper, or switch controlled by the actuator. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcActuator are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the actuator occurrence is defined by IfcActuatorType, then the port occurrences must reflect those defined at the IfcActuatorType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcActuator PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// Input (SIGNAL, SINK): Receives signal. +class IFC_PARSE_API IfcActuator : public IfcDistributionControlElement { +public: + boost::optional< ::Ifc4x3_add2::IfcActuatorTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcActuatorTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcActuator (IfcEntityInstanceData* e); + IfcActuator (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcActuatorTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcActuator > list; +}; +/// An alarm is a device that signals the existence of a condition or situation that is outside the boundaries of normal expectation or that activates such a device. +/// Alarms include the provision of break glass buttons and manual pull boxes that are used to activate alarms. +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcAlarm defines the occurrence of any alarm; common information about alarm types is handled by IfcAlarmType. +/// The IfcAlarmType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcAlarmType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcAlarmType has ports or aggregated elements, such objects are reflected at the IfcAlarm occurrence using the IfcRelDefinesByObject relationship. +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcAlarmType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcAlarmType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcAlarm override the properties defined at IfcAlarmType. +/// Refer to the documentation at the supertype IfcDistributionControlElement and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// Pset_AlarmPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_AlarmTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_AlarmBaseQuantities +/// +/// Material Use Definition +/// The material of the IfcAlarm is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcAlarmType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Casing: Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcAlarm are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the alarm occurrence is defined by IfcAlarmType, then the port occurrences must reflect those defined at the IfcAlarmType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcAlarm PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// Input (SIGNAL, SINK): Receives signal. +class IFC_PARSE_API IfcAlarm : public IfcDistributionControlElement { +public: + boost::optional< ::Ifc4x3_add2::IfcAlarmTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcAlarmTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcAlarm (IfcEntityInstanceData* e); + IfcAlarm (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcAlarmTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcAlarm > list; +}; +/// A controller is a device that monitors inputs and controls outputs within a building automation system. +/// A controller may be physical (having placement within a spatial structure) or logical (a software interface or aggregated within a programmable physical controller). +/// +/// HISTORY  New entity in IFC2x4 +/// +/// Type Use Definition +/// IfcController defines the occurrence of any controller; common information about controller types is handled by IfcControllerType. +/// The IfcControllerType (if present) may establish the common type name, usage (predefined type), properties, materials, ports, composition, assignments, and representations. +/// The IfcControllerType is attached using the IfcRelDefinesByType objectified relationship and is accessible by the IsTypedBy inverse attribute. +/// If the IfcControllerType has ports or aggregated elements, such objects are reflected at the IfcController occurrence using the IfcRelDefinesByObject relationship. +/// Figure 177 illustrates controller type use. +/// Figure 177 — Controller type use +/// +/// Property Use Definition +/// The property sets relating to this entity are defined by IfcPropertySet and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// Property sets may also be specified at the IfcControllerType, defining the common property data for all occurrences of the same type. +/// They are then accessible by the IsTypedBy inverse attribute pointing to IfcControllerType.HasPropertySets. +/// If both are given, then the properties directly defined at IfcController override the properties defined at IfcControllerType. +/// Refer to the documentation at the supertype IfcDistributionControlElement and ancestors for inherited property set definitions. +/// The following property set definitions are applicable to this entity: +/// (All Types) +/// +/// Pset_ControllerPHistory (PSET_PERFORMANCEDRIVEN) +/// Pset_ControllerTypeCommon (PSET_TYPEDRIVENOVERRIDE) +/// +/// FLOATING +/// +/// Pset_ControllerTypeFloating (PSET_TYPEDRIVENOVERRIDE) +/// +/// MULTIPOSITION +/// +/// Pset_ControllerTypeMultiPosition (PSET_TYPEDRIVENOVERRIDE) +/// +/// PROGRAMMABLE +/// +/// Pset_ControllerTypeProgrammable (PSET_TYPEDRIVENOVERRIDE) +/// +/// PROPORTIONAL +/// +/// Pset_ControllerTypeProportional (PSET_TYPEDRIVENOVERRIDE) +/// +/// TWOPOSITION +/// +/// Pset_ControllerTypeTwoPosition (PSET_TYPEDRIVENOVERRIDE) +/// +/// Quantity Use Definition +/// The quantities relating to this entity are defined by IfcElementQuantity and attached by the IfcRelDefinesByProperties relationship. +/// They are accessible by the IsDefinedBy inverse attribute. +/// The following base quantities are defined and shall be exchanged with the IfcElementQuantity.Name = 'BaseQuantities'. +/// Other quantities, being subjected to local standard of measurement, may be defined with another string value assigned to Name. +/// In this case a valid value for MethodOfMeasurement shall be provided. +/// +/// Qto_ControllerBaseQuantities +/// +/// Composition Use Definition +/// The IfcController may be aggregated into components using IfcRelAggregates where RelatingObject refers to the enclosing IfcController and RelatedObjects contains one or more components. Aggregation use is defined for the following predefined types: +/// +/// PROGRAMMABLE +/// +/// May contain IfcController components. Programmable Logic Controllers may be decomposed into logical elements for values and operations. +/// +/// Material Use Definition +/// The material of the IfcController is defined by IfcMaterialConstituentSet or as a fallback by IfcMaterial, and attached by the RelatingMaterial attribute on the IfcRelAssociatesMaterial relationship. It is accessible by the HasAssociations inverse attribute. Material information can also be given at the IfcControllerType, defining the common attribute data for all occurrences of the same type. The following keywords for IfcMaterialConstituentSet.MaterialConstituents[n].Name shall be used: +/// +/// Casing: Material from which the casing is constructed. +/// +/// Port Use Definition +/// The distribution ports relating to the IfcController are defined by IfcDistributionPort and attached by the IfcRelConnectsPortToElement relationship. +/// If the controller occurrence is defined by IfcControllerType, then the port occurrences must reflect those defined at the IfcControllerType using the IfcRelDefinesByObject relationship. +/// Ports are specific to the IfcController PredefinedType as follows indicated by the IfcDistributionPort Name, PredefinedType, and FlowDirection: +/// +/// FLOATING +/// +/// Input (SIGNAL, SINK): Receives the first parameter. +/// Modifier (SIGNAL, SINK): Receives the second parameter (if applicable). +/// Output (SIGNAL, SOURCE): Sets the output value. +/// +/// MULTIPOSITION +/// +/// Input (SIGNAL, SINK): Receives the first parameter. +/// Modifier (SIGNAL, SINK): Receives the second parameter (if applicable). +/// Output (SIGNAL, SOURCE): Sets the output value. +/// +/// PROGRAMMABLE +/// +/// Power (ELECTRICAL, SINK): Receives electrical power. +/// Control (CONTROL, SINK): Direct communication to the device (e.g. serial port). +/// Data (DATA, SOURCE): Network communication to the device (e.g. TCP/IP network). +/// Input#1 (SIGNAL, SINK): Analog or digital inputs. +/// Output#1 (SIGNAL, SOURCE): Analog or digital outputs. +/// +/// PROPORTIONAL +/// +/// Input (SIGNAL, SINK): Receives the first parameter. +/// Modifier (SIGNAL, SINK): Receives the second parameter (if applicable). +/// Output (SIGNAL, SOURCE): Sets the output value. +/// +/// TWOPOSITION +/// +/// Input (SIGNAL, SINK): Receives the first parameter. +/// Modifier (SIGNAL, SINK): Receives the second parameter (if applicable). +/// Output (SIGNAL, SOURCE): Sets the output value. +/// +/// Figure 178 illustrates controller port use. +/// Figure 178 — Controller port use +class IFC_PARSE_API IfcController : public IfcDistributionControlElement { +public: + boost::optional< ::Ifc4x3_add2::IfcControllerTypeEnum::Value > PredefinedType() const; + void setPredefinedType(boost::optional< ::Ifc4x3_add2::IfcControllerTypeEnum::Value > v); + virtual const IfcParse::entity& declaration() const; + static const IfcParse::entity& Class(); + IfcController (IfcEntityInstanceData* e); + IfcController (std::string v1_GlobalId, ::Ifc4x3_add2::IfcOwnerHistory* v2_OwnerHistory, boost::optional< std::string > v3_Name, boost::optional< std::string > v4_Description, boost::optional< std::string > v5_ObjectType, ::Ifc4x3_add2::IfcObjectPlacement* v6_ObjectPlacement, ::Ifc4x3_add2::IfcProductRepresentation* v7_Representation, boost::optional< std::string > v8_Tag, boost::optional< ::Ifc4x3_add2::IfcControllerTypeEnum::Value > v9_PredefinedType); + typedef aggregate_of< IfcController > list; +}; + +}; + +#endif diff --git a/src/ifcparse/IfcHierarchyHelper.cpp b/src/ifcparse/IfcHierarchyHelper.cpp index 5387b90d0c..5ec1115a86 100644 --- a/src/ifcparse/IfcHierarchyHelper.cpp +++ b/src/ifcparse/IfcHierarchyHelper.cpp @@ -584,6 +584,14 @@ Ifc4x3_add1::IfcStyledItem* create_styled_item(Ifc4x3_add1::IfcRepresentationIte } #endif +#ifdef HAS_SCHEMA_4x3_add2 +Ifc4x3_add2::IfcStyledItem* create_styled_item(Ifc4x3_add2::IfcRepresentationItem* item, Ifc4x3_add2::IfcPresentationStyle* style) { + boost::shared_ptr> styles(new aggregate_of()); + styles->push(style); + return new Ifc4x3_add2::IfcStyledItem(item, styles, boost::none); +} +#endif + template void setSurfaceColour_2x3(IfcHierarchyHelper& file, typename Schema::IfcRepresentation* rep, typename Schema::IfcPresentationStyleAssignment* style_assignment) { @@ -905,6 +913,33 @@ void setSurfaceColour(IfcHierarchyHelper& file, Ifc4x3_add1::IfcRep } #endif +#ifdef HAS_SCHEMA_4x3_add2 +Ifc4x3_add2::IfcPresentationStyle* addStyleAssignment(IfcHierarchyHelper& file, double r, double g, double b, double a) +{ + return addStyleAssignment_4x3(file, r, g, b, a); +} + +Ifc4x3_add2::IfcPresentationStyle* setSurfaceColour(IfcHierarchyHelper& file, Ifc4x3_add2::IfcProductRepresentation* shape, double r, double g, double b, double a) +{ + return setSurfaceColour_4x3(file, shape, r, g, b, a); +} + +Ifc4x3_add2::IfcPresentationStyle* setSurfaceColour(IfcHierarchyHelper& file, Ifc4x3_add2::IfcRepresentation* shape, double r, double g, double b, double a) +{ + return setSurfaceColour_4x3(file, shape, r, g, b, a); +} + +void setSurfaceColour(IfcHierarchyHelper& file, Ifc4x3_add2::IfcProductRepresentation* shape, Ifc4x3_add2::IfcPresentationStyle* style) +{ + setSurfaceColour_4x3(file, shape, style); +} + +void setSurfaceColour(IfcHierarchyHelper& file, Ifc4x3_add2::IfcRepresentation* shape, Ifc4x3_add2::IfcPresentationStyle* style) +{ + setSurfaceColour_4x3(file, shape, style); +} +#endif + template typename Schema::IfcProductDefinitionShape* IfcHierarchyHelper::addMappedItem( typename Schema::IfcShapeRepresentation* rep, @@ -1036,3 +1071,6 @@ template IFC_PARSE_API class IfcHierarchyHelper; #ifdef HAS_SCHEMA_4x3_add1 template IFC_PARSE_API class IfcHierarchyHelper; #endif +#ifdef HAS_SCHEMA_4x3_add2 +template IFC_PARSE_API class IfcHierarchyHelper; +#endif diff --git a/src/ifcparse/IfcHierarchyHelper.h b/src/ifcparse/IfcHierarchyHelper.h index 885d5ebea3..006c25391b 100644 --- a/src/ifcparse/IfcHierarchyHelper.h +++ b/src/ifcparse/IfcHierarchyHelper.h @@ -65,6 +65,9 @@ #ifdef HAS_SCHEMA_4x3_add1 #include "../ifcparse/Ifc4x3_add1.h" #endif +#ifdef HAS_SCHEMA_4x3_add2 +#include "../ifcparse/Ifc4x3_add2.h" +#endif #include "../ifcparse/IfcFile.h" #include "../ifcparse/IfcWrite.h" @@ -313,6 +316,27 @@ namespace { } #endif +#ifdef HAS_SCHEMA_4x3_add2 + Ifc4x3_add2::IfcObjectDefinition* get_parent_of_relation(Ifc4x3_add2::IfcRelContainedInSpatialStructure* t) { + return t->RelatingStructure(); + } + + aggregate_of_instance::ptr get_children_of_relation(Ifc4x3_add2::IfcRelContainedInSpatialStructure* t) { + return t->RelatedElements()->generalize(); + } + + aggregate_of_instance::ptr get_children_of_relation(Ifc4x3_add2::IfcRelAggregates* t) { + return t->RelatedObjects()->generalize(); + } + + void set_children_of_relation(Ifc4x3_add2::IfcRelContainedInSpatialStructure* t, aggregate_of_instance::ptr& cs) { + t->setRelatedElements(cs->as()); + } + + void set_children_of_relation(Ifc4x3_add2::IfcRelAggregates* t, aggregate_of_instance::ptr& cs) { + t->setRelatedObjects(cs->as()); + } +#endif IfcUtil::IfcBaseClass* get_parent_of_relation(IfcUtil::IfcBaseClass* t) { return *t->data().getArgument( @@ -564,6 +588,14 @@ IFC_PARSE_API void setSurfaceColour(IfcHierarchyHelper& file, Ifc4x IFC_PARSE_API void setSurfaceColour(IfcHierarchyHelper& file, Ifc4x3_add1::IfcRepresentation* shape, Ifc4x3_add1::IfcPresentationStyle* style); #endif +#ifdef HAS_SCHEMA_4x3_add2 +IFC_PARSE_API Ifc4x3_add2::IfcPresentationStyle* addStyleAssignment(IfcHierarchyHelper& file, double r, double g, double b, double a = 1.0); +IFC_PARSE_API Ifc4x3_add2::IfcPresentationStyle* setSurfaceColour(IfcHierarchyHelper& file, Ifc4x3_add2::IfcProductRepresentation* shape, double r, double g, double b, double a = 1.0); +IFC_PARSE_API Ifc4x3_add2::IfcPresentationStyle* setSurfaceColour(IfcHierarchyHelper& file, Ifc4x3_add2::IfcRepresentation* shape, double r, double g, double b, double a = 1.0); +IFC_PARSE_API void setSurfaceColour(IfcHierarchyHelper& file, Ifc4x3_add2::IfcProductRepresentation* shape, Ifc4x3_add2::IfcPresentationStyle* style); +IFC_PARSE_API void setSurfaceColour(IfcHierarchyHelper& file, Ifc4x3_add2::IfcRepresentation* shape, Ifc4x3_add2::IfcPresentationStyle* style); +#endif + /* template <> inline void IfcHierarchyHelper::addRelatedObject (typename Schema::IfcObjectDefinition* relating_structure, diff --git a/src/ifcparse/IfcSIPrefix.cpp b/src/ifcparse/IfcSIPrefix.cpp index 032580f90a..5dafd7c141 100644 --- a/src/ifcparse/IfcSIPrefix.cpp +++ b/src/ifcparse/IfcSIPrefix.cpp @@ -52,6 +52,9 @@ #ifdef HAS_SCHEMA_4x3_add1 #include "../ifcparse/Ifc4x3_add1.h" #endif +#ifdef HAS_SCHEMA_4x3_add2 +#include "../ifcparse/Ifc4x3_add2.h" +#endif double IfcParse::IfcSIPrefixToValue(const std::string& v) { if ( v == "EXA" ) return 1.e18; @@ -133,6 +136,9 @@ template double IFC_PARSE_API IfcParse::get_SI_equivalent(Ifc4x3::IfcNam #ifdef HAS_SCHEMA_4x3_add1 template double IFC_PARSE_API IfcParse::get_SI_equivalent(Ifc4x3_add1::IfcNamedUnit* named_unit); #endif +#ifdef HAS_SCHEMA_4x3_add2 +template double IFC_PARSE_API IfcParse::get_SI_equivalent(Ifc4x3_add2::IfcNamedUnit* named_unit); +#endif #else @@ -169,5 +175,8 @@ template double IFC_PARSE_API IfcParse::get_SI_equivalent(typename I #ifdef HAS_SCHEMA_4x3_add1 template double IFC_PARSE_API IfcParse::get_SI_equivalent(typename Ifc4x3_add1::IfcNamedUnit* named_unit); #endif +#ifdef HAS_SCHEMA_4x3_add2 +template double IFC_PARSE_API IfcParse::get_SI_equivalent(typename Ifc4x3_add2::IfcNamedUnit* named_unit); +#endif #endif diff --git a/src/ifcparse/IfcSchema.cpp b/src/ifcparse/IfcSchema.cpp index a21023a865..0ea28d8982 100644 --- a/src/ifcparse/IfcSchema.cpp +++ b/src/ifcparse/IfcSchema.cpp @@ -124,6 +124,9 @@ void IfcParse::register_schema(schema_definition* s) { #ifdef HAS_SCHEMA_4x3_add1 #include "../ifcparse/Ifc4x3_add1.h" #endif +#ifdef HAS_SCHEMA_4x3_add2 +#include "../ifcparse/Ifc4x3_add2.h" +#endif const IfcParse::schema_definition* IfcParse::schema_by_name(const std::string& name) { // TODO: initialize automatically somehow @@ -160,6 +163,9 @@ const IfcParse::schema_definition* IfcParse::schema_by_name(const std::string& n #ifdef HAS_SCHEMA_4x3_add1 Ifc4x3_add1::get_schema(); #endif +#ifdef HAS_SCHEMA_4x3_add2 + Ifc4x3_add2::get_schema(); +#endif std::map::const_iterator it = schemas.find(boost::to_upper_copy(name)); if (it == schemas.end()) { @@ -217,6 +223,9 @@ void IfcParse::clear_schemas() { #ifdef HAS_SCHEMA_4x3_add1 Ifc4x3_add1::clear_schema(); #endif +#ifdef HAS_SCHEMA_4x3_add2 + Ifc4x3_add2::clear_schema(); +#endif // clear any remaining registered schemas // we pop schemas until map is empty, because map iteration is invalidated after each erasure diff --git a/src/ifcwrap/IfcGeomWrapper.i b/src/ifcwrap/IfcGeomWrapper.i index b2361767cb..1e37fb9819 100644 --- a/src/ifcwrap/IfcGeomWrapper.i +++ b/src/ifcwrap/IfcGeomWrapper.i @@ -611,7 +611,12 @@ struct ShapeRTTI : public boost::static_visitor return helper_fn_create_shape(settings, instance, representation); } #endif - + #ifdef HAS_SCHEMA_4x3_add2 + if (schema_name == "IFC4X3_ADD2") { + return helper_fn_create_shape(settings, instance, representation); + } + #endif + throw IfcParse::IfcException("No geometry support for " + schema_name); } %} diff --git a/src/ifcwrap/IfcPython.i b/src/ifcwrap/IfcPython.i index b03d9f0700..4c259c68a4 100644 --- a/src/ifcwrap/IfcPython.i +++ b/src/ifcwrap/IfcPython.i @@ -119,6 +119,10 @@ #ifdef HAS_SCHEMA_4x3_add1 #include "../ifcparse/Ifc4x3_add1.h" #endif +#ifdef HAS_SCHEMA_4x3_add2 +#include "../ifcparse/Ifc4x3_add2.h" +#endif + #include "../ifcparse/IfcBaseClass.h" #include "../ifcparse/IfcFile.h" @@ -183,6 +187,9 @@ #ifdef HAS_SCHEMA_4x3_add1 #include "../ifcparse/Ifc4x3_add1.h" #endif +#ifdef HAS_SCHEMA_4x3_add2 + #include "../ifcparse/Ifc4x3_add2.h" +#endif #include "../ifcparse/IfcBaseClass.h" #include "../ifcparse/IfcFile.h" From 1f6d23c19cd171ff44626f56fce9aa36c07c15ff Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 13 Oct 2023 23:36:24 +1100 Subject: [PATCH 068/220] Minor fixes to placement utilities for getting mapped item matrixes --- .../ifcopenshell/util/placement.py | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/ifcopenshell-python/ifcopenshell/util/placement.py b/src/ifcopenshell-python/ifcopenshell/util/placement.py index 218f58e2f7..b96287e7df 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/placement.py +++ b/src/ifcopenshell-python/ifcopenshell/util/placement.py @@ -118,9 +118,9 @@ def get_cartesiantransformationoperator3d(inst): :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 @@ -129,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 @@ -163,8 +163,10 @@ def get_mappeditem_transformation(item): :return: A 4x4 numpy transformation matrix :rtype: np.array[np.array[float]] """ - m4 = ifcopenshell.util.placement.get_axis2placement(item.MappingSource.MappingOrigin) - return get_cartesiantransformationoperator(item.MappingTarget) @ m4 + 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): From 42719d3fe3cb7a9652353674a94d78f2617da333 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 13 Oct 2023 23:37:00 +1100 Subject: [PATCH 069/220] Fix bug where native meshes had normal smoothing enabled by default --- src/blenderbim/blenderbim/bim/import_ifc.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/blenderbim/blenderbim/bim/import_ifc.py b/src/blenderbim/blenderbim/bim/import_ifc.py index 1c56c29581..c25cc1f42d 100644 --- a/src/blenderbim/blenderbim/bim/import_ifc.py +++ b/src/blenderbim/blenderbim/bim/import_ifc.py @@ -1158,6 +1158,7 @@ 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"] From 25df2f64145e522eaed45c67c708965b6e210300 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 13 Oct 2023 23:39:31 +1100 Subject: [PATCH 070/220] See #3884. Rewrite native geometry handling with a much more robust approach fixing a number of invalid coordinates and simplifying things. --- src/blenderbim/blenderbim/bim/import_ifc.py | 279 +++++++++----------- 1 file changed, 126 insertions(+), 153 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/import_ifc.py b/src/blenderbim/blenderbim/bim/import_ifc.py index c25cc1f42d..f8ce4289d7 100644 --- a/src/blenderbim/blenderbim/bim/import_ifc.py +++ b/src/blenderbim/blenderbim/bim/import_ifc.py @@ -473,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 rep.Items 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 @@ -488,51 +526,52 @@ 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 = representation.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 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): + 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): @@ -781,20 +820,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) @@ -1099,7 +1134,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 ...] @@ -1116,10 +1151,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") @@ -1136,19 +1172,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"]) @@ -1165,19 +1215,6 @@ class IfcImporter: 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"]: @@ -1272,63 +1309,34 @@ 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 = self.create_generic_shape(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 in native_data["representation"].Items: + # TODO: support inner radius, start param, and end param + geometry = self.create_generic_shape(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 = 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 = self.create_generic_shape(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 = {} @@ -1730,41 +1738,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 From f1ab02b311b48b90f3f01834d9af30a47eb89bd3 Mon Sep 17 00:00:00 2001 From: Massimo Fabbro Date: Fri, 13 Oct 2023 16:07:35 +0200 Subject: [PATCH 071/220] Fix bug in covering/space tool with matrix global and local --- .../blenderbim/bim/module/covering/workspace.py | 2 +- src/blenderbim/blenderbim/core/covering.py | 1 + src/blenderbim/blenderbim/core/spatial.py | 1 + src/blenderbim/blenderbim/core/tool.py | 1 + src/blenderbim/blenderbim/tool/spatial.py | 15 ++++++++++----- 5 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/covering/workspace.py b/src/blenderbim/blenderbim/bim/module/covering/workspace.py index 81fce1601d..1fae82b3c4 100644 --- a/src/blenderbim/blenderbim/bim/module/covering/workspace.py +++ b/src/blenderbim/blenderbim/bim/module/covering/workspace.py @@ -131,7 +131,7 @@ class CoveringToolUI: elif (element and bpy.context.selected_objects and element.is_a("IfcCovering") and - AuthoringData.data["predefined_type"] == "FLOORING" 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") diff --git a/src/blenderbim/blenderbim/core/covering.py b/src/blenderbim/blenderbim/core/covering.py index 17098bc6a5..b7aebf457e 100644 --- a/src/blenderbim/blenderbim/core/covering.py +++ b/src/blenderbim/blenderbim/core/covering.py @@ -80,6 +80,7 @@ def regen_selected_flooring_object(ifc, spatial, model, Type, geometry): 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) diff --git a/src/blenderbim/blenderbim/core/spatial.py b/src/blenderbim/blenderbim/core/spatial.py index 41307096c3..ccebb24f94 100644 --- a/src/blenderbim/blenderbim/core/spatial.py +++ b/src/blenderbim/blenderbim/core/spatial.py @@ -157,6 +157,7 @@ def generate_space(ifc, spatial, model, Type): 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: diff --git a/src/blenderbim/blenderbim/core/tool.py b/src/blenderbim/blenderbim/core/tool.py index b34dd8b7f3..8cdb4f82a8 100644 --- a/src/blenderbim/blenderbim/core/tool.py +++ b/src/blenderbim/blenderbim/core/tool.py @@ -828,6 +828,7 @@ class Spatial: 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 set_obj_origin_to_cursor_position(cls, obj): pass diff --git a/src/blenderbim/blenderbim/tool/spatial.py b/src/blenderbim/blenderbim/tool/spatial.py index 95ee9bffbc..369d7c56dc 100644 --- a/src/blenderbim/blenderbim/tool/spatial.py +++ b/src/blenderbim/blenderbim/tool/spatial.py @@ -485,11 +485,7 @@ class Spatial(blenderbim.core.tool.Spatial): @classmethod def get_bmesh_from_polygon(cls, poly, h): - if bpy.context.selected_objects and bpy.context.active_object: - mat = bpy.context.active_object.matrix_world - else: - mat = Matrix() - + mat = Matrix() bm = bmesh.new() bm.verts.index_update() bm.edges.index_update() @@ -534,6 +530,15 @@ class Spatial(blenderbim.core.tool.Spatial): bmesh.free() 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 From f8b09b35252fb6db84742b534aceec6b8d89a2e7 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Fri, 13 Oct 2023 22:34:35 +0200 Subject: [PATCH 072/220] Update build-deps.cmd: proj compilation --- win/build-deps.cmd | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/win/build-deps.cmd b/win/build-deps.cmd index 923d8cc066..ec653b2b9c 100644 --- a/win/build-deps.cmd +++ b/win/build-deps.cmd @@ -206,6 +206,7 @@ pushd "%DEPS_DIR%\sqlite-amalgamation-3430100" cl /c sqlite3.c lib /OUT:%INSTALL_DIR%\sqlite3\lib\sqlite3.lib sqlite3.obj cl sqlite3.c shell.c /link /out:%INSTALL_DIR%\sqlite3\bin\sqlite3.exe +set PATH=%PATH%;%INSTALL_DIR%\sqlite3\bin copy sqlite3.h %INSTALL_DIR%\sqlite3\include popd @@ -217,9 +218,11 @@ call :ExtractArchive proj-9.2.1.zip "%DEPS_DIR%" "%DEPS_DIR%\proj-9.2.1" IF NOT %ERRORLEVEL%==0 GOTO :Error cd "%DEPENDENCY_DIR%" call :RunCMake -DCMAKE_INSTALL_PREFIX="%INSTALL_DIR%\proj-9.2.1" ^ - -DSQLITE3_INCLUDE_DIR=%INSTALL_DIR%\sqlite3\include -DSQLITE3_LIBRARY=%INSTALL_DIR%\sqlite3\lib\sqlite3.lib ^ + -DSQLITE3_INCLUDE_DIR=%INSTALL_DIR%\sqlite3\include ^ + -DSQLITE3_LIBRARY=%INSTALL_DIR%\sqlite3\lib\sqlite3.lib ^ -DENABLE_TIFF=Off -DENABLE_CURL=Off -DBUILD_PROJSYNC=Off ^ - -DBUILD_SHARED_LIBS=Off + -DBUILD_SHARED_LIBS=Off ^ + -DBUILD_TESTING=Off IF NOT %ERRORLEVEL%==0 GOTO :Error call :BuildSolution "%DEPENDENCY_DIR%\%BUILD_DIR%\PROJ.sln" %BUILD_CFG% IF NOT %ERRORLEVEL%==0 GOTO :Error From a9dfc9a9fd1396175afcf640488962abac661415 Mon Sep 17 00:00:00 2001 From: isma3lMB Date: Sat, 14 Oct 2023 15:31:33 +0200 Subject: [PATCH 073/220] Adding support for non ascii characters when reporting --- src/ifctester/ifctester/reporter.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ifctester/ifctester/reporter.py b/src/ifctester/ifctester/reporter.py index e9b139b829..8e2b183fb1 100644 --- a/src/ifctester/ifctester/reporter.py +++ b/src/ifctester/ifctester/reporter.py @@ -151,7 +151,7 @@ class Txt(Console): print(self.text) def to_file(self, filepath): - with open(filepath, "w") as outfile: + with open(filepath, "w", encoding="utf-8") as outfile: return outfile.write(self.text) @@ -273,8 +273,8 @@ class Json(Reporter): def to_file(self, filepath): import json - with open(filepath, "w") as outfile: - return json.dump(self.results, outfile) + with open(filepath, "w", encoding="utf-8") as outfile: + return json.dump(self.results, outfile, ensure_ascii=False) class Html(Json): @@ -303,7 +303,7 @@ class Html(Json): import pystache with open(os.path.join(cwd, "templates", "report.html"), "r") as file: - with open(filepath, "w") as outfile: + with open(filepath, "w", encoding="utf-8") as outfile: return outfile.write(pystache.render(file.read(), self.results)) From 7107a91f6f08658c9e72e5e53dae42207af4d8fe Mon Sep 17 00:00:00 2001 From: Bruno Postle Date: Sat, 14 Oct 2023 21:54:16 +0100 Subject: [PATCH 074/220] BlenderBIM keep camera position on git switch New 'zoom extents' behaviour on IFC load is unwanted when switching between git revisions --- src/blenderbim/blenderbim/tool/ifcgit.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/tool/ifcgit.py b/src/blenderbim/blenderbim/tool/ifcgit.py index 6dd445c498..518329951e 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,16 @@ 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, bpy.context.scene.BIMProperties.ifc_file, 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 From 58be92d3fc9346b3d643c9ba8b9b3c2ad53b266b Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 15 Oct 2023 08:57:26 +1100 Subject: [PATCH 075/220] New verbose option in util get_pset(s) which lets you get ID and class for complex processing. --- .../ifcopenshell/util/element.py | 87 ++++++++++++------- .../test/util/test_element.py | 66 ++++++++++---- 2 files changed, 108 insertions(+), 45 deletions(-) diff --git a/src/ifcopenshell-python/ifcopenshell/util/element.py b/src/ifcopenshell-python/ifcopenshell/util/element.py index 7f02dc609b..ed121ac95d 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 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] From 14224ac5388f9f8d009f7af14f3eb4a732d04cea Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sun, 15 Oct 2023 22:23:10 +1100 Subject: [PATCH 076/220] Fix #3870. Bug where element filtering wasn't initialised properly when loading a camera for the first time. Raster_x/y would only be set after the handler triggers. This is no longer necessary with the new explicit width / height properties. --- src/blenderbim/blenderbim/tool/drawing.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/blenderbim/blenderbim/tool/drawing.py b/src/blenderbim/blenderbim/tool/drawing.py index 7083cbf131..e3c7628fc7 100644 --- a/src/blenderbim/blenderbim/tool/drawing.py +++ b/src/blenderbim/blenderbim/tool/drawing.py @@ -1661,12 +1661,9 @@ class Drawing(blenderbim.core.tool.Drawing): @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( From c48c1c3b326a1b9bd781e02ab11f5581ac4483b7 Mon Sep 17 00:00:00 2001 From: Bruno Postle Date: Sun, 15 Oct 2023 21:15:32 +0100 Subject: [PATCH 077/220] BlenderBIM minor fix after 7107a91 --- src/blenderbim/blenderbim/tool/ifcgit.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/blenderbim/blenderbim/tool/ifcgit.py b/src/blenderbim/blenderbim/tool/ifcgit.py index 518329951e..a4f60d7bba 100644 --- a/src/blenderbim/blenderbim/tool/ifcgit.py +++ b/src/blenderbim/blenderbim/tool/ifcgit.py @@ -222,9 +222,7 @@ class IfcGit: bpy.data.orphans_purge(do_recursive=True) - settings = import_ifc.IfcImportSettings.factory( - bpy.context, bpy.context.scene.BIMProperties.ifc_file, logging.getLogger("ImportIFC") - ) + 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() From 6e9639446d68211e485e694dd3a748fa3005c0a2 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sun, 15 Oct 2023 20:04:53 -0500 Subject: [PATCH 078/220] Add a preference for particular app to open sheet layout --- src/blenderbim/blenderbim/bim/ui.py | 3 +++ src/blenderbim/blenderbim/core/drawing.py | 2 +- src/blenderbim/blenderbim/tool/drawing.py | 4 ++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/bim/ui.py b/src/blenderbim/blenderbim/bim/ui.py index b773f81a49..53fb4dcb71 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") diff --git a/src/blenderbim/blenderbim/core/drawing.py b/src/blenderbim/blenderbim/core/drawing.py index 3febd51e20..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): diff --git a/src/blenderbim/blenderbim/tool/drawing.py b/src/blenderbim/blenderbim/tool/drawing.py index e3c7628fc7..9c35acf8ad 100644 --- a/src/blenderbim/blenderbim/tool/drawing.py +++ b/src/blenderbim/blenderbim/tool/drawing.py @@ -848,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, From aa182bf047e51fbad05379fc1e28783c7e597781 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 16 Oct 2023 11:59:33 +0500 Subject: [PATCH 079/220] small fix add_profile_representation - use of undefined variables --- .../ifcopenshell/api/geometry/add_profile_representation.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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..b29aaf6cba 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_profile_representation.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_profile_representation.py @@ -140,7 +140,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 +169,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 From e068c523ec01401f84c72468d3c042043d2e9782 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 16 Oct 2023 12:19:18 +0500 Subject: [PATCH 080/220] Keep placement axes recalculating profiles #3879 --- .../blenderbim/bim/module/model/profile.py | 12 +++++++++++- .../api/geometry/add_profile_representation.py | 12 +++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/profile.py b/src/blenderbim/blenderbim/bim/module/model/profile.py index d2576f1185..de5a0a462e 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) 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 b29aaf6cba..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"]), ) From 68f5df73b955ca2499f18ce5acb2de6d1f72012f Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 16 Oct 2023 12:21:20 +0500 Subject: [PATCH 081/220] black formatting --- .../blenderbim/bim/module/model/profile.py | 32 +++++-------------- 1 file changed, 8 insertions(+), 24 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/profile.py b/src/blenderbim/blenderbim/bim/module/model/profile.py index de5a0a462e..8dc104e08e 100644 --- a/src/blenderbim/blenderbim/bim/module/model/profile.py +++ b/src/blenderbim/blenderbim/bim/module/model/profile.py @@ -583,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)) @@ -634,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)) @@ -686,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( @@ -696,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( @@ -711,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( @@ -721,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( From fb9cf75412c1318a32bbf093cf9a024e15f7b374 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Mon, 16 Oct 2023 11:02:30 +0200 Subject: [PATCH 082/220] #3889 Apply handling of openings on IfcFeatureElementSubtraction generically --- src/ifcgeom/IfcGeom.cpp | 97 ++++++++++++++++++++--------------------- 1 file changed, 48 insertions(+), 49 deletions(-) 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()); From ce8598a0b40d761854d970fbe55622da17b5f1ea Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 16 Oct 2023 15:24:02 +0500 Subject: [PATCH 083/220] Fixed issue after 19345ff It wasn't considering that EnumerationReference could be None --- src/ifcopenshell-python/ifcopenshell/api/pset/remove_pset.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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"]) From 24eb1492217031e86d457aa351501cd84eca11e1 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 16 Oct 2023 15:05:40 +0500 Subject: [PATCH 084/220] Support other voiding IfcFeatureElementSubtraction elements #3889 Support other voiding IfcFeatureElementSubtraction besides IfcOpeningElement. --- src/blenderbim/blenderbim/bim/module/model/opening.py | 2 +- .../ifcopenshell/api/root/copy_class.py | 2 +- .../ifcopenshell/api/void/remove_opening.py | 5 +++-- .../test/api/root/test_copy_class.py | 11 +++++++++++ 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/opening.py b/src/blenderbim/blenderbim/bim/module/model/opening.py index 9cb00d0169..adcf1f1079 100644 --- a/src/blenderbim/blenderbim/bim/module/model/opening.py +++ b/src/blenderbim/blenderbim/bim/module/model/opening.py @@ -801,7 +801,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: 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/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/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") From f38952dc51cc4cf1b9ff2563804e0893ae354efd Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 16 Oct 2023 16:23:48 +0500 Subject: [PATCH 085/220] small refactor --- src/blenderbim/blenderbim/bim/import_ifc.py | 2 +- src/blenderbim/blenderbim/bim/module/model/grid.py | 6 ++---- src/blenderbim/blenderbim/bim/module/root/operator.py | 4 ++-- src/blenderbim/blenderbim/bim/module/void/operator.py | 2 +- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/import_ifc.py b/src/blenderbim/blenderbim/bim/import_ifc.py index f8ce4289d7..17cef207a0 100644 --- a/src/blenderbim/blenderbim/bim/import_ifc.py +++ b/src/blenderbim/blenderbim/bim/import_ifc.py @@ -1920,7 +1920,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 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/root/operator.py b/src/blenderbim/blenderbim/bim/module/root/operator.py index b112794595..06fee3979a 100644 --- a/src/blenderbim/blenderbim/bim/module/root/operator.py +++ b/src/blenderbim/blenderbim/bim/module/root/operator.py @@ -107,7 +107,7 @@ class ReassignClass(bpy.types.Operator): }, ) 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"} @@ -180,7 +180,7 @@ class UnlinkObject(bpy.types.Operator): obj = obj_copy if obj in IfcStore.edited_objs: IfcStore.edited_objs.remove(obj) - IfcStore.unlink_element(obj=obj) + tool.Ifc.unlink_element(obj=obj) if obj.data: obj.data = obj.data.copy() for material_slot in obj.material_slots: diff --git a/src/blenderbim/blenderbim/bim/module/void/operator.py b/src/blenderbim/blenderbim/bim/module/void/operator.py index 78b9c619f7..3d4106aa1c 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) From 6c9e130ca831838b4e22361a606940a41c55031f Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 17 Oct 2023 10:47:52 +0500 Subject: [PATCH 086/220] =?UTF-8?q?small=20fix=20f38952dc5=20#3898=20?= =?UTF-8?q?=F0=9F=98=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/blenderbim/blenderbim/bim/module/root/operator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/bim/module/root/operator.py b/src/blenderbim/blenderbim/bim/module/root/operator.py index 06fee3979a..467dfd19ba 100644 --- a/src/blenderbim/blenderbim/bim/module/root/operator.py +++ b/src/blenderbim/blenderbim/bim/module/root/operator.py @@ -180,7 +180,7 @@ class UnlinkObject(bpy.types.Operator): obj = obj_copy if obj in IfcStore.edited_objs: IfcStore.edited_objs.remove(obj) - tool.Ifc.unlink_element(obj=obj) + tool.Ifc.unlink(obj=obj) if obj.data: obj.data = obj.data.copy() for material_slot in obj.material_slots: From 3b31f6932a3be314497319b79af1a59fd0a0c933 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Tue, 17 Oct 2023 09:50:39 +0200 Subject: [PATCH 087/220] Compile IFC4X3_ADD2 express rules --- .../ifcopenshell/express/rules/IFC4X3_ADD2.py | 14045 ++++++++++++++++ 1 file changed, 14045 insertions(+) create mode 100644 src/ifcopenshell-python/ifcopenshell/express/rules/IFC4X3_ADD2.py 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 From 787149da1339ef0a1add7ee020fc94a9a242ad1e Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Tue, 17 Oct 2023 11:04:46 +0200 Subject: [PATCH 088/220] Regen express rule code: lowercase str comparison in express rule generated code --- .../ifcopenshell/express/rules/IFC2X3.py | 34 +++++++++---------- .../ifcopenshell/express/rules/IFC4.py | 20 +++++------ .../ifcopenshell/express/rules/IFC4X1.py | 20 +++++------ .../ifcopenshell/express/rules/IFC4X2.py | 20 +++++------ .../ifcopenshell/express/rules/IFC4X3.py | 20 +++++------ .../ifcopenshell/express/rules/IFC4X3_ADD1.py | 20 +++++------ .../ifcopenshell/express/rules/IFC4X3_RC1.py | 20 +++++------ .../ifcopenshell/express/rules/IFC4X3_RC2.py | 20 +++++------ .../ifcopenshell/express/rules/IFC4X3_RC3.py | 20 +++++------ .../ifcopenshell/express/rules/IFC4X3_RC4.py | 20 +++++------ .../ifcopenshell/express/rules/IFC4X3_TC1.py | 20 +++++------ 11 files changed, 117 insertions(+), 117 deletions(-) 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_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' From 8f43854cbf8c5f59049be4730d4252aad6c828d7 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 17 Oct 2023 20:47:29 +1100 Subject: [PATCH 089/220] Minor fix --- src/ifcfm/ifcfm/cobie24.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ifcfm/ifcfm/cobie24.py b/src/ifcfm/ifcfm/cobie24.py index 4d27c5d70a..c3f8b372a3 100644 --- a/src/ifcfm/ifcfm/cobie24.py +++ b/src/ifcfm/ifcfm/cobie24.py @@ -452,6 +452,8 @@ def get_type_data(ifc_file, element): asset_type = None manufacturer = None model_number = None + warranty_guarantor_parts = None + warranty_guarantor_labor = None warranty_duration_parts = None warranty_duration_labor = None warranty_duration_unit = None From c4474455e978ddd91c417d82cba7d18e05095e52 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 17 Oct 2023 14:12:55 +0500 Subject: [PATCH 090/220] Fix poll error after 3de9915 The error was Traceback (most recent call last): File "\blenderbim\bim\module\model\covering.py", line 64, in poll return element.is_a("IfcCovering") AttributeError: 'NoneType' object has no attribute 'is_a' --- src/blenderbim/blenderbim/bim/module/model/covering.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/covering.py b/src/blenderbim/blenderbim/bim/module/model/covering.py index e0591677ff..81e2c3cfcd 100644 --- a/src/blenderbim/blenderbim/bim/module/model/covering.py +++ b/src/blenderbim/blenderbim/bim/module/model/covering.py @@ -61,7 +61,7 @@ class RegenSelectedFlooringObject(bpy.types.Operator, tool.Ifc.Operator): def poll(cls, context): active_obj = bpy.context.active_object element = tool.Ifc.get_entity(active_obj) - return element.is_a("IfcCovering") + return element and element.is_a("IfcCovering") def _execute(self, context): From 578e15adb266943c472ab061faef5587e1a32f7c Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 17 Oct 2023 14:15:46 +0500 Subject: [PATCH 091/220] refresh_aggregate to show time it took since this can get very time consuming on large projects --- src/blenderbim/blenderbim/bim/module/geometry/operator.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/blenderbim/blenderbim/bim/module/geometry/operator.py b/src/blenderbim/blenderbim/bim/module/geometry/operator.py index bad584b4da..8f4f0a3927 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 @@ -1161,6 +1162,7 @@ class RefreshAggregate(bpy.types.Operator): return {"FINISHED"} def _execute(self, context): + refresh_start_time = time() self.new_active_obj = None old_to_new = {} @@ -1364,6 +1366,9 @@ class RefreshAggregate(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"} From 3f018a419514d4f06c0a24ce82135caa91891bc7 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 17 Oct 2023 15:36:10 +0500 Subject: [PATCH 092/220] localize mathutils dependency in tests #3895 replaced shapebuilder with general ifcopenshell code in `test_add_boolean` (the only place besides `test_shape_builder` where it was used), that way mathutils dependency in tests is localized only to `test_shape_builder.py`. added test-safe option to makefile, so github workflow would ignore `test_shape_builder` tests for now and it wouldn't interrupt the entire workflow --- .github/workflows/ci-py-only.yml | 3 +-- .github/workflows/ci.yml | 3 +-- src/ifcopenshell-python/Makefile | 6 ++++++ .../test/api/geometry/test_add_boolean.py | 21 +++++++++++++------ 4 files changed, 23 insertions(+), 10 deletions(-) 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/src/ifcopenshell-python/Makefile b/src/ifcopenshell-python/Makefile index 105f0faf28..f4b0229617 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 diff --git a/src/ifcopenshell-python/test/api/geometry/test_add_boolean.py b/src/ifcopenshell-python/test/api/geometry/test_add_boolean.py index 041e6c1980..62d7d33a82 100644 --- a/src/ifcopenshell-python/test/api/geometry/test_add_boolean.py +++ b/src/ifcopenshell-python/test/api/geometry/test_add_boolean.py @@ -19,11 +19,10 @@ import test.bootstrap import ifcopenshell.api import numpy as np -from ifcopenshell.util.shape_builder import ShapeBuilder class TestAddBoolean(test.bootstrap.IFC4): - def test_returning_ifc_boolean_result(self): + 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( @@ -36,11 +35,21 @@ class TestAddBoolean(test.bootstrap.IFC4): ) wall = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall") - builder = ShapeBuilder(self.file) - extrusion = builder.extrude(builder.rectangle()) - rep = builder.get_representation(body, extrusion) + 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() == "IfcBooleanResult" + assert rep.Items[0].is_a() == "IfcBooleanClippingResult" assert rep.RepresentationType == "CSG" From 35d66f5d8c8955eb8c1a0303c8561372163abdc7 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 17 Oct 2023 16:38:25 +0500 Subject: [PATCH 093/220] move to tools methods for working with manual booleans #3709 Also fixed a bug adding boolean when pset is already added and representation type in add_boolean ``` File "\addons\blenderbim\tool\ifc.py", line 201, in execute IfcStore.execute_ifc_operator(self, context) File "\addons\blenderbim\bim\ifc.py", line 336, in execute_ifc_operator result = getattr(operator, "_execute")(context) File "\addons\blenderbim\bim\module\model\opening.py", line 534, in _execute data = json.loads(pset["Data"]) File "\addons\blenderbim\libs\site\packages\ifcopenshell\entity_instance.py", line 248, in __getitem__ if key < 0 or key >= len(self): TypeError: '<' not supported between instances of 'str' and 'int' ``` --- .../blenderbim/bim/module/model/opening.py | 32 +++--------- src/blenderbim/blenderbim/tool/model.py | 50 ++++++++++++++++--- src/blenderbim/test/tool/test_model.py | 36 +++++++------ .../ifcopenshell/api/geometry/add_boolean.py | 4 +- 4 files changed, 69 insertions(+), 53 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/opening.py b/src/blenderbim/blenderbim/bim/module/model/opening.py index adcf1f1079..9c98680917 100644 --- a/src/blenderbim/blenderbim/bim/module/model/opening.py +++ b/src/blenderbim/blenderbim/bim/module/model/opening.py @@ -528,17 +528,7 @@ class AddBoolean(Operator, tool.Ifc.Operator): "geometry.add_boolean", tool.Ifc.get(), representation=representation, operator="DIFFERENCE", **mesh_data ) - pset = ifcopenshell.util.element.get_pset(element1, "BBIM_Boolean") - if pset: - pset = tool.Ifc.get().by_id(pset["id"]) - data = json.loads(pset["Data"]) - data.extend([b.id() for b in booleans]) - data = list(set(data)) - else: - pset = ifcopenshell.api.run("pset.add_pset", tool.Ifc.get(), product=element1, name="BBIM_Boolean") - data = [b.id() for b in booleans] - ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": json.dumps(data)}) - + tool.Model.mark_manual_booleans(element1, booleans) tool.Model.clear_scene_openings() blenderbim.core.geometry.switch_representation( @@ -672,17 +662,17 @@ class RemoveBooleans(Operator, tool.Ifc.Operator, AddObjectHelper): except: continue - boolean_id = None + boolean = None for inverse in tool.Ifc.get().get_inverse(item): if inverse.is_a("IfcBooleanResult"): - boolean_id = inverse.id() + 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_id) + 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( @@ -696,18 +686,8 @@ class RemoveBooleans(Operator, tool.Ifc.Operator, AddObjectHelper): ) bpy.data.objects.remove(obj) - for element, boolean_ids in bbim_boolean_updates.items(): - pset = ifcopenshell.util.element.get_pset(element, "BBIM_Boolean") - if not pset: - continue - data = set(json.loads(pset["Data"])) - data -= set(boolean_ids) - data = list(data) - pset = tool.Ifc.get().by_id(pset["id"]) - if data: - ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": json.dumps(data)}) - else: - ifcopenshell.api.run("pset.remove_pset", tool.Ifc.get(), pset=pset) + for element, booleans in bbim_boolean_updates.items(): + tool.Model.unmark_manual_booleans(element, booleans) tool.Blender.set_active_object(upstream_obj) return {"FINISHED"} diff --git a/src/blenderbim/blenderbim/tool/model.py b/src/blenderbim/blenderbim/tool/model.py index 5b3ec23be9..67dd73d058 100644 --- a/src/blenderbim/blenderbim/tool/model.py +++ b/src/blenderbim/blenderbim/tool/model.py @@ -474,11 +474,7 @@ class Model(blenderbim.core.tool.Model): return {"thickness": thickness, "offset": offset, "direction_sense": direction_sense} @classmethod - def get_manual_booleans(cls, element): - pset = ifcopenshell.util.element.get_pset(element, "BBIM_Boolean") - if not pset: - return [] - boolean_ids = json.loads(pset["Data"]) + def get_booleans(cls, element): body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") if not body: return [] @@ -487,11 +483,51 @@ class Model(blenderbim.core.tool.Model): while items: item = items.pop() if item.is_a("IfcBooleanResult"): - if item.id() in boolean_ids: - booleans.append(item) + booleans.append(item) items.append(item.FirstOperand) return booleans + @classmethod + def get_manual_booleans(cls, element): + pset = ifcopenshell.util.element.get_pset(element, "BBIM_Boolean") + if not pset: + return [] + boolean_ids = json.loads(pset["Data"]) + body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") + if not body: + 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 + ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": json.dumps(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: + ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"Data": json.dumps(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] diff --git a/src/blenderbim/test/tool/test_model.py b/src/blenderbim/test/tool/test_model.py index 20329a3cad..71289bf64f 100644 --- a/src/blenderbim/test/tool/test_model.py +++ b/src/blenderbim/test/tool/test_model.py @@ -54,10 +54,20 @@ class TestGenerateOccurrenceName(NewFile): class TestGetManualBooleans(NewFile): - def test_run(self): - assert isinstance(subject(), blenderbim.core.tool.Model) + 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(), + }, + ] - def setup_profile_represntation(self, clippings=[]): ifc = ifcopenshell.file() self.ifc = ifc tool.Ifc.set(ifc) @@ -89,21 +99,9 @@ class TestGetManualBooleans(NewFile): "geometry.add_profile_representation", ifc, context=body, profile=hea100, depth=5, clippings=clippings ) ifcopenshell.api.run("geometry.assign_representation", ifc, product=element, representation=representation) - return element, representation - def test_manual_booleans(self): - element, representation = self.setup_profile_represntation() - matrix = np.eye(4) - ifcopenshell.api.run( - "geometry.add_boolean", self.ifc, representation=representation, type="IfcHalfSpaceSolid", matrix=matrix - ) - assert len(subject.get_manual_booleans(element)) == 1 - - def test_automatic_booleans_ignored(self): - clipping = { - "type": "IfcBooleanClippingResult", - "operand_type": "IfcHalfSpaceSolid", - "matrix": np.eye(4).tolist(), - } - element, representation = self.setup_profile_represntation(clippings=[clipping]) + 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 diff --git a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_boolean.py b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_boolean.py index 3973b0a27f..66a5bf3baf 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/geometry/add_boolean.py +++ b/src/ifcopenshell-python/ifcopenshell/api/geometry/add_boolean.py @@ -57,9 +57,11 @@ class Usecase: ) ): items.append(self.file.createIfcBooleanClippingResult(self.settings["operator"], item, result)) + representation_type = "Clipping" else: items.append(self.file.createIfcBooleanResult(self.settings["operator"], item, result)) - self.settings["representation"].RepresentationType = "CSG" + representation_type = "CSG" + self.settings["representation"].RepresentationType = representation_type self.settings["representation"].Items = items return items From 7ff98d2918cbdda744b70db662cdffd01e6ca35a Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 17 Oct 2023 18:18:58 +0500 Subject: [PATCH 094/220] Some UI to mark booleans as manual #3709 Currently it allows only to either set all object's booleans to be marked as manual or all of them marked as automatic, can't change some specific boolean. Short demo - https://imgur.com/a/bczv35N --- .../blenderbim/bim/module/void/__init__.py | 1 + .../blenderbim/bim/module/void/data.py | 33 +++++++++------- .../blenderbim/bim/module/void/operator.py | 39 +++++++++++++++++++ .../blenderbim/bim/module/void/ui.py | 14 +++++-- src/blenderbim/blenderbim/tool/model.py | 20 +++++----- 5 files changed, 82 insertions(+), 25 deletions(-) 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 3d4106aa1c..d7b2e37504 100644 --- a/src/blenderbim/blenderbim/bim/module/void/operator.py +++ b/src/blenderbim/blenderbim/bim/module/void/operator.py @@ -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 dd199ef5d0..805dd31e24 100644 --- a/src/blenderbim/blenderbim/bim/module/void/ui.py +++ b/src/blenderbim/blenderbim/bim/module/void/ui.py @@ -111,13 +111,21 @@ 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 diff --git a/src/blenderbim/blenderbim/tool/model.py b/src/blenderbim/blenderbim/tool/model.py index 67dd73d058..e58a13eaed 100644 --- a/src/blenderbim/blenderbim/tool/model.py +++ b/src/blenderbim/blenderbim/tool/model.py @@ -474,12 +474,13 @@ class Model(blenderbim.core.tool.Model): return {"thickness": thickness, "offset": offset, "direction_sense": direction_sense} @classmethod - def get_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"): @@ -488,14 +489,15 @@ class Model(blenderbim.core.tool.Model): return booleans @classmethod - def get_manual_booleans(cls, element): + 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"]) - body = ifcopenshell.util.representation.get_representation(element, "Model", "Body", "MODEL_VIEW") - if not body: - return [] + 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 From c35be50c836e6ba73bf2db5adff20890942d93e9 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 18 Oct 2023 11:10:04 +0500 Subject: [PATCH 095/220] Bump build version to fix #3889 --- src/blenderbim/Makefile | 2 +- src/ifcopenshell-python/Makefile | 2 +- .../docs/ifcconvert/installation.rst | 10 ++-- .../docs/ifcopenshell-python/installation.rst | 56 +++++++++---------- 4 files changed, 35 insertions(+), 35 deletions(-) diff --git a/src/blenderbim/Makefile b/src/blenderbim/Makefile index f8ea60a639..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-f0e03c7-$(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/ifcopenshell-python/Makefile b/src/ifcopenshell-python/Makefile index f4b0229617..bce66f7f34 100644 --- a/src/ifcopenshell-python/Makefile +++ b/src/ifcopenshell-python/Makefile @@ -109,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-f0e03c7-$(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 3ff4cc9f0f..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-f0e03c7-linux64.zip -.. _build-win32: https://s3.amazonaws.com/ifcopenshell-builds/IfcConvert-v0.7.0-f0e03c7-win32.zip -.. _build-win64: https://s3.amazonaws.com/ifcopenshell-builds/IfcConvert-v0.7.0-f0e03c7-win64.zip -.. _build-macos64: https://s3.amazonaws.com/ifcopenshell-builds/IfcConvert-v0.7.0-f0e03c7-macos64.zip -.. _build-macosm164: https://s3.amazonaws.com/ifcopenshell-builds/IfcConvert-v0.7.0-f0e03c7-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/ifcopenshell-python/installation.rst b/src/ifcopenshell-python/docs/ifcopenshell-python/installation.rst index 9b8bbe02d6..91adc41ee3 100644 --- a/src/ifcopenshell-python/docs/ifcopenshell-python/installation.rst +++ b/src/ifcopenshell-python/docs/ifcopenshell-python/installation.rst @@ -43,34 +43,34 @@ the API. | 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-f0e03c7-linux64.zip -.. _py37-linux64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-37-v0.7.0-f0e03c7-linux64.zip -.. _py38-linux64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-38-v0.7.0-f0e03c7-linux64.zip -.. _py39-linux64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-39-v0.7.0-f0e03c7-linux64.zip -.. _py310-linux64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-310-v0.7.0-f0e03c7-linux64.zip -.. _py311-linux64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-311-v0.7.0-f0e03c7-linux64.zip -.. _py36-win32: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-36-v0.7.0-f0e03c7-win32.zip -.. _py37-win32: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-37-v0.7.0-f0e03c7-win32.zip -.. _py38-win32: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-38-v0.7.0-f0e03c7-win32.zip -.. _py39-win32: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-39-v0.7.0-f0e03c7-win32.zip -.. _py310-win32: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-310-v0.7.0-f0e03c7-win32.zip -.. _py311-win32: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-311-v0.7.0-f0e03c7-win32.zip -.. _py36-win64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-36-v0.7.0-f0e03c7-win64.zip -.. _py37-win64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-37-v0.7.0-f0e03c7-win64.zip -.. _py38-win64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-38-v0.7.0-f0e03c7-win64.zip -.. _py39-win64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-39-v0.7.0-f0e03c7-win64.zip -.. _py310-win64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-310-v0.7.0-f0e03c7-win64.zip -.. _py311-win64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-311-v0.7.0-f0e03c7-win64.zip -.. _py36-macos64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-36-v0.7.0-f0e03c7-macos64.zip -.. _py37-macos64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-37-v0.7.0-f0e03c7-macos64.zip -.. _py38-macos64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-38-v0.7.0-f0e03c7-macos64.zip -.. _py39-macos64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-39-v0.7.0-f0e03c7-macos64.zip -.. _py310-macos64: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-310-v0.7.0-f0e03c7-macos64.zip -.. _py37-macosm164: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-37-v0.7.0-f0e03c7-macosm164.zip -.. _py38-macosm164: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-38-v0.7.0-f0e03c7-macosm164.zip -.. _py39-macosm164: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-39-v0.7.0-f0e03c7-macosm164.zip -.. _py310-macosm164: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-310-v0.7.0-f0e03c7-macosm164.zip -.. _py311-macosm164: https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-311-v0.7.0-f0e03c7-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 From ab807e3b9ba2c0b9c890af890f4ab6550d9a87e7 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 18 Oct 2023 12:21:41 +0500 Subject: [PATCH 096/220] bim.create_all_shapes info message --- src/blenderbim/blenderbim/bim/module/debug/operator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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"} From dd7a6a80eb21794ed78a35ec3e25407e33fb8054 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 18 Oct 2023 12:25:00 +0500 Subject: [PATCH 097/220] activate_drawing to prioritize already active representation If there are multiple representations in the same subcontext, when it was searching for the representation for some specific subcontext, it would previously always switch to the first representation from the list, now it's going to prioritize the one that's already active. --- src/blenderbim/blenderbim/tool/drawing.py | 27 +++++++++++++--------- src/blenderbim/blenderbim/tool/geometry.py | 8 +++++++ 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/blenderbim/blenderbim/tool/drawing.py b/src/blenderbim/blenderbim/tool/drawing.py index 9c35acf8ad..09a4011c7b 100644 --- a/src/blenderbim/blenderbim/tool/drawing.py +++ b/src/blenderbim/blenderbim/tool/drawing.py @@ -1647,20 +1647,25 @@ class Drawing(blenderbim.core.tool.Drawing): for element in filtered_elements: obj = tool.Ifc.get_object(element) + subcontext = tool.Geometry.get_active_representation(obj).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 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 diff --git a/src/blenderbim/blenderbim/tool/geometry.py b/src/blenderbim/blenderbim/tool/geometry.py index d4d8fa7509..5e480ade96 100644 --- a/src/blenderbim/blenderbim/tool/geometry.py +++ b/src/blenderbim/blenderbim/tool/geometry.py @@ -308,6 +308,14 @@ class Geometry(blenderbim.core.tool.Geometry): 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, + subcontext.TargetView, + ) + @classmethod def get_representation_by_context(cls, element, context): if element.is_a("IfcProduct") and element.Representation: From 744c08e13e43cf76fa4eedaeabe67993738ca724 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 18 Oct 2023 15:45:00 +0500 Subject: [PATCH 098/220] bim.switch_representation to switch to exact representation previously it was switching to the first representation that matches the context, so it wasn't possible to switch to the second one if you had more than 1 representation in the same context using always both element and representation in `geometry.import_representation` so it will import the exact representation and not the first one found by `ifcopenshell.geom.create_shape` --- .../blenderbim/bim/module/geometry/operator.py | 16 ++++++++++------ src/blenderbim/blenderbim/tool/geometry.py | 16 ++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/geometry/operator.py b/src/blenderbim/blenderbim/bim/module/geometry/operator.py index 8f4f0a3927..b659ea2a69 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/operator.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/operator.py @@ -211,18 +211,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( diff --git a/src/blenderbim/blenderbim/tool/geometry.py b/src/blenderbim/blenderbim/tool/geometry.py index 5e480ade96..fe55d3c590 100644 --- a/src/blenderbim/blenderbim/tool/geometry.py +++ b/src/blenderbim/blenderbim/tool/geometry.py @@ -479,23 +479,19 @@ 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 element.is_a("IfcTypeProduct") or not apply_openings: + settings.set(settings.DISABLE_OPENING_SUBTRACTIONS, True) + if context.ContextIdentifier == "Body" and context.TargetView == "MODEL_VIEW": 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, element, 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, element, representation) else: settings.set(settings.INCLUDE_CURVES, True) - shape = ifcopenshell.geom.create_shape(settings, representation) + shape = ifcopenshell.geom.create_shape(settings, element, representation) ifc_importer = blenderbim.bim.import_ifc.IfcImporter(ifc_import_settings) ifc_importer.file = tool.Ifc.get() From 627cf63a4c8036ddcb481a0277692a1f822d0556 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 18 Oct 2023 16:07:27 +0500 Subject: [PATCH 099/220] ifcfm symlink to dev environment setup script --- src/blenderbim/docs/devs/installation.rst | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) 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" From c85826ef2e70bea238fc8d616d0aa6a0d8f4399a Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 18 Oct 2023 16:40:07 +0500 Subject: [PATCH 100/220] Fixed #3901 It was throwing an error because was failing to write a list to an excel cell, now it's explicitly converting the value to string. Python: Traceback (most recent call last): File "\blenderbim\bim\module\fm\operator.py", line 102, in execute writer.write_xlsx(filepath) File "\blenderbim\libs\site\packages\ifcfm\__init__.py", line 259, in write_xlsx cell = worksheet.cell(row=r, column=c, value=col) File "\blenderbim\libs\site\packages\openpyxl\worksheet\worksheet.py", line 247, in cell cell.value = value File "\blenderbim\libs\site\packages\openpyxl\cell\cell.py", line 218, in value self._bind_value(value) File "\blenderbim\libs\site\packages\openpyxl\cell\cell.py", line 187, in _bind_value raise ValueError("Cannot convert {0!r} to Excel".format(value)) ValueError: Cannot convert ['USE TYPE CATALOG'] to Excel --- src/ifcfm/ifcfm/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ifcfm/ifcfm/__init__.py b/src/ifcfm/ifcfm/__init__.py index 36f6679145..70f31c8ef6 100644 --- a/src/ifcfm/ifcfm/__init__.py +++ b/src/ifcfm/ifcfm/__init__.py @@ -256,7 +256,7 @@ 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 From eb0873996f460d09539b81ca82a1984a4134fbb6 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 18 Oct 2023 17:13:11 +0500 Subject: [PATCH 101/220] Added IfcZone to systems UI in IFC2X3 #3905 In IFC2X3 IfcZone is a subtype of IfcGroup but not subtype of IfcSystem (it become one after IFC4), therefore IfcZone wasn't presented anywhere in BBIM UI. It's a bit confusing though to include IfcZone in systems when it's not actually a IfcSystem but having it in IfcGroups would be confusing too. --- src/blenderbim/blenderbim/bim/module/system/data.py | 7 +++++-- src/blenderbim/blenderbim/tool/system.py | 8 +++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/system/data.py b/src/blenderbim/blenderbim/bim/module/system/data.py index 6955fcdbbf..48f7e88471 100644 --- a/src/blenderbim/blenderbim/bim/module/system/data.py +++ b/src/blenderbim/blenderbim/bim/module/system/data.py @@ -47,6 +47,9 @@ class SystemData: declaration = tool.Ifc.schema().declaration_by_name("IfcSystem") declarations = ifcopenshell.util.schema.get_subtypes(declaration) version = tool.Ifc.get_schema() + if version == "IFC2X3": + declarations += [tool.Ifc.schema().declaration_by_name("IfcZone")] + # 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: @@ -85,7 +88,7 @@ class ObjectSystemData: @classmethod def total_systems(cls): - return len(tool.Ifc.get().by_type("IfcSystem")) + return len(tool.System.get_systems()) @classmethod def connected_elements(cls): diff --git a/src/blenderbim/blenderbim/tool/system.py b/src/blenderbim/blenderbim/tool/system.py index be09c808d5..47e1f58672 100644 --- a/src/blenderbim/blenderbim/tool/system.py +++ b/src/blenderbim/blenderbim/tool/system.py @@ -127,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() From 159eeeb3a4cda2fe962864cd80409c0668b3c348 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 19 Oct 2023 16:38:42 +1100 Subject: [PATCH 102/220] You can now edit rendering styles in the style manager --- .../blenderbim/bim/module/style/data.py | 13 +- .../blenderbim/bim/module/style/operator.py | 127 ++++++++++++++++-- .../blenderbim/bim/module/style/prop.py | 31 +++++ .../blenderbim/bim/module/style/ui.py | 53 +++++++- src/blenderbim/blenderbim/tool/style.py | 6 +- .../ifcpatch/recipes/ExtractElements.py | 2 +- 6 files changed, 216 insertions(+), 16 deletions(-) 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 dff00b5081..4d7cd1ed0a 100644 --- a/src/blenderbim/blenderbim/bim/module/style/operator.py +++ b/src/blenderbim/blenderbim/bim/module/style/operator.py @@ -492,20 +492,60 @@ class EnableEditingSurfaceStyle(bpy.types.Operator, tool.Ifc.Operator): 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 - break + if style2.is_a() == "IfcSurfaceStyleShading": + shading = style2 + + color_to_tuple = lambda x: (x.Red, x.Green, x.Blue) if surface_style: - color_to_tuple = lambda x: (x.Red, x.Green, x.Blue) if self.ifc_class == "IfcSurfaceStyleShading": props.surface_colour = color_to_tuple(surface_style.SurfaceColour) - props.transparency = surface_style.Transparency or 0. + 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. + 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 @@ -518,12 +558,12 @@ class EditSurfaceStyle(bpy.types.Operator, tool.Ifc.Operator): def _execute(self, context): self.props = bpy.context.scene.BIMStylesProperties - style = tool.Ifc.get().by_id(self.props.is_editing_style) + 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 style.Styles: + for style2 in self.style.Styles: if style2.is_a() == self.props.is_editing_class: self.surface_style = style2 if style2.is_a() == "IfcSurfaceStyleShading": @@ -541,10 +581,75 @@ class EditSurfaceStyle(bpy.types.Operator, tool.Ifc.Operator): def edit_existing_style(self): if self.surface_style.is_a() == "IfcSurfaceStyleShading": - self.surface_style.SurfaceColour.Red = self.props.surface_colour[0] - self.surface_style.SurfaceColour.Green = self.props.surface_colour[1] - self.surface_style.SurfaceColour.Blue = self.props.surface_colour[2] - self.surface_style.Transparency = self.props.transparency or None + 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, + }, + ) + 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(), + ) def add_new_style(self): - pass + if self.props.is_editing_class == "IfcSurfaceStyleShading": + ifcopenshell.api.run( + "style.add_surface_style", + tool.Ifc.get(), + style=self.style, + ifc_class="IfcSurfaceStyleShading", + attributes=self.get_shading_attributes(), + ) + elif self.props.is_editing_class == "IfcSurfaceStyleRendering": + ifcopenshell.api.run( + "style.add_surface_style", + tool.Ifc.get(), + style=self.style, + ifc_class="IfcSurfaceStyleRendering", + attributes=self.get_rendering_attributes(), + ) + + 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 88ffdf47fd..fdb787ea1e 100644 --- a/src/blenderbim/blenderbim/bim/module/style/prop.py +++ b/src/blenderbim/blenderbim/bim/module/style/prop.py @@ -40,6 +40,12 @@ 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") @@ -49,6 +55,10 @@ class Style(PropertyGroup): 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 = [ @@ -91,6 +101,27 @@ class BIMStylesProperties(PropertyGroup): 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 348550e779..0289eaab65 100644 --- a/src/blenderbim/blenderbim/bim/module/style/ui.py +++ b/src/blenderbim/blenderbim/bim/module/style/ui.py @@ -131,6 +131,55 @@ class BIM_PT_styles(Panel): 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") @@ -285,9 +334,11 @@ class BIM_UL_styles(UIList): row = layout.row(align=True) row.label(text=item.name) if item.has_surface_colour: - row = row.row() + 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)) diff --git a/src/blenderbim/blenderbim/tool/style.py b/src/blenderbim/blenderbim/tool/style.py index 344999276e..4cdb694638 100644 --- a/src/blenderbim/blenderbim/tool/style.py +++ b/src/blenderbim/blenderbim/tool/style.py @@ -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") @@ -435,9 +436,12 @@ class Style(blenderbim.core.tool.Style): new2 = new.style_classes.add() new2.name = surface_style.is_a() if surface_style.is_a("IfcSurfaceStyleShading"): - color_to_tuple = lambda x: (x.Red, x.Green, x.Blue) 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/ifcpatch/ifcpatch/recipes/ExtractElements.py b/src/ifcpatch/ifcpatch/recipes/ExtractElements.py index fe1ced106e..ec85a5798e 100644 --- a/src/ifcpatch/ifcpatch/recipes/ExtractElements.py +++ b/src/ifcpatch/ifcpatch/recipes/ExtractElements.py @@ -22,7 +22,7 @@ import ifcopenshell.util.selector class Patcher: - def __init__(self, src, file, logger, query: str = ".IfcWall"): + def __init__(self, src, file, logger, query: str = "IfcWall"): """Extract certain elements into a new model Extract a subset of elements from an existing IFC data set and save it From 8c73fa69a11bffcac4068084ea66ae8016b102af Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 19 Oct 2023 10:49:39 +0500 Subject: [PATCH 103/220] Fixed #3907 after dd7a6a80e --- src/blenderbim/blenderbim/tool/drawing.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/blenderbim/blenderbim/tool/drawing.py b/src/blenderbim/blenderbim/tool/drawing.py index 09a4011c7b..9b568bb365 100644 --- a/src/blenderbim/blenderbim/tool/drawing.py +++ b/src/blenderbim/blenderbim/tool/drawing.py @@ -1647,13 +1647,15 @@ class Drawing(blenderbim.core.tool.Drawing): for element in filtered_elements: obj = tool.Ifc.get_object(element) - subcontext = tool.Geometry.get_active_representation(obj).ContextOfItems - current_representation_subcontext = tool.Geometry.get_subcontext_parameters(subcontext) + 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 subcontext == current_representation_subcontext: + if current_representation and subcontext == current_representation_subcontext: break priority_representation = ifcopenshell.util.representation.get_representation(element, *subcontext) if priority_representation: From 162ac39570e53e7a2f59f4f2d546bd98d3935a08 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 19 Oct 2023 10:55:13 +0500 Subject: [PATCH 104/220] Fixed test after 6e9639446 --- src/blenderbim/blenderbim/core/tool.py | 1 + src/blenderbim/test/core/test_drawing.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/core/tool.py b/src/blenderbim/blenderbim/core/tool.py index 8cdb4f82a8..855d70a88e 100644 --- a/src/blenderbim/blenderbim/core/tool.py +++ b/src/blenderbim/blenderbim/core/tool.py @@ -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 diff --git a/src/blenderbim/test/core/test_drawing.py b/src/blenderbim/test/core/test_drawing.py index f2759fc3d2..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") From a4daa0e3d96739e3f581fdf55698132ad83c648d Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 19 Oct 2023 11:01:01 +0500 Subject: [PATCH 105/220] Fixed test after 88d96f7 --- src/blenderbim/test/tool/test_drawing.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/blenderbim/test/tool/test_drawing.py b/src/blenderbim/test/tool/test_drawing.py index f7fe0c4743..34b9e7cdc4 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 From aa0c42e1ec34a8d6720bbb73a68db7c896b366a2 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 19 Oct 2023 11:02:39 +0500 Subject: [PATCH 106/220] Fixed test after 90b40ff --- src/blenderbim/test/tool/test_drawing.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/blenderbim/test/tool/test_drawing.py b/src/blenderbim/test/tool/test_drawing.py index 34b9e7cdc4..fb7c24b7ee 100644 --- a/src/blenderbim/test/tool/test_drawing.py +++ b/src/blenderbim/test/tool/test_drawing.py @@ -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 From 9e89bb504438e907fbd1412a4b98782e93e50eed Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 19 Oct 2023 13:22:06 +0500 Subject: [PATCH 107/220] Fixed test after 418444a --- src/blenderbim/test/tool/test_system.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/blenderbim/test/tool/test_system.py b/src/blenderbim/test/tool/test_system.py index 2b23513f05..f881c8dbef 100644 --- a/src/blenderbim/test/tool/test_system.py +++ b/src/blenderbim/test/tool/test_system.py @@ -177,7 +177,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) From d414de450b0e07d06a10c7aa0569cc8ff31b7a77 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 19 Oct 2023 16:06:33 +0500 Subject: [PATCH 108/220] Fixed test after c34a9c5 Also fixed bug in the sheeter --- .../blenderbim/bim/module/drawing/sheeter.py | 3 ++- src/blenderbim/test/tool/test_drawing.py | 22 ++++++++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) 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/test/tool/test_drawing.py b/src/blenderbim/test/tool/test_drawing.py index fb7c24b7ee..9de78792d3 100644 --- a/src/blenderbim/test/tool/test_drawing.py +++ b/src/blenderbim/test/tool/test_drawing.py @@ -677,6 +677,13 @@ 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="") + + def update_depsgraph(): + obj.hide_render = obj.hide_render # hacky way to trigger depsgraph_update_pre + bpy.ops.bim.load_sheets() bpy.ops.bim.add_sheet() @@ -694,12 +701,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 + update_depsgraph() + bpy.ops.bim.create_drawing() bpy.ops.bim.open_sheet() @@ -707,8 +723,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): From df3876b438b89df3a3a98ebf28494cf31a0de7ed Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 19 Oct 2023 16:11:08 +0500 Subject: [PATCH 109/220] Minor fix after a47c57c --- src/blenderbim/blenderbim/tool/style.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/tool/style.py b/src/blenderbim/blenderbim/tool/style.py index 4cdb694638..e39596e367 100644 --- a/src/blenderbim/blenderbim/tool/style.py +++ b/src/blenderbim/blenderbim/tool/style.py @@ -432,7 +432,7 @@ class Style(blenderbim.core.tool.Style): 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", []): + 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"): From 078a7eb2904bc4ed601f7223580ea2c82d1ca9e5 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 19 Oct 2023 16:42:20 +0500 Subject: [PATCH 110/220] Fix tests after 808ff54 --- src/blenderbim/test/bim/feature/aggregate.feature | 2 ++ src/blenderbim/test/bim/feature/brick.feature | 5 +++++ src/blenderbim/test/bim/feature/system.feature | 3 +++ 3 files changed, 10 insertions(+) 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/system.feature b/src/blenderbim/test/bim/feature/system.feature index a9ae5756e9..486f01fbaf 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,6 +94,7 @@ 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 From 7e92471ac9bebfc8abee7145f0810b4211a19c02 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 19 Oct 2023 17:05:14 +0500 Subject: [PATCH 111/220] Fixed issue unlinking mesh objects After d67eae5 delete_ifc_object is removing the meshes and it end up invalidating the unlinked object. Now mesh is copied before running delete_ifc_object --- src/blenderbim/blenderbim/bim/module/root/operator.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/root/operator.py b/src/blenderbim/blenderbim/bim/module/root/operator.py index 467dfd19ba..425738f4f7 100644 --- a/src/blenderbim/blenderbim/bim/module/root/operator.py +++ b/src/blenderbim/blenderbim/bim/module/root/operator.py @@ -174,6 +174,13 @@ 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) @@ -181,8 +188,7 @@ class UnlinkObject(bpy.types.Operator): if obj in IfcStore.edited_objs: IfcStore.edited_objs.remove(obj) tool.Ifc.unlink(obj=obj) - if obj.data: - obj.data = obj.data.copy() + for material_slot in obj.material_slots: if material_slot.material: material_slot.material = material_slot.material.copy() From 9e9412bec08c4c2b3d10d15cc6fd218b050cec39 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 19 Oct 2023 18:07:23 +0500 Subject: [PATCH 112/220] Forgot to fix test after 35d66f5 --- src/ifcopenshell-python/test/api/geometry/test_add_boolean.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ifcopenshell-python/test/api/geometry/test_add_boolean.py b/src/ifcopenshell-python/test/api/geometry/test_add_boolean.py index 62d7d33a82..10e938b5b4 100644 --- a/src/ifcopenshell-python/test/api/geometry/test_add_boolean.py +++ b/src/ifcopenshell-python/test/api/geometry/test_add_boolean.py @@ -52,4 +52,4 @@ class TestAddBoolean(test.bootstrap.IFC4): ifcopenshell.api.run("geometry.add_boolean", self.file, representation=rep, matrix=np.eye(4)) assert rep.Items[0].is_a() == "IfcBooleanClippingResult" - assert rep.RepresentationType == "CSG" + assert rep.RepresentationType == "Clipping" From 0e4bc320cbcf98190c8ab376895bfe0d0bf18747 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 20 Oct 2023 10:26:23 +1100 Subject: [PATCH 113/220] Adding / editing shading / rendering styles in the style manager now updates Blender materials --- .../blenderbim/bim/module/style/operator.py | 17 +++++++++++++++-- src/blenderbim/blenderbim/tool/loader.py | 1 + 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/style/operator.py b/src/blenderbim/blenderbim/bim/module/style/operator.py index 4d7cd1ed0a..d47d21cfaa 100644 --- a/src/blenderbim/blenderbim/bim/module/style/operator.py +++ b/src/blenderbim/blenderbim/bim/module/style/operator.py @@ -477,6 +477,13 @@ class AddPresentationStyle(bpy.types.Operator, tool.Ifc.Operator): ) 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) @@ -580,6 +587,7 @@ class EditSurfaceStyle(bpy.types.Operator, tool.Ifc.Operator): 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", @@ -590,6 +598,7 @@ class EditSurfaceStyle(bpy.types.Operator, tool.Ifc.Operator): "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", @@ -597,24 +606,28 @@ class EditSurfaceStyle(bpy.types.Operator, tool.Ifc.Operator): 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": - ifcopenshell.api.run( + 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": - ifcopenshell.api.run( + 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 { 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): From 074de2741a673ae4a192bb814e67d1e73f6ccd2e Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 20 Oct 2023 12:24:57 +1100 Subject: [PATCH 114/220] Fix regression from 744c08e where type products cannot have an instance specified in create_shape --- src/blenderbim/blenderbim/tool/geometry.py | 23 +++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/blenderbim/blenderbim/tool/geometry.py b/src/blenderbim/blenderbim/tool/geometry.py index fe55d3c590..8ca65ab73c 100644 --- a/src/blenderbim/blenderbim/tool/geometry.py +++ b/src/blenderbim/blenderbim/tool/geometry.py @@ -480,18 +480,27 @@ class Geometry(blenderbim.core.tool.Geometry): settings = ifcopenshell.geom.settings() settings.set(settings.WELD_VERTICES, True) context = representation.ContextOfItems - if element.is_a("IfcTypeProduct") or not apply_openings: - settings.set(settings.DISABLE_OPENING_SUBTRACTIONS, True) - 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: - shape = ifcopenshell.geom.create_shape(settings, element, representation) + shape = ifcopenshell.geom.create_shape(settings, representation) except: settings.set(settings.INCLUDE_CURVES, True) - shape = ifcopenshell.geom.create_shape(settings, element, representation) + shape = ifcopenshell.geom.create_shape(settings, representation) else: - settings.set(settings.INCLUDE_CURVES, True) - shape = ifcopenshell.geom.create_shape(settings, element, 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() From aaceb923ad80c74f89322a730a1c26ed4013fcf7 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 20 Oct 2023 12:28:18 +1100 Subject: [PATCH 115/220] Fix #3903. Bug where stairs started off with an empty mesh and had a representation added, resulting in an invalid empty point cloud. Now stairs have should_add_representation=False when creating the IfcStairFlight, and the representation is updated explicitly, similar to how parametric doors and windows etc have their representations updated. --- .../blenderbim/bim/module/model/stair.py | 109 ++++++++++-------- .../blenderbim/bim/module/model/ui.py | 4 +- .../blenderbim/bim/module/type/operator.py | 2 +- 3 files changed, 62 insertions(+), 53 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/stair.py b/src/blenderbim/blenderbim/bim/module/model/stair.py index a444f510fc..1f82c4ee44 100644 --- a/src/blenderbim/blenderbim/bim/module/model/stair.py +++ b/src/blenderbim/blenderbim/bim/module/model/stair.py @@ -17,21 +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): @@ -106,8 +102,7 @@ def generate_stair_2d_profile( 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)) + size=V(tread_run, 0, tread_depth), position=V(0, 0, -(tread_depth - tread_rise)) ) tread_offset = V(tread_run, 0, tread_rise) @@ -116,12 +111,14 @@ def generate_stair_2d_profile( 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), - ]) + 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) @@ -129,36 +126,26 @@ def generate_stair_2d_profile( elif stair_type == "GENERIC": vertices.append(Vector([0, 0, 0])) - tread_verts = [ - Vector([0, 0, tread_rise]), - Vector([tread_run, 0, tread_rise]) - ] + 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) - ]) + 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) - ]) + 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))) - ]) + 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)) @@ -179,11 +166,11 @@ def generate_stair_2d_profile( # 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)) ) + 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) ) + 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 @@ -200,17 +187,17 @@ def generate_stair_2d_profile( 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) ) + 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) ) + 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) @@ -221,7 +208,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 +229,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 @@ -327,7 +334,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 +342,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": @@ -372,8 +379,9 @@ class AddStair(bpy.types.Operator, tool.Ifc.Operator): pset=pset, properties={"Data": 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 +396,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,7 +415,8 @@ 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) diff --git a/src/blenderbim/blenderbim/bim/module/model/ui.py b/src/blenderbim/blenderbim/bim/module/model/ui.py index 07cd3ec4bd..c99104261f 100644 --- a/src/blenderbim/blenderbim/bim/module/model/ui.py +++ b/src/blenderbim/blenderbim/bim/module/model/ui.py @@ -30,7 +30,7 @@ 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 @@ -267,7 +267,7 @@ class BIM_PT_stair(bpy.types.Panel): row = self.layout.row(align=True) for prop_name in props.get_props_kwargs(): self.layout.prop(props, prop_name) - update_stair_modifier(context) + regenerate_stair_mesh(context) else: row.operator("bim.enable_editing_stair", icon="GREASEPENCIL", text="") row.operator("bim.remove_stair", icon="X", text="") 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) From 68acf84e260058a90224315682541571320c2874 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 20 Oct 2023 13:38:17 +1100 Subject: [PATCH 116/220] Fix #3901. Add configurable list concatenation support in IfcFM. --- src/ifcfm/ifcfm/__init__.py | 7 ++++++- src/ifcfm/ifcfm/cobie24.py | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/ifcfm/ifcfm/__init__.py b/src/ifcfm/ifcfm/__init__.py index 70f31c8ef6..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) @@ -261,6 +263,9 @@ class Writer: 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/cobie24.py b/src/ifcfm/ifcfm/cobie24.py index c3f8b372a3..d45f8fbbd2 100644 --- a/src/ifcfm/ifcfm/cobie24.py +++ b/src/ifcfm/ifcfm/cobie24.py @@ -248,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 From 4f64dcdbd4944adda9d20d86c51c740b0052654b Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 20 Oct 2023 11:06:10 +0500 Subject: [PATCH 117/220] Fixed tests after selector syntax update --- src/blenderbim/test/bim/feature/project.feature | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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" From f3b541f00a184238f552471ece59fe7eb285ea34 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 20 Oct 2023 17:51:30 +1100 Subject: [PATCH 118/220] Fix #3095. Very basic implementation of a new zones panel. --- src/blenderbim/blenderbim/bim/__init__.py | 1 + .../blenderbim/bim/module/system/__init__.py | 16 +++- .../blenderbim/bim/module/system/data.py | 33 ++++++- .../blenderbim/bim/module/system/operator.py | 95 +++++++++++++++++++ .../blenderbim/bim/module/system/prop.py | 13 +++ .../blenderbim/bim/module/system/ui.py | 89 ++++++++++++++++- src/blenderbim/blenderbim/bim/ui.py | 14 +++ 7 files changed, 253 insertions(+), 8 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/__init__.py b/src/blenderbim/blenderbim/bim/__init__.py index 9cc36d3668..62f444208e 100644 --- a/src/blenderbim/blenderbim/bim/__init__.py +++ b/src/blenderbim/blenderbim/bim/__init__.py @@ -150,6 +150,7 @@ classes = [ # 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 diff --git a/src/blenderbim/blenderbim/bim/module/system/__init__.py b/src/blenderbim/blenderbim/bim/module/system/__init__.py index ea95b8965e..bb264dc9b8 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.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_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 48f7e88471..bc88b4c22f 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,8 +49,6 @@ class SystemData: declaration = tool.Ifc.schema().declaration_by_name("IfcSystem") declarations = ifcopenshell.util.schema.get_subtypes(declaration) version = tool.Ifc.get_schema() - if version == "IFC2X3": - declarations += [tool.Ifc.schema().declaration_by_name("IfcZone")] # We're only interested in systems for services. Not sure why IFC groups these together. return [ @@ -193,3 +193,32 @@ class SystemDecorationData: ports_data.append(port_data) cls.elements_ports_positions[element] = ports_data return cls.elements_ports_positions[element] + + +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/operator.py b/src/blenderbim/blenderbim/bim/module/system/operator.py index 4d40d9c36d..8f1671458f 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 @@ -326,3 +327,97 @@ 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() diff --git a/src/blenderbim/blenderbim/bim/module/system/prop.py b/src/blenderbim/blenderbim/bim/module/system/prop.py index f1ffa3263c..3b79421116 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: @@ -64,3 +69,11 @@ class BIMSystemProperties(PropertyGroup): 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 c70438292f..8d66c7d2a5 100644 --- a/src/blenderbim/blenderbim/bim/module/system/ui.py +++ b/src/blenderbim/blenderbim/bim/module/system/ui.py @@ -16,11 +16,11 @@ # 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 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 = { @@ -42,7 +42,7 @@ 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: @@ -95,7 +95,7 @@ class BIM_PT_object_systems(Panel): def poll(cls, context): if not context.active_object: return False - return IfcStore.get_file() and context.active_object.BIMObjectProperties.ifc_definition_id + return tool.Ifc.get() and context.active_object.BIMObjectProperties.ifc_definition_id def draw(self, context): if not ObjectSystemData.is_loaded: @@ -294,6 +294,78 @@ class BIM_PT_port(Panel): ).direction = flow_direction +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="GREASEPENCIL") + 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 = { @@ -341,3 +413,10 @@ class BIM_UL_object_systems(UIList): 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 + + +class BIM_UL_zones(UIList): + def draw_item(self, context, layout, data, item, icon, active_data, active_propname): + if item: + row = layout.row(align=True) + row.label(text=item.name) diff --git a/src/blenderbim/blenderbim/bim/ui.py b/src/blenderbim/blenderbim/bim/ui.py index 53fb4dcb71..29b120db5a 100644 --- a/src/blenderbim/blenderbim/bim/ui.py +++ b/src/blenderbim/blenderbim/bim/ui.py @@ -495,6 +495,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" From b318509cbaa92c13c58558d92bb2b91e1ad72bc0 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 20 Oct 2023 11:59:31 +0500 Subject: [PATCH 119/220] Merge systems UI into one We had two very similar systems panels that were part of the old UI. --- .../blenderbim/bim/module/system/__init__.py | 2 - .../blenderbim/bim/module/system/data.py | 5 - .../blenderbim/bim/module/system/prop.py | 2 +- .../blenderbim/bim/module/system/ui.py | 116 +++++------------- 4 files changed, 30 insertions(+), 95 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/system/__init__.py b/src/blenderbim/blenderbim/bim/module/system/__init__.py index bb264dc9b8..cb1c8d24dc 100644 --- a/src/blenderbim/blenderbim/bim/module/system/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/system/__init__.py @@ -50,13 +50,11 @@ classes = ( 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_UL_systems, - ui.BIM_UL_object_systems, ui.BIM_UL_zones, ) diff --git a/src/blenderbim/blenderbim/bim/module/system/data.py b/src/blenderbim/blenderbim/bim/module/system/data.py index bc88b4c22f..a2be0d98ec 100644 --- a/src/blenderbim/blenderbim/bim/module/system/data.py +++ b/src/blenderbim/blenderbim/bim/module/system/data.py @@ -70,7 +70,6 @@ class ObjectSystemData: def load(cls): cls.data = { "systems": cls.systems(), - "total_systems": cls.total_systems(), # AFTER SYSTEMS "connected_elements": cls.connected_elements(), } @@ -86,10 +85,6 @@ 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.System.get_systems()) - @classmethod def connected_elements(cls): if not cls.element: diff --git a/src/blenderbim/blenderbim/bim/module/system/prop.py b/src/blenderbim/blenderbim/bim/module/system/prop.py index 3b79421116..23c170c46f 100644 --- a/src/blenderbim/blenderbim/bim/module/system/prop.py +++ b/src/blenderbim/blenderbim/bim/module/system/prop.py @@ -64,7 +64,7 @@ class BIMSystemProperties(PropertyGroup): is_adding: BoolProperty(name="Is Adding", default=False) systems: CollectionProperty(name="Systems", type=System) active_system_index: IntProperty(name="Active System Index") - active_system_id: IntProperty(name="Active System Id") + active_system_id: IntProperty(name="Active System Id", description="Id of the currrently edited system") system_class: EnumProperty(items=get_system_class, name="Class") should_draw_decorations: BoolProperty( name="Should Draw Decorations", description="Toggle system decorations", update=toggle_decorations diff --git a/src/blenderbim/blenderbim/bim/module/system/ui.py b/src/blenderbim/blenderbim/bim/module/system/ui.py index 8d66c7d2a5..fea33a152a 100644 --- a/src/blenderbim/blenderbim/bim/module/system/ui.py +++ b/src/blenderbim/blenderbim/bim/module/system/ui.py @@ -30,6 +30,15 @@ FLOW_DIRECTION_TO_ICON = { "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" @@ -47,10 +56,27 @@ class BIM_PT_systems(Panel): def draw(self, context): if not SystemData.is_loaded: SystemData.load() + if not ObjectSystemData.is_loaded: + ObjectSystemData.load() + self.props = context.scene.BIMSystemProperties row = self.layout.row(align=True) - row.label(text="{} Systems Found".format(SystemData.data["total_systems"]), icon="OUTLINER") + row.prop(self.props, "should_draw_decorations") + + 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") + + row = self.layout.row(align=True) + 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") @@ -81,67 +107,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 tool.Ifc.get() 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" @@ -368,18 +333,11 @@ class BIM_PT_active_object_zones(Panel): 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 + row.operator("bim.assign_system", text="", icon="ADD").system = item.ifc_definition_id if context.scene.BIMSystemProperties.active_system_id == system_id: op = row.operator("bim.select_system_products", text="", icon="RESTRICT_SELECT_OFF") op.system = system_id @@ -399,22 +357,6 @@ class BIM_UL_systems(UIList): op.system = system_id -class BIM_UL_object_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.operator("bim.assign_system", text="", icon="ADD").system = item.ifc_definition_id - - class BIM_UL_zones(UIList): def draw_item(self, context, layout, data, item, icon, active_data, active_propname): if item: From 0d43ef07368dedb6198d6fc99df449049b669360 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 20 Oct 2023 14:02:26 +0500 Subject: [PATCH 120/220] option to set active system Now it's possible to set in UI active system (currently it's done "select" button next to the system). Also changed the elements that are going to be decorated with system decorator. Previously it was decorating all the mep elements in the projects which was very performance heavy on large projects. --- .../blenderbim/bim/module/system/data.py | 31 +++++++++++++-- .../blenderbim/bim/module/system/operator.py | 2 +- .../blenderbim/bim/module/system/prop.py | 3 +- .../blenderbim/bim/module/system/ui.py | 38 ++++++++++++------- src/blenderbim/blenderbim/core/system.py | 3 +- src/blenderbim/blenderbim/core/tool.py | 1 + src/blenderbim/blenderbim/tool/system.py | 35 +++++++++-------- src/blenderbim/test/core/test_system.py | 3 +- src/blenderbim/test/tool/test_system.py | 8 ++-- 9 files changed, 85 insertions(+), 39 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/system/data.py b/src/blenderbim/blenderbim/bim/module/system/data.py index a2be0d98ec..abeddb605b 100644 --- a/src/blenderbim/blenderbim/bim/module/system/data.py +++ b/src/blenderbim/blenderbim/bim/module/system/data.py @@ -162,7 +162,9 @@ class SystemDecorationData: @classmethod def load(cls): - cls.data = {} + cls.data = { + "decorated_elements": cls.decorated_elements(), + } cls.is_loaded = True cls.elements_ports_positions = {} @@ -189,6 +191,29 @@ class SystemDecorationData: 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 += ObjectSystemData.data["connected_elements"] + + return decorated_elements + class ZonesData: data = {} @@ -196,7 +221,7 @@ class ZonesData: @classmethod def load(cls): - cls.data = { "total_zones": cls.total_zones() } + cls.data = {"total_zones": cls.total_zones()} cls.is_loaded = True @classmethod @@ -210,7 +235,7 @@ class ActiveObjectZonesData: @classmethod def load(cls): - cls.data = { "zones": cls.zones() } + cls.data = {"zones": cls.zones()} cls.is_loaded = True @classmethod diff --git a/src/blenderbim/blenderbim/bim/module/system/operator.py b/src/blenderbim/blenderbim/bim/module/system/operator.py index 8f1671458f..de617ae7b3 100644 --- a/src/blenderbim/blenderbim/bim/module/system/operator.py +++ b/src/blenderbim/blenderbim/bim/module/system/operator.py @@ -68,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) ) diff --git a/src/blenderbim/blenderbim/bim/module/system/prop.py b/src/blenderbim/blenderbim/bim/module/system/prop.py index 23c170c46f..7d935e1910 100644 --- a/src/blenderbim/blenderbim/bim/module/system/prop.py +++ b/src/blenderbim/blenderbim/bim/module/system/prop.py @@ -64,7 +64,8 @@ class BIMSystemProperties(PropertyGroup): is_adding: BoolProperty(name="Is Adding", default=False) systems: CollectionProperty(name="Systems", type=System) active_system_index: IntProperty(name="Active System Index") - active_system_id: IntProperty(name="Active System Id", description="Id of the currrently edited system") + 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 diff --git a/src/blenderbim/blenderbim/bim/module/system/ui.py b/src/blenderbim/blenderbim/bim/module/system/ui.py index fea33a152a..3d3ceae9bc 100644 --- a/src/blenderbim/blenderbim/bim/module/system/ui.py +++ b/src/blenderbim/blenderbim/bim/module/system/ui.py @@ -59,21 +59,34 @@ class BIM_PT_systems(Panel): if not ObjectSystemData.is_loaded: ObjectSystemData.load() - self.props = context.scene.BIMSystemProperties + 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") - for system in ObjectSystemData.data["systems"]: + row = self.layout.row() + if active_system := tool.System.get_active_system(): + row.label(text=f"Active system:") 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"] + draw_system_ui(row, active_system.id(), active_system.Name, active_system.is_a()) + else: + row.label(text="No active system is selected") - if not ObjectSystemData.data["systems"]: - self.layout.label(text="No System associated with Active Object") + 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 in Project".format(SystemData.data["total_systems"]), icon="OUTLINER") @@ -96,7 +109,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): @@ -316,7 +329,6 @@ class BIM_PT_active_object_zones(Panel): 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() @@ -338,12 +350,12 @@ class BIM_UL_systems(UIList): row.label(text=item.name, icon=SYSTEM_ICONS[item.ifc_class]) system_id = item.ifc_definition_id row.operator("bim.assign_system", text="", icon="ADD").system = item.ifc_definition_id - if context.scene.BIMSystemProperties.active_system_id == system_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") 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 855d70a88e..30d6242841 100644 --- a/src/blenderbim/blenderbim/core/tool.py +++ b/src/blenderbim/blenderbim/core/tool.py @@ -916,6 +916,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/tool/system.py b/src/blenderbim/blenderbim/tool/system.py index 47e1f58672..d52a94ec1d 100644 --- a/src/blenderbim/blenderbim/tool/system.py +++ b/src/blenderbim/blenderbim/tool/system.py @@ -80,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): @@ -191,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 = [] @@ -220,33 +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) 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_system.py b/src/blenderbim/test/tool/test_system.py index f881c8dbef..d10817068e 100644 --- a/src/blenderbim/test/tool/test_system.py +++ b/src/blenderbim/test/tool/test_system.py @@ -53,9 +53,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): @@ -219,5 +219,5 @@ 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() From 712ec6def34195d9683dcb11948e2c11d442b720 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 20 Oct 2023 22:15:37 +1100 Subject: [PATCH 121/220] Reorganise new stakeholders panel, move profiles into geometry tab. General UI polish. --- src/blenderbim/blenderbim/bim/__init__.py | 12 +++--- .../blenderbim/bim/module/boundary/ui.py | 2 +- .../blenderbim/bim/module/bsdd/ui.py | 2 +- .../bim/module/classification/ui.py | 2 +- .../blenderbim/bim/module/constraint/ui.py | 2 +- .../blenderbim/bim/module/context/ui.py | 2 +- .../blenderbim/bim/module/document/ui.py | 2 +- .../blenderbim/bim/module/georeference/ui.py | 2 +- .../blenderbim/bim/module/ifcgit/ui.py | 2 +- .../blenderbim/bim/module/library/ui.py | 2 +- .../blenderbim/bim/module/material/ui.py | 23 ++++++++---- .../blenderbim/bim/module/model/ui.py | 2 +- .../blenderbim/bim/module/owner/ui.py | 8 ++-- .../blenderbim/bim/module/profile/ui.py | 8 ++-- .../blenderbim/bim/module/project/ui.py | 6 +-- .../blenderbim/bim/module/pset_template/ui.py | 2 +- .../blenderbim/bim/module/spatial/ui.py | 2 +- .../blenderbim/bim/module/style/__init__.py | 4 +- .../blenderbim/bim/module/style/operator.py | 8 ++-- .../blenderbim/bim/module/style/ui.py | 4 +- .../blenderbim/bim/module/system/ui.py | 4 +- .../blenderbim/bim/module/unit/ui.py | 2 +- src/blenderbim/blenderbim/bim/ui.py | 37 +++++++++++++++++-- 23 files changed, 89 insertions(+), 51 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/__init__.py b/src/blenderbim/blenderbim/bim/__init__.py index 62f444208e..f932fb9a63 100644 --- a/src/blenderbim/blenderbim/bim/__init__.py +++ b/src/blenderbim/blenderbim/bim/__init__.py @@ -125,13 +125,14 @@ 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, @@ -140,6 +141,7 @@ classes = [ 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 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/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/georeference/ui.py b/src/blenderbim/blenderbim/bim/module/georeference/ui.py index f401376bbe..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 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/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/ui.py b/src/blenderbim/blenderbim/bim/module/material/ui.py index 7124ff840d..8eddab9856 100644 --- a/src/blenderbim/blenderbim/bim/module/material/ui.py +++ b/src/blenderbim/blenderbim/bim/module/material/ui.py @@ -63,13 +63,19 @@ class BIM_PT_materials(Panel): 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 + 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.enable_editing_material", text="", icon="GREASEPENCIL" + ).material = material.ifc_definition_id row.operator("bim.remove_material", text="", icon="X").material = material.ifc_definition_id else: row.operator("bim.add_material_set", text="", icon="ADD").set_type = self.props.material_type @@ -82,10 +88,10 @@ class BIM_PT_materials(Panel): self.layout.template_list("BIM_UL_materials", "", self.props, "materials", self.props, "active_material_index") - 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" bl_idname = "BIM_PT_material" @@ -219,9 +225,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() @@ -267,7 +271,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"] diff --git a/src/blenderbim/blenderbim/bim/module/model/ui.py b/src/blenderbim/blenderbim/bim/module/model/ui.py index c99104261f..44ede97125 100644 --- a/src/blenderbim/blenderbim/bim/module/model/ui.py +++ b/src/blenderbim/blenderbim/bim/module/model/ui.py @@ -160,7 +160,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") 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/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/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_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/spatial/ui.py b/src/blenderbim/blenderbim/bim/module/spatial/ui.py index 28e65d2982..61f1555531 100644 --- a/src/blenderbim/blenderbim/bim/module/spatial/ui.py +++ b/src/blenderbim/blenderbim/bim/module/spatial/ui.py @@ -103,7 +103,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 7aa30f52f4..f2fa818234 100644 --- a/src/blenderbim/blenderbim/bim/module/style/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/style/__init__.py @@ -25,14 +25,14 @@ classes = ( operator.AddStyle, operator.BrowseExternalStyle, operator.ClearTextureMapPath, - operator.DisableAddPresentationStyle, + operator.DisableAddingPresentationStyle, operator.DisableEditingExternalStyle, operator.DisableEditingStyle, operator.DisableEditingStyles, operator.EditExternalStyle, operator.EditStyle, operator.EditSurfaceStyle, - operator.EnableAddPresentationStyle, + operator.EnableAddingPresentationStyle, operator.EnableEditingExternalStyle, operator.EnableEditingStyle, operator.EnableEditingSurfaceStyle, diff --git a/src/blenderbim/blenderbim/bim/module/style/operator.py b/src/blenderbim/blenderbim/bim/module/style/operator.py index d47d21cfaa..32a592b24c 100644 --- a/src/blenderbim/blenderbim/bim/module/style/operator.py +++ b/src/blenderbim/blenderbim/bim/module/style/operator.py @@ -431,8 +431,8 @@ class ClearTextureMapPath(bpy.types.Operator): return {"FINISHED"} -class EnableAddPresentationStyle(bpy.types.Operator, tool.Ifc.Operator): - bl_idname = "bim.enable_add_presentation_style" +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"} @@ -441,8 +441,8 @@ class EnableAddPresentationStyle(bpy.types.Operator, tool.Ifc.Operator): props.is_adding = True -class DisableAddPresentationStyle(bpy.types.Operator, tool.Ifc.Operator): - bl_idname = "bim.disable_add_presentation_style" +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"} diff --git a/src/blenderbim/blenderbim/bim/module/style/ui.py b/src/blenderbim/blenderbim/bim/module/style/ui.py index 0289eaab65..d3e97deb94 100644 --- a/src/blenderbim/blenderbim/bim/module/style/ui.py +++ b/src/blenderbim/blenderbim/bim/module/style/ui.py @@ -48,7 +48,7 @@ class BIM_PT_styles(Panel): 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_add_presentation_style", text="", icon="ADD") + 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) @@ -69,7 +69,7 @@ class BIM_PT_styles(Panel): 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_add_presentation_style", text="", icon="CANCEL") + row.operator("bim.disable_adding_presentation_style", text="", icon="CANCEL") if self.props.styles and self.props.active_style_index < len(self.props.styles): row = self.layout.row(align=True) diff --git a/src/blenderbim/blenderbim/bim/module/system/ui.py b/src/blenderbim/blenderbim/bim/module/system/ui.py index 3d3ceae9bc..f986ca0883 100644 --- a/src/blenderbim/blenderbim/bim/module/system/ui.py +++ b/src/blenderbim/blenderbim/bim/module/system/ui.py @@ -97,7 +97,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( @@ -293,7 +293,7 @@ class BIM_PT_zones(Panel): 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="GREASEPENCIL") + row.operator("bim.load_zones", text="", icon="IMPORT") return row.operator("bim.add_zone", text="", icon="ADD") 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/ui.py b/src/blenderbim/blenderbim/bim/ui.py index 29b120db5a..f63c32a138 100644 --- a/src/blenderbim/blenderbim/bim/ui.py +++ b/src/blenderbim/blenderbim/bim/ui.py @@ -339,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" @@ -353,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 @@ -397,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" @@ -661,6 +675,21 @@ class BIM_PT_tab_styles(Panel): pass +class BIM_PT_tab_profiles(Panel): + bl_label = "Profiles" + 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_sheets(Panel): bl_label = "Sheets" bl_space_type = "PROPERTIES" From 8032333a17e7927085612ebabcd588ce27e832c4 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Fri, 20 Oct 2023 09:53:29 -0500 Subject: [PATCH 122/220] Additional clarification on `save` and `save as` --- src/blenderbim/blenderbim/bim/module/project/operator.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/project/operator.py b/src/blenderbim/blenderbim/bim/module/project/operator.py index 0ccde5099d..872d5b918a 100644 --- a/src/blenderbim/blenderbim/bim/module/project/operator.py +++ b/src/blenderbim/blenderbim/bim/module/project/operator.py @@ -1115,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): From 0d0b91ee9b1320d4531b32f245aa1c6f12235bfc Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sat, 21 Oct 2023 15:19:14 +1100 Subject: [PATCH 123/220] You can now specify a name when adding materials --- .../blenderbim/bim/module/material/operator.py | 10 +++++++++- src/blenderbim/blenderbim/core/material.py | 4 ++-- src/blenderbim/blenderbim/core/tool.py | 2 +- src/blenderbim/blenderbim/tool/material.py | 4 ++-- src/blenderbim/test/core/test_material.py | 4 ++-- src/blenderbim/test/tool/test_material.py | 7 ++++++- 6 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/material/operator.py b/src/blenderbim/blenderbim/bim/module/material/operator.py index fc591ef171..846fc3db40 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() 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/tool.py b/src/blenderbim/blenderbim/core/tool.py index 30d6242841..070773c457 100644 --- a/src/blenderbim/blenderbim/core/tool.py +++ b/src/blenderbim/blenderbim/core/tool.py @@ -446,7 +446,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 diff --git a/src/blenderbim/blenderbim/tool/material.py b/src/blenderbim/blenderbim/tool/material.py index 0cf0aacdb1..1f0150bbfe 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): 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/tool/test_material.py b/src/blenderbim/test/tool/test_material.py index fa2e7b8b4e..4079654600 100644 --- a/src/blenderbim/test/tool/test_material.py +++ b/src/blenderbim/test/tool/test_material.py @@ -31,10 +31,15 @@ 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): From f10d340254891f3e3a79e3591580138946eae457 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sat, 21 Oct 2023 15:23:43 +1100 Subject: [PATCH 124/220] You can now assign and unassign styles to materials --- .../bim/module/material/__init__.py | 3 + .../blenderbim/bim/module/material/data.py | 55 +++++++++++++++ .../bim/module/material/operator.py | 47 +++++++++++++ .../blenderbim/bim/module/material/prop.py | 17 ++++- .../blenderbim/bim/module/material/ui.py | 59 +++++++++++----- src/blenderbim/blenderbim/tool/material.py | 1 + .../api/style/remove_styled_representation.py | 54 ++++++++++++++ .../api/style/unassign_material_style.py | 70 +++++++++++++++++++ 8 files changed, 286 insertions(+), 20 deletions(-) create mode 100644 src/ifcopenshell-python/ifcopenshell/api/style/remove_styled_representation.py create mode 100644 src/ifcopenshell-python/ifcopenshell/api/style/unassign_material_style.py 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 7d96782ff3..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 = {} diff --git a/src/blenderbim/blenderbim/bim/module/material/operator.py b/src/blenderbim/blenderbim/bim/module/material/operator.py index 846fc3db40..b41a862252 100644 --- a/src/blenderbim/blenderbim/bim/module/material/operator.py +++ b/src/blenderbim/blenderbim/bim/module/material/operator.py @@ -715,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 8eddab9856..3a755a9413 100644 --- a/src/blenderbim/blenderbim/bim/module/material/ui.py +++ b/src/blenderbim/blenderbim/bim/module/material/ui.py @@ -57,26 +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): @@ -88,8 +81,33 @@ class BIM_PT_materials(Panel): self.layout.template_list("BIM_UL_materials", "", self.props, "materials", self.props, "active_material_index") - def draw_editable_material_attributes_ui(self): - blenderbim.bim.helper.draw_attributes(self.props.material_attributes, self.layout) + 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") class BIM_PT_material(Panel): @@ -343,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/tool/material.py b/src/blenderbim/blenderbim/tool/material.py index 1f0150bbfe..ea790996ee 100644 --- a/src/blenderbim/blenderbim/tool/material.py +++ b/src/blenderbim/blenderbim/tool/material.py @@ -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/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) From b841afc2e4f0b56aaba82e375fcee85afda5d8c5 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sat, 21 Oct 2023 22:46:15 +1100 Subject: [PATCH 125/220] Update beginners tutorial documentation with images from new UI. --- src/blenderbim/docs/users/attributes.png | Bin 212374 -> 338643 bytes .../docs/users/blenderbim-layout.png | Bin 241379 -> 312670 bytes src/blenderbim/docs/users/dimensions.png | Bin 0 -> 294124 bytes .../docs/users/element-class-select.png | Bin 252971 -> 386439 bytes src/blenderbim/docs/users/element-class.png | Bin 237601 -> 359033 bytes src/blenderbim/docs/users/example-project.png | Bin 235389 -> 324659 bytes .../docs/users/exploring_an_ifc_model.rst | 74 +++++++++--------- .../docs/users/install-blenderbim-4.png | Bin 238472 -> 339949 bytes src/blenderbim/docs/users/installation.rst | 2 +- src/blenderbim/docs/users/materials.png | Bin 55847 -> 45435 bytes .../docs/users/outliner-isolate.png | Bin 259715 -> 316659 bytes .../docs/users/properties-loadproject.png | Bin 41404 -> 15471 bytes src/blenderbim/docs/users/properties-tabs.png | Bin 0 -> 35359 bytes .../docs/users/properties-types.png | Bin 47045 -> 32264 bytes src/blenderbim/docs/users/psets.png | Bin 41817 -> 19362 bytes src/blenderbim/docs/users/qtos.png | Bin 60214 -> 32960 bytes .../docs/users/spatial-container.png | Bin 197881 -> 274059 bytes src/blenderbim/docs/users/type-local-view.png | Bin 202879 -> 312728 bytes .../docs/users/viewport-dimensions.png | Bin 124009 -> 0 bytes .../docs/users/viewport-sidebar.png | Bin 83248 -> 0 bytes 20 files changed, 36 insertions(+), 40 deletions(-) create mode 100644 src/blenderbim/docs/users/dimensions.png create mode 100644 src/blenderbim/docs/users/properties-tabs.png delete mode 100644 src/blenderbim/docs/users/viewport-dimensions.png delete mode 100644 src/blenderbim/docs/users/viewport-sidebar.png diff --git a/src/blenderbim/docs/users/attributes.png b/src/blenderbim/docs/users/attributes.png index 1635813e4b7ba0a84023e028db4ee577166e37df..4b5c250f36de38e91030954bcd6b1215ad2021ff 100644 GIT binary patch literal 338643 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 Qx@D0s!NIg|mX=DsGxXHcN9#mfg_B}q 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 z%0A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%0A?ZAd51S{aN6pj>2ErYKAw{=bknu3 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 literal 212374 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

    OJOP->R&A>ZJ>a@p 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 BHv9kp diff --git a/src/blenderbim/docs/users/blenderbim-layout.png b/src/blenderbim/docs/users/blenderbim-layout.png index 3ef73d21aa4edbe9c0049aef7c4208384ce843a4..8e4c7d83dcf4d2ac7fa0ef90b9262dd9dda4fc2a 100644 GIT binary patch literal 312670 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�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%0D&a}t^2ky2C|3z~W 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%0A+ZN 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

    C!xazY&T)f0h_b@>IQ4zv3B_` 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%0ASUFs6AD5N1_JJ;ynYQ2geM0Y9AFBzwzl&N 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

    nf~-V>De|dqK&}M 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

    jY)j;54&`5w?C3>>Y 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 RiDe(hFjCi>ytUV+iIpyVruFX^1fZ0thOTt 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

    jvN8R+f-!q;2Thu;$y1Npx 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 Oe-uxv$mU2J`2HW>=C>{Y literal 0 HcmV?d00001 diff --git a/src/blenderbim/docs/users/element-class-select.png b/src/blenderbim/docs/users/element-class-select.png index 4e2304b93f507654f669b974475f528323bbbafd..f343dd483feea428f90dce23b9b8ef8d3f98bffd 100644 GIT binary patch literal 386439 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 ueRo95; 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%0Ac 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 ZD5G{-f3BlF=SP8mWTg}(3&r)l{~rp=nWX># literal 252971 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

    ``=%z@4{0D0nB$Io|J=Q?l^= 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

    <} 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 diff --git a/src/blenderbim/docs/users/element-class.png b/src/blenderbim/docs/users/element-class.png index c38e518e2c73449bee7ee4a22d85ce7132f5a37e..1232eb396d06b3e6c42257c75bae04bb1694bedd 100644 GIT binary patch literal 359033 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ÍLLuS# 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̗QMy++6{%F!jZ>6AG<#5|a(?(Uw=CHz9;YX@F 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
    3kl^%+~cYoc0|yjk$& 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

    {#T6tA7D6x~t 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%0A3s+faxEv*pGwoBJd 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

      FadQJoh}*{{z5luK_k;!Cnlk7w&Ry}Nr| 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

      vyPejmv>#p`;PCRG+DkjI5Lav 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 b82<#geboEB%0Rc54i8;T1C6_C)))T=d6_Mw literal 237601 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

      ;*4U|9L$&HO4yK$CI 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

      7i4Uph~MnMDE~E_4`n>?S4E-Z@0)sxr!uOTQN~| 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 Klq?fB@c%zC01?~( diff --git a/src/blenderbim/docs/users/example-project.png b/src/blenderbim/docs/users/example-project.png index e9816f4c55253297e8d0e72cd0617e545d54cc7e..5f09f00b67c9449947ac2838bceadb884506c2d1 100644 GIT binary patch literal 324659 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

      ^ldx|qpN9DIeHR+ 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 }bI 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�@8ZUDIkE0LYi1mAyBPk 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 literal 235389 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

      8q$yNIAJe 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

      &9?VF$q(5}@Zkcg9?%PB(xGS1Gx*PzLhB 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�~ep`1lP_ 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

      &GC$4I9kwDTDA1$IFo$gHE?Ej{3b=o{-n} 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 U)YRpzr~nTKJE#36wtiRs14r=l5dZ)H diff --git a/src/blenderbim/docs/users/exploring_an_ifc_model.rst b/src/blenderbim/docs/users/exploring_an_ifc_model.rst index 7cb0346235..e13e61b88d 100644 --- a/src/blenderbim/docs/users/exploring_an_ifc_model.rst +++ b/src/blenderbim/docs/users/exploring_an_ifc_model.rst @@ -21,16 +21,18 @@ 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 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-tabs.png + +Click on ``File > Open IFC Project`` and browse to your ``.ifc`` file. .. image:: properties-loadproject.png @@ -38,12 +40,12 @@ After loading, you will see the model appear in the **Viewport** panel. .. image:: 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:: @@ -180,8 +182,8 @@ 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 @@ -240,7 +242,7 @@ 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. @@ -273,7 +275,7 @@ 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 @@ -297,7 +299,7 @@ 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 @@ -315,8 +317,8 @@ 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. @@ -333,16 +335,15 @@ 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 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 @@ -374,12 +375,12 @@ 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. @@ -393,16 +394,11 @@ 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:: 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 diff --git a/src/blenderbim/docs/users/install-blenderbim-4.png b/src/blenderbim/docs/users/install-blenderbim-4.png index 179613072cdbb8e7ff86f2f8e7bc675cc238bca1..553eb91982893f93ccb9fe9ea6e8a705ee653a2c 100644 GIT binary patch literal 339949 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

      Y2sT1iwRaSghobMBLLf*t8?N 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∼sK*( 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

      {58p_`5ZxoV`Z2|D0x7 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

      Y%^vc+N1gLVqcWUnVRraAkV<4*-9`cjc3G5t%% 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

      H4Qqs94yB{-ih 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%0A^u1KRJpwI7C3h<=$lr)^Xh@c*i0Z4utQ0bl z2%OqbnPdncdFo+RzmtpWK#bGfByL=nav_BhyLuVHjA8Iml;OE@s(Q7wz@jS(wYI`}nnp6IsHg$wO3Q-7Q=){#gw< zQ|MirHgGNhYnPS@1E0;iF4~nb60$D9-xbzq-nfR}TtH&h*qy zF(o(0zV>Eep}~ynp^@BO2Zku=EdHl~wF%8AvGKg~x19(x!^(EmdkLe#4f?mUI;FE!FkK2CbMaz8)#C&y0h~0kyQJ)0Q=W~`tvo}d^)+4Tc1k3d7 zM!(Jy6O4ioB4)m;75tqi0yavnZPDR2cED36^;?-V%Xig;AaR*mqBGEF|42^}rbX3p zXI-P9R-+AHtq8eozA6=mG%sqSxuZa94hslNd1mL7=UyoYS1G&EWTeFmI^MD{j>KC+ zCCgX%=t1NAj|^-M;{?%))+!B`o~1-y$T^~2Uw4;`5xYt}{=c+;;O{lzvaaHFD)@Ta zTaN@VjVoH)+E2E5>lqS9I>7=(uGcwr!_0Qsc>_1@*%tc6{z=b`JBxg@X8q5dND^y5 zmvIXcTr&$4!K{ZDq-z^T4{1dwJffjGU%ysO8Cr&&t8p{Pa}i3_-L1E47hvaEu(Kb& zT7eMRI$N&;hY9jYIhli#vr$yp#N#nQa&syEzK;cr>R}#Bg%@=hlnwU-R}-I7DMS#-x~xn*Cfb=yBqb?xn39$|+QRXXdw;{Xrerp}~Aebyj51Ryec7 z{MYWzeCMl^9G)(r$|F)}QjX?KY(%3QA=6|L5#CDQcfvJjB2W13N}+mNFRp19-lqdqODYAchh-p!Ks=P9f~Qmx#o-Fvs#Q27=aPbr zXm|piu^v!LutWW9I+U^Nkm&)7z?i;wo&MzTGUZaBnC&&2B`oPTo}@0G*ecMlnel0*VOW>pAcZ4J)A97=Yr+urlP;W-kR zVDQmn5F7G3CnMz|a-)+mh$^Ind5P~vG&LfH)1ZP&S@ZsVJFe&6m` zppX#-L%8qY$JPIxiM52%=6D02{TyBka=_%-#_ z;C1VMUL8&m%%*a04p~@uuRar-&~f$Pf}@=sWCd&~`SsMsHxt_44aP7K-Dj#-O@2Q^ zDLyUe3J^lnn*AWm@%k@iXD2Of-{_$8ivq4N6mj(;lHSE!bUMG6fX2_#{&1s+jwm{O z(gQ{Pr~iOK62J@_1ezirS&WQ!Oj2=Jl0G!iPv7iC$gL7&D2&bvVQGyLXt}n>oc5pE zY(prJF%rj=jE`hd2t%+*o%=ucz#__u{UL>nMEImAU7>Rpv^i~6D`2r;wX0i*$5<}> zpSnS+WN&3Wd&#f?2OcN2RAj!0x_W6j-p=kF-dx~f`c zF{zsk#?gRL;l6ZyCSfqOAS@)>xNH!Tr4iDz?xFSVuL4!cTHbr!-8eZ(DN*Iz zPHxL|{DT*XQ`0%SN!MB8;b!TljVqfsLyZ6a5ca2KoqXF^O-jE(gu7Tk?rRix6-hue zZ4u*f`^H(PmnR;l-n(%;MnKG5IdWO9-F5yS`QDVR<#1o=s%ryO`!`dsZzBm+(v1uZjk0!S}7iILEAu`V zfzsKkF{l-B0{`>-$LH(!@POv#FNym4Hvfr8T|XAzwiB2EkBeAa)4li#15+I%?^{-H z2;I71|6-%ujkv$9p~tCjPB>^=@l=7yGf7kK3E(#p4*?|HD*Z7hEcYbVY18l$CIz8$ zG9|OBe31w#6<1g|+cf`uLs%89I#4wK&kOg2lYm_j>d0|4U%?E9na{#dJ(1WgyD9yS zf&F!`{B|Pl{|xF!3mNxaAHc;X^dAA+5GfM^_JHcyH65yyGlIq`3>JI4zS~_ zd6CN~WQddxqcnaLC-AO&Xa&c(=AZG@7kkzWJnj|h#hOwE5o?_h^JH2rta(-z}Q_T|MO?Oy1Hnbk+H0>l3)8cm>SA{(> zLB7bhaLZO~+l)AgF z{BFF^^hyZ{_S+6);74u>Yh7Dx8b^>!*eM_LZFltNKDQQ;biwajRt+ni_gf?@t*}IV z{^kq|O|;LSEwzSsPxg!Vhw1uKVhn>atT{X8Q&xkC zO=j^9cGo+C(d%9}|)LT>2(+QX2wcCRc zP|n$v^)ifG$69kS&b_4Qq)s+%_2CRr$%ze|M0KLoNwM8Ga(w+k?RBt~O!A8*(%+~m zhPg0AK9%3n@FEXw$cKsIvs~5cX^3p#sveuZrMbR+;f?wB=FOA-g(dJyAR> zrrs2jBeE=EdpJ=%g$>|tYwX%pnLonu_d90J5FNTM%Vj&zF^5jPKPLmqg9ziaIr-lx zR1Y$k^!lt(r;cU|RX^)2Jj%>3xkO^r?|jLF_}#0?kjN~H7MimVK?;5lkCL%m%Ls^t z_4?pxHu(>|lyR|FwiE~K^7BbGp8?xd6X6oqt z6f}w>(mWJ)j)m-*DR5ZnlIKzauV*sk26F}towY&N-!Fec$lF8Og@0l&5yU|K<{itu z((bi6X5_obg0b**2@cNL74_1$Z>l*KyqFY-Odq^!1P7v}bI$-dT zNIT2UO@c1vzr_FM_Mb-wZyiVX+Ka+|i@P426cp>Z)d_AKp;IJWpv1dUt4I3{e1%&X>#OWA(*9Hnh%4@Y&`#rN|-Qh~bS2x?p;+4f;P=Bp*(D;eR8_fFZCt z*ml_3(QK$JQW^wMGoETK6K#ux#>H1PNeN3_sH)<>sf@(D*(Y;q_4+afvOy2Cnhw_? zq-X==1ix(aRId|^-)0GP{JU}(BiIg$r?bVNLg~bxOB@On2R}n@c_cA*stOeNeXdI7 zhbq{{$c89x{GpC5Ez(`D&roD5?!ym!7Y}SpsFWWNGId78&zBAqH`4U{YE|E)!ep zC0Jj3%Mv<0@lor8Ljzf3EEnTLimSAI2)mKEwO!50s`}&d>hTI^@8!-?vbb^S|g+83Iphs~u{!dX7ur9eM}W zh8d30_|?4FRIXI4FWx-2Uj?m9RjJ-+f3eE4DC9;T5Kyi#o2 z&yVdF{FH;?uKx8*lpD*J6%*pJzZFi?dESC&DkC)2A6cF7h&60f9&YH1x7Dxfi#L)nbiz!epe?w7m zg3M3cM@U!qTln%fSYj@&U(!)=Nx-*_B5=QG@}YVGe1Eu2=-EJ%5gTR^9v7=D=sNXu zNa;JXTJW!Xw-Kp($rDJtn1;>!vM($O8VQilKc|30-Ct+Rk|Fb&4W$Gv3`A6ioF$*7 za6x1TlM{%QIdqpmOLQf|5gL*}Erzi9$f(i(nAiF6z3pfG+|Tw*K`)H!uS+K=g8wa( zQaw){&0Oi%Sgu(UY~CT?3mv|L+qH;(%tYP@$ICk!aFisSi}%xFkq$&K?0CFgLGgp4 z!=ycBEiP-V$96kRayycI`zw@fxI1}T*6S{A4f`wczQ1~*v|6j$tSqJA^^{)BgJ#%%6(f)f#1PzE6oKsosL-crC0#V#Y9G^;LaC$2xv2*P z##F^0RgP?B08@AG2`70-QC$1^y5Ur+;5KiW&U8W=nuymFy4ol#gts-uQ4R~9*W;_u z7=ECw%pu~POShAc=x}0ydDlg{83A`r<|pwK6M{{ZNn!<0U0HeUY>kd5SsGki+y_9k zf3M>3U48E5@$uDHdg8>cx&`J`Q zW_oLyjV3T;4hpdV`@llZ}^RdflGKX8s!$ z4WC2z2t}e~>2?+SaWEKb3vnlw!{IBLC3RIJz~y<^B1A?GYK zn6WA)v$Z2T9>21&8<=yhV=8Yt{a!jGSCqwrQMe|%EWGARCQ9}P19>Sf8r}58BAo+}F+}GotX>26T@%>Ek!a6Q%Po zpE%0{1rFc39n`h=#fy+)E5OCFpZGxddwc$75XMPwhV^cljss}KoKz!9Z>S6AcW<1E zUL{jCXjqWU=4*e6(c*M+1(g_0FISt?6AVf;t3Y5=^~MCLLb*H{8PU47&vE>Gqq7*(bDZIF%9ILBi~z!ggM(-8SprAK*Krj{<_>5i}4|QTm*IgoKDw|hQ7D>a3z6|mZ7yuQh+l#n$ju-_P9u+9`PMqS z7U;!(9^KG~1{ftq5{Qe26&8$!2hP6~Cm_)yap5N$qUt=gYMLqrH$;3hM`rWpSP9zueDh8E$u9pY^i7)opQ#SkG{u=b zahUoK?4r3yHXrv%m)!?XmeXBr8?T?5tLUK#8&#q-@uAGbguA7D0c#Hd4+89zxLq7| z-#%k|{@QwvcC8c*_7X_o<7u0y2vQIhe&Q)q2JZyUxryAq0^P*thYMx0?yyP{ZsG{GB!Ih&-)U$fG% zCU$ae8W1GTLtl0nDlJCdsi>oqlyyfUA%DR7xr0Knz zc7>f~hQ6n+TnBiv7Yg(Cpjc$N9yWHedD5NhQ#=PEkG?8)~F0k z(*KCL&}Z=iDr;KehwHBsoce5QzM#HpVd}G5&W6Y7X~IE3^R{bVOhROy`ajKE<;JwX zA&u5KHSnD*cc*K8i71sy3|Kk2;}aTI_Ps{`@D2FAo*2NK_G&aXZRs50re|hEAZOtb zUSKQhNtS$8sC1H$j@>D1vn=tYTV6l+)Y_#-<x=ERVx`|L*&OeDEY_M0KFCm*IEA`nL4PP@cv53*?D*m*5-MSiB*>drE5$fTS! zDtJ70uvIUUQ+X~sXZ+@ge(WbknYPZ{UQwD2AD;u;p|gytbQ%;+cJUmahXITjA@6$Y z)Ybja@v$`!vgzKT-@IlEyzAVV^7&*|sVOX{OwdF&Dg9PkhEdcpI>7;35=T8Iz1NFb z3(UEdWDvJ2pr9&BB&&!cNKfz3>HSDm>MPlx)&ObmzIcIyEZ1@}rnp;x8T{}U-Hb0} zgfA!9aP3Pz)K&-UHUBkBTMxXGz?g;N3vsZt}wN%$9Zr-_EkykC})0rvb)4MBuxe=86e#8k;MLk(!o+%?B~VVfNaa$@)q z;jC(N;-a|(+`me?f2wj9WvDs_;Pt8M@Ut!Wpsl6=#2cm+*gK-#BXeq!bBn6Iu0F0F!^5=pjpdOtShWEo<< zyFBDj&svEjRz7#7e8XX`(&Ql8U~Jk_5yVIT%Di1>VbAFJ>+q+$7QE)XDD`9nW-mpr zRy*I)=>s60fB3gfRCbK;u{8h^>`#vVvKadP2@UnSihZ$hZvj3qNIZO7fHH`{K-a|r zMhf&msG!|7@f-5AA+`n>zpGl#w`0y4Vfu_mfO{&CN6W*nsl>^Y@R$V?I^*8#jnVb6 z8%s#X7Kvj-R4I3H;YZD|@Bc%6OnGyVfq8m@NfZ~FlE(`m=|Sinxc%pCp2=*7HY(mf zyqmF45*e>WJ=u43!=E@=A)Kw2AE{8nnrMh#C3PYJ*&V@Gr#8VEC9wj%qDlP@WXVS3 z`VBh*()!`yVHWVOqo+TBDmE|g6Ck-1qlijVCi!*MkL5NX5 zprP;LfBpAXcg8QH8XwNjyD>Zn&l_zGy*iG$?jhS%XhqfDy6aq=ErU<-zb!ZMo>SVt zibu;ewY-$Yuzz?(IgU3~R{>JG zc7cO|PME}-F>&J&=~#(qt6hjgOf>X4)*|W{hD0glYZ-|QDI!gZK6owpLZ}fDvXoQ; zF-fT+q5x7{9H_BlaWzz$S!ypRR zY%TsmZ<6^PAEHX9beVlA0ZLCzB-X#Ylntl}EV#^y8qWIqvaC7qj9vtutA8BtDP+ZL zZSBtH0X^9AvUYMxO2!#GAZY|vzz=gzb@fLg2iNl&;O71?X#xKX5EJCUuHcSK>CB?a zVLL4q7j)~Bc$FfxedxJl^E|!7^6Wdc!yGey9WQ$C#szB?hH-U@VPldYr6ptqCk9~~NuZL+5JTlcnc z)^#6>zw4upKI!_Y0ly__hcC+y;jI@{HiG7!`G42&UJ`EzX}2PSN^<>xp7=Q9E0 z2AXhCL_ELBs}z@D?2ka{@7n=kUDEHCh~3m*kAP5Nkhocx$PuoV>OkS#Pn>8DU@TF)3Q8 z@n1;gB59$3txx-NR5djY;$Z3bu{xV#`T9HEs^&3Q*j!73+LIESF9^6L%gf95o86y) zM1oNao?Qo{rMDm2+L3^}Ur3a<&9~dD%MvP6L$o+S!W9JNqN&6>;%OKZUa8$qQ)*t6 zVc7U8Vu{v22JPxdki*Ak=e_cffV{{49Z{$Smy`a6(C-KPSnH--jPb!(hItk^15mTd z!$?Z(gvvk$5fQ7a5477G6t*tz^%(?mE-r#&4N{{;)i{DJ@E^9qJj9K&4IpTu$}jPZ z8jfBUaKaDx6D9ns6cZ=`0FaOpF_F#T?kPiq)xPRox7cJ?l3uib}(7a@Z%KW#W?sBuQuaSXXN*=A_g zWs)dRVIN2nBt|CPyMu9^p>r$;@p!mSB&)w;fPU;IUqQvVA6TT3QDmscQ6A4wu=np= zk>JG)TGB6)cG!RbZQeLpp-4?P#!=dqJpfie?cN?yQP$cH%6i6f30e!auKdlA5`Att> z8SSvb%Z7hS&+-KCT9z10yoWsC!@2Uivfz`>3n9+ISa-B@r?_9| z`QV9Tc*Xqqe|G$w|NQ|;_LLW1DJJ?umtdNBJCyIaCdq@hR44>)Jl6cO{jixvMZs|s z{lC)Qq3tB~P6?XIQFF?rOc^$UpR$U|L>0!w{dk{??t2oaf zJCj8(zrMF+?Ugf&iEKFFtUE%TyJ)MEm>H=DP@&c`Ib-d@b%m7)7nIJD!Z4uzXcV%~ycopp`om4ZR40pocZl^5o9B(5kfi)v@5d-B2qpBaePcW;# zQ^wlz5O5_J1*+ER{-^IpsszPMm>QN`_nH9ffg2hCEbQ!!8LP@FDhU}>7f{pVlaoUe zApV5J#Lu~t*lvVI>o@r|xxT_4pVdwEzDuVI5y3J2&XAWF4lf2x$^4f2x@fhg-PU@Z zzcau;!7sWjIS1`7bJCL{REUXXGJMPT=-6AT2SUJkaX!puC8Wt&4!zH`vGL->56yF! zln?xQ`kHtk6F770t`LY}V;_HNz!WuCe)Aoz2WRfi!$AUtFsky0K4f|HZ8c|Y^NZ72Wd zzE9O~VXUu%x!VmBNT+^x>MLh3U-5P|Nm)zUVBX)r=%uCQ(PN+X9dIQR3`&M8WXu|b zhi%%2%Q4w3Lz2Hz)MZ(&DNUncpy`^H()?Hj<~CELBF37WCV`K&);SvGi#A6X0O-Q` zy4MlkLy0wR$121oDqgl?BqO|Hn5-i}q`Q*(^v?6|ttH=%XhRpMHc1_{BN4Az@~i`g z!K-+I)%e42W)lu3>%7akl_O57M;?GZe3!Uj|0jqSlV4EKhf!U(os3ojD$J_Gg$BSz zrDbJ3K;XnPPfY%s?OfN=t?B*K+3e-ghLuHxkG?=*x>S@_VfwFu_SX6KoBGM1g$vDt zaKbK$a0daGlA{xJ=o9x0sJ4y2BFY5_CY@?Qm0RkE<+7sE>hQgSbl>A*Z_$M7Mmvt}k7H@6ilsvVXgrXfSBjLRe%weDMX2{^E%gh`4MNovbmsJhH@q%?%(;FhCny z07L~%z^nw=+_--Qb&|>A-kHpdw@5t-pn?VIT>AK=Aa`Cdvn25@MBRRevR zBFQa~0@!4L%`3Ri2r%daAAkn%$LAnX2{KgRS0^29oDfA~Q!v(1QTWXm`nRpdg3^vf z*@hIkO1-sj8YvujF@SrB1P3uQHg58OeOiv*MZ1JRjy{-w{q^+zfR|dS`A`16X)gN- z17ye1Ae71v^|{lyLcd~w(z|m7&}w4M1txZx&%A)n!VHaDDa`0(M*W zsx)lx%`!cmI}80UaLnPfqXNI5gr{F*%GfmeCOz#*+EcF z$@ZO$VeCoYs8|WqY%Q46CC)i;a$X%{?)u<^ z`sDg~wUL+jygXj9UI_e*6S#(DV`Gbz<9EwuMQZUgARIeMq2zcq{DOy-jSvKPZ|eP< z@a?KEkqD4yWwhury#QngF(60lW10NeAnO=*KJ4#|O{&T;faYsfHsAc zJ9+T<7!woY{(84?HLIpR(NO6IC#ne80qi4B4YZtk%i4A0`VWfM{0LyS>a^K0dU!xl%_Cr1((;yrVm zy4ApYWhasGe$?5DD%x#_Pcp(q(+p4VrXys2yLJ+a^GdI2UnAq4O}CrTw%9WJ7)K@Y z67*DxxxPEJhy8f?I~1ze$c3fkgxX2B6^Er8p#arHPlU$!?5 zb9#IpDTnzRS5BjcmfnayumSvxPQAA0m=R7P%BfYT8SEWZZ4eAmzoVL;iPZikJ!s;I zSp4jErb=v`wr?LqCj!+vvCwYV)z*Gdre_XerL%tbL%Ns6Ux+eZtTh%p^WLPL8M374 zz$ly=8hQS_yF3RgJ2Q2`;#pA@HnOt+7NPB?{suCkmK4tR_s+?cCBVc3{He`5vHVj2 z_U0$Yjr3>^{-m?-XJ)4&R9Vd-c&2l7H3iGVkoYduo?+%`e`8tV0m*%zEH^a z0{M&|^kN{ff|QyX=I-u}>bQai9tc%LlvJq&7DHggK_n8u0oW$H!wH8+N1|qCl-QI+ zGze+?eGkiBCU5f|Pdt`KLe2R6Q{DqMyIrlTFMoZ0p(bSC7GkG1n3y-MI!58*0B+g` zL!2+bdKpIivI(=#6({`013;B9$3gtq0F!or+4l_}F^RsDO0GVZ-M^ zbioC{k^gDZcv*AXIV#B=1gHT+%{4mnE`nc35uiSsC$E;(%>yLH-$2H}|5#>9uC879 z?2{)0x0MXvAHAk*8G!;6-@p$#EsL-x*02o=jsyuxwY%u(N0Lj0t0}eYt&_!bz#-4+TO~Wa9P%EiT)yuf#!sk0vHc$G@iziZQ)tRZw`VK$-9SeZahg;(SQ)Dy*@e>ljepTY5phv<@oDyIDlx6B7 zK6nmg9`Yrzm_3jEC_`U7OsTuWJ%mFmy+qa~+Ypzu%Zy?r@vgen<)X@K@`dyr>G}NW zwbMy1HOX=Q-~2V*kE3;`i3fp=iBM#zw{73MmnAV0 zQ_U*#%YcFtnaQwDZpWs^P(Ake$(EA()Mkrr9m9vo{i>L|0}eTyT>cvoLpz|8$ONKTzIeY5Vq69et}46rV6KXQBi*enG$weK-D zUk&233JV)}-Yngm zI4fx>`7gR4;^bQJ`oKY+i;PH~2KrL7MnLu0hJjI@@d`H{3&bxTmhJRSKxCOx^A6;H zZ`F-4^%=b187QCL3Eh<`Z(-KBLj&MkFHhLohZ*g!FpHh<)ovXK7q3fAn_=@+L%9Tk zp+@I^4_O;8=IQ32AwB>OVSeuqS5s&2kX`Q^LVu3okH)@pUl2LwXE|N$uD2r#_OrnA zsaf}}%c~i5s?Wx$btdX-XFHnTl^on;Y>(5i#p98$Q&~W>&D(6Y?V!egTDjqJe9}9L$ zJ3ZmsH|aQ{0U#}f=SpDb3P?A|6?^`O5E~ef1U#37z+%e62T}?My>__(aD?rLlFVWy z;2vmf-CAQJFHtHONh$oY$d}^4uXeAOf!J~ACuVi-86>St%MWR(sgbQKexa)?F8m-R z)*tN(bc7fBQxo{mfAF@iCQLxQO{qOSJr!ZIo@ZHN*W|XpeR2|}!pZeQ`@L>Mg)MWs ze-_Bn&AVj%*=bc=p?GPGM_b9o=FZ`;+o3H!gTF5#RmMk?mMoDWqR3|w>0 z6HD}0g`o@US-%!R1K-lPVxyn^P! z#}47lu%y;Wu?&XxgI;aVECPO81QhS+&UJMds)ZbnA_?ao#H^x>&J(}6{b$h0MC_Ps zh2eg@GVSSo;O^g6Pub3st9_^cD~{lz7Zu{Kv9BhJ&0VcHT-J}(w@THs4!iaPGtO(j zQZpl?PX@2YKdy?HeLm*k26qo}cd1t;8v^0Pe$%uo<%C&niyThn%oCZmTY>dm3k$g~ zS>o>2M($EMUbePK05H_j!Qb!Y(LvzfZsF7{K%Lipc?WWpYJFcfe5|iR`8z|X*RRDj z-{+p=Rh}MNyOyJ-*Izeo@O@gdoA({Z*KfWNhRp3a9?&lbRaYP9LZlD z|LDT=yTbMhQ1;$NAIN;##_qy-KO}x77r5+(Y~D-Np+ecNbL{)dy%~yc+g)MsYTbSy zc+pcLbVuv`{@^F9e_xljbywpjD0G{L4Dy8_AeF3OM1JsmOd3MoY&^)0%FS2_U?$>? z?hd`N=UX|%$In=?!-4*e39MsLU znlKv&l%{oDp#YJIt1DK)G%QGI=Qzh45W!Iwm4DWUu?wv`{x1h5W0AP zluG0;kU;E|P@$E(RRP^C2H~GWQfWGx#=9!I>yv+u(hD*3{}I{gzmh5O=x{H2+McxC zA&@tPE_$9633ZXR@F}UDL~&P-9&!-<&Wzj_A7m|5|`=iZDM7q}F4kdd~jy!6w}*V`w_C{x`_o834?5HpdL! z9L+p+zrQ(7qK^MOH9jb2s$O@X8y2vyjJsQ-(s%9oLclXW^kxF-{kCF(w4@7A9uqn% z#cFak{%yD%o%+GYtV2-iyV3$d)GHx48U@@CrUsqvd;f53c@gUU)L^<@{yj4SSE}op zzAMn+xzV7n>uup3@BKFSP0jn%gt+hen$7og$QM!gF-SPP22dA#+=3cDBF$!FSgZDZ zU)@($)?Z6${ z=)vxLY{oof*7b<+Xh;0c^TE&cKH%S=rCT3o%U(G$wzY;|I29na`&VSpYv6ko)%<@< zy>(R6ar-`w3WA`7bT|Z51VI``4FL&7n8ZLr8tE9#CRZ}7(;chA^LGTi zBPaLrvEsMvExEMZ)uGNXTNw$kBoB6z##8E{_`ajL{4(+;i5-2lI`xFWT2G^9`4Fi5 z`bOyt2%rCs(ekSc2X|4!w>R!UK2iArc2xeSmd^u7w7)hyZfIgdVIV>9X&nty#AkUpCNEi zV~+iHkN1W=nyCR$OaO8=5@QNnmwCQ}bQ!K2Dx0nocVq4npX@@Vq8$f^mgqr#3@v8` zE#W{;&hqNjqW=}W(*cmk+52(9DyS)jwY5s-fWz}dc+|Qw{*H`73Uqfhx7RLf zW(fh30$-M~(gba&)Ahvg@<#L0ytsQwD<-3x+ zTXKaS@m8CdJ>3iIiHTyCe1ue~zZh3Rb*T&)S@RtZ_NXmgpB;RfAe!)su4&q~r{2OV zK@Q?fFOCq>7kR)jwfC=L~0`^1|CpkuEk0TX1F0OX3A%Gpy zabdMemQ3e`{q?=`>l)UMk?Yki@G*r<$fRb^$aW=vdRqHc%_T$kJo(W1(zcb1S0zZ< zO;^*x+WHRbX|K{=T#V03WywBZe^g94B?Gu``*HoVPfvB5)SWv2j#}D_;{cad263MGrXq2bMfx>#%s4@RDBqx# zxGz(7*7-h*c1d+5Ybf zG7bWY7-H~LpLSGfx`TJ#g_TanAaDPRcf7=~F`}jpvImO`Y@aMYeJKxKHs!7iPIdZd zK=czoDxFpNciqxPGoDnjzzMCnt$viMF0B(Nl}Emt>1Bl(k58+ypViJ*VNNsSXIKIT zeE%x860;V*=g&y1nRUZTTS(3PI*b~b3cY>DK>Ds4f(V`S+zn|!&If7pb+y;Q^PV6xBBZ?00Ubh_En_1BBYcnJ0yYQ{IWS>SP&gC5lwq~FrKEV?Bu#l z6Y!ms`!Ja+TWyP8+K9An(pCw@I?>axV6f17s>^IfK!KH)N{{+#Gk0;3j(Wnuzxiwv zPcP%2eSe#64Hn29!(o$Rghx)CbKmbuLGa-oPFx$7b}KjKX%{cc6oS&~4f`x5XvY!X zX%@go#aJX_3qL;k1aT#()y|AU9ziG2{crYa4==!W;pK_<0^&>Gc(?&2&@2It zVeg1rAFl={IZB$5I3+j(KG$>-BsxaEBF+0zj!R!NE>>JJi_{t~1P`AtM7#9fss$cZ zKTtai0lmI z;5_8lrTBX5*KfIVo)5@=OM;}3eku56?5*t8Nu@dwAtn??U7 zrPQ+6^QR*O4)`;F#&l?^9G~S4WGcr&sUOe|6s?oBI@U>XzFFqopiW!Ag@tXuHwIQ5_epG`w@~xg96%%h|L6R>6tsriE<%LnJE=ECxzI5dr-rTwr z$QSf7e1N0u`t$Na%+|Az@7OBe>)tqyE-C+NK=)9vn%<+fJa!EE{DGsROFwU4=9s1J z{MwXtXTjq@w{G$3@?3x^suXAx`G6+=qyV_Gv2XNwGn#Ikx)P6hg9?b%-ftecnIUHbvQhM@Pi>4I^VaZK zX*_zpOU+hE#VMNLC-o^GtXx2E2U7r5-K$FL3%75!=WviRDX04KzW^S91W+co;R^Jb^A0t8-X9hhcYy*Ij7@bZ1ukRuAErA_ zwC_n2x@wIYPyZl;3tEbZ%tm~;G!u?|Jn%TfC$ahBNrTke@;kF6;;KavhAo>|kM;aiKp3#r*9FVRzX&Yy7=tc5yQ7> z2nenA0p$w!oI!~p=>EK&D4d7YBvm?!P)zOp^~>N#Pnr=I8@V6sD&DFKJPSxp$Q#R>JK-U%q#O zi7^9sehe`^Q{@&a0z2p;{g8?w30u>F8EL!53jQya@6D|Dg6C#@z9%PhH#=UM%N9p{ zZ8QG(#|a!a-O4E0=Y{p6Kc&v=Zs^(2dIaUI?Bhw%_|CcDCjF^H*^000la7cD0rgf4 zTUVmo{Dx~dq}=%X`Q!VcS|XNd8F6~fStG4W;bK3_P6+jgcO_s@=9VESK`#QzZq!1Z zHJFs?wPd>kd7LnkWw7$}Rxm{kjHKcXiALSp(fLT0k}cuC15xGuB=^lmAbRuyuvc`4 zwr`KmXsmk5HzkI{(SM23m**1GE;iS4$2Mr5*50P}(JSm#aP{9kZ5-Pm(N(o?)>wbZ zIGV4l5tQxui#X3nu~$F*8QsKJvEI1kU2%@3%)+Rz#|nz&3)#v&kAKz<9FcWT(Boz4JzN!XKwlV3P6&@Jp>d=zGSw z7B%=l1*#o&Q^8?^Pej7iSj~&nBr>)up2E8lq`)%rRCN(Eu<5hc9pjuV@@}FmX}K~l zRy&5S6(1#hn`cUet!qKTfQTy1a|hqRU%Q+)TzB1)C7^e)(1NjENy<3(rig}nJiASQ zL7BUA^^jjmua63SHI90gyvyZ_+cosoRuA(BtS-Y_9Ovt+7T}Zr%7uO=E@BGM%ZSr* zE|JmIRSO7mr{M9x})pW3m3j}^?{de*O zRObxbh<8YQBeuPy7EOIY&r0$143*fL=J%t}9Z`+&whfG;rbeVb0Js+_yaYdF5_sR_!k@}7qw>KEQ zeo=5Y?6|mKqY)On7~k$r8&pXuw+$!L#6Ug=DfW_*9q)ZIn8wRxThkh>a^t`ve)&E! z6Wyqw8iUCipQ-kZn#I#0k5Zt6{ugcu0Nb7bg#GSeHB=f;^DieXPI2o!S|6ob+qYvm zXChDK#v213s1HsoO0rP4%05ezdk1^}{(2sBk_T>8?~V-7;+9Lfe>ZY-u&uoCoAt zjRQgBXH-akmvc0U)B8=0r20Y=!gtWu(l8^11NN0MoEzT9P?}H!+AW>Y)Z3E?bpjG= z!M`G3?;k$pFMdu|WZ~82R}#QRS@tA);v+ zw|0jm3Tq|x&KH=7JkiSGU2OsmQ<5|y6~o~rU3P141SV0Y0}sE=YON{MR-xhc9V6BSz}})TZp$*^izhR z8^TYzm4a_8D(nsJ+Ikm173yDzs75JU`}1e&cisCaWairVZ*~7W@xeFkxQDsOGaYsg zJ@gMbv@%IektBh+tXnuw6!vs;^OB}3jB-LT>l2WPVDbg@zGV}qp!_b#btAX*&BT{k zlzf;lNeoZuVMDk>JlrPhN1}MZkr;)^k*6Mv^3vttw)@X0H4M%D3oA%_@3cXl+EJ5g zMF@fRs&O8raC0%c2P_Vj9wPzCTCx`D%|G^L%=4`3<*vyfQgt`ZlpV7v*+qKmAX}ol zXqKsqJQgmF0$w{x?Mana54-7|ZY=nO#})(gDFAY)&xin5S&$T9C2cdzem*ACe$(

      ifklq4Vpf99(jtS$H;$9c{Pc^;3@Vg)P2`Z^K*Os9k)P&As(MVMmUA#5H{< z%BM8PC_f^)8lym@^mWc#FZbD$(Vw_H^`)zv>-$C0886*WcCr)nR(4soWipROjv`0@ z7Dd0dWsK>m1;pq7?f}4qB$7()n_+o7Q^B_*CDv_Rb1Lf zM&ah)y6u&B(4DGgSUO5AU31RB7ea9=k}U^aheeIr%IvK$J{xmNYAp_y@p1tZTSsQGx zKytKf1NTZv_ZryoGU zhwVhmDl1p=3o4c}={vK@BQo9Ogj7#TCjnXG{svJR*Wk^e)-XzE?-sAk@i+>8)_|8J z6?q#=gOY1JN;A};b{6<39`_-^0)Tt`^^~q|Px;+r+QJUM^SRhK8oaT>FzYGs=v!?Y zCMqdaE*Ux(LG>WrGnp;C_W)rRVjWjfRwTf*g0Pt!5U&>Y$8=XXy8h>^8MnB{(Tc<2 za`L~fan{n2ML2tMUUCtNthRtfL}2e+JeA#Oqg}&i|FV4oj$9I1^io{hBUIp5s>d*~ z4@BmxI||!+tKv=Wdz5S3HXU)$RZppIZDFTZld|;pq{1PfHirIIYq(p#mUaPqE0>5q zNG7k~E=yHNb-}@ z-q;V7*|D>N_Jk$(`n!`dlM>yBj^N0FK$-*kJD+o6b(@;Q7-qb?$;IzJj;_stt(nlw zDfZgX22IEZbG-a=9TB@wewS+-7245vxhxHh-=HqqQhyS2EWTT+Fza>LZq!-ZK(2Z0 z&%*eT$M#{r6Ze!a)5QbqDYBJbJQhQ9eLQ7m<#!%4Cmo88kq~Q?7c`_07m}rNWscw> zOmyZfwFM?{HHsg%fTMfdB8t6r8eo?<1I6OoK@TZV*4T!ziHQk2ttT%n?nbq0c1SA1 z<_E|!6zch}63)rVSy$b=Y_@6v9bEg8#^c>y^j>MCq0OmlXiTd4loZ#KfEj#917c9D>S?BqiBh7r6p(~Hiu=<%Y0 zaibEW?lwMKohJWypxcp9QqI>4czO^o_czP6pJr4Fc*b_Zs{H+eu>4X`Ap0uO4GndBXB78hORbYSA?WtAl#CA@_KvMv~i9vR(r5g z-P~x4aZq2e)2q3>uP#abZLVHA){8d)_Mfr@^_c*?d?K2n3S25806m4$Zdn{5IP^=2 zTX|`0??Xk{#)dTy4^QppRQMw&r?1Q7`FhpPAGRMQir?;VNFroNkJuX37yBV;)!?_B-klS;X0?nq~|&qpQx_R_c_(lTCL+M5I# z9g*entz7Z?VziP$U+fY$iB*1~;(N)@g^Kvs@FHF5nKLUe3*9G6QmUiP9$a)?1jyM| zhVc$}fjlk#EPkdwWW}q^KEG-Ediw{!o21+52@fq&^p(+5k}{uyR4|d(<*4XqxYSp& zb%MlNY`QgG_qS=D!_2Gf9{g%QJ&t|1?MSf^bMa9VBlh{_*6xMWg)fC}mE}R~a#%-+ zDqrW47dle_9DdZy2jIlteEbO3?K+LI1)tXL=C)j3|Cqma(D2o(NU?+9TxM%)L;@~* zvIYWvU31J3T^CX<{ip8pihkIdn>oOl25?M(lzW8QFD8fi`ia%oh*Wb5YqLkgwbq=_ zbOZSP5}T1Y0&QBgBKDpmjkToeyd9*$GPkmQC$HHG+bWLvRMb1wX4N=X>yxHUSNKZ> zmKmCWYU{fOUuyX0t^Sn3St%^d?v@^SF;Z0ze(hQ1!Iec{e2~ue5(zDGw$p@kNHo)U z;ds7J(T{7I#fUZaUw9>BKy1_6M@JW;Dn80%^Kl9}E26XyC_%$7^d;?WZ3vX~jFV8@>ES|O7? zTXdOQaovdY6>Pi*qou8&rMX=pZo4d4DezTf?;WI5p26f>7Xaj(a$K+X(u;o1&p*o# z8F=bUhfGkEb?Kash=tut&bk`)hr&IjvvVS;i|}IzoKNMT01A4Q&R!$Mmq2XPO?x!+ zczMN}k%ddmQP}^`BgSR(v_=svCcs@${-;A!;fj4?p5*6q%$Gc$<)$CGZ<=NUOw^L9 z11aS%^PRji?u1Nfo@+OKF86*(QkK`XG{GsC*(7XhSW>AfoekE*vOCmHiY)VBQ;dQ} zs(0lf-l7MJ%+ppM*V@@!GcIn=G!aK2_TL$!OwLi{wcnI>*t#yf6nvz`h>BuJ$#Y{b zBnXOC{#}Gs%mg(j*%ESJhRmlct*Mg-pO8P0I4pz>1Ub{(v98ji&Y$f2SvB}DgP=se z#zBG7q>bl%Y^Ej0$CKmw1=K=cJl|)O<$X+D8QnK;PBc@Yleca|_PCmKadsYeq4L`x z1MfD!Ai@Ha5Jwe=b8^SuPO7`6N8TW@rj%prhrkZzMx;QmPIblE3*4f;PXgSOc7Gon z8qS|xn*mzx#_(&XT3&CGOdGEZYR(?bpfS!ud83;C(S-#k&2x^CC+m2(3j6QW-BcoE zLJdjqQ%y!n_xDHlqAnU4f7f^wY$qM~YF8~O4}zCd6+`ZFEgotG2UJyr1SPO_=J)m6 zj2f=pV$IyBzi*-Vbh!`XC(NY!OT|OtL8Tt=8(=|Yd*_XobBH*>R6i8g<==AgZG2ew z=0P&Hj6KP{S2I_;2*WwyV0c?gcP+-_fv=3y6ULepd;?o;ni_Fb&hC%8-A`d~3)w9} zwmS7(LX?cAie-kWtr#;!I<(9erHQWbmF>)_-d}1$|K|qHd2U-n!!;a7vGo1rN9L&8 zep@wuWF3Df0d{DAMF7EUL>+0KHgxYhr!X*!1H38j5Vpy$_0@JEOdb6(KSW8d*xfd0 zzVyA0PhMb__74(OkmGkRif6K7qnl_OefES zYh^wWD)rg~#c!~^>1=~7+B9c4?=+q{vu1;HLE)P2m-(SieVlb~coVUYQBWA6=-u4Ss*D`!*{@@ zJ@nP%CJUQ9lMfPFnqD~TCjIC$6$HX~3~mMyf1|4CCH?|k*KO_8yrr}9HL#IH+=Otn znVRh<)u>i3>7a5*h;YH{qy2pb?{0a6aM87L(QNuVG5n6Av`6Jl$)`{I zPwohah;#n?;*FDk>_} zZ6#+U1$03@_wccY@f1QF$VLeN7tm>^(&n7HQ#YeTBS>$?1E^!VnG00BFU=G_lZ)Sy z#|GvN?OI5@B=OVAP`1|wpwkqNm)OrEMv2wo;oQVt5)`~GX__gBvMK`IkD9Ofc&-@sFNN@mz#q^Jt$ zW)De)b2Q#7p?~$~J*xY5DR;>RnvU?X1><-(YI|lSNLa}-Cb^uyti^F4x%MuvU9TQE zmIBTi%pi^~*(BSV;OHVd>i&urRhOojKCW$p@mSMPMHiQRr)jLySxFod*yd!V^dd24 z+JOVeWGZhiNQ1sw$D^yOKllRo=M?S}OO)lmAg@CwO;O1FglUw-k4mpZXQG!bO z=89VQf(bmY8!N@g*wNeOU-UtHxOc;57wYnt!5t?1*Lu*wN8z#i+=o8}V~iW34I{*R zV6_7lBxOS`(An1Xj>#LvLf2Spqj-w|tu)6G@1#X}s?iX+Dk{4Zp58og>$35Gjga2G~_Z1 zPZW9C8jbbDIDOi;+0-o1Sk;#F0hgJQr1U`g+(W4{@7_tI-JZbUGcy(dro zS~W80a>(>_^k+X9F?VfXRJE+kCLLbs+1AW1T*$nLQK&_M#fnWBJJ@`;vLm4BVlX+2XRH+BKTkHE;d`6_0= z*`9AMz*YD8G9V8GZ_>OvT64^%8<>NtF+(2&TPp_ZWB{XyQD0ba=occjcAae+h8K6@5d+N7& z-A_^^T{3MoZ4v^%rsV=i$^bW!nu&E1QV-D^zDp27!J0mm@_*=yqOO5~6fk^3p&9}n z(*1&H5_%#K5>hv$ot9q2`ME!#G^TD_QVqnaC(AJaUm5W3I@$JK%B3OkFMnm6HI|cB z(n)_`Q#BY40hs6Lh+dx5o^VMZVlA4~b$l88G$qi4}*^YNClxThzDS|NFLBnavgl#yCNkNFLsF*r^IFxe8zUrQY(V)Z+T zq8H?m_z{&r9a?NJry-R=73DJ4?CM#`t^A=u)D|4)bx)Qqc8pDi7 zNK2iqXAykVcWk01Z~_9_q@N{}kGVo**OJPegV{w^4NI`>)gViqx>Qi!Z^Oj6dgsbJ zABq$0+vCskLL-jnm?}3u2p>@MY7$$nsLX1LWzFzeE5!#gPS1M_0BK6}8y96seGOXqlG zj~hxcSRGfqDp1#}I+HFaDaPvjJxxZCyzPubt6FEL7q@-6t?B+ilgdGuscQ{A{&^y1 z7NhKaWER)r*a^qNvssk1*({^8ou4#eHC1ndD5y9ydc(CcoQ2fjmYrkD-Yxj6g!@L6=JidF(8QW&%i`}P^t^uWck%*%s(2|f9 z(-l4R4a~~X`DGYhoyx+HLW7ibW&PX(@38b& ztV=TI6*9L7{>9x{HVO{hSo=7IQ;mvE0yhZTwE`~t7gn_u%?wu(3GA`BAXr8jwvZ)IwQ9B<^#LFWKVWhQ?bMm zAknGH=u-dig6n#YWWTzu=b9_O9XAocs9?_lTZ>UW`1X zXo@(KhdE}I_2C9b+f+*jYTIGmf$VSza*fo{PzokC>jjDXY*}-35fKqY7LS(c^5TE+ zPN~AHX{UJ#bUNLR#y@IawT(1sT<^etW}OR2*d157`lkdU2dJT5GJTax9+4lM_v(Ly zFb$YQcdy#`d~UL%#Wz*$|C%P|S^8Gbx`M#xZ{R^iRPycjvvQs3=IkN#z%1wK4K zC?NqgMtzn;7I~9q7ItpO`!myNF4HAuQwNQHPdV zK6~kc8%N7@Z&GZDC3l)OP252MrDDD&$wx>{K1TbFgqP+o5?NAf%jdd5h1PmS`Gy5& zyJ0?&=S)DckDW@aid${HjH03||AzU+{7g|R6T$CXFsDXAW&S8|7mLhOwCM(wufabz zRjMnPYiyS13vO5G^clVDk@mgbQUZkc_D!aLs=3(B~q zt;mCigv(lo)=KhKnCTa0I5jLR;an5JO9SL6xzG~S46()LhT+=nni7znC-+?H?~Y3w zjFNcE5u_YDK5!FOr+tse@xgxV6;D4vCn#;t4;62oO!tww*FC%K&KBBD69xd}ZN^Jy zoGGM!MK|C7_oimKq0MTnNUE4Mk`Mc#Duo5Oj6g77h5r$XpDAh&kSWew9{=Mw0tBc( z)}AoJZ)3F#b^BVDr^kSN=uV9C{KZ!8cd`3@8!DHF0j;68EK!!s@(bBT-Tr9#02qEE zKxmEp8A2;~E_bGXr@uKhy(H^)zaixVq@B*Hs5f3$tPg%i4=ic>$GADt(Igb2&2Epd zYTa-Fu7NmC-B+)O4w$^aLxItTL3T^-Obk_{mT%+L+scOU&B}$Ck{(>y;%?UL zcD+?b2&ML)LnV^xq)%Cw+w&#iB6>k~2yF|)w|ULwGmaL@*;fr=idD1QrmCfN_H)iK zh7W%pDg2nOkvQO8!#|Nrbb~1MHaV9yopx?-SY-2GJ{%=nI>J+qKXqyA2dn?=1@0GG z;@b$40e@To43%jIsGFZnI#sn}Y#05nFaNI$wWYc7{N_^cuCoZ&aD)4Hd&{ZV^=mz5L2C#d}Ze!bQ8-H;HEZti5_Kz+)NP>Ij z%{qT$ViBRTq_R5M-o6!|pB>Ou3(tVTAXAU($Q-+ze5asa&h;5##rzs;crmoC2wr{B zYTJ_HyCzw2`94byFmv=Jy%E*@87q_`7lh{|jxeO8Jv9;1U_7<6Z2~08;R24Y%O!TQ z@CsDxp_+xgk62$TUNy%#C4Qh`XmLXz5Jc@;O~mYkYJoC%&b0wDsOAf*)n04@*>OtG z;9(^dyXvQS#~Lj8kNmBL%af+xjI6){IjuglK7T(}KSBR40~)7sId9uiezt#xTEszE z@7z8(Z|y%>y378cB;3mT7*{(EfMGl{!V+^8Rm%w_K9BuYl>7+wtL@rGNACkds)*|| zqw8nsJ_oOk`Kth=_``=M->2J2E;wSOH0C@2TSa_y#eb(!%HlpJ{N<;or#}DSpA<#E zSK6{4QwEa*N`pCLniOj7}LzV zH~D`c+z3H!*Me`6c7Zaz8j+=e`_5dLM z(*MX34sh>o5;R|KJJPf3rij|Nw_Mg-)732cNnT-q_y25Tp({YE?0u^J=LI)$(%5(W z<83zcZhKP^?Om7T$={qS7A)@;3_J~Z9W~q0n6IAD1f9BX`8%m{cH4gWf?I4>;RG*J zS4iq$Ds-!nUcEP6hH1n#RwirRD5``8p7Y%jFMVu_c?)^z=X`^+C#%$7N=5~wlTSC4 zBFkJ;?WO6U-{}RI#*%Dk$rw}o2C}IQ((_;Sz8*Nw9%BlsNLEA#w9pCzJ%R-My)X&5n4|FGI1VSWas*R zbl?HTLC_S$_GzI$j)~JSI84m3A6%!HA|QS5sAR&u3N`cR6`-6OAJ^I!Z;r0HQtXvP z3vDV0G^$LbBn$=(NANIN+VdXpHrhNN(R8!S_5?D0yUz893JlL@(92Pd zK4v3HGsOU94PgG0{YT*A=zl)TS-Y;AXu{6`u(u_Uf;()x|Hi!kus@jIksLNjtF!E& z51{-2J136TU&eKv5>Ts9EX6NdZJr<10rptMFTVbZ=mb!bz8j@svHY*IQnl#h{v`3> zs)XN1iz$UWZ$3#IyOsiCj@+0!UmoKENEFBp2@Q)h8R|-n-%@Fm_<^vz%dX`XpBIvL zJG8lc&KzVkH%6+(VMZ!zbDKCER9;_ePif0V7zL*Y_LTkCKE|%L?(p<1k8RWIIaxiJc?~^F6|Hc9Tc?Vp)FLD@j7G<9cC>WTKG9 zhe>G9EogQ3Yhcy109K#LgWnkaE&cyi$+{gk_zMIN`c=h~)W!WSzzcvm4CY_bGvC!R zA00D(@ic7_c}Vb28om!0!!({;uJZYdf7D!PV?Ajl-m63TI>2bl2b1gz85p%5Y5S7s z7t!4gl-+Oe<2#@bU75o%<3(8;t)sxzAVIqf%b$St&ZH`@Be|40_&~&Br4>g%sTzMa zd2n)|Wg+rTyYq9Pd(3S2_KhFlrzYkvs4TU6jvU(b=>QkBmraDDs;4u z%$gQr4o0EA+(DoiR4~W4ET{yjYUPqK(f6;Pe-8Wrh{D;WU)=I0TUN4H+t!Uml%J0I zqNX(#!JU^FD4{Umb$Q@}^h%rfk@rSq!NHaq( zr@t4`$9YNnE66jKypbk>m(CQ)kA}u^%^P^82snN%34KV+8qNx-F6KlZ zdDzOJ95saq?KE3&AlVnIPl3q_b*i|cgV$KsH6G~WY+dHrMGVQ)>trUz$o~A zc_|sHdet zFO_I4v#REuXss<%-FdLtgBL7d_qzgm#XWy<@WH0ZR&XxH`E7PvX|#6mk)2I&TN&RKjV4EnN)P`I)Kn4A7Kk*ZO3R2wRzaHlE~@QcU#$#J0W3nr1h4Y2|*@ z#Q=(c;NPRKzxMklUfVLdJ`-9V-uqqJGyt2>h5p@EDB&E9<12A~A#J3sK-xDh!9n(L z!Oq$E-C9b4!J~T){aSBDYL!ndXV$)oJ&PRoOp&f4FeTKeGm3QG+|6fC*4P*qw(*PB zy1b1M*cnWW!?t?qGV830H-F{DSaImLy^kCRV$;*8F5>kn*qa-tpJRU6P_n>{6I2{9 z@mx2M=UyQku#3PdKT(LLUo%tu9^2cA^BhXEq9hM#2OT^XUmKaLY-<3O2f8)wq6}xJ zX-7%9FCw*N2*l>LK}+v$5|!Trr9P9R@gG&v96?k4RwfxHk_MO#dTsrq3qNuG@Ut)~ z&9x<*&%rudx`ZUFwgO~6IW9Bg6_Z_oNZJQOr}{%rspo}>hgadlh{Jn|@gm=j0^XyT z`ubVafuX^3;;{>#zZ8YLG7lVmjQ?1?*!u}+FyE+CP}f(UWk`9IpUeR_sQ}&cro&O% zZPV>(08>1J2?hM)m;rc#ZH>8$i_0k>(BTyA_X(J`snTA(WuX0LWfKS|m&7Cpuo};n zdd(Fozn@Z@q^GBUKUCZ!F!nJ+X9=Gx^AX>bpU-#czR8Zi#r!oYnP?-XXHOM_wrg!=Xy3qRw^MWZ8?YUyvWbkvU5 ze7k&9_24i)9m>NxobBW0*7&QXK+KRm<9$PJbkeWuMmTj<9=oFiA1q3|KI5{*e(n3Q zu0^px{VH67BU>df$Lb2%SNzjztxb|CD*SML;xI2SxY%v{;ld_jx%1Azz(7!2YXOjRpVoq3Dq9!m(=6q4WByh^s(`n? zssNCgWxrkj>vK3@FLe`~pzRP6;gyb&-u0q*Ubk|eAg_^q@gT9La6M^bV?(Yp@_Gn! z-bT#IlU@T@GW@qL(fp5OhG=FqT{?Qp<#{H3O88UNw@|x#_Quak@|Ian4{c%@*j34ch-Vwf*isZ^f0Hjr-q*S^MxT3gfRGfiADUHe7mx@#``0P{0 z-0unCVlknZew&iG*Sw3no{;v%4=*6MtHow&ZRXl`>^^eT#n321^5R~*1l_G@`IRTp z*J~aWBqRq@C`u6`7M7lE$mprkDM$!q?wf^UqzlPrW!zA zn(2kJ*E7vAeqpvC^klK57^%Km-Bq%=Oy_fZ9UIfrlviCy0zt7lHm&_Ipz?*Pv;|fE z^&ktL1yNLh6}-(fjJtj>{tbmsm^(@I-weT`4<@c@G~I6h?}7NqtqE5Bx_bvEXRZ; z#T{Xqw?>oo-%AIdkiAxgLL2;IFPD6|0w-V5i%r@;pX&M;zUif)#P>0p&&6BJbGx3I^Zg2F&WB2;d1Jx#p-+U#d*Xv3g^ z9klBEmUUZm5nDIyj;jQbP2RDY`NSrxu5k_+gOn$`XXEB`AcbGQ$6`0@iTS9AegMp1E(&zzACb;$Hgo zn&Z_I>#wf$U7D6!JG73@;Loqb#<&Py#YroMOA#uK)k>N3xV0z~g!v!u^k_d_SmS`n zH2Y;=u@E7tIEOHA_1`X?;%!Rl;9_1b2^v}W+K|ByF6<;aw3b&3qgFx0{5KES)|l-L zBzBCCJwx-l`=1}I&7(!5;@)b9cMN3Ob3M`#hlALub!V)ur?GwDg!D~5j^7IxdxDP{ zK1G9rN1$s%fFgs|U`Y8S1Uo2H$5%k(tt~Hg&2w+YE*`KHDJzQ^&*GppBpae(n>^d} z8Si+eFeBw=p{*-AE+Aom`H|ie!#;0VnveUvhNP!KBI-ec$na9J=1jK^O_O7-!lv_F zaBZJk^v*6@M|yn==hK{!%qYdIrOxEoulTr-xdPTokeWif#mIR!Tgd0a*(}0S~4K>fOg`=O41s0q%ZR|G}q` z{WHAN7Z*Mbo1q}=udxj&Gjb0AonxZm@K8)@4f$ z8%WaK?la1?Q$aN+L@5<~)zBoRYp-LpQ~2Yz0SEq}HW|h0+i5p@`9BXF)~lNQV@~?0 zLSnrN!rKvk@l20A%>*UNj%&T^t>54+!^gfYe-x{@tFy}cw^st39^>RF+Nyav)zpj) zMB+#55zQHe#rfM?@P(=?5EF<^OwUMBzVQutiTaXL!2fXpWSX`RHVq@t9rVN;TK=P( zLE&0671{`Wt0?Kc<^-H$sDy}%?iYhd2c_ga?WQ+W5E9KT4pfh@+&j0%{rVN6y2gD= zH&c81A{o~E{529bjzuNWxA?|5y4a3=oU*nQx%>O(VQyz6RItw<(qj57w1d8)^>&*m zt)-?6s&Cy@jER!@+k_V8Xe*H9n1g}08yyPh!aR(Mdkzi`g6>!N4W;7%4=jNNfXQC3 zMn3}qgvkGKFZt(Tv2*nk81t~4?Dix4YKzWS1tVOmrnYeqZ>Ba~8E=?$#)_#L`XjD-f-kt7 zi+dp)&w1>G^Ve~bOfh9*%r{O6B$*xF0uHD2x3^T#wzuCOo#TMHsySA-D6zbDU_}|}#kn-epeSHbM?3Uv z4n9WumJHUB}NIvEl~?F=Vv{i>T&9M;6bzXG1|z`KTLo=Q|-SBj)ZVyNlkrUP>K&CFKgImvbkmAV4iM?zsyuY_ zfNs>i zD5&EjrsZ0Bx7*L|0lH~uVX*(L5MiX)01nKuk@1GCEcm+li84jqbOW3l^z@QRPO?sI zw=HZ(!l*f&j;1XeWQ&UwE;J{?VNaiT;aASeW~ztGN`|=Y66M^pGU~53eZmS$-Z2d5 zw|F&rZx=BV_Dx4ozIR}4mRStxd9V9NUYbw;;palV*UdwtPwxi)wtscp!Yb*p(@Al?M`4EPj#3~!UtVSh zA=cS^RybJO%wnXgO`CE4fZQ<$v-dLul>h&mn2O5CWEeTM5$*i0zw2$bbSsO%>u4G{C}pABt&_B`K{qS6Q(ly3)!>2yi;Kp zZqhAFy`;)xo!>D3A5Ui;6lJ)-eM&)5LIk8!x}{}7q+7bXTS{SBLRz}JBxOlykOo|T{3AaQO$Hmih zYt~H^qGd{@3&q=~+hSD}WuT^R(weH#9_W{fKCAg90+rtkuelPBxg3=MJ$?OEhDVN zcFwM@%WIz^;@9o`*nW04`SS#oVnE7UI@8K}=T!9f%f@p$(!|cduEw!^p;|ofw?&%Z z5c=K(2a$5h#QS{Rk^XDSkGUV^NJs!mAeW}ySgEm>Wt#c_6=6Te?s{l#mX?+xlMEM) zatF~~p?%u>{e?LXQtPb`%EI|bY&r^bumGi^NA|r)lhMUyUa&!9syrPp_*K4t#)^{e z0i0rJAdUCR{&vXTn>^b)+eF7}ODYK3QIq}nFP$H?T;`(6u3?Gn=m5Se6S2T~yuZx5 zXHUu(I%33N)^_U{o;4AaKYxTsjfU;QcHLf)ovpcP_mj;WIGB2$X>ke6`7{hL(L7^C zY5O2@Wg;Fq&aME9ipwJT3?b^4JkWGBr!JJY!)72$NOPNSj^JZR>gI z-4s~PjPlc*-dr8bYW5ZHYWD#DJC?$r#bK>t{jJ6Rg@+SxCi&Q0*EmW(W;N^J28Dpd zsZsJHeN4RX0mt_PSQ#*PqWYT6{hl4vEM-;K)z#7I=3dw0{h#!G|8WEO_p>O!4PFpo^IW3_h;%(`YpfgPC8r)Ip)cq~MmQgXG1QWp< zkN*)}w3+W?CO?OnyhYrXzvF&R z*uBhaI{j0tjE@*$6EZ+PV#tH)xSpLh&qP*$**ZT3P?-|yYH6=#T<_?6$(&@}I$nah z!wIc-$xQQt!PIdjxqEcG5SoUCiCz^MEdh@&2YDLYsDJR?>?buc7^X`HHpbSD9)SD| zFWDKA*~;&+*?v^IWPJ8xPKuNJq+rH@*vRO141g_!Tpx4>SQu}1XcXnm>H51GoQH-R zmCH*0pPOSp)ydyqe6_^`*{8H7A%+)l2Xyjck`g4vOjR2%qSc0|MbCE46stLuH+UJqs z700NC<W7}==!Se_UdNk@3zUAiB4*vU1He?S4 zZhvy-FpKzLB_?V$-jI%u4lsfwCUV7! zgX{1cjA8NA+pp4Q^6=-B-^ptywA@8o83dYn)m-h`yv@w>$+dKI`ysEElbP8wGV<)d zv;%K3S%7(PdV2a4y*3#wsWg+yEyM>@dzE=yHTLt*9W=MnXk3fwk!@-X`48B{DPG;h z6(OI|xykx7GMPiK<*n zUOWFkYtWtAFhVoUFXzJAwg!)`4lvLKe?H!l1Y^8LdwN%03e9*iwxRU~Plw*B8Y%$| zKlJHHD8bryw$U&GfsW203GMm1oJ{rY8UtZ>r)?p`e}OzlLF%>^1o9+a8D#YVOC97^ zm_LL;wm9vREh;mHZq|E@gWP<+=imtlV4CqUDeWqx$27COaP7pT)nOWn5dbAcL!NE! zmlVG)2NPaoxnv>CmkV(r8{y#TN`(o&XOl1Z9I!3mkX0H|D%`wr551!GIG5hctGFEt zR|>n>_KAJCk`B>S?HTRf@^u=v46TSFFR{uUJ{NsDa9iShwcP;IM4tD5d;EsA$}yy( zM7TG1#wc0x+Wl7SoUBO@Q81@n!q= zDE=t_c=Q)Q*7u%xLDLl3%Ru!OTIA|%(PrvQqe?UP+2DUY0-%368BR`MGTa2j8{evK zj9A$0)}7z)ZT=Pv4eRjUNlU=zU=VH-i6mgsMp)tHUy*}Ry3$jEgt_3_Ql=4m!}Ip! zYS*XhJXq?44e}uUgxBYlr#qx{^XE+wbyYYC^lvHK!aF*ijM3r}6z`0pK#AzEI$oZC zmb!&e?ES|4C+O55|2ux#>9(ADQz`A2+-YWI9# zSp-Nd0o!WWbBf4!!G6YtUR`*L$>kMfFCqur0zSr%o#?iFTWRezGQiK+{!+Fhc zIUBI-@>#}4rv7dLbt+Qf43eIclCPxMzs^;2+bkcsJ6OV-r2&Y#bEYP0E!2Xt0`0;L z)C*oOzs)|QHVpR`19V^;tu_bNCUZJ!O6#aAn7?~~UjG+kS9|-ibnFHEMy}(ftzK$z zNM=rsaRON(rT?Ap{~ibu2SZFkLZbWmR({#yzIZ8tnfB@?k;C(_(*KA=KkohJC6zoA zwusCJM^uJ$Is8z;#^$HCAkW#<)izeS%+CxA54X~h{HU3YNaike|8j;V6@VI-t*+FR zk1c6nV}>g!#qChJy3FT zlF_&v?-%R`*xmEDB5Niw2K5E=sr}Wct$KUz0qc-~pk+3M$!#3j#Ee_vKq|d6jj{Ua0B> z{KUXMUoA2J;D2Kh@GI!qofNDhB*~Dv zGp75YW0Z33omX%^)M!w8@=!&15sQU0Y7Tim=|%iShp|bqeZOespX1z-Fk}f136Nbm zYZc3Hi{;5udH2 z?aSDcb&Q|bA3<%OUj0YU`%Bb%XA(f4aqpO83*Ovm11m@mFt{~eR-Y-R#P7t{0!U;D zI!@f6-EAI6$^Ku_0(d5YHf)6Z=U(mCz#hSXa}6*TU0355O?Fx}Z(AFi$G83g^v2@| zCRt{b%})Y4Z)&9A@y{57X`DfI+>#mh*!EK^@z>lZISnd8c_nFduxM(waL&+YS}g$~ zYwm%CXGfD?Kq+Qwob!|RDVPKDh4k~E?oY5SjTZh`h`@hfV~Qol=+aiOGG^hI30w9` zsW;q`wTK!s&TOYSCksS<**$QpnW>eZSYt!!GHNH#5Up*fG~3|wY{0r*Qm)y9{>=0u zq)X%9QmbhvXsIsNJNjn1?#2-@t3D)yu?v3#4iI{FYo1pXP|(E(+TvOYx{#Ii-0%VL zu4Lb!R)~?$Vk_6-6})T|dbL}L7;@7Va2U;um@aJqc|%w=Osv~K#6k;tR<4JJ`PKWh z)widw6@$%9e1%!&M)0dmpHVfU&5W!B4Yq(wKJz#n z67Jghx%=dcbVpC*E0$8_>t!jNmt^a!AiQjtg7&JiCPj6D$>^D25koN)D&H9E`nKx> zW8u)r_aUdgUs^7!fE^e!<}uGdL}LF-uHmJYSY%PB`C3>aUe66UYavlH^YMbPX7WZ0?*zTaIR3eFt5LkK9hd-;nCyXNkG6 zliY=^LZ(iPQ(Azo|e}0_Peq#wHU>g^B@YB%qtLs4!^dpM&Lwzljrb zMpwO`MKy}Yxn*2_sNMcQ-j4?wI)FffBaz5uB6DATaZ}=!H5dlM` zL?Kr$+%_dIyT2SEv4t85r>Gbk=~f_SL>07sQJRp6rSz?(qaI1q{q@WG3#;rM^i+aD zSCB-@PvAWd$iE#{4$28;-wvx&uqk(TLOrUznqWia0wosknzeRa%DxsNd4gY{o)wj+zvaiAhd-x6kma1{| zp@hd~S?7FXKj@2E6)f;-=-)$3rT&NC{uk4#b!yl1{Dhhbrh$b{fK|NqH)7X2(xXoTVnKIwT0UeLA>BYb_8_TT;ze zTjgI!D3?`j8|0m9{B!JGCo;YN39x`Xov~69 zIg7vLJF`1eIh)S&x~*}mK2s>8l8fMIdgCzwDjJ{SIgHn$aAiHS)qbvn*AyP_EB_Ok z?h!w@KWsGr(tV85K{g!}vVi!&o|ZL7%#B%6VVtbwyc>wD+iifE@ua`|u43G}dSD6s z!>Qqlt6zn?a^sF2a!dcO*6t@XTkiV^MtD3y*NG)&coJD?_Ts zEezlbYH&8hq(TQuga;DTs$pMsLUr*6S9meFU@yrBelSz4-9cLT65&~9aY^OfB}iOy zH}&!>EXNO{c08pbj`8JW&$inziXhV zZGb;jaBg0o6>9-a9zA%Tp8i?n0yIyL1E9P;8SLi=zUO=Y z-+WPyQ{z%Ew%Y$j9q^nAIxmC(3olZ%2Wl3gtTb2jgb>v3q&=Fd2KMo&U~Z-+)giQ6 zxhR^>VkqjzBc;cyIS;3MPK}+B7apuHD=3CFCs;@LK3^V)+Z(z2&WcxsOdDX{BaznC z_GmnCTkGE$fSQbU`es{~C%F;m7H*H?2*pvXykwh;t47HeqHiiSi|uYqx?#u2h8=A7 zDvGzPY-bBOM^5wb4QKgvh+~VC_6}MLEWS+4Qgr3VD&6s5G5!+jC1z#VlD~4cSI6{S z`_cTlR<)*hnHYD$o!Pw$ZkT2sYL)@7L@zXJQS$H01kq}`9$;`Jg9g-sgc{$MymT;; zJ|mQdGM+x5NXVC&fM(?wfTPh?#X>(UUn~v>@+h!0{*)P)Huo%W37Wk88#|qrAvJoY z9wMR0Jc@oC$N9`V*7Dy>02c`Qz+S+}Y^9H-pbAH7b9m@R1>RaZ1gG-B)Gdf&3T&T8^TklDi6x{W z6%6y@(xS?XHsY%t`;rvC$>;9H6mNvfM9(NR!@V;_?&eTVQZ9sjLrrCy9uOuNc^0>bKbz!s8rZ+ZusJ`RCkG1ZG~>uS`a%2PIqXYg*!l5#`hWZ*V=Un;;Ev>O z{Zl|3k#p09)U~M)GJ#x8ueA zX5I}EPfp@$Vgn21iD@RQMO;>wR!R4t(x(|tt}HDcp6vo|r8M&smoYiDGE&>w z-vl@KH?t{klwFrhXOmr`sp@|R`2zQ+)s`(vUH+2sp)c5V)|6vuZbge++H;dwPnbu==)V2P>X>HN=H4H5wYUTM(fLEM z{!y*Tp?=En*xv%c`WUSp+N!LQ$=Uzv2Zv_B`7F`a_U^@*R$jZ8jL24b&K#?Y6PfMr z6A4?ZOV35y1~{StUm^}>UM1?!|NVS=806*PN4@KcxLmk`!L3j9r_OzHvkrJ@UTpcq z0Bj`S~1h)q2BySAxT- z!7P`T?A2{AgqA&t0QkTmkj_H|*lmRO(e%{fy@(vpv-AThWQ$WIY=d~B?_{9uZT8x+ zbnFDxVVENt6Dx57Nu|Nex7r7;63@|(g&nDb{<=L=(^bhhu$?o*f3-WKk@a{NlyM$-;S_7DEJnVUvud+qoj%n5j03qu6PaAvIpRZUG$ zPLFfJpRxk6owVWG!pJ%57kb2l4N^}J^u+`|$%2J1PIHSL?s=elmnb%kS9HT9A>hd0 zVyhe~X+DDs*gNGFyJfJ6Ew4Td^Pgj8JnuSJtJ}uh+f$gwmNar;tsO@mZXdT|I==^q z^=aHX5>K2>r=5KWS=67)obsWT4HLj++~L0ad&#uhnobVC5;Jl=Q<%Ff4ws#^Z8Wj7 zQ7D=)>vr#4<;HWnFuAGP%D)7}%MAX9*Z~9&%1B__vNMUl_rb=&;i+wo*X+}S^$3#g z>)iiOEg(h{5_0-|nDy|(zHQTeG(gYCZt4j%+ZXuv>k?}n*Z+E}@2{$LH!i8gyb1Dd z_iO>D5?bfsNzkO@iHok8?$d*Tv41l6k^%z)cH{AmFU&AB5HpDq!w0SoE5!u69 zZmzZl8lNm7!hUuB%`v5^+Uv!y!cm{+6?=%u7`VoH?(J#o6StK*p%NnQzRDhp(`TlD-LguXFGm#XV?=h=oSM)1`!{gR zVs`z}P?m`bgH4enxIQ6q5U(2rB+6|ocVAERzFQv7P5Ed1B$9u)&`%jekW z2eWOd4-_@cqFz(MqZt>Fp2p@b9EC&YQ$ZLAj;sL#=e+-E0jg`xc*}2PPZVd8_kAi> zL7VDxO*lT=2fiIY%aBJ}9bWASoi{6-yWdbv3AqJpN0kt!l4nE7^)|1Cv@i(Zm-afIg+%-BPwb6sq}?< zCluP#{te0pl^B*2M3vf9$R|S`9YxDZD0Z0UII1*eK{r!~koi?7YH9fTql7r?E@9Ii zZGBQwB$XA}VI`zFh++;8Kw70&I3?z-;y{8k(ddLcugIZ!*n@XEOH zEDRs#f=3B|qPbHqLTSpY9Th5$k4giCbQPo3^^V{NxOcE05_;4}12oO};_g`MM| zP#l!Fa;^CWrww_m)pPc70Pm~F?%?D_%RRV#rOzvc<{8?Yk;ij@#Y}U5M1uerz3f3Z zc^6;vx*me^9IM+&0Pp79(>@4bVd!}~U$HvEG!n9|74YrK_uWKX=!SeO=DX&R6z5GWWOc5kgy%VkP^#0HKHB zCAd+&tOq?Rw^tC28hcig@O(PE(k~^roxF;2PGNCSQ(K2dT^pMdF)g!ik>!k_XG3ZV z{Z#)jiX%VGHDNBFi}Y@rN0apvlgR3+Y73T4HP1#~{44Py!WO44D3JW(Y%{-YCm{ct z<}^J3>OxICAA93o$;s(GgNfNe?OLL3Jiq;If{@;Y%e6qjyY6lasUNdOh#d~enQk`M zcHGCt`!`Qt!6uiU!1I=)RtooRzS*k5^94`HgMrpvihC!jt!H>s`D?xU{;DOvfScbOm^(et zk&lo8cSxdLNnrmBqFv66W+8Hx-&&PMb2CuL7a0Gc zD04pmUW+#5IuYa_&2x9}H^to%D4*rF=K$D<7%(kwJ9#YFhtwb0i(`Le{l*~9U!(Ow z<-Q_llWSAtoW{7Tu_7kwSde<;aaTg2@azDa+v!WU4K(>+#p^Qr`VoP8pI*qWT@D}{ zAroo1{8L7->v7bq-FKTIhEGFXlah*5qiBdL_{TBO>meGtd3>VxVL-m>vt2j*mnH1P zc5Cfd$YV`O5UL4;4>!df)3m=7>vZy8_}RZ_8~xbAeyU74#*V7qQwtAon9uPykq)8! zuJ1WBD(He=J_*+J`Jx}gk=izGD!P4b!O&Hp zGDm#@m`8l|w00HK_l53=Mpc#N7g0aX6?Ve_^c&583Zir>G61QRUXu$IumZ>h`9}U2 zp8Fw%j@w8P^K7(?&}M9i*K77g>#m%g8h7E$*zU6Rf6md0Ewpsg#tNHe1DZA9v~{d% zdE9wK(MjmPEf;Vq_fT@ydP~Yk9&+FGaIa}sgNZwCwzv_1zg}NERJeHJ?bpVbNi!b# ztADbcCpH?vg9ChDg%WPWrlzKTtul=10u;hBR=I()(to4fbl8QFj9S1_=4->~7jfIo z-l4PF(R{ZSXuVt!wR1!YP**p1FG()*F9xVf6vtbwyaXgjy2kSWSxa^sOg+p;IU?sR zDHs}+D;sn`h99VH0Gb!(XVjaCY0uAX$yo>>k@k+T30XQmU`n*gmXXzHN3Kh;Q>pEl zRzzr|AkD9t-ZGkD#fjt&sn496ISTE1xI$8Hr|V5A-pran4XVPyP@S>vpL9WGW(=WS zKl0eIzly>yMAC5=odf~)Lu9?3QUZ{At7l}yfdQ?(blG=8S^Q(S#q$2Umif2nZbQ&k zvjcPSzV)lJdv3TyNt)hO-Qzh34mui8V|KM5bE8^XT8ObVfh0(E!iaz^cGK=* zlXE^`nnnr4z=#V_3vyVB4Ncf>3p@G;X2iVn1(WTUQ4Y9o7CsC14_iqPOjYII`QOt% zL%YcM7`XqkbKYsgtJ;^UAK}&=%v;nQzpC4Dobu}c=m&EsusSzib9X-^K%sSU-yd@$ z`YBwEQUns|xmpzfpfA9+SXc0m3?2@D1i>e6)tJr_B4WieomUWJFpoSuWEv8DlrR&_ zd|34NlgafVQ`(fn*{U`{vGNZgMH-tv{`aaHl-B;#4Lk~$jJvn=>$J=K3+T8E@1RzW z`{q50P(doXmN;9Hejj}9zL#8mtg45gS9cEqiS>-ueq1*Io&f5L>KNt0^dO}CAo=83 zuS^`J2Q9g~TNy+Nv-Smg+T&=Uwr^io=@eg#UEWN~Oj|zt-Y2i+NtPBbuiPfBR$vh{ z*42g9kB@H7#gpc@|8M6XwCW%Z)Vc9@)qi)g-8L*E8$4%04DvnLX<7mAR-#b8{_qpD z#~~UF!Q_MH_ewg~qlikkfFk#hc3%B>wteu0&!mydr4SWA@!z=oD9Sb-QlUzTR*m=N z5_OO8bY+VKVm5bb?YK}};8o@N=Pjl_J42#hY2nEV^2%_>DKXok#Dh{2a(>`%D2?Jx z*E@hLzv#F)W`_==f0+&9iUG>AsvOcOC3h7`p+^1XmGR07GyGrPwRd>DkjV|mRcqal zO*5}UOXF&q-MO?!q=ap{)2lXL+N0oFWL7V3rUtxIqn- z)Y#qGF=K6^{&2RvCX>e6lu9RS-^Z9{x3wE1%~sQO3-+ZsVZiTpW^Y~_skH^>srkKZMRct4r zCz;Wim+(2slrN3_UN4p9D;PRg84tl999}lXDeo;?Kz-L$x1WDb3zE zcz-hb;;jFh`t!u+RM%FoS}BJ6k#9;$V^%4!9e0lw(+Vb+V~Ux97p{r=oT*7BGBecz zLVC^B6--$q+3C$SeE7hK)F#^-w3VMkxKqDoSdOZtC5da|no^;lQFU>veHU-E9h;S? z1kQdnVbjg{0Ye-lqO9e|Zp0?)t^X> zS+=gyaYuKX@cJ8QgqgRzO`i9bZEwcw$jn05+DtN=|A0++=ib6mde?_T9?bl>s!yMe zewj)4>2Snl*BA1d)P`bt$`DsG*vnHJ6@cM#KiGir+s11#bnqgWnV23!0!@JiU@h)AGlVHtpPX4}lv%eAqAXwaRf(fJ z3eTXnIe?OJzlmds=CSbdv75ynM#Pcybgyzl?X$mQh#tinHcJ-`?y*|_$?i%lO-Sda zujfq2Uy;PoijSh!PE*aOtGexuoy|l%wkX<>No zKIX{(WJJSUVTk*?Yb68p`Q`Qf(2I37en1S?y9w16P2x!MVe;T&|2F3ouIC0S$eegrUj?2|- zws!E)Z)s8Uq-m2lJI+=p2(mDZ*|(d7BZSlQ@@OJ8p%T{}uF|RX0y5;N6i$U8TD|^m zt|9bPm7s&`L8kW}m@0WHJ7c&066#ZwjS`~GRXXLES>!P+Sp<|*+iGLISq0`WxvO5u z^g);=wg(fVE|#xygnNQnUS&hNheM{&jlM@Jx|wKn&HOPh^`iF@KrQ{3FM;JgEYF|| zt^xl%edJNsDQA(KJRtE!Q9= zvF~f0uYzvMQ{pEl%-v8Ee1YRpcwq-#$3e7FW`~5*qr8^-?C6=hy`{W*MLJNYUVh|( zZNiTsf<<-uknL>9mt~y1O1uL;X7|891MT7dAGw@$-R6 zv*_CNPP)v(-X4cb$ED59I?Wv&aP3z=!|JRh`w2K0%=LBXgS>#7py+XDHF&1{uyw8- z4+xw3J5Ksq-(|`sK}In$RXY<)LU?NI`;+pnZ8~Oq@p_qH)_>S(bvq;Cu1|qfBOgtE zP+_ZS(=!NT`TnKBfK}_LGcRuc}O3Hfb=BxEUB2y%y_33F5|n5u)bZmyZAR! zyS^+!0wP$_qB!pFFubu^vFwPaX1|)TLDC{P5oL*i&Y)923K9`(0qfDP@D1Tzc+kb* zE#mT9g10g6x2!>--!E#Jz5wC02n* z)CvEDaN(sk3^kB=PVa1L=qG(#q#$$>3bV$X`5{g@C)=*k`;g&RH?|Pn1UcL&4PL%5 z8*zk)Swa9Ayh=YP$|iqx)d2T@ujQ$LE|xsM1}it@{A$=?_3pgMZ9BtuqjAwi={Dyf z-Oi2D5&&#WJ^mZY4WR>KKM!I&CGE+aeKI1^Qpb#jnHW@5GK3s69YrfvIj}SIcgC0) zd-{r}v*y%qTt#pM%08FSwUD=%ce9^gD*xmz39vOMoqy)AYQBBJ`wvbC=3yJ?{Q^|;uADLsz&7Y z`m^t3B+2h(;B{ z+fbn-A=9bq(a%nNS#a%Vccv?@^Fxsu*T~-=+i+%P-ZiXB72|2O;lxrfJRZmAgj~(u zhpq-J8=4ymvZ)fQxm45sLmn^ylSv?P3Sx;iv0ZDUdR!dSxsvvO?_Ta@Dw>f7#%On3 zgpT~BnaPvWZ%#n$e1Evajd|PMSv3r>vV>nP3OLR_J4}D|%fpxyfj|IVhEYG6RfsG$ z1CxNVYy$rayQ_+82E@ovL1yoFzlgdk25uYKPhtD`xMwxs64_6e)>R_WOOREy@r;61 z*JJyXNx6SC*bERj*0Mzv1?~(^X2mUiI2rf3V9IC~USchTMPy)0q>G|Rj8UV>UQZa8 zy2KJ&O%Jpb$JP4y3s;o}&$8U5A4xsm@?wEXRKd}W4IqVAD26F*H)B23AGlz--Kh1Z zvT`pDq?Y)b7R?L)seb)y8sGVEVpz62pGuxmP{5P%jGs`X?m_~xP0aF2dt zIf5Pb9e+p6t^F|1+qZwr9LQI>Y#`s|aaV49AGqR1DUZQ+wN`fuL$)ae{F4MF?VbV7B3`QsZo3Rcd*h?NF6%Vou(^)&hT+6Zea8Vn%Y6h3xPkRQC5O3< z+wnh6?muhypu`4dQShXbN`nUIl2_`(A-bqO4sNF=AtA{A-GpFa z@lNHJ#;Mr?;s$!m_?KpQl-J(J-bWYmANu80W-sI=TH4}gTu$Qglh%?bACXxW>Bq0r zTQ3C31Mw$>W6b4+{ch1Eh&2gODlz!+VTCvAD{tXFi>eK-p8-DEx_^U{D-~Zb?4vI0 zzD}{^d1V~bK!+&5KMfkDI4_X=>W?Q<^QH_C1*A2KPU5(%tO6@_1hZv{cAHQ8&4&y+4gcSU-(Dw~hDwFd{_t zbX->At}lSGM9|=%!p*Gf?d-cmrKk=!vzz4uf1!pYeP(R^nYYi;ZD#)cr#E3=d^3kd zPy@uD5V!)_-tS@(Mf|IF@nX;nQ$wS;T5(qI?@-v%UbP18Ca}EQ`8;zA3k+A^#l^7W zJ8LXG21a*E8k%rx{jX@VHSgb0GS&@fE(9#`Lpg2}pU-~B5GGeAbjgxs+{#TS5Q^dO zXhEionI2=e4yV_`*y1|B@ID!UoTNx|h&f)63m{7pB>ZRu+}Th$Nu=!iY0>RviIU~E zrF5el=S><|X_yXp9iBn4arVTRPHC2{WArgd!_p}QX|%0NzR}@&cipMm>6;C)B5r4p zwY2c_`Dy>r=eoxB`6P zl<9IwNl9B{b^onaFiuI)DgYx+KL8Rk$Q3F674RDk0A!K_d49}yO2b2N*Is z10Jrx_5(leAlk0$)qDRvpcyH`HLSB44K(GZ0a_1&FgoC9)|`2-;t*>flVJ*GVt<{q z;6V=44pJG+N7A+14-|2oSXSlz1&Wo%k2pd31TU%*tcemG7oI8B&<&>YdufPNLq3xu z*$xI!F>lV6xMdfF^@fg9QtwHNY+sq08p{q5V=|#bIj}y&B6vT>ZdnRY?)4;!dcqpR zbS!5{OiGSs<#ni0+8CmeLs3ozbwlp+r2L%r-;e?1d>mP4Vt6hI4COLPA4*^<<$rCA znQ@Pbo=|U50d{YPh6O&W3|I^@>&cV3le{GT7aTEA@=?i#C2ZqZm-njHCOcBBvMrdLK&zntt9{XVZdzfDy?z;w10K2^VNPv*?n)^zz zIH(RTPC;toO~=)|hOy)Zqq^AbyxUEPH^mE7p)^};Lv| z%IVr20*QTOe%mz}{}`@Kc8=I4X|`F0AHT&_;QQ7hda-%j%E8D`9fK)MAwEm_EU2j< zn0D*)RC6{*Q6HjCU807p`2e8#T}H%UYrP@i`^?juU<44l}VBMm=wQk0$N5S zuq7P!#PGc5SA-&IP-?R+>Q}JcvJp#hQ=NNdj}O?NGKY<&=o!Ezz3}4VsO^JZ?cJKqZB{!E8M)X0o8Gu__m{$@i2AVT$!l5h4Hd z1uKQ_KIU+?15x5|mME7k{HgeH{L^FQ%(3AV?6GYV39pa&zCaWEn?c+T#f>NuGwyr z{Q=r?!Gzs2EKZ{z-E4n*FAPe{Y8|EZ;P-%N7Rv1E@Zp)M_!F_w$CY6tyI(Yan9seR zF165NroTY=Y28pekwy>}u6m8zbJG3X*T-!SeYznWM0Gg~32QhrR#%C(sml<1+xjBX z9(0p!=ZvR=ZX3lu=fx{1D9AImP?~XFxKBH*^Pd5poLb#~?#G3C)^)v|(L$t8xbh?L z+0G2+YnN-(fkY8$ugys`j}{xT7F!AVfmgpwb2+{#!9x{Vs)x z@FHVeL2S9RqA2tqO|_KF^)HWcFXM}jJQj;OY~ku}GBagl-_kCHoDw6hVW_m=!}@C@ zE6V0Jqgj?IzX53WtF=g7w4Ws1j(vyyz*w7JYgY+6@-Eunu5iwsfTI;>o5Rz__>=^l z7R1`WKrkss#4P6Qm$qszm^FMcQgUF~Eo@SKmiZb6ZqF5iwZ50t4JoGU`p+;;r?IfG zB@x}aD7d9Myq0PwP^kP!X%yuLq`X*7<@R54_ONcHRh}b9HGF4{6n>;{q_ruud%wcV z(ZSss@iJ+tby`SYWa2(k7jC-wY(Y^>$e6@kN-1#68Nl6X__Ag6giJ*<)TT&r)s$$G z12Bi(@+%(FvZNt|?>SrZ|EC3bvQa6t$|T@Q6(Xk|LN?b8G7scDbc5_+q=vS*1a3zR zRAOz-IC$l6&^mi$g#9_T(Hw(q*xEzqWcpR0bj{hGzwhh?>`2NfQYf-ZESxo>Qf*%7 zY+SR?^;^%{OX|)F5BZtpS?TD*HPVobY1^5#1>SU~bIFB_w$`_aidZ_Ma43hlYB>a; zb36gVPV}+rj&EYmzyr6I&qK^1fhzDfQ7KPA1>enLq(jh1o1+os9 zL751vZLE|Q%<>{>J(11BaxiG%({+R;uDKbvKEdcBjt!Nk4d03^OoYcxDXt-E#v!#JGUFHFlstiLYy+DhLt?a6Cf_po(e!Gyh(A+NiXY7s zM+h(jZkv`{U#k6}l}lbP%LRPz^tAp_Kg;crUw|2ro^(!TFl|f?&->!w=mJXlJ40EQ zlj(ewlh`B!V zcomiOPWa&Vn}m{tjHc8-+}U+k*lSru3I6e|~R?4R4W24tOD>uk4mQrcwuxqEb_wbCY|{ zNfMI9dEiN(bj_+DEJDhhQWx(inR@AGp^@>461!ZtntJU++JC2scnm|n*SV*FVu zBcr3w>AL_=jG7EJ{%hFc-!ad`k7m{=_6>gociq#NleC~~twW2g#^M^I!Rc4*U8_YO0X1|My%OtaI z%o@fsw(;?zHit@*s?!3hU}{q@gf9{{6R`S5oT(ZH&lEK{V}!oXY)#$xZ)MkhP3@?* z`hlGEUzhs)6Sx^%rQ;gz8@|dp9Sc!6LUQx8iI_!|mX|}~-{_`IDC^VI2{+rH#1Y!S zPd-%YBnh-GyHL!msN8P)4BcAYvFL83UnPa}JN600ym{O8=sa-83M&AL?@AxS+-Ce% zmQo*Qkt^sCc8(9WI(`J01pFp9;lxCXGn>%Y2ag|HWdH8aHy&Ab8or9O7au)7SauQ8 zoHrgjxEAm4?|=L+>wHwTJbUfz1OPXXU(5sa$T#Yy!?kPIcZAR5dwHY@u-FYehR#Qp zJ8M(ma+lAZe})5n5U+$p=c&oii4TZ`B27x+Tz_0s7E72R2X;BRGt&Ff)7r?Ih&2n! z;br}#HvA}jGtJ#3Ksn>{xuezQe4q7f_7D1OktYUGS3I_(a*eWlPd*SI@un1>swjfx z)PuJRv$^5nQ}y~&a$LM56I?Ol`i~NpVy)Lp-LPvoD&mZ@Z7;pij7P3!zFdw(uzEC2 zHCIk{Iy6M8mev()hGCV(A{YmmMhTI$X$j}`Cxeu4Us5_>nn?1A{7LiQaT_@~ND;Ao zdUtlq86>RqfpsGwsB7mb&h7Qh&7YH}qC3K>1!Z02=)Kfrgf{3BKL0XYdf+MxU`_?; z4i_Jj$s2fGth?X-r?-S7FSsuOsRJ!esy1a!053xVdAD^{%}5r#k@=MR3U1J|Vec?= z94%jr}RDs0%9RsSvHPv>_XLfL6HC<}{Q=096Xk@AVXx15=2h!@+?a=GiR5JkV7j_K> zN(VbYf_)z#qSNc=-sGFGe1e`j8gVmc$3MP%Htx`n>P&yaHxCSWPsD%>(n8mY=rk<$ z+ArgFflmBD+VH@41+<7xiMS~?3itm<(^rSn`Tzej4716p={DUpG1EP!jyB!B={OkE z)6L{GN5^y@F*9wBHp6t+@8$jZeO;I9I{(P~+^_rjd?ZIOFHIL?NW_GOY!P1`K%^k; zJuq%OwPjI+&ZOwCTQhYMS)|C5fe_K*OW3g4<-SU3e^he%nAM98T9vDTrDm_u5CMRu z@JkYtsds&9f}%{vs~xmCM6XYdC@?kaFc$E~u34qW+DqntIaC+wjw-TSvR*>ijWIe| zs+6|nTT1Z17aML)Wu#e~acm^eRKgm0)=KI6mVQT9&pGFly=}p-6JNW4-=YQFqqa)< zo?hqrRmAov+7;U9n{OKzDC8a2wVM9yuTj4nhnouhY%uGh*x{sUO`y4v4N+u=?)4+R zmo`NIog94D7CcrSJeC<;ZCI`$g+G{?_@isN8a$ga4E72J;>L|N*Jz@74d~}m8`}>> zEPk5)I8M^a1vQ2#H>2}wW`HeetT8ovnW*)@p*e5QHxGJ$K5pyzR{;x1w1E!CnSlT< zpDz1+&ghS|lO!(Nu}va=YaV$eAH9arT_$OAN`(T6EEHMRJ@p;@rk56x6NWK}rSHb? z@hLqR>$}&+GDMM)^pLzrBI@J`Q{>WEQXdBoW5 zl=x^=A}sxzeR5d6JvUA3cO%Y~+~M=T1;})9|ptWPqTf(MAa3Du8}8k z`U;!oB|60}eWYDeNoYrzn6RP*hIFZ%Q%F3zMi33c3ZHBB@Yf)3Ao65r=x!i`?K+JbD@S*M&uHzQ)uC z@1}%gNg5*n7Hj(*y}0H1?wOB(w*z|QwP>9c`$;RdNnf~S|Ks7&W1%L%^ZCpX8(_UF zw6Q;Ef_V$m!9i&-M$g5BROyH zpAIiK{tsjV`HwYWN&(}2OityDQ~A??@LWq!6|phl?M|CDOGDXh;b3H9;s)1MbB@mG zIRt|aYslixNc~<;*eQEC_GRr@crE5v#dj+kCi(LB%20_OYCT4T!RRResT&Cgms{j< z+!C9yF{Yl^B;zf&*CdhpWYXx3;$`b@RjHPu%HmI210CW{;e&(nCMblpTfn`V>UPoJ zJi2Oxbg9i2VOQ}X<6}p2Id|-WaFhvAWX`s~t;e1yeR6Xb>mkkbR^la{9j}C3i-B0Q z1lvZj>*xzY_K2HJu`qIsLYmgy+Km1ZJ_x+L7aAdEDjZa>RlM2Cn=)PSiPKkIAuz-g zbmat7V?3dovPpW3^2ehPt+=INcvr3O+q6_uJ;t=;l4I2#TM5tjEXJmR`xblempSy* zq>ZpsWPu8_D=({pBt)8ML%MAKKEY&gYEQ;iS+s|SPP9hHGVtvcc%g4t4P8!MsB10O&6G5x{kMSaUn$McQUbv$N-^7 zqk@PiU{zVJ&ADZ3a6-fos0txF`L2;2!cx9J1)6Yu7m&o7jN+YGZzXX(w{h%(n*CLZ z(5_PN+09?HcS6Uz!kJ!{#Eu)e`4jK3E4?O3kW6MO4VB1E=ANc%M#k3nlfGX$vkrM% z$@^@G-yvk~zG`NNaCLpNgmY&Eh6$M}{q^Fr`KhB9w-T2)8~SXBD14J)-?!+Fdv%1& z0TZ`QWT$#i@S1y=u>&J4LwHs64)zkil84UG%XZ8rL+{LI`VEU$SCg!w@F8u+h3Qm0 zdebnva90glCW(%7!-gr@qus^`hb5KvLKrs@B_G{6-TCqICNEC&=wBvu5KXV%*;PSsrBu9$!DW4H&jTix;^e^ zH5e)+AQ>VFfyuJY^?{LhuZWOL{W;2%jz9I(mGGQ0Iq;4>(q>C!xLxBBh!%3Y7fQvI zjtqXZcWwV9LOI96sAj(m+g0VRN>mV-{x`jhT&q;b|KttecB=hAj;Ed-Xb|dbPmI7w z@a9kHvo%-q+-}KXT<6@WMfIbVH)B~-AybQf&GU#o=xx0oe=-`*aoV^scsP1)Fs?^T z$Za>i+-8)7q7rL3I+bE@Q!va894k!=%Z93~l}vr&&l~v6yqzK{A#y1+e8sGQN~-j- zaeA$ChV=|H*?;G{YUO_>9Q$3?XT|_1m5?4<3kF7HTM3d zz)>#=1#n39kA3#9t;elm?pp>ShMgbYpJ4w=ny>Zp<3l@!akw>C=4Kn1emQTCr`FSv zQHY0bVPORldflg5b4As;9zo&%JmQ@J>X`N~v~8f-AY;6WfVOg{`~3FJaT3A@vW$#n zbbErBoKh`Rc1oSL7m&MZg;Cs{brZMa0?PCPWI3AMT%zEJ1_DiUK!0J1QABLO&DusF z5UGXbg0K8dk2L*0xYE9VQmATxHmWjsQ8xdJ{cGu8pLvHM;%zsOvNlT#*rd?g7ExT? zqq$!jUm0^&Xyt3$WAbjzdXw>(=SJX`y8ZB8KlasNws7Wa#+dFQ%XRfTIQ*w5}CXR?O}CCUNI`tVsUm24=$`b#u8y9_rQK6`?593#8A2vmqobC+^535lZbJhGPtMqYx^ptp15<=5or4um6 zzdKv&G~-g(Ctl=Ueu~Fxltebk`xfH>gU1H2Acz@rb|r2(ChXM?PuInbJ~h>mnicpF z%NDZtL=V06&seMVs2&Eff%J+iNBz!wYSQj-YxS7AMNaKCqaxa8PcN{KeV1WAmty`n z)${eT&cfF0!;;g}mTUq;TC_Z8720-bg=BQo${ox8gI>a3Q;v-*UPfK3TMB#7?3b}43M)0 z8mvHyw!_iQ9ENQ|YafG`TepGZxu)`^f zX_+{a?VM?>xUHz*Sz2<3$=ld95+H4mq-Ko<>H>b6)*DfU*Ik%T6LKM6hEqV<9jdm5 zV;NpQs822kr5-|ES$3_?;K%tnE%lF>ZdH%J>CY9>0Jq8MgvZvhvW#;PZB(?3v#Mjy zht*&rX%3M{Y^WDbR}_%?1%E3OZrVJIGso27a|x(rvH8j3ryMS{kIwhgDcz~aJbY*? zI{{i$AWzA|b{?@6gxb^KkUwXSeWC4^)}T<^Nl(r+&SA$fC>$B%^hH20RBAEX3^74Lgt~r)daOaUs-a zqdGrB*@XlxC!V~+RhLwE-$1+evW#YR^RSp?J?6#PR=FN28~|5s&^!4xMJ!X9OfgL% zlw}Bk-D4_1F_)4um8UY(H}q)oxUUN%g)B1G(TFRp-rq$gaxozL-X@@UK&J|wji-O- zQ>FY%;ND)N7T=I*9#Gn08TZZ;wQ(tUjq(@rAK^dj^VXE#Xms-Ko3HuC<3{S5>@A_gcz7{%vtBRVpM&R5;KzVPnsol31)j`En zlH&0s=*e)XFew$>u(6#?M;XiL&$H;f+A9Ck;&*)}-HC|={5B1s@dW7JoJff$3fgV2 z{7IDzH?zVt(_*6dY$`Kk`{&Sk;ae#Q&+t*JEi_()2|dGHKg6Tg^&zlREy?X|>F{oM zlp@ZhzQ}G0{yl9?ZWL`$lawGkT7S=4R%eN+R%3ySMM}8goIaewaPbAEtLkdg%IjbG zGdloNl>s@v{~3pO;?4|I+x0f;0Oa48i>=?;hP+Ep>{Em^DTE4F;M10ML-9;kGKa-1 zd%v&)=a!yW`ap7Xxk#Geuy>!fg6k63Q#^=aX9SnPRG7q6s07|ujs32}t7Nd{ETYF+wRZLMlN%GJso|E-BKh13p_?bRtPGS^l?5v<0u@%iMv_M! z2ZG8Bgl=&gkU09bk~e{@NuCn4eo5!@jSDiZzbU_UE=N4x6L6lhNLh(j;!v2TL%PU9 zTv9yL?e+mnvik09jalwJz**+>xn9`6h%NV<@^0XYquEh5an(iY4rYVcXDrol6wF-K=lZFn#|k+s+* zIpXT|(Yd+BSlU9yW_~Grw4gj4?iG2$^z7v_{()$L4wkx02M|L%EDj%99Y&0>c&uCQ zXv5j{!=6jxD|ai*7bkwf+P0cFI;qQ5iBpn&G#O{aE?wkj>~+V5pWYzMK8$&1Ga^}y z&h*cum;xuX-1gKWyUO*p$b^B_=1c#Ig=w~9V@6_a%ui#YoA}X2S<1=bCJ+3c-sX+v zd3tiobREcX&{k4Z5RquSRplR16V<{kuOZ%Vc!#FJ{MfE6Nl!$_^|im`vcmuhljg>9 zn?#T0RuFl0#3A)*LdJspo9Y=C|D2phIr_|gkLzl1n;}`27tWqA*6-#g^Snq`S2w{M ztw{J1E4KAd5a$!td~d5}fR>`=_rJFsD59~UlcTo1H~y2!5XNUu#VF&=*K##jIO{rY zxya2&_bjn_n9#iz*CAU^7#nhbHdrKEn1Wr-bI;EBA=(Ap?pVgRe|22?Nv)PaITUX) zOO;;zlYQ@*)`y#z-3J>)uDSk>GKcREUJEj*7<)>%t$t=&J(*PFbRH|L-v~mdBw0q1 zIGZ(V0y*3VpVfRHb;ds%2PVQydwTeX^?9I?I|R0P@)_d*vC59St03xG7@L9L=~OCM z4j(iGuGPcZ0=5rv#K=ewQR*(IQ#xx8k+l!?RXbH3?aX}Xlt@+Xq`_bteE-J1IYiefowSBEuO-7H(QYHR zJA~X$LOFr6=B#Gj)nrd6GnBr_Zz+P~ipcp1ix2_jkNxG(iOVAe*ki|U1tvx?lP_u4 zMA%$ekM9_E-iUtGLT6GwnfNE{$&%VTRMz6$Eqqe(ti6n`yisODrzWK0~v#KU~XkGa4TA$L~9=1ZTcRS=i9$fkM4&`+n-JJ&u;A0&7{zH^aqnw5rA zN`=U)+`1vc8xL1X<-^3ytMtE&S+3KSOvzH}J#5o8lzAo+uQ z1d`xouBY(jb5h%_OgC&*u~W^PT`P&6l=c&b8xRUkLFu`S4D=2}9oMZLk(ZZVZQCkN z-C$~b*bVh%aeWbf=g;tNEE8YD^Bh-ATp$h;XJEA?0AQ{RaZ6K^_45GcpY*TTXBaSo zwZoMv?`UubE;z?yOodaJqIVIll;E0b(2t}K*1>}6%we2t#cA7X9 zsGtqes!f};hY;oYhuHSK@yLsucc(JS4^#Y(Q~aXq5$+jVNX3)QoRc3JZWE#=G>)y| zd3S-a<#rI~TS;?RIA@LjJ}4ZgcLtcsH|;V7NC1$rv3OtHj>uQ33e@aZQdh)_t{hp* zI?An3^QuUHqeyrB3i@g~ZbXM~;-0W-e@yYBAtYh^$3BT8r28ElA|?w0o12@}0r&p) zv(?DJkcjd|>f@pdIw(>Ky#CjUv+skrt_D&4^hn?L8WtXJa;F@)g(muT{2-5rFxl8E zJemgvhlulz``e){;*N_xPtc(e17aXtm(S@jjDQI+7-5y0<^8whVo**T`e1c_h@oxq z*m1txNLd?Zt?C6XOy{0wf=}t$AK1)7^e$He8@CNKI!@Bf805~Io13>x_IxiqL5clg zCkjr~udn|ZpuucZO^d3_Gbo8m^2OlYV=)|?IAR}lgmKoKrDMhtDi2T5Ev-kW? z=*#aVLmD$9M>Nxac(w>8w(G`lY?dUDb-YU zB$KFB-(R>!YFbOqf# z&yIMZ`wp|3vvfshWW{Ut)96lyXRFytf_^@7o%QVL>!vQo0ED`4a3QC!5w_*U7Nm57 zF-FMk12X*vScaC%T^%`$H~->bw_kR&ZK=jey+{#sx`n@as6t_R)|r8!P8GSVCi^WW z)cHGx_It_oJpOl*Rz;uA%7dLJBqbD$1JWi(i0q*;RyG3WE`S#61^o>?k3rmUv@A-! z-m?d>60R9``L^)-6XenFNk6U6Ud<3$$oOTPdZkUW+M()jr21BRQGjwSmMCG_8y3)4*aN`yeBgrx9@{Sug(WCKS+?q*1Q}f8TtrE0Qp7`_ssr|DAjTv z#sNT=!mTNo}Fsqm*z*g#12fE&X2(Sstp9nc}PMSkCc^_>4ScK6R)+w z;BtCTPyN%jnq1VTi&R#5y{}a3b(mK1^x&iO$zEXr7bD1lG@UZ+(3zZxKzK&-W7P~9 z%LSqNLuqywIE>MUyHo}>UgWV(GvlMK)2z#gN3!raE&miaExO~0AM6%~`q~7s0JdV> zOT5F?Q4)F_C!u{UaQS>()3B~Z>3F62+p@c7xCpYpFg??3LHkXccVNk|npEpfW)MN;hc5wSm zUvXsbEC$~*_a)tByS=X`955F07gZlvXhm>-~xyFo_$HojRUMhO?t@eeQk?r(g2QN@R3nbDf(0Azx>tNHfh_OJHp zCJ*Mu{fTspycj6`FIHS%|EH`heB7!2oPmLx@pRslc-eGb$@og+A;4+2&5L)s(l8Rv z+2Px_m59%P?Jv903A;$RX-%B8`4xI8dN$s@`HbeOdg6(gZcVUv9~xWe-v%;_w|({j+jC}O zC_b<4J-p^t{3b+nE2EFU@0%g=g4uVh4!TlwFA}IO=v-pZ4&%2Z;}o@XrX}gB2=RTZ zAHlTODm7U?U%@g3?ZnOfk{SIh>#Y->2#@28CJ4HWL*Rjcn*24xkI&LY?Uv5}eqTr+ z(>uK1oodM(qXVyt0&7JRJ1@+T?00fxUzV1;B?W3NN4LQ8tXjU0Dmm?k?l=FCY<6ly z1?`6zhhE8wOtOTUJDiF-A>GF2VSqeJh4&RkRZPAs|FOs`e$mm%<=1)rs3O5cBOIX&P-c2Gcy)yXp_&z{Z> zP;R;CKBSHm8Ew87P28XYc)@4<_hx{Iq2{59a;_G=IMa1_nD#bUK2rA;;YOP) zDHpn6l#uQ7SiGNk!d@<;TWi+>u6ak|UA z!82aHUMn0uJ6>flWqb8+70(Cv^HtKeKcmjMjiz9K09(5W?$q9kw}y5vo9gA<%@-&s zWB0I9R?$4k$FTw;YNyASW5;7%dJIp$YJKn`-&o=nOvTff6e5;1Qdu;?W~tRI;>Wkg zfBjy5I{W3sT@d zdp7{TTVBC$M<#@NZ;DPwj(HYgh!)f{+T5;-MKzlnO)4M&?9@V4H(BKwtm@y1$X+&h z#^3pFy+U+7Tf$lqw~kPf`yPoK6vyU`WLK-}r+j|*53M?@4{f1fMi}lA?%%hY z%TBZU6GzkO67$5JviQWg4#Z3pEIM7E?S-vpcGp{QyhJ}PzbpOnssc7*QPO=FPyB(X zn7wSbN}jX~`-m@0w=(#eC4-5m6i=GF;>KB5HOoG)sa(VOzB&_8$5{FUL^o;U`(g(# z@_HA*ca?4HVMC_$Qf|4VeG?nLj0gm+oT`Sk-51esQ8aKC5WXX@m{@i zej7r^Hja87r$n7~dQ(`D{hh@5)%WK@XyNC~4$ohyI z_UV$Wn5jeB^KPS>;EHB9J%jG6UydZ5Wl2zd3JFxtXrbD_6a`qG#DtCf6JP?(R3e$k`R zv{g3V^P~pEMKq%G;Vrc2xfY$8mDM*pJNq@L4(G^KcycU5Vl(DQ>D~2{^f>3yQ(iQk z9)AH$?ldT=Y&@#VLUnvH_;!L+AKfh!1d-c4F(+TMx$gv2b_9WqWaa>m`6x{~l zcFFaKhYpA+5vB`fy-1tPK|@}79T6~g%U?nYzcD$rz%DhXgJT>slh68h#NHnw^!~{B ziGG}y`sHRa*SXFj>!GH$^|xQix>A#MVeE^+d-mNpW>Ieo04pNJ+ID4WmymXJCqeuQ;} z$JTf@&vv@VL>kwA+ee$U+F>DlB1{m?lR(V#9p23$t|NQMUjOT-ArxfaEzz*lv?j93 zsCWAS0^4$JTafMW6+tx?maLVL24}su;oo30PZIul#O4O!U}{O-$ts#QUZ1tCkC*Rg0C+!u9{J&|H4HH+RzsA@={jXHdRf^%f$+dinPW;Yo`vjl9%bY z*`t_Nw>^zF1ReGLsXrtP=8V+Q<2O z@Q%m0Y}JN|X>9Bmpthr;t8MZTI^&TRUo|9oHbu6%hP?;=j&&ajT#DNv3@=9(4cYAn z`)u~lO8oEk6Plb72`xX3y}HX!==&t5Hce@)>| z@v3A$JvrTRwepXR%w-yP8*n+8s`B?p``J>L;n;$SxY-np?yB0pQ-Xyjq-dOFmt4mk z?SmSiZ&S8HAS*IvR&RFi1NW;}KDu2o_wUjdJHSEi%5|4ecXa7#nf*1XJgCSg`2~_v zulPBc>{> zt*UDWiU(hX%krA_W`XUjYY(bu+EC@goyRe zd4$XBLIk-o4^%f1rROc4xZfP~LKQ=_)&!i?--vin* z{GoLdW&g2}6@w)6_;H$5_Gd7Zlm9RL1kzu!RZuQl$FL$|pKzWSo=t%nqLiHlt7xOx zzSe0tx@6Azn)I8Oxbt=O;NWUC@&PFMGLo-9ID&IZuys|P=nMx>`Vxm}>8l=pMT<+6 z;CAgL)8+{Knaqc8|5xQN^C0YQWX%+REMB>u=;kMsv8{xF&|a4QQpO4Yuh4VJns0A% z{Lbc3$Vd33b%qzs4d`E0P1)4Om5Yw$(?2Ru=D~V7>EE~Lr20v|!|UCMd^fXr?G419 zpMF`DK!^vN)J2Z%lTyz=9!6TCxv;CEmc~rzENUp!tt~f?iCs)t?RP2V5Ul(&zIvF< zrOKq-e#&g-Xd7~PcPQKbKH{wu!R2`AbQ7t~^Cy2qP&OT{p1m9SF%rD~t&Q|SG3~{> zm3Xu-RNW=L;n(Qw;Y5Zb`$u>qB7a8a{(NMwcYLPPOlt-=Sg13B4PKfr*@b?D2$Gtv zN6=C{-zXtdq6U?}kB0*{^t7Sn5&Qt`R)P)!QPNvV_MPbVSg(EJ%jR+)sPFLoj+c?U zsC!xsYDS(-SIc9@oR51-<6RE<6PXg!Kwz3CGZ%H9+JaM zRw1`7ktQKRPWC5P-HHZcgxr$006>&^__ z{qUe-&ar1^kdGVvzWM0LH)f55)6Xcddf(JoGicH_Pn+tM(0GhtVQ&Hbyj58NNx)Ul z)u8x*0VRuDNONP6d3t4=iTMmzR;Ky!QSI#L-Z@)dm2cHwj4OK8OsLH_EdP@FRgCNe z!wL|E>hE_|avXlR23pIa=xJpKg#z0#87uBj4tOnAGU1ENgu>*Tv-{_O#7n4`zoxXR zxEE3Av*^fdi!+b&T(pgGR>v;CV>8fIpjV_?Z{IYOsCre-@q6bK-;}LHG43AReYJDS zk5)v@MW2yAjzgUvc{wu;GGPbX{QnL=#{6`7%YfOVTFe`#Jgse5sQSVQ|H9kK%IXjV*)U9#0NW~XKsv!}UXYPV zfupon3Dsu#INNPZxMb~kGUu+&*%?SbTpnuN%WKEPkST< zOA_25C$pF|-VS6j2;(;&2Bb9my}w=fbw0Wh!!livbjyh~>6fvZmicHp)MLAR3EK^# z&R|c|HT2iTW*c{EK#6yYd`rYcM(@13l{}TELdfqLP#~?N8MWapt5V5L%htt$C8hAW zf=F@wJn0NEHE01a-2Nu*vafm-pc&(dDM{YsHhs6M3~RA+9d1#UJpLOj{lm6Na`R>! z_2=wTvzI>f$TS-h8rqc^^!O2)MSU(&9XIff-s`3FcIhATSIp3I|i#Id1$O*sZ@4H2tBcQL1MObdQLfi1=ma3G7hEB zDX8tNhqo$g)tfY(`0j-?GMS%KM&H!yJ+Pal5}>{k5D}g?hXXF)bFG&^4al9K77(CN z0IBC{aY+EX2f~XRmEuW|nW*e9r>U@W>b+_>q&UFoHKdeW;-aK*s0IiKi;QsQ2z)K; zmulpn$OZruzH(1IKJx8Kfi4r- zo?dZNp>jePvQl*!9OjyE_5)n7sICrYe~5RrJd#RxSipQS(sr5jO$JW>OP-hMa|Cq< z%JHwgd;v^Nri^bYGT)*+RwB^U5pOu1Ck#)x8r_DR1XIyg-%6-$6WJRS!Mn0it5^?L zEX*~ao`-82r`rBw3ZG3iH#g?KP`7H7(03JA7EF*Yi<)coOOA0em>ym0QLE@sT2QPB z^>=qaGMJG8M8vf1%h=7=UWqQms(k2SH`p5m>~7z@M&YgZ@z2dUj(}N;3zSH*&;vu? zzxHd#Oc4IMJw<)~JM4kHeYioLhZs_xqW;V)sG4f`Lg1oyb>4kN4g8<*{TpiFq+ej+ z;;F73)D@;zGj>v&OQ27j`YTB#{P(x^4#t8RcOzi*#AoO9m^0r#()Blme`>|R2RVHY zi2p94g9^w9dbW#mvNP8@gHXWbqm;*&Cru5{0>#ug)bc+&02tHUEDSQZPzPw^8Ep&8 zvtNc!f;A<>TjD5=h5$AL2L|7jw&_AA4Y-n*_o260-+g9NpIU4N&_R$7vJ zT0T{4{q$nm>q0oCD|mK62IEhd^}(} zx{Oi(l_fmaZD0gh5Xl+~{MS`YZmya=d~NiP)8{Sxx*D;+_KD1q#FO(ccq#$}y8R%O zb2-xZ=KWEYy-YtLO1$W=@wIC4&T)gW{q2uB|1)yI*`M~%V?qj=U##$;sSRirPz`__ zCHSx~1J{JSj=DKWFm@*y<1V{<(x^+%m_lv@_DY6!Q1(!7hzx_XF8W59yWw z)Xcze8#*77O^5G#)(*_{u&lyfmV@v1izhTg;MJ>0aAEuUWROT+$Jo{DK~pO zQ$wRgyi>nww3Bep?-AM7_YkArpD=w~)45+jBcZAyKl50(DJvk|)h{=LU!i!;V2LeW zI0Y*_u4G<8C3llL^?V}2sK7xas)sqCzxh=(Cwq(GQJBI3?zuW??Xt?*vf9~7^hXd? zV&a3xh6P3%AhjdPK1tS0vvQDDLBF-GrhSiDQ=hP}|M?WR!>Tu4Vc4p$lvXJVQQ$&t z(PO~KF<44ZT`(UqbsOnybc|~%9`FKIfbk+JziN1 ztwpts{AD$`S?TrkZLHVBg0J&z)8XavzbxHMO_2eULGOzgI2@qLNkl*LfHMMbjH$i7 z{jy$@(>y1Sik2=N@@iT!eB5C{7NpaH%ql4L!^Q$S{AOo$p&H@F9Qrzc=;&TXjcs36 z3I~+PL;BSPAmE>DP-p4~{F?3dEEc;$%{}sQm#Sfs%_zcIR<7*f}aO5l*667(z`Yo75~$-%SHdwLec={DCAPdyzXY z9V|3N*PI$Qor>Rl#xN1+n<3L;MlcBVU)L z;X>Zo=!kP}@DaC?LN8f7*#$1GrKKf4sx27PK6@8)keN%%55qm;yqRN0<}B)smqOCx zjI<@E3=BDr6OL<$t2Qo7=Gg${z%uR^y+a*p& zXV*j?t6s9$gA4O|JOY&%;${drfvn~zh2iLc%#&whLTgXg#y{-M^B;N1o!*YV`P6J< z{O0VBIcgT(Z#Hx0XWWLLLD&EbsAmGUmS7;TdZ_T4g;^-!+jHv-g@h}f>5rpp=W;|S zThZW&Qo>%^*6U&ZrCv$`dd3;85>2p0aSID$&UhSx!RTSCmQ`(}G@e5x1g5;d`7D28 z4oFl2#%RoE*Ig%d4|>nvOrOhX=0Px6_V2nME!K$N3}H-_P};8HE!I$G+ERs^ zNsFQ1BP62Nnzqnq-4OKND(IC6IlcvXd}gm>;l06Q2vi7@t>C`pQIK#;k>WEV<@hb= zZ9}uB?sOjQjzTtLa8$<+epI~85C|T2xk8U*r9!^~uG*+1 zCp;rVLb4m7F<`Lx;nFeXXaR&EtBfWy#KXMW*&)ddEM@@mjq-nqX8v8Od z-KetX0x9Fht=U~Wg}t`^2QxxP6U|%q)CLLke$6(!Fep z{_ZfUO1ZeR9V5J^AR={oi7-2nhc0|*&0_YMwyj6?02VAT`l!BTjNTo#yat2Nfv8ib zB7;LM?M6me-mbcno&^C5DRcBLOzRolYa0c8Y+7@-zJ0NeD*vYiu*m44{_d4y!J&l9 z=9VS=SEW~XxA)t^fGaL}{**n9Y!q`8F6v&8iD1PkExH*Yy>0V|AB9ERWvynVJcL8v z7?O+z-^mxR581s+z+*Y(FzCR6N8p7DbT>qv`BPPpk^y;|$gw~m?lsj>b|sGsi*u&` zDl+SF0Ex$+x_oK}{IH(1?{kSN}jLSktGF>bcv#WS&YpSZyWKO8ZyAtXjYW#t?R`zNj$WIi>Py_ zxWt?IkeKUN7HgE4`1*>bMQS9Ews#*b4&5Zsn^B_Axd*IYTipE@{{z z)s06uRjBwSZaFG?u|L9 zC5#~siHBPS7`6_-wB@QQwr4iuRc}Ag5B2V-;ho;n%2!f%SMD&1H{b`l zpyBFtI&a9PI~%=_)BX312`j?cXmX76Je58DM5rb=xx7_WEwu-}lT@AqxRVFBE-M)A zK8t}iAxiltv3hg#gFHTW5&N8zd?a2e=NKJQO_`8*-Xqn-4#GMe#Y+#@I%^Av-p1^5 zgy#QGa&T?!j6zBcmNZQEsB4VmY$pLCpaG;u<-)~`^%j^P>ieRX=)*7KwF$(2iFZQo z%6=RSn$Sa>@RrwsD5s=8Lz?*R#j%xa zHp3-#;rh`zJ`%k3%{05=9Q~TfmA``f;BDM_FumZXtg8PDJs}64<;+BCOp$)FwEUXy zE6Lf5F(S?v|$@KKRLM@TGK-pchG zv8}SbHhB<(qEt$AgF}zwgBQen&gfZkVa&qASb1IKqVI6& z2FcJ{Gu^ppbfVrKUWTbe^dXf?;i6UvJM!OEMRN9+Og*t|bnL18tZ)NENR)Ru>aBT5 zO{=7-dC5D0^hl;w0A~XF2;eQw-^JOG)W_e(%kDI7?l^1!kfLZI3SL~-$V z2eNWMjPXvlKeVE(GQ4Q^FeC<-2Ze}i+Lk)exWIodRCLG$;FiN{5%fK1dJZIQ?fXKMu6cY^E9$zSf<>32qr~0os^s< zZ5#hBBwGkeOg!-m$YtYK(v98XtTOX%$4qD6N_m0<8TwP!LpmF z?7O)UrSv_J-2L4;<0%f20F(K_AYJTJ3qisG?j@inS#`^~HlT@o{w^UT#wIIi$52;y zP;>zBBM;SOrhD`C|B3g3S2y{CCP2bho(9%x=E^v~*^O)BCO)vX(J^q5`P8BZ=w~pA(kf$?+UoQNV$EGVgx&(UgPVg;bBvZ0nSppayx{DWVz)Le2%O5_M? z!piV&##Z1ECP&p3a5+-!GIM>0+js+--$qBx78)u*nk0(0!_rgxrKlmU?y4M@$4e)F zb=HjUHjEEW7n~&CM3!{Pd9greFjf|bY~LAb4$w9E6UVf=tEeyMF1XiJFUWE211HE-YDa>G!2?WurbM*x~kL(Qq`| z`j-whs0`+(f^qzlA%kQq4fOqy?aeLUG@P?8TY_dP{9GX3I$o04Eh+b^x)M*vHQMX3 z^Zr+OlfEBDB+Huj^@~SGC=*-Kn<-oVm$AvH<>FNOv_n^H=V8r#z5xYqWGZErNR_wZ zE=LHlue|W;t+$!b>v@WJrj@rQ6wXAk4{CmLv>m*u10p29^WU<+BY+2>4FpN|0s}|O zu9Ydt>S1desaMmoAfzSsi=Yjj<{-KI(<#sw@KAQRa`e%l{NzaQ~ZDOs!B0BbA8}H7Ooph>X!0zJdAa7QiLs0PHX_@)W=h0O?hXx8P+g z9QuhfM?F-;j)S>1(rSLf(6l~E>vjXY8S{H*^5lQo@||HMT|6{>@w!||3CFi4m6f@f z<$ryc{emob^~#OHjtfJGZ?`NKv% zLo9@In9@uwnJF3u>5`xKog5;uq19yw3fbJWQ%cX1i^hF&)blG+Y9pBAHgQ=UnpCbB z4vsKYMQg3Ue3jOCh~IovrqLK~eJbiyOLcc#16ntB5EG|D|3O$ksJUOKV0aXc{|n|v z&V(cUhx15G#D=b`L{sF@S5V8DoB#E%vyI!A9ZZsZlT`GWwEvH*w~VUti{3>y-Q67m zDj_XMDqYfSx=T6~q`Q%p1`#RgM!J#iZfWV3hO_qX-2c7zoH6zX5eEW$y=%_-%qPyZ z_H|j6&ZsClPW3-82N#z$q9@8BiNYAMblEWCW9wz91KCs3PL7a`;oZV)g=ufJ+3KIh zSN}2p!TF)KZ@HW?Ggx(9w9^8TqxL4fnXGc(hkc+)LIKm$<2w5zJWLJ%>mOj0Oa6^7 z++(|+D!lJpVMs^E?d3iY6Di)WKUp3RcWp8c)|}pDEF>T83Ge1szmDv)@OwvvuK5pX}jw>O7nRVXtF2uYW$sCdFD;_BxKKvJ1)F4)d%)Er7 zGJ~Qb8__mVfvbKshpdl#8Aa#_;w`gC&l5k*&I5Aaj{DJ0>+x{<@QyFA-rGL?+Ze4~ zZDHIIfF#3|pw;H%9eily;J{AIs^zEmD)e%HHm9Y9N+b&hrhTZIX9eM^W=yMRUh;YP z(E@ufY!_9tB1G3|(b;W5~?K*6^FTv&)E|JSt609@>Zc#LDK=?D)M{-`7CCHcG2D zHbR2FuGwK;(Z1)#BDU~WyJ&VA{id|eyrNWxWS;JGmA5uq`^nX`tL^*Ap?@yZ!~Pt+%!stI0_CGt?mYJJv8BLZ*klFF|osShRe5f$Zub zoGT{Cr;2?|X$k_~+Y9s$-y33d1W@PT=)FI`DWALTr;j9>u(|Tm@`mm*2;q#pYz=I_ z{Zlj}H({uoM}IP}5{Z0yT_Uf`>s+W|w#bGuUF1fGL}Bifcz89@HnV^CUO%R=_HFtz zBDJa;cRSd+umz8eRt1R_wBvo!Z$6s$UZKw-^qH&$loRq z>GVYh%P_3}y<>^<(CK?{c_fz$s7?eW*#jf2H3@7$f|T)WG+_MVD5L zc*s4obFISNVP`ZernOaM3CIyF#-nCGyScfg86eH#)TzcqNB_`bUC&Rq?*!cMN|$|T zGf>pk{|Ufw?8cKenl93S>8<~}uR+>kpfM?o!0fmY#Ydm2u>OU6q9ll5&{*i-WI^^ico>jXF5tg(GzMasdB;uhgQJQRJRMF>homuuQzEM z%lsmD^P}sazjS=qX~Z>p^$$}-{n8Bb_vpx{S5Jsfq}_fxwSg9a13@u7XyCPqPg&3B z6t=2q<|Pbb*7l`_kMEB#++(;chTaNMOY@M|VwL4i2NQlWQSJZ!o*wnaYeikOcH`|J zi5i&vqnp~tpz zZ>$2Z3-xXj6{XQfaUgx-W@EeFrxHAgoUf*cfkz+(C{1nvDa{F;D7D1v!j2b3RCMpI zAMQ$X`JcC};53y2I`!>OVuvZ0x30K9N84%;<=a9 zQ4gHQSsygds3N7vJlEA_RNV>A*$=|3rpgGbuqDuBn=5iM*m5uI5hTJZlYD4gxGB1e zTUyYG^$719xaba!giis&8;mljKfZg{mqbuI!|_m*of z`C`sn+F9$s3lK*DH<--MmnCgbj=|oH8z+PKdDZ*Z&DAPkqn-fUZW2M)1Ae1Zb%D&^ zpqmHmv)o;ej4{gq}$(WEL!*VK8u6D+yX?nmx;SdtCRjn;@p(GFS2hBSn zczXUGANLxEQiYfgCK>Ne?cE(G7gqqIe9|A7j;F6rrswV+7Elz3BNC?0 zY+k0j*RtK>xfv&2;c;pGRgUrgT=a?CVk9H{d6pMGOq$^X#6s(%zK`6ux3?#nzL%Ow zy@EVEQ$rzX8~S`^Ci~l?_NIKgh+4JI%5Rj4Xgd~NVrO+Qq&4a3@Hx%lfB$1mU9mX^=)!zF^_3vDgG9{NHv-iF@? zcdZpA`XCQ57ZgKXY+En156vg2!zG5?nIFVc?^XPIOFarPZ*w!H*ksBhz7%HVnMY3m4xIJ=C$}H@ z4A(1H)X~1p=bmntXL)mfPCpl8VIeDGA)T~Lb8bB<`chw)$bOm}ysQ%s*h=burYnC{ zEO9J7WM=d-i^7E}VLvtFbG+}+j(A;y09}jyH_?9gL_PIHHJ0G?sc4GFlEk-}*7IH8 z6Yt`v@D1KHLGAXMf5%4-xD1Sh8n_ZV2^*=h@DiDw^*y~%mCiDpUsH|5sgh7__$JS2 zrjfa@Cm_S{t^Ye=v}(gpzZt&&+wWpuD#2}=(4R6pQp(N+;m(fxm^!OY9GEB9wh*2} ztXuytSS%a;5Yr0lMOJ~1#`mVi#(YL~SaFT!Uq=Py)M}yH<94@T1D3lC7gY>g_#B@e zt~Tz^M|;7cjDiJne2X`XhSBdqwQhMsBLbKwDYKJo%SV56VtxY}cdP=F6VQXfOobqR zwKlV2lRT_?^|(MbCdr)0)w00nu<~WT+S2suXn9*NMbuZsON6GZVVnHi<2gPWi0Y!H zjxhzqY*I2Z&Yem<_PpPI8rgxT7eIPuQ8$Kzg+&)9V`OC1evhp`%jvKpw79Vhh$(86 z#cx(zHri|63evVSi=DdeKs3euO8I|c%BkB>w93?fkd;X8bEqBo49**umW!^+j?*Y; z74lTkK#+R};5~8rK6+Ja>|D+oO20}L2M>$IP>S)ZMuS+*Gl$~BYPrSlI$p7*^^-;B z_y~l^=4YPQpY7Gn4g*B{r!^MCTIf59$crVQ3^7ARf4>uJG~0&rtn?Cms z-+rA$eOl=ccMqya4+vx6H2sa4;n*2I8UH7>r3DokVWcB%HPo`aiJC_ANXu5MWdV7* zk2W!lBMaj*s+9X)HA#X@=LN2u-d%KB?M5ARK$`z7AG@aE32Jx{#~UeXbCu}$`9Kvuddn{ou>c( zeF4*}e*g7rw(fAg(yjhjXW;b?P=$Wa%R}<^_6BcvVZEXCyMPTa6mv-CoB8X}|6`qU z#6m-a@3W{T(l>6H#gYc^Nx+-v|f@_;3H_u(XPo348hK(6vE#hF-ge{rf-nJZR{%dekhB?ew#BOJwfZs;1DSv?e9t+1b5Id_pwT^CjAH^$ zh3o3`4~B$2kXeBOCL$D}@lF>;fIy&Bc`SOJpKm2=3%d&b%S%{Ej zwRTNytww2cLLkd@>GZkA;+;B!^jX!M7(+QuphL0Q>rBP;W?DfaZ5A^*tmv?xGG


      O& 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 z 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 diff --git a/src/blenderbim/docs/users/installation.rst b/src/blenderbim/docs/users/installation.rst index c50b4d3267..183a74f53b 100644 --- a/src/blenderbim/docs/users/installation.rst +++ b/src/blenderbim/docs/users/installation.rst @@ -46,7 +46,7 @@ Installation .. image:: 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 diff --git a/src/blenderbim/docs/users/materials.png b/src/blenderbim/docs/users/materials.png index 8abaf46a04969f78485abf2e257a74dd0bd662ec..3207387d1b840ab379284c3b22b3e3fa6a8c59a9 100644 GIT binary patch literal 45435 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 literal 55847 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 z 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 Z+X#`P7kcByrbC9mE=wy)Wl9=){x7 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 z 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 R;!qKAobB;g&QYKEe*u&lyXgP` literal 259715 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
      en*iedw8W&GE%>ctWbloVa| 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 _e!-n3VrD$ z3hB7{i-+NiKr{vdjrO zc)6R07d1INBX;tt0@Zk^FxPq-u5jltZ;zPBf8uJ!%irvt@)JZNI|H1%dK#ZK0%O-QrJ1;f%I3SO4EH zj{YLRrU5$52_P5Wbw5QG<@hrQcKoJf@jVdwk1fK~xq%!g7~_41@)|L>Ygm%~-R>0J z-$_F}uP)ss<)&L!&eV1eX2M`nCpFda(pOHNlUf;U@5X=iDod5T3R>36Q#8XgcxVF)ze(HSA zTl)K{9v(JUG#UBJ+)u2>HYKCj;+q=hpbAf|U@BZ72}+|GxY}$AP5i(%Cam|~H`8q# zhW7-{-BUda_JmX6sr89&kxa)Ru z$TJ|h>Kqz1Ve{}ht?7&zwO1DbQ8(CmYKBn8a$c#X8po3srdU?V?=5y0fy@N`9bqp? zRV{?)t3R@exO(dah-vr4pupSxH6Cdq zz>2!tJmby`9}e6UUy4AZ&5G{jOa+##UMbf$uR3#Lq9##b6vLG3VF5WB41jTSMy{lg zHNYlygIrl)oW`UGv4O7u(t5{d;4En{DRZ4`ktOQSN}|wGTq>*8udz1JZ?rhaLfoly zj|><4-uCn1JlrqNOeU8@y1*N--Y@f4Nct#%d=0}%0V*mO^kgV||I{HtwaGdo-eMt}M11&jxRTj>7F7NsQdTg1Jf7j)L--->G12kdT@mVQ=+LN)KCJGbga&8wfI zh9CT;;A+pl5=CCL&SVb0baWI152xhnFso*27>^L*H0rBAt za`j7*5q5V=#@VI&%x_MqQNSJp)QZJeoumE?&lgvGtg!a+ek+7QZ98 zcF-WxA4e@fb`h_W|pC`@){>?(csf4!pE~ zuH+-~COBe|PCuK!Qz4jyK_NCwji3Jw4#}+3JIBl4PcM|^)@%FKgH&{;%zg5PS%TImmk>Me_u`< zAQ-B9(BcTf3JS@QaYBuq`SsML-%WM~+`C*vl4p4@_dR-juA$#98&eX}-}R$IsY|`4h&dScl zRugFyHDV&c3pfamo*`7%+R&LE_zT z`m!71uL$Co-5-FU!ue9&a^UwW(OsJ-yI66*WEt6UQG*<{yeQJe+cl~TAI--4;5(P! zR%GUhJKPPzw;tknfn`&L9Z11%M`A;WB4WW?D8OQ`%iUHMWHW*{BS#Vv#HwOLOnmk@ zA)Um6TEVTL?-1B8F$`+9(JRM&mn*U``P*&sgI}!fKlk+@@_azmrv7ba0p|}O?ic~X z2hOvelmsc*P`NMedjNX5zu-6Hxi@J z@9zT<33=R+I}eEWabFFu<1ocMcK-M0d=vO-FojPC0XvJpYE+_CTTlXYjF{qT+82Hl zf*&vbi+{!}P3K?V$o$=U`qzAdOFZCt{pzVv^ zted@NU)e9RW}uou%D-%!Uh2&<|4W~Om9r~nsiUAf6pTk~R9*X2H4Tr-($uJfIP`;D z&QMoIS_#_p9QHOpK1;A$bVSVPAs;IrpRj6=UO@c&TjoZ6+O@RAZITP7krdgggmErp+@NGHBiuVAQd7U zSJ z6l6-BA>vl0AUTCxdx%|OcaEXPoWTh;s$I`7_KS=q*7ai>3?%e^x!Xn|c zcWL5|YfX33dqrgaJplei!@rc}g))?r2JGwq{(NiDYja=*;!y3H*8B@2xDS;f3>Rzj zRsXmQf^b+=uC3k40>E{VV17sG&*Jxibr;_y$}}{qqil0?v-zNQ_~1hc8zFGkxc3X@ zdmulvx9gg+?{eRmddu0LfNuKvR7qhuc++3 z_Z}75dygcW?2zBN-=E+2y1K6ZO84#ce4XbxkMkI%iYs1xlD$8@ZYML2OAf&GYI3#t z)PO(j*w-6!m_(3b#z~CxuHvj@LSC~pl&ZDY&4$AT=wh@47yYIGy`Ut4@1}piCX$5f zPW_$4z8b$S^Vfch`ys-RGS7p1i5maz1R@|XB#wsU>NX1s_xnu#RqR;i6*RCjnDR)r zSuDBYW&^rg8s`&vq$sK__|4+`dHt&`wk>g=GhV1LF>1M4*3=c#z{%@9Iue9~Ff=`l z^90yI-6?+E93QL$UO)s6X6Qs38eL4pel&}R97#kHk3|fp$|vTYTeK^7I!X9gZMuHd zud)9&EZ}lVh@$CAzcFExSMrw~&FHhUjzHynTc(pn;wtGmg&->CpZxqP)w{fYAZ20s zHjZ`uw3%=C_WpNE|GQf886LZ6t(M~1udkMvV`>ul#rWU#|NQ*CJg?ht(Skz{#Y0tf zvpMrch*_E2g__+=6^;tIL>e_+w-)Ov)#Z$D>%1f-1A|;X3$%kwF^W@bpix8zpIJ0C zG@zKJTtDwV*c;rqVX= zvG_he{|?|z$kfzQ$Vx*>^>cR*ih5Oe#<9-K%WnQpZDW|^edp14PbCIUGp^aYG%H^8 zZ_YyBgn?wO6!Y={6ESk-vf&XL8hR^&$uA=OAnvhLIMVb72mvo2Ip@>3Dapo)r8XU;zr*Vg&`+(BX-@ZzCW)mJB1rnwySG zj13dCMTk!Rum{fouleRG91-lRD2sCLLvgD?s}mO*GE>1YNJ04E9XE6rmki_Qjob1} zx1@C>9dQG3nVX$I1>YS}{-{1XmugjNvTc;d`8n7nv~}LZS9Q;c3%9Re2U=L-da-TZ zN5iIh@!kZLDJW*^Qe8C;a#gvGPnJ9^JSjETQ6Tp;Qu67xg2!XR*nDMCcT2jy#5>Ag zMhW)C1M>S>_~S_J{TEwWr26|+n5Sd9mX@N8ss+Tw-^ymeFg*-hP?#@ZZiYXAAsrnZ zY1ze*VMJsj4XQ!%RDs_&KieUc}W8|xztDZ{#BF1lu1(?8{AfC zZEcMg>s~TL7N&pB;uT06k!cMx$k@fq)vLWX_e<(lB5L%OUM0hutiGGUn(IcKOv@f& z{+J}i^4I*JkZR?lam8D);1-P^AFTNCUb$2oLar6irO0#H@ z570`U&E;;ZATp99%Gu6V^H47^fO;+DA;R= z^cnUC=dh`5-fE`EM+zI$ZI_XpF$>K%4@ycDKDg^sii*CAS&n1pt`u(M>Qg620fJj< z!Ku*4*h<^9T3ZInxRH@_!;-t*&$TsgDKlwokU7_L398B^MNO4}P34e|Jy;#VS=Qn( z^YNL(EQUx6IJtCmbZ~KRxX!3KDaQsGa)%ar@aC2;hd*BFyX6 zYn+SUv8FcS3awMpi&#|nUMe{Ky@=&2(BrR*pQ-k~7+llie79d{e9R$n{xfcT(ccnn z353KcFQ>s{jfq(N{G#Iq&(bNZPl&-ovd>xd28mKt+|`TE)+_&0J~9X)lKcc?$Jazk zdMYO#f#45mP7NJ|BM@8nk47K!*aRBGU9bwhFBLM*%M@IRcJ|bT-tG>h32&mfOR>eF zYDhg`mHhm!|GZg8Qsa2yVbU|ylE>*{7*PMb4y{yFR6fER4Nlp?&}QuI^@7*YJ}~jj zq5U{H0RaZBgeTGK*RLt*sH|@VX*1lY4Zc?(9hgPgmCd*B(`6O>sGIhWi_20VuB^_Z_qwst+cu z*=@WOPsyHS(v_SMBnFdwHYW}SusZm@Mu3_0Z#}g9H$)rriI4#^`>{oG-#>PRa42Xm0@9+5@EUAAbGF%7Bdk=fv-o%LgaHZc_mI!XlBN3E|N8Uy7WA!Y%Dq1&ap zIT+eQruo!GpK`Y*!(y3>9eN)lA@lh2|@t`DBD ze<<_qbu@Q+@gBb}1VX0X4z><;^frC-a%m!d%;L1;R@&3mrAO z_^ZOjblPtovnuIA3<1jl@cfb?0=2=m)XKns8ckYq4$c!Yd)BzKVXI2L&!g5*=wWoC zc~?{EyS^@I#0K9QAI)wHI~KthWkD~ktM{igqtV~n8+23w_UAAoHSRC0s(Uz)gGe6f z;ANBa{CRcsZ01z*kcjK==&Sm8_5kv?-IrAP|8-sb^7#s}K$EEGK!^vYW1lg%_!ujP zLUZ(=f?%_-w5D4$fuzxWr{ihMA97^AUN6#mT9)RES1gPFsz~GK+5C=e3n!e>NB>|K zQp4a}Xq^2(@`vLXZR6(YY|%SjtP>*y}q zE!1e5Q&IQylL;yX5l59u-~Rnd^ANMStq>18t~u}Nzor@Kedh#awDqnkj%}yl_z}<; z+%*jy)R{KBfrmju#Pi&uI%34-#i$NE<89wXoxipNE~1%z%kuGeg$8dN(zG?SlZnMW z>Ho3T&TIF60)g`QeQi~^f67+yZU#MGriA~uO5}ZQo*%ZmK;J*mj~MsW%Z;+Dq@Q{a zg)ZG|&etfcn_$`hIR0^8a~|(CdKQ3MtwY_zuFlMvpy*R4@DW z7%iq4zF4kA5quFLUc^*yn66AcmCk7$6+!4NrPyZLzKVUY)+xp0YQ$ig|7PtWS~toa zo@0$3*q*ZP@W#Btq@_9<`D{ZO227O_#(41>=O*ur$?#7WBb@k?4JTwma;)KCvBZ6= zL6lkQ0m5hHio>jOGF-f3$ep~`L&c}}h{Np%)8nNp|dBiu@| zDNpRF7EH^0tPsNxw3}$uA;PcMx0BU9OJ9d_P#_m9)3c0LKlGn!r78;Wq^}-x`A$Z zA!3SL+tDPo>m0K+ecp&t1ue#jhyo!sjKQtdSMy__|CI`NbtEv@kB&}W>G**CV>Szt zJM7|uT+qs9@dmV;&R=*n(@(vUtUc~Q%l=6lErRH;qzqW zfqAtHfP>FBddNK?g9b8iRRm&im?`llENWn{%{q{AJcP9!!1t)FL#uf`(if6vqQlsT z-g8?7Gs|EYRzI!lz(q6s5JUg_etEe)#YYnaeFwbJj4_I)PEJFZxoY?eN|x5%h$QDAJ#*5#TwB8fZv)#RIos(T{zYb20yFJ>qF!6zY= zm&|T<{4J#?b?`_Tl}IuGeQF>lgZWN)&Iv8Ub0r*OZ=)gd|3WNdepr=*^COZ<&E5V~ zn|x5}f(v+J`v*~PXkm00fo^$ZLs06ZJPH|bSd<(E{}z}q$S4_Tpplb3QMmm6x5vIC z0!ctKsfV7lT>G^8dJ?SG&XB!2Bqh11q+NI){T|NoJK1r3BaSZ924vAlaMb>U3bxMm z2-Ec?O`f<-p@oA;kEQA7ncYYl@MQC@+uMbY$Tt5BT!46x8$#qaKpKNpAHU8my|uA( zn-p7PK;h&^`nkgz+V(N1@&Qmf2?EKbfkja=VVR4U^cTU`K!XGQHyG1^WFN@Tg->!= z`;J4tCk&t(6icHh_&EiW??PSTj}KzxvIzd&h7(35^Oo;8oz zdxAPf_?(sP<@P=?Ua`U3ff8=j(Gd4xLv7ceCFdjQwWkPgb%h!2QAojAJ#dx*m77cTER zUR3{&ukASOesrTS15@}3nY{TE*#DRLyMzzFI(1PUAua?!nT%XVCXVKmxemCvFGt z9evQC1PR&9d_KCGUHo?sTxamW319flp)hji3)sqohY!nvdjev1B>po6GatBN^6~Nc z4-Y@N@R7Q{JUlrW5_}JKQbi`M^f0r6HKro|>f+>ND5UB^+&WO1kw6Asrzue1VR~m~ zX1;gkzFTTWIo0ef4AD8@_{a^gJIs%=u`ESKjTDJS?o_@oNHQm@m;9?S(Hxgv?^2^Z@g?Z1RsNOMq(Jd6CkCR86k5V=>sh z2`xAwcOZX0f(Eyt{e!7#<~aw}#dI&WcSWN-5GTYQQDIs!qEpZUzZ1 zHJSVUM}p`w(t;GWrO(}C@_M$qlAS9%!f`p%ls!JFTL#}Cz}V1@C;!z+`#Ba*FQK{6 zpcMCm8@*YbWtRHaXD9Wrz-OH(-jJQf&8qYu8rJR5DYeJKo4iOiERdeU5AnwpZ({Tq z<7RX(?=0iW`!QwKuoA2~WhNucyV!{Nw=O;5m zxxv@3d;?aMLgfAfF7h1gf6gUbje5bD;w_vtpodUDA4qF&TsY=Nc3j|nOS^E^BfNri zJp-i)CNO>Xnon1rFt*D|b<5=X6>^Y;OWE<&XzG5-WE1A~ z;r(m0$W?$1!(r-9$tj1~^mjufkSJylQ}wM4C9B9EhYWv%w-kI9mo#^-7gau zB*Q5IYFKX+L+^hd3xX!w|1%I;zrWjZ;b7?ULn!0gm>=PgAbL!FAFSAre!lSGD|>F7 z0q}Abc>gRgXYt4Sq0k^Qhb$~R?5442)(#z$Wyb(bvw*;2-a}nTbCIPtepRHHka~0y z`^P4?cEy>mFTpYk=4VJoB*HdLw`yZINXpE7=;2Y@`|V)F^j+NTqwPGcE5=R{z2y%- zaMyA5EDDQw`*=SR8M^9?bq7AiPjlfx*c2U6_e2j4$_aD1%IkgA!08w>qm^XOzP}Ls zbLMzy^(By!#Ghyq;!QsDzdLE%Lfi0Z6LrPXG}J35P-VB?v!O>fV0_W%Yu-7L7SD{^LGE$x$ZNf2 z@k+lvWMP6GcI#t03ju|IuQ4w4>tHWbx@@%f>LyeSFqL!y3)-2bS~`q<2pEn#ar}v7 zK~7CkR!kQ#xQopFNrD*&f~k@2*ie+FYV2vGK$`#GPWQCsR1)dChZJH%9Y!j*v%r-P znJ$SOuo(XBhr*Yw>ATd-CtEnm5ncvmPNvb_{Wdg0Q}|iPn;YP|{eP#e4E2TsR)=>Y zI$-N)>~om97{rL}KAxVsGbxBKt>AwNl7Ub&N~C!Jj2dr|fyZ^fQf&A4;8lZ(kO)i- z4v@j^ZnYi`4g(L_kO6g_ICjmK%@&BcyyrcY6}%jqeaQSn&pF)J?+*o%_0+cGR&HW%JNQ2A2K8Q687SZ`?V_SeG$4EK8`$xsZF+YCMuq zb=%(lS>vR^TI{%ier3y^_rmGxj9z?#(Ub`0rl2zRB@-SAtWY^=u6wAhi;IojoqjK@ zhAdrOw38eS$V=8d)Qc&W2snrEulsayUJ+_-`tq4D{d|$)C%43x@Xp+p?MBRG)|W|B zyCTy>4@Mz3GXDb{MXALW(>n5nRa}%-y1hSO9D&yLzFdeBPu5YBPR-HrQ*__*_R%n! z|KgALZg$6CV|H$8>D=(zkH>v5n2{gIi^$1B;l0Hv^q~*8shux}N##&xUE%M3VQYcD z+!qb7gO(L*eyd-MnK;{75Th0T`8x;3ZQf#?R}<%58?GHY?%?mS4AhQ1okHl7W@l%? zdKw!u5N0^1dP7}9Lu3+FS$VntYH!rule-R2y>{-sAqKawmT!ZJ(x3a*%-3ZOY5iZ2 z1bn6#mhsuaTBbEnD8KZ*Z&OW8OMpe1#o~V#wMPpF3z68@UC=cV;Zb|;rAxbnjK-~7 z&+w)U%RU}~WdUyO?0X&v{n%c--Yorxn|a>~wW?kuknCH8oR?_Hg+JFfO4noFTlCM-%R=!*EtxzE||c63)tE)wXWA7Jt7y zN?dXh0XG154-Wt|%WGT_`P&*A3U&e(U=O#g4CUAPqSG zqhdfGzHxCOF}Nzn@R!Kl-F<)RSrk5YMO_Q*4Zn8U97vP8aE2Jat=yTy>6I?d7g#1{xlzOmzgJAkWZ;dUJ#; z!l0owOzYc3uL^uvzWU*X6|hKU%_Ici@<*g&=Laoa3swcds#EQHCaRTpwS# z98sbXl4ncAwK>76lEm8PLhCMoL7TZR{9b1MZghx?51ECW1?rG1e!Mb9wx-R>zW(@o z9F@u`r&1X9_DDTUG%FM?5Yp^T`z2Aqlsw3-6B7jJ5CY+6tvZ zyJ~&QLn{BI3ANk_iZvPW82!OkquX_(CpcrTBqZ~eE`8VOFqt>Q;~U_i4BJ3xMDImK%v_iEL$*V9VI zS5}zd#3BX9Rq?2^yPqnmlvs-_-3`A2w zn>O;84@Rz)|MO}=PD^&t7sZQz?;@qEs+red6djBVWW&>4fFlf;K_}8)+JE*K^I&b~ zGqozY*>~l*HPk!LH7T5 ztMq1Jq3zje=rx<~T7rp;Ab)_OAZ~5%GnBYa%^-SAqKW}MxAqUxftjbuc6tJY*8#_# zGPmI^NjXdEI!O%^POJC^D`x zu41XaKO2qiM*saQv_k_iUKNnS{MP)rH_ejgukqP@4W%WWgf&(f1^u~ErdfTx>HwZs zl?O zxw>4twg;6a?fx7EA!d;Ng$!u!@m@Hj_t|yHd^VeroD7!ob)E++^wLUq&nDDFIP=od z(-k0q6*k2+wY7XgLcx&I3a!47y{)@@LVo7pzySXYWP%|(De!vGergol-K~(|#F5ws z=BZG1?b0Xg=M{U$HUzF{OX=LFUWy^tg+ zY`e|PYKG^9iOPGv@izB)OlOvsWAHEEYz?li<~nqhVS?ibV7VL#T+gQ#n2>Cn} z$nwMDeq5G+RquT~ImeK8>OWzr_n=%$9-?+nPADK1cyRqWqAXMGmWD7GTC2uuKOsv- z5c%`Gs`hQw;_&?YnStSIAcxRpYJ|2T}G8FkxDsoZ&XRG>B^Rd`CV4EQ{MBvDyeWmF-OD_#Lh^fec_ob zV@1&?Mg721zt?hsYy(%2F64l-q^YsN3Zn%E?%g{PLx)OqOOQ6eg~aH< zGzGDf$ESq zngFds%efVj2Z!t);jjS&aR3AVIt)1se}_Wh|3|Vz0eeBJgz2t!UcHCSO^(V-VFD+% z0RhXsJD-$hKTX`!h~EvZ9Di&nV&+6SF6zTp8UEvk>Sf26pxQa}6q(94_6z+FFH%Cl zOdhIhVTn}W;iS=x)@$cJvt|r+|D25>LAqrpJV?fs${g$<{YCK3!j5Q+8C!~r{LW}s z>zmWYua++AWK^xLo#?R#ya_tBS!1qa2_8<_ImQe2p_xf$DZD6JTKFlwSPD*UX=x59 zoof5|OD?y=&G8R(j>#Kxp1pjD(!{v*d-xe${!FqfCQr-0#Kfe|1!`-vuZE`fhdzbh z8!Dt{7=8k+e@vXV3kprCIo_@Cw!a0m&f(a?AO{bdUvrD z8HF;)RKV?K0(%PnWWf(MWq=ghi__UZWEu;en3;%n|Ba~f%}Wb#>S<$sEO@b z(mWI-=Z zR{RYWtGqgg5gW;Z`!992p#*Rk_q!M}V8vh=&idCtkUBU==rUwk5lj0UE#r;EFu#XFP8lh-GH^5}tson4!ZIcf1i1xqa7@2CYqRUbIvok-gv zq(5s?a&kM8(b~)Kh88@+lb>g_J6`rUE;(MGI3E0rdrZLMInIrFyz|9YI*$8}=xF^> z2k~yt@TLycFI7^3w6L!3-j{L9EjNBQ(j>Fmm_^?QS5Q0QG#++e|x#@T((E4K_Mc67o%n;Bj!&$ik(c0Nmz2GKDN zNlSIF*7I3#)ltSo=trdN{Un~-$LSEM59i?xX0eZPcK!=js%w(+d~F<-fDuF2ypa2^ zt&9;nDJiX^qeEh3!$|&9xg_Hm|C!NN(Vg4V^Gnz2L;-;tS_G_t_Jdp zAXdZKeCc1^iol6LhO|FWTSOb}A{hhPdsI^DR;U+fmxBc(hTE>@n-H$i3 zN&oWGnP+`b?ft9!YJ&NOq|($#gCrzb2iZm4D4pz+2xsv686)|xi6@by7T|)K0(bu-M&F2Z0fWm+8NppD^c0w!1Q%nUX3-xBnMXx-?>O19lI1x6h4 zDUoqCs)O>4tCjT3%^K^NSH>F`RTOrT#`+AiW}$SY8BV(2u74)qW5=r7Sy38I;m^*z zzFbevUcC>%3gK1ItF@o{mC<7qxm&MDYisEqCiw*2nbj>E*ZtCDuvR;7o8)1tfo2#H z!BZ*~DzHrHE5H{V(C5F7PmcMfex#^?13u9`VPW9mf_&5L@;cVy+jnSdU_rb zzgM6n`sGERrB2jP@<}76yh#victe(n57_+9dc3xXa-v4usfMsUQ;K7fq)lhqQ0Ff* z`wm=;AQf_8UK4v37Ns@I4}Piy9V#tUZ- zd`qkRYIU4W#ovgj$q*&EG5UM2_>#1JJhbm^wqLiBHqt6Sw5**B{7XVe0>RLxvp+94 zH#zvmOy*t_Pexg;cc7E$z|9au?^u%g4WRDtuK}-p%e&}06yFi>$vxvXZEoZ<=LX=j| zJlf&?AiA6IZNjbj+ruP|j;gbbU^EGveMK9Ie?rZX4BOjFH=}4f--y2?*TGo2pVcYI zZEz>QAVP&T5bg|s&wx7+a94iDa$@T(EuBl{TU|Zl&Yv-`FNVI*0rTw2m%;V%Rnya_ zH)Cd|Wd)HVdZt`OOBzv^*qh+7~F zkZW7HM6J0eTwX3Ea<-Gwq@^uFCpM=>`jFLpYHkYU`Mvx17N)}1+EhjA8nDU=tg%Cw zyeV3`WtTs;evG`;$Nzne|3Pn0^vrZfN$UQ&r0R-rvkmXjC-=GC3xZIzn>^5r#j)vq zsiX@{sw>mkEfd0##3SJKM=#JKeDzO9U1hdv2f#8w?ge@AKG`Rl)n3i$$RkVj5MrMf z{K>h82PUIuTJ`IjKmVO8)UOmeoGW44b`=wM4oYWrdUumJZ*2d*JH^rvUK1Z5jwD~C zwTse$x4KMb_<(; zG6W}7E@;tYeHcuF&7VE9=XpGpVMkEmBmL0evs^#*&@am`xQTt!KU?uCG4zgbdLUq0 zs1Z|9o2&mh(Ywg@wYMExg|*9%@QFn)?ub!R{t_{DHYd4p&)>gU z{wARx&CCVEK0Xe}+29>-)~=e0VNQ%1RY#$Wj^_|@a>Mw|>ZiYfN^&9tKFo66+}uI&5r!|Ag66tfWy9T3$eXC^3kBGe6d*xQIRo zO=YJ~@HzhB<%Wd*Y-_$`yyWAAa}6>DtLd?=tKXq$63}BR#X3P)2UzMN5Xg*-)LlLc zb=7ZtG($5`3-6O6R7f3!8I~MI4tQ$I=Wm4V*xsLOYiI@hPfil9KxQkk& z3zjQ24f>CF^Nu+T1!?`vQYe!tQH%|334I8i@X$ky)QBVf(CeA9I2@OQgY|+e@E6MO z$VdKY8%1=)YF03OLi00wLJ~v!XeIaYea)L~kG`0uJXj>Zx?0N3$!EWbn?!qTZX*!^ zzmd0`v)&#f*_plmf!3(w1tICK^lWUm_b=C2Z0=Ji(!Ei(m(|wR`c96HiZW&+@rIJl z)dSkEDZjs9NA-64-L3u`k^Ob1%tCJ$mx=I?a!H>iC#o%zVy zZ}xfR9bn_h*=o29SnyBH%ya-KrIsdAp6fhpYuS)a&6+RxM=K26BwQpQ zi_wrf|L$YYmu3{Rvxyj$hOuK7q0f4kO;=?)*4*{xJrGIJENmb=V>NhCK`1@!p{0#2 zK^WQ==povk%3)X#&~`ZZu}LsAV3JTkG-N4egOwL=pak#qhDLfecJ9xv%|HC|!+b|O zg((rvEeOfP;OG2^)=7N5d?Pi#nlL*(Nk7%%clxSMN6l*ne_PZ!Xw8HjRfs5kV-d^1* z0TNCIWU>m2NqoDkGxF&T#BPG@&ENdo%V{rbT+H5Xv z!03j>joUVZ_f#1Z?=q%-yG4d`D~8fqBa$_vtasHaKrgm0@P!~|>;1NYPt|G95B(Zt z-gcIv8tes5^M1q+y_}l5+xhckdXXsdHrbzBad-JMOr%|1i51ec(U{8Hn{Cfx#g{LOkf(Gec2h`8I)>=E{C!HIIZ-NlMOQuw>Dj@Nd+jHE0n zyt9>lWsb_p$%*~2Bof^=TkvTKtYN1=b%w2wyZm01!AlUSsobl~FO zVJmq3q5!uTWjo|5NT(3@gDky+QSk4)Ls7R*zwEJ(>_U_cFQ={Y<0l+m96t<0a~Dwf z-JpK@&Vly1$BobJkaF-rSpl?3c8>P4qi&uO#yM(p-|MUYcE-}hXm=;IC6NC-?i9Vf zTv%ArU=x+v!7KXpLOZOO+_B)Fd+K$_5C7eoj4}=jgW&2SavL#*CuCH`UuQ5KFuFs# zQCLeVgx<+5%^-VVWSv28YqrqX`WIno*}F& z^W@=%mfp^Z%~ez2DzD|f2y5N`DJRcLj5F1>+YvkMx-UUrT4b&$X-<}zi!CWg8-YLu zZG^3@EeHdEj)hE}bl;{#<4qSa+*zotnIAUyKQkV;iPsj<(pCT<{`+@aKy6cN9==sD z5-8)XMJL4sHXf&Gg|SjLv3 z%zX2&@ozqhCEIgiG(^Epk-%R>Cx9(Y-EtF=eP(OA?kX>i&b7WfV|1s})vfWfI_xaall!@~j6(a? ztRgCQdL9>it#Q^WMh%y4rkhNW-}%Dde<%TX60eZZ_)CfVT#JwxG$ClBKlm+$sM^_{ zFcocn_ku;bKGOj8Dt#vBn{ZN5V$r;Hv2R!B3gSL6osrA4lz;ZmpFbyLgqnTU*LwNr zays)WS(0}e`JkFc5Kh7byiU_!)7r@M*+xGYq)JvhXQ-YE$;3szMH_SHsWt@vEDYCbs7Cbv0TL;V;kf)9-Q{mMi*V+5p-y{<1%)^|N2gNz} z?7yO`uZq-(qb!=$n4fxH&bK+utOg$bq>?8Ie`Q&BpfYV*=bI|1O|yAop=Y%;xkIMM z-@TJynj+2qyYu_ZK!$h!fxU!Z;qj)is(`+9Xt+k^-65+`;Se*RFN@s9sW9}<)>?K7 zv!k6G44n}BH|&$cj$4`NB9^X7p`i8hw$q$-Be*UDe|zWcg}5C7Hy!xL@4sq}woHCM zTM`14QODBpP|u{a*@>r5$WmtpP7ft(T4IAgSf{A^c6Hs!VRnVkv~i zL0T-m2TUN2C7E=QTdp-{&|se3n1is@lcoR4*?}@z+YW!d&d?)Li!U11TU(P`EFy|I z)88$t)$9blP72iO8L({ctBq0etWeTYlBexENpR%&E6BA6&U|_m#*A^b&vw2zHI|gkuz0 zQuJ9HjR-kEs@dnp%q%Fd({`P8Q9>3>np%uDm24KHU@>=6b(J92&4VB`8FVxhnyM;= zP&)P9XlZty{jZ5O$HA;vUzPETxEHM%u;xm=+Wsui^QOf;xr|c%JZGG=`fw>ZEr5r% zrkxjIG|I^7d>Wy{FbL6=c@%$~^xAlCYazMh=?__cf=mc4W%%f~GwtFLk*Ek7E0|!R zII<6o$#V2LFa9M~%{BAVEY^9F{{e<%P)ULF>l}Uf`Y2fvhm&Xp&$_EAIYI^|JWl6W$dvt`(58=NVp@pFVv8&ecX8 zJCQ<+(M|m-b#Vr5K0pv|VWYzCu*rDOe>Ze=qo`J5{n1w|9wrhT<`_!6_l#-XK@w#H3V|fq%mt#o$*gU9th(Lo z&o*(-jz@hO?{PE2e6wMTr%-~113{`>joHb&e0ZK3>u^yheM(Wm^+}zJ5pufXXF>|B z_g}p(dh{YG&0th8l_LthLjH-xb*VMAbG>0)!vSObg4qSpXwy_fs}6%X!mj1^Kgruo z`Ps^ceT?yDGxu*7bH;y{p8PcXFTdD`2;EBQ#W8cv_gZ9^0ELkkCKoZ)fUyOYxOKC$ zKW^V$9$%kTOt0SH{_{`gz2DVZ_ zV^qOg`$#L$Q0hAGGL6b%Nd*}tEc9}Wze5MtgO{BA&=?~kAH>Q&yjS~nZ1>&+b0mHI z0ZsK5E=GsdHG`xyr)%|$;Xzo?RbGNk^XgGxn-A$yi2Mne2!TT=ngdotz_Jrd2fDxU z4>L;4@9}@sZyq*eb!yozoj1=4s**Y+k_MY&??o8TnY3j_#N2 z?QKO_rt};&`1Xtp3&x^@DLL)yhs&_+EMk%Xxfjr-boA88g6A2uwV!armo+p*fNcWg zU)Shvd=R~ljg`v9@q00W;%VE#x9c=|_#)-v;LVTMgeH@2 z0BD?DLe#kzOot*gg6Zz7Q@*RSydt%(k0;i>DAt6Iv+azJFue{zT zD7)R0YVEw&6#RIm@Fq@%NpJ3BeKH!(Sh+$sW|TlVf+hU1WKyo4qm z@qH<-LGZ3D#d=~HHe(E}O!lp$HRo}I4f!YX?6h|Ky_Q@&gJ!mc1Ei7i+54UnPvzGf z_Ly29aUP*?w9@waGxwBQ%Q{Ek9~&J$cdiLtyJ3&fss24Lq3@|0^_Li~t&5l~*C-Xz zp{l-k!@k2V`FO;KhZ6T#Od4xP{NBF9vvbu6?BaeaJw zl)q>^vm>D@v!NTz@cnBImm;vq;9is_>(0ujF_19?QNYxcZk#&B`&1nvD-ue(V+MLm zth(wEW$hVX(V?9IhP8yBu>pMS`#TNeA&iW^rvn{jNJi$a_G{zNK_aG!B==zle) zDFVTJ$5c7Cs~`rQ-YescUZ4qLdkWxYfOuJy%s>8^;kLs#CEgcl7w5wy_EnSqAy{Tz zkThDTyNdt2h~JJr>2U7GdcxSljqCq3%_44_WWWvV>B02OcnH300|Nv=5}25nK(b+M zOPk&Edgc65GO#*%Q^vj&bBv)k)zrGj%qTHa;+p%IyGEHNEbbM0M|{V!P0pZr8D}y-O%b>&mahW{W*uFG}&( z;Ox-q-lgwb1(sNx&l=)GTnP`;+eXh1*I{|C&P7q)+>GDJ zOZ5K1^6@LZ+lP#41`uHb5&>|M=Eqo>h@|i2r4%0ju5?>QKAYx=f*U0*tU}v^N(lm8 z>?C;_2+&VvwZpWvE$Iw@KD__+;HX0;XLW0AW6Zj#3eaA-opI6I5R}qmZgkvAnzztvo zr?+^^>e`tXXcTGdm$)3^;1+a5i>08m-Mw}TBj5YfO;c>n(P+|aqQGgNb|^cFA{>*3 z))Xfhw4T}eJqVPTaz6A=Pm+`|(-JyI{@%07d05_%5nzM9DI1Z1RWg-}K@yz(l|4R! zGBXMM#`e$Axavm-gy;2d#j}Lx@7tz?!1uAc_jZ2X2x)$SiUPkO9ig3EevUqVA1MY> z-0g{Jxi_`W8h|RQ@@u%&JvEt~IMuReCEqf0emCnz@gz8jW6>4w!;!04Ixx7l=ZcDl zI``>ztNB$fY*W>3E`QLM4jueOy4oiJTLFeTh^hbj>y^#jH=yN9_S}Sn0fJcYnc4^S zA9K8N^*sIUQebIQ+`Q?%XJgHx>kF=!4B%^V-DayNSn;IOCsh#GxqsIt)g z>d1V-JKop%M(gPxnnf4MWN(`To@=xyQPJ&YhWpH2qKG6#8tMcQ43}5<)PwE3@6j%3 zPd4RL$Win!b+t=2ykQduO}djfwlnX_k)h$Z$B1gMh)F;mzUZQb|Yp02cV}^Eqqo0@Iibj0Y zFU~ULW~P1%O0JJOnz!ob_C4q9if%>Pv+dv(hA4nAd2z27KtITr;_A~iGE%742V?^n zdloot6Ws&WTN?QN@eXX4-UVW_LTtEIMX&Va%o0RusghTC)Si0It^Oa9n zXt$_CZ}pm2OTMfM`JNiNIcjO>hFp<{dRy*!Ed%02`7JVF6gXMntKd1iXa+of7>slz zfEj8}>VUKqYS|CwK@vr3W*s{J{NW$ja9tJF??$pp;i|tJX1F5OdHVF_at8*8b$!k{ z8G4YUJn#)`u=cK5Sy0Lex6@!sNL5z4P6HZPfC*TcC21E?bKJ|4>;KCqGnF=UO7l+_?BYXPx9jZPVw(PCoc-$`VU?r z37Fk6+Zl!=JF<#DLF?t^w*d1~fR*-7XPG(;a)}@Rq@4h5*eWa}LZ|O`CQr%fTy@{+ zo(=V#a$E3$vy>bn`JI3iozTW|90i>w2S;tPO)m&jG$Zh*yX+GiY>d~sdb22kp9p*x z_mM}5T)nSjOj*~+0MNWJm6EVyEsW9LK}OMg#;1sTTZ0`Z6Yh&|Rg6jt=f&l*fKTv! z4cB!Z!6O1bRN~H0zL7Sk_MrOn!4B9-q`#*b1l}sFXi>d^fT`8a{wOd4fF~&_$&V3R zS5L2fV>EX*vNrJSU(Mf{5wDnQUIc59qQuI?j^-ppz+W8KGX$Z{Z=GQ8b4GOZ_-y)A zIDfjR&w#zLL7e1#&^?n4r1}H9^-#PO?Frd`5o4-vV3e!dshQoM-}9~A@laBE@5_wX zhYb_mO>RTet-C-x02=!Jw*TnMaOAkWP9T3us9taA1hIq+DMOwsFo{5}n2}l^V8l>R zP&k3R8N5R)NM#WC(ed587jk^;#>K@|c5w{h5M`^&Ui8o$fwGMq$`iM7)7KsvxVk`` z3|CjSesM*0JR>$}0nmY5czJorncX)G_mK!XVvbwDuyCA`;ppS?^YuEL3F84htq9pfuIi^>J)WU>SXvyVigGu>}gGk->7BV-H^g2r{!f&eqrYX_X zh$@ETA!Cl_;yvq_2XF5blxbj8xxGO)lQ)7L3Wj}K86Z@P4#+(juQu?92#?=J6PHu)FB!cP2Ojx%SgLP1_$UGvVE7P;>mzk?U~-<9IElpBcin6@Muj0FkYs53ESfJX(z0fhmz z_A|dKH8XW{pt0)SzA4u9SP=FH> z6AuPFT1b&5l*k=h(}t>JNAQiC`|+hd7&+D}%naw)QkTnw%&9+CkP1lS(}v0aJn$et zW^!rLcV}`RDP00T1!P>a6Vjv$sO&)MgY0MkmB4KQDfi5=)-^DwL@A?lH_S)WrOvF# zARt|6d8YP?spR~JiQgxMs^C@8w7PTJ$jiAq66b`AoxyKj)BYl2%@-EG#C9g2%nARH zWlk)_MMW)0z>80s_MNZ##dq1Kh2uHhD&lI>zGR)7;_t&2<;$)`;XUE6K)n1+&kBHFEpeLBDJp`o|#sA_T2j>b2w$} zH*^UH;WJEj4`n7p2OQ(lcF&Gf8e8mE4zG?NR|Dl{E1IDZIr6DBccY#meD&3Xx)f2T z;`p{(`s64tstmF0)#h&n!Lp75H_%PKs(vuXdZM}CKuXN(MDgn1OSfS`xpAk>YDZ~1 zS3KWL>^#vAHyWM9=yVMiWa~9B*6G{JlUMiuHobp7)ipQAmEpVjt);N_f5-%1O4sfH z0r2)Fx1K#yY%dV{fRdRh-SpcA*p zAAj*6VlXWr(!_|Awk&+iV{Jm4Fu4CQ-V97#^>6D9Mrq}slzH1#8{0g+MKABNsvHUb z8fix3xh}ql1KtN?nveezZJ@O_|9hZ1+66v{FWq^7W9evSX^FAnnsPhjq_Pj@{9Lv4 zfd9wZTLx9Zc5R?^gMgHjGzdsZmwVa6GUVPN02*0rvHha3W92GYcW|D)zX6!<96Jc&4Tkm)nb+nCET|}WM#sk8 zkpUaGuNH3um^dXqlu`M=+Io&N6aDU{7}33ES0PiE&1+N#!67;ppT{Sm^Wb>fup)l3 zzS|VtkFSO;&PeIWovhclfmdDIn{3(c>`&YMNhiPT$PC7oE#|x?g{HNJENF6piEO8` zexAoZIgxvWB0mG4l!qf5QGjBf-Xx7^(-KY;$aw7}dG7QszxbO;Tse1X>#`fj2pGul zX zWl%g2A#x2s?A8oN(DXR%)w0;xKjrgZ;tm?tK0&v~vB8oo2oJmTbn+)$i9{Q{)me8q z2?;7?YhD)q^u{zae!*r6`3C-z6O&q;<=IdLqfHky*&(ZbPM%hW)H=7tw~8q!C3p!g3e0n>Ya)^EPU#gT&%(p zr#EgxOFAbhlhL+4mN|QRiSP?Aj`xdMKGF?8-)E#x65r#D^p$>#ecP9K*Rxx~ap$KP z1dPvb;9uxK3S(wVXB6eMi`%G%2><0f)5$k$1L^JWnU%oI)oCr=1IgM%*#o&Y_#y!0 zNC4uNzH#V~EG#Tg0l|Xn^~q)u;3_ylfj4{?(Cr3rv4Wu}-aGY0R*Y=1FI4rl+uqc3 zDx-J8>sE_~>R6+0)6DPeOHg{5F2d;VoK?E3kQeKDm^mMLs+7_G_WJ7EyULtbn(Jo& zm{j@1&z2B_Zv{3B3P2fIJ7+(UFfvyf&3 zwYk(WV^7*&$?uDt@woctRr5c>B)(5$W9_JoC~s89=~c{v^5iE4IU@V4S+EJAztSb& zo7fh*GH@1ab&?S_$YaN7Bl%cCL@%JL*N)(fa?M3)zt!2-Gl~0VfZ~g7egr>&;GuEMCB*t-ziquHPhBp(S3>gaZ%JC2FWl-mlto3G=5P# z*4fy0^Jg-bHE*PxpP!iY*7;n*`OuZMK0rSadsAxbGuBINaOl`u;SIP2pfTNShEK9( z(aV9TsHna3ODM-=VC|OXM|Sgt=)Kn&B|+tC=kvE{1fi;@r=Of7hc=BEago)1^*^ma zqT37zu;C!OtPKdgTs{!ZE`L5#axr7kO->Xj@iYu<-Mt=Ugx@Yb-K|+Tp&1}-kXiPm z@1A$On`|RYizmVcZzkAC9THJy=FS za@Nyh>^;a(b#88I!Om|WeQxLLo0hL~|7<-QX^Q#CK>E${Mppz|{0juxxQ$S?A*1aZ zxuy`45|q4k^B^Pt=FGdM-ycpbJ0baUUq!KdRul!rgJc*2Wf+D!M7&pI)ASD{zWV$- zK_IqiPS2kEoR&hTBe)6yj*NhBx@;!^ml#}HDQLk2!ELdGFTwd4o>v*)3Lx4;n zY<@SGyB8irstEQ4$Fb1T@90w0(M*6stsQO;t4_T=R5dT7@kqMTjCu-XD(r)YL-%Ne}}w`E?>X!&vJi(78w_4CvyAmkGgGrBQ_yhTb)mn zo5THUlYdGHTvv%l{k{ghkbs+0wCwJ!V#@q18!9YlMdU7%qXI(k$*;xm&Ve%~ zv^D1L?$!2ltL_gzu=EWMGE+qTr$hxsOLky*lYP)h-x# zQYkJufj5Z(2k{PCkTEL3B>lyiufLVRi!mDnT}u+1s9=GG{({eUh7;EI&j!jzzxW7r zf2=I(a#0`u5+vNC_3-k2X*aX&hD!U|q-i)b+wQ@TXi-rf-#w|wx=uG;S4yN|hNpAf zzFlRqAdl3wG=NFj6;G&U~nuZh9)F^Xc#Kp{jCuhyo+JJYJ@RMFmo`tVTVRqfTYH8iUWOZ%)~!U$0+$IZ%uL zrhjemC&UIb8@rgm7}d6UGCT3oSgeC=%zdsz&aQjG^5M7Zyfs1;kkCv2^xiB!0dHWW zzjWSc1RQ;&JkE!6&viaLMP@Mf->ni|PGnY06lCV%gJ@yjGwqcvLTyj-?f)+Vf$64U z(4T~2iu|Vun6MSn{gfRMRZ&y?Y}H50wFUFhIKO~Y< zHUUOr_=QeE-fr}pH-b-neg3VyOzdGBpz=%fRFAua=uh%$>ao|yA5FM6v%)9@2{9?D-0A>g{~U`dw#zwjrNB24%gT}=2QQ)$EA_* zdXta!IsRo}QA8MKpchewnb?hAD;-_#SQRFnJDMcj9*3`&BRlLneU-SIC~pMJh_##f~OQcC^6+^ zc?Ig2Obz=Me(S9{S)Fk-n3`DzyLGO~DwL|OkdpRbK))L9Dvn;$>t^(~gukSU<~fqP zV*~^Ir;+`iw8EpMf}KrK%Z|Pyz1fjHq`dalw8u%AXiG5y5F46!)u(3Lk?zY9Zl2n# zB~@~ohiwdN*eGDtkfW1dJS)piw8!Tcn2)9@(~F4s921%-0Pc;G&F7a_iE~JzKlT0H z-k1IVAEv+6g^za=qUQOWVx7seS@um{#675tpo6N;g+zuMl6xq>{*`#hPP%<5_|eet zKdQe1?f#Ph!l%Mn`X-e4*g-JSd#+zPOS3;O}25HZvdUtNQQH=?}|$SHi$1Vy=gwsxiuuC8T^` z``IU}6(BiUd?^T%V~lq7J}2+HxuccwviO(t%O=Gn-GvQo)SQAR&p3(lSY$KlL#yLo z)it5VJ#C>v!)sC(Rjev#qh+hzd3tQ{Jy2SmKHHvZ!L`^F)t>skm!pZ_{R*82;*Vt5 zjNAJDQaOi`>QA`yxxLwnX-I6{4U8NF862dPEjm)2nh>F8-tZ4V(aZyvN=slbrsRSX zr_~Lr+*1`Y1-RA0R=j0zXNL#mKhS~4W;&Fn8R(e(nx1Zjhr;$&Zh5qL2uFU+yzhv; zFHIb}-MG$2%XNeHSM>=+w2y5u({_sE4QAgyZ=K!nGnOV(hoQz0S*_J%kr% zT*}UR3rHofAsbBpL|P+B{hH@x6jm@#ne_+x8kl*w7Zn$S0KIj2pHEADAteK*Oz!!* zHsYEy)m1(N$a=J*O}5y$g1fS3ASHhr-Aj(3ZgCHM__FVJwq;Z99fDuXM*iKIF+!7z zftx3T*Zb%vU2USyhkA*Wdw!*z{Y`$}5_(}T0>SH;6AvTMm{J>i&a5=vqOg=tk6F34 z&_J`KWK+FW5M-SrIcmsnGgza=VGc5a`Vx5b0o86> zajsfPo3N>3vu7SWRL&bk8s4VV=CM>SyNXXQrC#_LbLAnaWo3wb-LN*XYJ`f>r5CO| zF-LiU8v457i(E^(4(vJuA_2F8?V3xjIUtG;KQthe;@U>p@t?JQUZZm1wmGAzr-yWQ zsRadFN{di&1mf6sPH}VoY`C@@N$w9_HfA6`d1PB%Ep(_JYiB^V?I!0qiG4F>ZDCIw z^;LV@4PNu@9>uq9RlX^!Y7Kh5uOivHQbVa45;Qaz*oU%yu=E-1z+KM8E z^b!Maf>HC9)R;n3MyHSOco)vE&#{$RES0zIvh|B!Ra%9aHMP2(1PJ2acj}Ld>OA!t zD-gnH*TzZ1%ecp=!i4e4!8aPc8#O5S^#kV?68u**G_N*31lkY|eZ6|chaIjIyC9EU zaZ0Lw^Ifly{BKU$*W5fhq1WyD!H z5kH|z%?SG51CE9`uYC=T=M{3YK4$4!h+B#VT-p*xcTKrdQ2tr)$bLA?^|55f_)a2t zPJ^2HqYbsM^nF{Y-1+-%cQC<9ofH=;PADc;R-Uq5$@gDw#lnKamfacR~ zE0;fb&C8_L5fxscySbDA#3DVM_6KaL2mjz<@44L(|sq7A9?H?c~rPE-SF9* zFJAs9yLua~3|?(k6zeoM7(IzU_RoEjd;WCXd)?!@abSMJ%ewiHoyUW{#cfKq;Xrf0 z(z;jr>-6S3&YgmSCvI-!^(8gw?ccU1chG>=%f%j!HFF2HKSuNXbslmhmtLg%78SEL zqL>R$iF$_1QgWV>^7tNhf1$8q(bSM}oM6vb(x-U)^ISvneDE!kw++E?tmT%yI4 zab4|%y3@Dgi9=RRa@^-b&%gf&r{LE&UvsWYDH5!AdOuS&SM}}JwrS5u&`D82fq+Dy z=C<#-Q}&ErByfp=6b!eXspleQSI#Cz$wsZR^=JJ;S#7c-ua5(_%}h-dSxAuqEH@1# zzW@8EkidX5B!s>($L;Q}!;RYRB#9hec^}+=|EqtYs`MMKe=}uJuu{IRyv=i(3X}Vq zO^hS|4lr6wd{BO(a=D-+P*C!_EV0D&(<0fU0n(2MQ*^T3sEdbhS|salEI9-eS-!%>wC&9qzg1C zzAlz@wp?83ugr`}K7vS=KSid_q{zUGmD1L1izP(<<)EN`oe9#sDLR^PYiCE8wFhBL z3p#|GBTP>>#>e#(hXJmD!WoGebN7B3w*hMjy1W01%;Q&a(EQ>Izs``jQNNbxf0!Qf zQMr8Pk8$(7=d^v(W_7dXReKd8dOL9-g0xfjPHq8>*Ikd9fX&kz&QfP$^S;s!=nDp- zU#cU=r;B@$Y-CxKy&=EA4#OY_@_v;mU zK==J<8Kq{~*C>=&ebnxUXH9R1@oWnYia2cy+x5cb*n6Kvl$+mkC+HQlr<@4?&`fW8 z51nEK%bI`z6x^&uLNh-|Rz->E-@dL2G2kS}>e}#x?k*uA0jQ;+VC^GZ6?@$FekVRy z-6Ydn$Od!MHWfy`-&dVIw{0ET#@_ejVk$mHdC(oYmZ89u?0M@jRVZ3R*nj0p|kz16|V43EWHOF$sMUDu=2U-P&1+3C%3k!rHXwr6eIp7!K z*&ZwEenAF46136Pt#)j|E1e2OrNxAO=h5s-T2{BRI2eVOo?0@q^7{uO z;FbQo1!)qCy-oA7m>Y^=Xf09J^w8jih2CaW0q>(Hv7}UjzYw!=*efW1;kJUvXP>)KX#iA3ttC`{|A7(*{ef2oqx$%B&%YV{+ z^?>-DYNBZtUK#3sM`1HsQ2{kDf&SplKd^o^AxMZ|d|eo@K^Pt#%}f^kN<`I>3KOsq zj8{s+26EB(3sVuJ$}CEYjKf?>hGvi3w{j@Y)-I{VRdWFBr*wU+Af5QYs3dSLlnrc; z9-Zr56)mIRX%73(EF9`~Ql|=Tk$g1c=7*LZAP0soAQ@L7Izh~d?y%i7`Qqo-7z2I1 zr=&$TFPYg|rZn3>rPo(P zOHb~2Pu=|=f5$-auO8}-ZUoJsf-WPV6^3SJuK}Hp zxXGT>B3~LGE<0X{dtwT;0c>VKVlB`6p5lFfdVr%4g!5X?(9~467}4G@a!q>is(uCL z^R{2>xu$*^%8IAU35x4b_TgdBZ0FuDw2t?yj`OZdcsrDdP^h534gHaH^KJUK*o)u4 zOY2$0>4r+vTN~GMUA*|mwY}W0b z9P}B!Fp!kEb6jNsLaxx(z5$=i#x;Xj|vq!i^y+P z%oWvJO@X&J=Ewwr@V@=xV3~D6{?9qf$LHhX>p2x0&UMI1s5}#@Ua?s-aFS8n)Tn`q zrt+Z->}yc?hPmK)zFo@H>|_Tx3cUxOl;o1WA$v)3hM) z4gMcI)4dGd1R!k~w*K34zUzK}z3#E8X&5BGfVSZ#TO|*LkVgAR8y@}K1^=^WF^hfE zk7U%0O&)V2uQ5yo{j$o+SN+j?Ap+5A8mto6^GJ{4YVenxXKI&)_ZBW&|_)*lN# zvXH^u*Cr}5@72D~ zD6E?+7GpWSUVrwDFzEF^461tmukH@*d?cAka(tw(jQV8+1q|nv8Oi=yI6cLuxr5pL z&@4EjC%@NSiI4xj#OqT^v!dV_>D>};11-)(2rP-wwZX2pZ@E*Kg0Ww8)zon>=LnHy zp`{Ryvh3efBls2|7zXO-HbD*KxC6YT47n>J3s_X9e*Nl#c@@gS@19uC{Z2|JNHPL^ z99ny@|9^E6FdOYKrtskKX8Ln3WtMtEH)?Hxg`6Y0ot5#KjF;PSS?-Q0yC{OwzlmR` z1o}0vP4=E1(LhrTUXRRBDmDGh;a#j-%RonI*na8IzG-?a4paLDNJ>IJ4gh`Dpr5oiQ+yG%Z;crfCGJR`>W`uYH=7&$v;5&k$Gi2zuN{n zY!jZ!(BY2|G_O?gcs4oSSP7q8C*{}ApYp}}?I2J=SqP;xmElPYp50c=*A1H7e7ZKb zd3F9zC07B+dlbe+BSGbEK48-d#V*o5Q^>#!9mNn~*qTxc7JS;k5IebBTq!x&zWh&+ zVggWGL3fX0|2B{i?<9&4@5ocGro7^75i$tPX67LGS-^9-zVG8eziMcd8$Hi{j!-Gi zFBqG6JU5QtSf(7zjB|7Y<5|D%X8XS(-~SZHgD^H@b#VdB-exTGfa} zI^N4t5o-~@FW%VMsH*=~@U6gBEk`GQg@wIGOsx67&Y-b_j*;evM{|$WGdBNlr5ET9 z0Qa?F%`fA;ZkL9SN{@=B=zFcidwT~(w)gUEOlZ+ON8(i(XMfJ}xhe=$RLNv34rWn* zG-MXESqZmqIHUCtzfpc-=Sv-JO1av`q}YvCCg}R9Fz<%uT9EhkUb$sb8kLeDY5oZ< zi%O7a<^@*p=)0$wY%V2^I{ZSvtps{LJdwM(A(8nu$wpRKPfx+pl3DqJAG)a!(PVXj z0PWbGknuu;wJ$WI^XuE^Y6VxWH6EJb<#$i+kYm8dm71!yP6m={Sr2I4T!x~i-nWn|xIT^_WiEPG!S;zYOs}aNON4d0I z#Jde0>B!K5M2wv8Pl9Kr!Y8-fzqx$qotV&vYz#otDS%S~^MXFh%9Q0qANz7c$VouP z-nx2tSb~RMR3u(V%A2=u9}r^{A*v#s@+)_-t;o#Rr<@k3hQ4KC-@U8hC`w!OGBxt1 zn15UM+qNg=t!tYy;3pGP8-d%%nc=ON4RxPLT%uj#~~8*uy8r zAJMbFANe*(Gl!u|LC{kQ=k?mVI2J2ia(5zdew8OZj-Sx3`1z?S)BoY7oLHujp57ve zk(}$we2(o6i}fMbww&c_c{vHR$PtEmQD5~de(l?%e_$!Ee!{u*VHS06@b4bo#L~CI z72jw@W}4WE{h>8|0$ldbY3~C38z-0UnMB{%dz$z-;qYQL)!`Xtvd;EcqN(=_Dbx}r z2Sj>yT5JQ}Osqg=tK%!WZZW`Z$Ax?|nA>!Q2$j@Ts%wkxEWx zzySNoZ{EIhgJ%M_fNlm@7kv2byT_G;sDmW*w6q;9Ei#%TMz$*%{_cAVvM{y;W7sAJ z=exZEkj4Xen76k#2&E|cZ@jE1ny}0Af8t5T+^sacYAfsW`UX#8)F&MjbHQ7S?%zII z3A`gERa6Qi!BOYg3z5ngEu<}`IBA{`HlowAaO~kDl>MNyS5L<$y4CXCipZdrempem z5Md`vTfogk9noeZY`NZn(cwv2R&734UpX{2_1#o0a&Xx)o7@BQsQ@0S4qEaXG@)#8 z@?1|TF~!5!{h#PmpxWR@#P}P=*7|Elg&>IIH17mo~g36sGQ~#5I}=bR9F}m zsJvjOfjm1qKOc8{ds~RHaa=ObZOU3ufM4FUH%R;~j#ob~o_;WfK`_B#R&x9R_I154 z`AfOWVtuYHcb}L@;kn6wt0?$Efe@IU;FmtR*@;Y(OKUFtZ(+Q-V=-#=i5wM;>gS5n z)D8Z6AAFAPUKUG`^>)#!k|uRde(O5KRzm&RXi(|bV3Mf4?>D+e`@syU_07%pdbdrA z=vd*${r&ycHa3tT^Ft*h|GUl|9SzlVpum9Xl8l+z?OEcL=7+#Gg!&6D0smYC!-7N#P{W%w^Z3o5nl@mPT+8D%S}zP1zZtfVIKbHrY%eU&p)~9n7m*z zVdhk)k!fWx|A%+`jUs+rhPxFSqq$xE6Nwz}KtGSAEF7uh2`p4cLrg)hMp0=2TGcWwz& z5%8t<6R_r5CDjlui4}k+42*w(jPmUp4VVfOW4x+TJ@h6TXKKCh%hmZDA42ltVvJut z$fDzY?q;a?yKpsQu93o(VLRcEQe-kY}^1wEg@^tE<-uhSx4>ZWBgee{AX3TJV1dhqAB_kGk-3;~kDram&n~AoCGy zLbV9e+#^~gJLi(D=Io9dDgi{XxHBv5&kH=Mw|oLPqliVQ?WT8Qjyu|Fyb0 zySTq5B*-ZAPVL2`YDJdV7gMVWoPnJ1Fkc&Ar{wGf2>3pGNXw4H<`_7S61pN3(%4dDz(VV}F-HR@a|AAX)kE$$iZh(@x{^cj+$IXH(p%kRU(7UCQ2TsR!aXnI$Axc zK6F<=?A{n>YCk;$#TGXOK8p(C>(vN#(yoO1F`a25lbNBa0}&r*ORM+GapX0 zy`KBS?gxX3AATX$O+H&a<^aC#v|U(1!BmwkB@vyt?!&-Mc!kC+#aLS|G#+Y`dA@n} zw>_Lbn{ZHO^@_5J(mk-Z+J{oPWk$i9zfB8<1q%V?l z;w2)vO2YZ~9qHS*#^Nqk&EjFO{Y0|xCNb{dQxX;OvVqd5ac6a|mD&++)lFU$ec!Ls zc1UUjyq20lIj`%TbEvU%b_^(@LO<1=s&EDPni@umj=0{>stR|&A2cv7!NOgY=u~IB z32yUxhuN6P!qm}yiOIj-ez=1Br#(K`ht_QC3)>gNM`g-`5eX1-M3|nQ{*UhI|LTT3 zj3mxt>G44SN<#luH1;>|w2aUSp6RmWSt`H2Syo+V;c9byrl&{#zWkQ@^(4+ngzh-| z=e!#w394|=R%?E$e9+Z-nS!B-lMJTg`ML$>sTum3j^(P-pN6dn;|8NkI-i%5k)m0N zwT)40g!3_$G@ux;#kLL&5f|xmO_Z87E7K*I-iKv`xY;7Zax_R{W9>G;eV!7anW`y- zPAlO}yKEV|=iz~r4H93cGyWeJV5hA8S*1Yl?d%>=-lX_{_R{_r97X!)r28S`XoI06 zyu-|E1Ew5X*aYP6;zLtEyR;S~rf*FVXipVk)zVgr1tw zJXq6ZPPa!IW(4LOzT8c#i7V(hPMm!AvF(}A_Zs@+=k%v}PdIUHrnip@j&H7bHiAEE z5I)ZrUY&nm;8rY8BQ-~Dq0T1fGFL2YMT=!%DEcu~*x^WkXZ|H^GD+o*a#~t&&(qMH zam?VHzdp)~qHG>FnE7uO`(=O0zEMKK@}3y8KzglEBT+*7r8LY{?1X8y+$C&1vI!OL z{^ZtC$w_!1=Ub)!>z_>4i^?|UHgMAy1#%9f%5*gHZvw`lhldE<9MI^%6FcAu|AKZG zYKig}qihMEd03S|>Hr)ws%S+FbjCDVy4RDlfk!dIAd7&Hi*3MG@D{LRSBv#n)LkSO ztA#TMA{=qi%`=!x?%Xz1GwsZ73w!d#k?d0oi%9~euBgur{+F^jCYh?KckV|F%x*F& zET8D9N?bzmJJ5nyxzGMqJ!Z!LWJRWq8Kj)^Veem&v7LutT$Myh8dd2Zuts7H-xoz7 zQut}`WVHp#X6eKfN)fkhSEdRIB7xXnWZFpmfrT+yy~3&o)Uo=eO9>e~^N;_`^cdVP znea%OX?tZ7@U(t%?>JjEMyY#b`7j?dVjv(xnWaGIRW8G3@soKKXDLW(SA?oL#?$0~ z=W3E+E%+WDPExbTMgqz=4D_oX>p?{YNduqxL&(D7$l^}>OEAar&%c+mSn*@3RiY;- zD(QQLUi)!ICqG!mp-cTel=I_1A}-{Sm#5j-RY}*zI}UvjcxYPJFzLV=?{amipl!ub z3~m+He1jUJKX7wZ@8^e*P9}N2^fp+kVz{~Cnjm6ZGh6PwqWUH#hKZI4-046%(zfA> zG;=STwu7(rjSY*`W*G()l@CLsqwRJn36b~u@k6w^9*d_BL@rqAV&n$lXb!e4zm&;q zMyG$+9_0L2^5Im^MF@G{02V(0eG~e(Q&Np#H7g@3cOo23rHh^)7z^Lx=^(e~io(N3 z;budF(Uk7pQOCWdFQ)hJ0Brd`2R*62TR-0KFYLh-*b)#eqoOxx zdk*e{t@d*GuOGRsp&SmP^2x`4sJzgSyW7n^z=!*E-(53Qw6>G@g-z##k8c%2JGeDl zMr00K%kxpmySUtYqsR<&A|j>4>IDxCTI&XPiVE4c@#^z;i}KaMU^%Z!CsX0`H$Y+BV|3-c0_I4 zinc|zY+zk0me*t6-<}e>cd7#M)^MLc{fLIOnRV*Z&Dv@+p;j}b^1}A@fM4kJ6UFNm ziocM<>Y}DLuv-y1$WHlT90KdpK@ z`yZAjs!sY`os8R|DQI(_A|X78ho75^J{-K?+~k66u*!?t?S$L6nsHWRJTjdunNt!> zmCNqra(Wu|oE_!ga_jL89CyVU@uUhG4wT`DQAgx&Tq51G$u3THoZfiKleaL*>qYT8 zveFu>ns}L6RxEOa_#T)>bew0o3rmfc6|N{l0|9XaXeeQ?Ut91|mBB?f5wmuDo^10M zOp0FvMbYp42u9FZrKLAuiWnOk3;ZbZ!eae4+}zXLCm4QR7n1uyj}@~?Tq;RI)|mK` zqu2j>e1ynIB{6C=^XjApAs?_nAl>g^LYnI23y|aztPoh=ngBIECO^Ljda70$mmNPE zTMcH=EZ%9BhH?ZcaZ;$aKv^JOVPLD(fQrX_1W#H;+Q6Nbu@nrShUj(U;kOgj)oI6) z?pDN>+1XL=%?MS>ia@mwT`o~h%z%FCUhm)^?h$kp0Sf)uXH8H5O**t9B z0Tc>oA_d*>w4J}(CwVE~!R6Kt`m%QRLO6BWhnKv&mRLu1`=}#lrLJA~V!2x(pqKI{ zbjc<9u~}35T!eR}TgXIyc`m;&V~5>~bWk;M9ag{$xDEE<@L8P^HPgduHp~b8hDY3l zV41N-?cX#_6E}++^|K}?qrY%{&!79a(*2kD;JX)myJLNw0~xCX-Eaa17%D!FvG{?) z>UVbXTQgDKut%o&?(yA}i-Xi6)$#XHPC;JdRyH(TpC?T4^NOhsIC0Qm!0{mDwAy-x z_|b?W2j*py&cKY$8O!KT4G>0=;eBdu&iq6G^IpcEz;{JKfw*l@*|nMTA)`1SKYq+d z9SvGMwbfYyZie$87tc(&uv0I1@8LOaeRp~j^XAjH*|%M}ilVefcKCG5xHOB--xj_v zeC!XpILt_h4-E~y%eME~S|_2Ea{lZ&>vC&&1xjKn_&aB2DjK|(t_-rVibEez6JR+_7(Lg^Ia7Z*^tnP^`Od>o#?OM+ zO$glXcn;w#4x6Q=Kid)};Sy=Q-0_2Sx%N2--+;sqH%(ON zx^#09(v|Fdw=8d?qaed)%r2HFoghf0g2k|uFJ6^8;{3Ox=#Of&^dBd~Z~ecnKacU+ zRlQ;>Qs}QRWKAJUSFz5g%0l3G7Y=QL=cSxW{t}>4<~6g^UI*?svN$MyGZ=_BJ&8Y6 z9m~vL(%hcnZN3ngC^ACN9IRRQr6a=rX)gjLG9V)y)YAh5qQYjPTT_OLUe?$ce@0>kxeBp3hmwn~h^{R=;?@N+Y8qqC z-?)b_ZokFCuZ!s2Knus@LG4uvO^^TBhDM-Bu9$c$s5i(pn`VRlcF4wh7I#gEjRU}ebE zAu3v0(6Cs94};Dvy3yyjf>5wgO=-Fm!XUkAJ(-M6M*frca?m?ILf z17sWrC>{3Jv)}SeJ8f#;Xk4P1OdtF(uf-CvxqHbhuW~y|@lOHF!^9Yhx|dtKrH}ZL za?i7pbjh|}c9MqppgDW6Dv@MvP6}dZS#)gKa2+_W5Kj`wp3soHV(WqbfiF8@=J(%c zJbxDoB>H5kh9*U__FSBU8!Rk_E+=MePY3ZZ7&&T_P3M;U^!#ck_qE|+em@l>#@9RI zYiTZU!BX@mPHuuup>;T0$)XBT?!Jx4ZJU{x2m>exMyTe{vf4e+>-Ab;9(C=9AM7bP zP&+Z6CXz{D%uQi^X$v!RZjSg&vF zcDDxq7a8R#`H5daj=rOC^;zKaHUk3`$o5*s3MNs^#-%T%yxJjOUpKnp(~DpsprgWN z;U`H_Fj1B3;b>`KO?`#?996i6TtAaCXj)hN+H|$2l&SaKXAF$ikFzN+GI>v|$TQjb z_@(t99MFW$&xcwI27!%b-vuIGoefH&q^vSX!?5M58aQx81My`>20ikyQ$%6HdpOk` za37R$j4C?QyN~Ob==P2Cm2=$EM|Cc;(Vl{?lmi@PN#Qksvea?#5lZ;3*^a-taH@qs zvSDi#qP5Is;KAm+cAH$lZK%EcK73e${g!rEQYBT7uw|8!m>TG~9299j?Ppc#es8O0ICQ_JutKq@K*QZmJhaQPcUdwb!D zNGuFDqdMEPChpx;{-Uf+mdju#NNqIxkz#;^v1x2TRrzDW>75nJeD=I(VciR=OpcO^elLj#V|ePfLTV|wX(_gTYIMZ?TNtQ{QMjv;8D*Vz z!KIDp8X6kZ7?qJNjW+MiGE26~xH*x{cu(Ce!>EsK(;zyT>=x)4}3tb zL?Qpc?M_oZCr{JKlZLZDh0sK`8a+=Bh0t{dxaOd8M+#{6K;Bzk=lA=)($LHd*p0tI z2Dh8fpHrIolH3Pz<^Ep#jRy%&k&>Ge5Mu^I==9=#_w8;Z2>P|A#?skYVD03y{}n`a zke(lHTizF;jz-1~akT-~f6?1~fxpvy?GK%uKp9k#x1epoHuc?CkOYy6ST)bzU#G`@ zf4uvw1OS+B0}Ru=+z{zKr8o@9zceED9lsiVT;451`wMh9sQZwqaRB=Q=GnfmU_Ox6 zwBJPoY!^r;M&?GV@ivBZbtxjdM{B{h-Q(=$=Gy>c!LKEeUC+C@KQB?@wTpLj{oM4n ztYlphVyP_I@pAn6VrGEpE%uX&UY_>(i~ji*bG`+nw0_QGJ{po4u_0+baM;>}6z_Ee z#mEyAIvZ@wywP_o`Aj85PN83-ljgU`mXj#N{qMv83wJDt`fayM5eVCVkZ|-|`>1lB zHs_W9>ESO9bx{is?0jNzaqobg<=R}1Keoq8?`JhathJz^V#02TXYHJj(%a6~)>7HM z{76XL)YzB?fj}Vjg&>lC^6$@h5z5DZ-k%0jS4#}v%kL_sBu;BlL6z>=V1F`GnbwWj z%8eTIuCaBNjwq?`#pg%h;X=SjoMaVbG~?CQ`w>-?{T9WKb39{9z=;kc%HAo&jsLtb z<#>P2Tl137&2zmmAd@hZf=k-qL)>!#xJ=cb-5kj$1G|r+FJ;q}>GwjL9u^dUEn03zBUS`3Rw5VX&w| z;KUKcV%}u!5LEgdY}!-*IdRu9=dFBmk3m3g2mIjGG!Zw$VW~)YEUtfarZz--;2vdP zhe;!BXIQ^;Q?C=|R$)lx9^m}OHTIpbHISeI%$t^hQ}9HA=xht(K%Au={tT(H#lo%t zyTZG7?@oR5;5B9^q7_B=X}~^O~389m!Y&h$DEF zH3gbopG}^Cq!>MWIO&n(fJ5DCfKs}D=Gj;t9}M!LtOa-y8MfI09{%_+K$Y03g1$MpP+*IBC>E?dKhqa6Xe#&<_nwN69uFnjn@#O6iH)WiwfJ;@!OnX`4ddI zwutB@!);6Iu#mG}|h6*kR@)%+$E3 z7mpq^_Z|mZoiCu_Fg7!++~;-oMN$6}c~a3aze1uj6GEKAsY0qYkoY67LT3P^`ESf} z3OFA;I$gdK8Dz+v5c@Yao|KWU$}z5&aqTN^7L&X{av#ao9g+KAZ;c4tcOA8P@j}+t zmJ9X-tVkIwQW#&H92!nCr18QB@G_EfMcv@X{%YnUeh$(YM$(vP@!1j*LsMfoHM8*= zt4}e1Ty)Jnt87c|kx^B~!RUg3NkkBPQG#YruPA%^m6azWNpAGRJGxU((5%LBUaQ^3 z^IW^Ot7C0-7LTsw(C@S0?!>mYvr)8WGc?>cvIOJLj+;(jzg9Czir^dRJ74%$`36KX zw(E*A$Au|{(NI$ZE(G~TfEO|l%Lr2UFB0@tyn$NsV@*vWYx1x)8SD#!x%~0925PIM ziBfr{R&j6T$H|d_U)lD*$I&-6kK5?P9jd_1S2XvH3_CG0>tan~d;KrWC!gn(8`)h`VF=S*>Wq**eJ;4tSz7Y%PW6_9!wgvUQYeAf`x(--nQxZrL^Pi@OXxFS{fkQcIBnTpUaqY0eHS8i zs@ADJ#M5gpk7kilYYocY>?~ZzrcxVL>C!$CPx^?QXadGA$-D~0{Isgy^+~~3?p}h$ zoaOx|FG-FCxq zI27-2j45Qp5qb;Wuil=0UwlAyo2F3wG@6|>T)xfP!9mH>UO4qT9#+^0nelEEqsJJV zhKLwvuC_ogzV&+|6xR0N_#BZ;FbjJ2{Q2<21QwX>LK>#sR2eGt`Yk`=xhP+-j0JK3 zSv>DOC%nm|DM*|*+B4yAGj76Z_S6ZcD)9D9G9a- zm|}ZcY^o}Rej@`|OX^msw`QvF9hxtNh3$WaH=h+YBmVwERs%QJb@a&LjWwVA5pQ4` z0TpVH-|d;%*<|7ujATX-Dlh3t40tC}hY$BzFt8PHA!5@kL~_me4qyh5K5c1bg#m!b zr?tPOP@3LkV&XAGL#Si@EPKg(HZ!Npb<3nK2bKvil#t~YeI4-Fu=gM13H?wN z1DmWRwN&OA9P8xUGjFs;z?<^d{aWgOYjW`c-VRIadWF)Dxt=44F<{7=RaJ$IHbz=F z1q9rG6a#KgTW2wyPohLU;?FP)g3=PbKTjTBrBr^x2^y_*tlt8)tC58WjuFDCSAja>=_pjW3MuL`vU6q;y76XzaQ zu;38gZ8)4dc7nWTWMPR8mN+{*_CO$U_d6`^!3su21`C?QWrn1xeVZ0chDr$i+Z+)z zGSY*f9ERF7parl$c)c-EqE1@I^fj*aiws|F&((T$CbwV;zN zcUjX!#=cQeQzLX~KkkqG%+QK} z0~cOtnggyrJ`yuCGeB&P2AC9D+JwicA6QoGf*uMj8ROxyIf=<_E$@rw=Av2K{mmMk zM}3>eXiOrEL;P+9H&vajcCLh*@*bmwl`GY&7M7IAgAn}BzRzvATrt0twJ(~)jTb5m z4f^*NH_X;J zJjYFes3Y+5Kt6+D)v(w_2xJ=8A1bO9UORJ43A8?=75bz z$N(7+ylA_+yY~SDK!Y2Vhnkw&u@#fj+|G^w`vyI?_$~}JtzW!o1)_k{-*xQ?y*ny8 zmsv&KFEsplXU1O91=Q4SiHix+w;EjktE%`hvd7dI{0A~eB zX#o5iGG~#c`GjUkx98s_oWozq7j8+9t<-S_75HgV9$3aE;y$Z0(c~eaFc+X+bQOm^ zAeynKA}B1JT~~)09j(D9P#%PK)e>6Ke$QLT^bH;*jf*s;;oZaYd$&+0+7m3Dei$2( zroAJDHieq{XHqI5<6W*YL&|m5DrcMC#*CtOc#Q2|2S_3}`hEFn zDMV{(s*$SYlp&#R;#5Bw&zV9I>A@sYI{`_o@Fd;I2)Ob(lFIg*0PbU0FV8mupL zSmyJ7Klwi{fba3Q`A#770{Q|OV@R;)YgLs6T!0`{IXN8+82EL3n0YM;&H;Pvx37qi zo=RXC5V^Yg3<(D+v&EM68&~d6N|FCPZKS`P`ws~^s?6-ab#BmfKz?*tZpe*9udcxA zi^S}FW^!-v`eIOBId8~kwESK&0kQ{zC}m_D@_}U$hO1)A$H<^AWN!S;n>XQs>V$|I z@P;e18Rs+!xcrxtk^;zMHxvS<0hexYnxw!@?kW%fgx_1q8&W+lSCE$7$dO6kz(Cux z%Ef+>`3~@*)8`!;TmH)0ygNMCdbg=geX9FR$IFT_F)0lNyk&u{W)Al|u>S}^;2l=m|^#6PJ{8rpDBf@x+N z3?+jY4QPot1yrjsP05y(Sy=wZno49(VkH}RlTfHz5f)NvNa~xL=?n;P>*YDW=Q?p; z?#%3xF5&$mfUrB+> zHpKy@R2u=cxc(&Roq7XykU}XGYXMeTRVFt}VVVR<&!AwS!mrh92`U zMJXR9q;j3eX9v@=@3-A6K07vkcE3zRLo=RfTpd%-?I=??+|Apa__~RQw*Tn&%W;I& zI6NKh5a`9e6j8>S8*reA3T3fb_H=Y)m3L~I6V_veGnGu|?N*e1{k+GQ6+W@kVpY0$ z=a|}gCzThK@mK5|UZ>wJw75BY2&*^zF88sI3P&k9J_g7dsnf_%E4~%*$u*XJ6n=i1 zPd{o|%Pp}iCEl$(m@xzT1iKwv3M}8RgwJ5F8`#uKMM^pTH`dK&zhz9|Lr9;@8)AQFT?_ z$aN!p_R~j!sEQOl9=CNY652aM1VwwHAPPDMiug> z21oX?QT$h_>?cHmRFssTL719BZUNX)Utb^U4+j78JL6%3yEZixX*}pJzqa{k!|1X- zevfm}yexf`soVeL@?h{0!!@JL(uJ`Ktyx@bYr-}LntLTO>11k^@~5;tX+D>4F_KL1 zuw+0ym9K$?W>C;qcogtb;0n<*ReGUc8-g~zT4EWt=rUd_^W)Kk=%X~Q+bPdob8RKh za1K^Brgyi*pxzU*zbFOy?Ev`9*I@3)iCos-M@X?wo?3w+?bpTjPggND{eabAXS2h4 zSFrD~^0QwFo>Hv_$QY>qwq(J@&l>H+Xnr%Ry>&Vn}>eckcUjokOMJ1+~Yr^ld&9w%#h%=a^OoZWpwGne%_)_4m^>5zbujmtXr2b2*% z+h5N9(_~6wd1HyE$}tKcaeO>|kqw1jR$JNf-qw$=S_xdx?*v^0qx9v9$H&Kfnq69h zE{)>#({$CzI=3ASZ+VP)+9{^J;-_^IFvhoQ(aZB~d9?0x9sY{%{`%)P7Yev5F*4r| zV)}>1rTfK5+kSMlH|u0}9XCdkr(k8FyRj}!>j!5t$<$Le!ia*kl;?X=h<{sNJ1Z&wZ_5KDR;+8+NoiS?SKG=a`1o(FHE`HhhLi?3^ zU~SxTDALjU+_LcI)vsh)aU_R&ibuA+w#+~o`>>Gnic$Ov%K=(vDQ3l}{_v_SaN)}8Sq-9a$&WzUBym(_{_;T9T zj-yDq`kDqyX^N34iU`*GSS&@+_*jc~;0%wen9{5KD93e?v++`=;GN2A-Ij5UI!VO% z8GD*XF!SH+zc)@DzxJL7AIXgkpI#=;pg#-KBwWuS1x^W7w#VNQ45Fw2S}sqn2UNupk6rR^<`~;h{~K}jlqTB{#JyHWrC4+aerQJF1(#`!NI|?E8)~sPk!L- z@Ba3uwWZ(gHjco$zOpYsLNfA0TS8VdpP9EnlQ6RCZSi#Y=4Pr%?t9wS!o(G+W-A_& z!)V2zYa?M&Cu_J|kJXCrlPi_^&iZCcjT7x-&`n@v8fOw>kAr~i8s-DG&20QJR~GsS zYu?q9{WX9_?3nE@eSeB5J{60L*1Gnryiec0UEw)++;S7wkj}Y1i<=3n=lGdYYx&RQ z6X{J6uf*d#`fF^1fY3!gzp+F?wc`I3n5i!!AmaEXw)c8IIDvC7ZT#B1hXCsdQgQAO zRJ}%bI`nVz@$&Y*js`K~&P6(_4>MGh`>r>40OH|Y{r@zlFrF@|Jt?^_*583(^(Hrd2 zU`YQptwOGmdU@9yWd?xNA63}{Cb_I`rOl*ZwQ3)fNVffT085k@*TZr6|EQEA|2C)g zvR(DWM6A)!+jyAwX`{rmMi|2|?Kna)$YU_)c0c$Xjd5RpS?a}p5wG}G|TPPw-I zj=xH=7I-i1ot;ND^*63^4{6HCWwBTyH1<=4N-ZxK9$l9zJj$%GjPo)t4WYV-wdeY} zgh$JivHlQS!S0ohdYPAKar}Pq#~_eZ;$Jta67yks_3O8iv*>^7>NPJp#-x|`d9FQv zJu!`q)i_ZzxmME&IrnB|c}+esy_O>s`8vskZ8C)uPPkrl2?LVnzQ4z`dP`KZ{#3gL z;<~mSk$V6BZm2g=nW#94{$v<|nTAv>$zpe=E#r99L04V6=gi?a)VjybU{7C`xJ+s~ zCSg$7V%NAwdr;n=4b=@j#uMEo% z->W1iQi-T>!~FgR;Ib|EpFQ8qe6yUg+LyG;5|L=TY70@U2g7&sS6%T*=i6NgGyfE_4UHZR9E9N%v@UaE zn@vb8G5qjy3u4=#(qB;X2QJtGKolp=2B4QvN6McWW7lb)36!KIl}V6WorWjx=#2=SZP`i3F2Gth&`kl45(}cwD#ymtz!@ zmrTumvcH-=KSPp^PMJ-6Lv)(J32YM}-(u6NvY=Yk%42fvm66gv%|SO3zmh_bMfE~T zg(e;z9*7p~g(WCmSyQsfMjR!d%L5WmIhQ?D$Ga@v@*;?Vh$wN8gq`$mCh|u8()|cG z7D@K}#~uN~W5O9KmOtlssKi9E6qS;fdv@Zn*eFnQDlqtPvBHo7!@!`mqb5(y*CXT6 zW7A=)+MPgKTTH!5s94kc7r2%%FXcQLnmH*}v2YY7A$~u^ITH{Pu$FeR|n@N8{Zs@0i^)&SmDCztV(oxw2Wh&H11_Ds( z!eLNNsWE7+MK**z;nRQ<;`l*wNIvLPHFgP9$L_zI5q0ZiXdj&BLt^eevONC1_^?AF zC)`ZDo}Nf5Xu$hZjv*uAr2MYWS0nkMm;V30&kWUWv@zb1ohV9Gy(=NCo-~-eM$?+S zR;(vd@lPQ!d1~gvSL97JAjBdIAgqlRL>ho@N8RQQYPBAX=kn5JI{@(uts;?t^Fngc z+oypvL?bwA;kVN><$wuq|NFs@vyp-{Dnj=woSG(_H-CBGr6(H66pZNWvu$W-0Ojc@ zm+kPUheonb@>b62PrRBW@8X4NGmcc#eX}Hqi*kGP5%zhwI6<8vCH*SF^xM~4o-INh zqCd#6Fy24u4vQ4}`?^oQT2GW$<$6SKfGwM5C8Iu!y&y^{!QPtw=JWA;z?X|?`HC$~ zU0t~Jy*t>767rk&T#J!O!GSt05tWRm)f;;#>)_Y5=<*K&;3RLqEDZr!@&^KtQa z0o6S*q0TG;=g;T_qA&E#{B8g?+#h!9E*e^#=mA!)-)2VUatGB-kcH1-YNPu^A~2Bw zEK3iXZrib5os?#xs|2;{xX~K3EipBHKVe>F7~^J8etrACSf6sMwXCLx;8yRZ>hSr- z1Ker1P$niO9wDK@+d4~;gDy=71D=#MEV3-u%M*xn1G)`@7k>WwHL_1!waN2oU*LX< z(gQ;E$0TcLyxds`;uSxxCoeR(iRAh2Q{J)?<{sP+jp5Ex8Kx#AJs>i>M4XDQYVY2u zV#a|i!`tcE%s>4M|5!Vcn}9b9Is%`|GZiEVfj<26D%PY!hUs&?$~*Ysubzczuk2rw5Q)VqR%t>(j(hh z^0tRgp|ile>pqf;>&^p%~^jT{6A;QSCj!w6qIzT*bY3*k z7xWkZZL1Eo%96cwavF({3Goxt_xuhJCJZHwva>_joBdC@$>)5ZZp4C0p=A6USO{l+ zf}{(CDRr@E2g)-~vpqdM!38V{AbPf1smq>n#aAHrYb~&}leF!f4hlxoWPNftnee3E zS)}&TbvpeWY3gPKF@dH5yTD1nJrEd#joO-i*qx{dTQ0v56vUbYC9bRoZB?wNDfEDJ zs|AzUN=qsX(ob$xErUogggH`$aCyrMY@u&Kuc20&RK9_f?JWLt%26`?xL3g_JZ&f~ zUGSoHoc&G*7Db7rsgNo<7`kv0N*8=SE+9*ba&Q70^t2^kV6>6QK8d)<_+V2{k(5LDsg8>^ht1OqHTE;Io zCMLS{xjX7WIs*=lbn`;yNNDxZ?L3`XaSZfhEB8u6HZufKoSybU#p!Ps4)LU~;;Q1U zts12HJt_ZuCrdInn`ZX)M1qY1C6L6c?d{^W6nZ=7*9~2ySW`a#JK7<`uGW2i*@FOQ zju3O>pmm=UbMzk*490rGoJ)NEM~}L;ym-y{ux&Hoj+I!QNO*#AJ;~m|<@MRU9%9ZJ ze2#U7Ugf}4Rt>%Fj&*GNU;k8!wcqrE%ati25t_Q9rgZ+9^bIWS+4)|CXY3%U_bv$^<{sS+`R!-d2$kp7Uy1m=WS%(ruh_|0D?)?B7G+436Kv!4v;&AHZ zq+h~pS@VCNwTIFRT=y4S&1QpKgNmaS8U)aCVWedR3?lUsIKf(`I4GF+VYm-+$JSjCX}I}dIohOwd*^}SCz?H%W* z+CR)30DicJ79eguh>xfA4p5jKk)i(vZv!=Kw{oR`>OrnXF$7bG{|7OoW(85z9hP;% zWvDpNB+2-x7*uSgs|z&t=BXoZM!J!Ev4Twg@vIg$lNoP*y!EOMOPwJe1&e@rWC8a} z?#k&QlK9h6)7pLHjNG7g9c}nOozXnKqR5j$>pZFK$3(-K+1WAxx}m7_Ms52b+)*EX z%3kpOU}9n#)RuiePkWC4!Zgk69>Vhuk_N=JP%iMLmiTs<+S}3D$iMhBCY%V-Jz{n- zevnMJPz_kuIZm$r!Ltp~b`x9#4o-ELlaMp{d&P~%)7lIwDN4nge)Gyn7~lq`FTyY~ zGA7KC57xDwC061e4(z~!GbG|p1K5*bAyK}r`220+o^d$>4XDeBiHU?MKP}ukV~0{X zA?tK5g@Xa^{m3J;yhEul+)=VS(!OIpwQCbk?WqU47r|PX6MOExuhgf#74RqW#Aprj z4-MM6PC1~+P#CKQ_CJb3bZMZzA>50F)WfvVsQb`YG&dw$UkS64u!}Y9{BoU1 z!mw_AcFT*i0xgYreL#H(tLrVW<;Xi(H2(C>Zf0%iSDzeTM=3e;4vfQ3mW0oXdY>=jUT<7gPXmc>`YBaL$82I$Osv_C(gwkC|yFsF+_eH|D0UeW8Zo`{Lr_ zVNFf%OqSM;Wd1%Wd_Srg@oJz*Oq4RSdi!O+F;>1(!Y?0Tgn0G)VNvX8T;ccgF9_9& ziNo9mal#fOtgcZS_40np{-$rcfM^1JfSYo~OJ{HspUNWQ4@i*7o^{8>#{K{TyX)|f zA0EK}4EyY)=YN|zY;LTamql4j|98ljV{_0MKnA_O2zUwqRp_muxB4MBsm8eC&czSE zNGp4PZY6MIX#Z5?qJ+g7x3W1de~FaBy2qg08tE=X)2$TvlEsiIm&>_fC`P@K%ax%ad}dL0>^ z_>#E~DlnhaFHD@{uVEKHCaUrY?S688sva!m#feuq(K+gRi|49;P={#39z%6>^tP2I z=mv_Wc-aL+h{r0YXVZe!IJ&+@swdyvE-LGJqz6gJqoetSh0^uoAC}s?r%%3X-G59X zJ99yYB^BF96!+ed!j)sK+`1h|#Mq{0klKVM5^JgLFfKEWdJa~ewqi)WfX!NbnPEO7<_-8)M$L@^j&CbFI$SLsQ|%STJ%Z)QH-9 zm%BX;X_+6~mN+B7hC6iowDcQqBN;HJodl#clM8mcd;8e1t^<__m75@7x(0DR9veg1 zsjVO^dQU3M`ay$CvJp9cMyUPy-OV(?sLVO;M|Z&z^?JfOw4;(3Tv2Y#*|+hoKb^j_ z`K@sA7N>P`m4%+T`rNlUtTkSxP$c1sl>Pf$0mbceqx%f>SYak|b(oH>gT#X)WSe!% z{l6Y2Dh6-r`=q{q2;O_c66etl5GKjf(q z6&U1Sc29o@dn}k!k%-uW?mmx{@Zsi9$5o7{8(7-UsT)&}3eOnU@<*-p^~u08DkmpL z8%ZZU0D~^jDLntnS&HfnsUH(oMxGcJLOWb>4MteTmD}`sdJPNre$5*ac8Y`8vJReBBKoks)!ZJC(y2 z6czI(Lv_&|=NnvAFFcq05KtBgoQ&1g<;9KNLOe|LF|lJ4z{u);mv(h^739US51$;Q zbwoqUOWxwE9e3N%rP=U#r#|?#xcT`*_xJY?a=}#-PJK$Jixstq(HI7vEGR1b$b5PM zsx*(GM00UP7B9Y{yA>e1=NOu>PiDY1dac7cZ_Pl2UDCSaB@8|mQulX5jV$0J2+O?9 zl_6iz7+XroX;5xm_B9~kPSUiaP4;8Q(G3po3W^#%Nxo`Dw;-Y|FX3y}Lh0*)Mx*Dk z(a|eFX!@S*Ho5=&av$Wzb>4r#_y8n303d)hSRgk?=iWb&mPL+t#D;pq0f^Mt>@R1C znE98j->s*6OvVm9j&kM9YyZOHu(g9vTe7DE5KV)o8YCD{eSyTkvku5?|DsIe9@ zm#Udo;9z`A=WW2b2+z?ZYx-OeLf>it3T4P(hEtO;uD4FL5fQvJLqscCeOQd zZdpqX(%IJw;3A+}#NaqCw%jo;&SS#1*f18>)zT@m6_v>WVG`(Rgl-T+{?hMauNoEs zYX3c>8)DFY?P*j-0K(Gw`T40PcRunz`2>OXiize@pKAUm|Ca=5H>m$U{w#=kA9Udl z;Vjf(ZP(Df1DL|`q7M!5&p5ie6QH#>c5S-@0)^iN$F0yG(Z}8f^_Sf>-glD85RmF>v(15TkD9~fa-4PC~0bOyX_d39#T7vw1uGy36cl()( zmzNj!x_;D(?$ZvM3o@6-{Vn43bUZ3lg0ZW!1hhnD=a|~;LUr>_RgJ7UYW2ZJ@ogSi z)gFVCEL7UY{52$|tb=g+s2Cci+LXwtK6)(nRg6v1zoEkQfXZI0h!o=*2<+V*O*!=? zj}VRtp+CW&ZZ{LoPK|_NDXSsjk4X&&vXH>LqP!4E4z;;fXIRxqEd6E7-UL2bZF`m_=F+3R*;f zL5v=R8XK*86RXdCJe2$Nkhb$Por<>%oA{gm(*o?fJ#~!G)6`L6lDIV+iK(23!NUoX zoQURmjlXA)U|oV4y5^=)yppUYd5hfcL_;h%ZotF>`uiuK1&yzLz~8?Zr`1GkYE^)*n+r z7wtM0qySxi!d_S?)rk7A|KUr50JNBx80Ej0Ma5FciVD`C(_wQ;jNyJrn6=t^7k7tE527{DTwC`srzFd8KToeEGjuk3ypZ@e5%&YC z5yMAqyPcaB!%&4k9ak57!;BpDsKYXHyrg|HruYATTsNC7r!-ELo{J^8* zgrvv14j$HcrDD*RL(llc>}=XA`(zOs$B0sQWKgC5$xZ#WM*t3e_S761qlVCp2MYn! zQ5f~S8F=dr*RNgw?jrS#0i&c3a^@maNl{k!F@vru%K(c;1zsan7g& zI*UJcMP|#Anci}dDNJy>rjh#O1N+Ivf%BR2R+e#Wy;9J&&iC4HyC_b=R}?@KOH=OG z!rW>M2z@rh%&HsrvtLSq!4A^tO2r1X5u2g$AQvaij58AIY@pUW^Q_KZb`%_Vy;+#P z%)RJ&B1OBnR~ZBDVboj@jWqswTq+FW_F`G3nJx=%grB_pP0qGMEz!SoRwun&L7Ij) zaY_{>&mC9?rk;KH|B3rwWB)USvc)s#Acrs@3wRXW*W{=K-7FI9=co0}V^BJHuC_xW z(9uKlYY>R*(9y)NPRFghyhxm#oljP7O1!xz;tjr+mCUE_x*+1v>>LC)eIUhiIR`Q8 zLpZvqLGM))bX19Qub`}dmc2MAwKMP}Dx!M;B}kw&gkWw|58OsEI?x5x`N8?yAL#Bv z_1;xK7%N@*2U>^!njld1cr+J3w03mBAc!h;DPU1R}B z;C(bFbFVIYIGC>GpZiT!E;bX<$IFN6PQL;B$!aqe*hE@BUHlR7Uv-cY_efdr_oGA*b0fE;KN>pV38MH7B9Z-+TM^+Or%wubXYxi z+`rG%kce1EO{W9zdo5osy4Vexi}O}(1Zg_9D-=a@z1#AWsMU$y-(H;NzT6RhfY{L`K8ho2)d zA9&H!alrw@?92bO`YCI7a|yDc?g?zVC}WEG#kM}GS`$(PM9+TJ&(+%zfR7h72Rkjd z-viy*h+f?9UUkuZj3wxyu;!&W2TTfTZ^D@)QR|8O;->pyL) zFOa8p!Jg(#RK9B1jn>!f^qlkwx_du5Ro#?q};-`^Ujo$G<|v;hArTlQB&_h-)dD z&HLPy%Fl)%w_`6YK50v~hGISt{+n!`-I TOE(x^Q}*o^0TQL1KIaDLoNdJqAzKD4^wd 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

      (3w{y@-n=kb#Jq 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 b)pZ$Mte?WZ|G7$qzqB><)gP*zxc2`5TMS#} diff --git a/src/blenderbim/docs/users/properties-loadproject.png b/src/blenderbim/docs/users/properties-loadproject.png index 88f5be2ddc4a53be96367f184f21c9e33475c99f..acea46f2a9edb5864f3baf13a7fb3c47831437c6 100644 GIT binary patch delta 12383 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 diff --git a/src/blenderbim/docs/users/properties-tabs.png b/src/blenderbim/docs/users/properties-tabs.png new file mode 100644 index 0000000000000000000000000000000000000000..e8a9257770074415980117b0d8fd02b4bdf48fff GIT binary patch literal 35359 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 literal 0 HcmV?d00001 diff --git a/src/blenderbim/docs/users/properties-types.png b/src/blenderbim/docs/users/properties-types.png index dd719f80a103c671d62eb2d63374ec0d84ffa81e..4e718f39696719a5ed98e3af11f887f625aeb51a 100644 GIT binary patch literal 32264 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 diff --git a/src/blenderbim/docs/users/psets.png b/src/blenderbim/docs/users/psets.png index cae396693e20e925741913b368e554da2888fac1..45032e373eb4f55ede739e015aa93def70b416b8 100644 GIT binary patch literal 19362 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 literal 41817 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

    1. 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 diff --git a/src/blenderbim/docs/users/qtos.png b/src/blenderbim/docs/users/qtos.png index 5746f10a836b381c5c8a268b12a8daf1dcea8e38..cdd75344e1b4e267c60fb9bbf69ecd33cd49ce5e 100644 GIT binary patch literal 32960 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 E0@Ma*X8-^I literal 60214 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

      (6Hzf?dDR|+BP zN3_C0hGxm%g!bYbiPEm|21>n;g&89gbBCj6DWkUUGZ@`$&GHmP{bEZt;4mD1`@ob# z=sI5cxalw4xtwc9-Zk^{YofN)6w~YSHTAFURdC+DQN<0SbK|`iva3tTa$L@WS{y3Q zZbgyx-b@em%WvuvLs@*Em6~EWV@_ege6P!zp0DL8?r~7ab@%$*v|7-$777Q)jR2`0 zyk}-NMUMSe<*+&09`bnQQ4yFJFsG>y%5$&}L*_HZ<_s=^X zbdLu5Z%!4|tshWP+cAz(NPCC2i|^GFeh}@lVi~7+6JsA&nwXP2w3qehYfMg5>(A0V znQ?LIe3UV19{hzG=07q#qp2>g0Z#dnPTIpm5F|SvsFXI7=Oenhx*R@J6hzRrU-;JT zP;+!^D>UvdHiShy!X{lEmLrcz`$U297#)?t#Uiircu7)zqwa;>qM_77SONTus((WU zXA~1=4TrW8e_Pob`_4xWr%$AW%wV*1RHhSsZ)($ZNsp_Cl|xodcMV2B_{K*YAn-Y--WufqsiC%HdJ;92{8^tXh_Rm6yAV z8yYdJ)2?Ny@(Ib!&wM^M^;yMBhmscd?)FO!+PBf5+C`&EXRRXNB(XaYDG}Nx&bN?4 z*F51>I<{i*`S(`*&`fPF8QG^6iId+Le;vP`n9}Yyi8snhttnY5i|sz|D;nmDuWnXG zEZkB#(huq0)6)ZX&!F-$O0zLMKV;^y!{H}4O&aoo8XYbdL7{P`#I=DJA$QxO9<{6x7CVI7p*PVX z_&w&Mjkbhg1hpy6nE4i$rG8e{pUFkbA5rfnq6@X?_HNQk7mahU%^T0`@@H!nu{is6 z^yq2StW%^vhp%=D6mB**cp+wMy2|WZe(Vdx!vm4PEvg|77yo;gL~xKM+PW$ z2Hzmpl)El4)>q|qm{?gi-Yw6Ao=%&rP?M#uaJ%`wjsUagKWEUF_0u%P(2uVBlVL*f&_ofhkubm*nwv}pT zSI&a() z__T4|F#|1R2H_!wW6I=2hF*fNtXV%CM#%PAN0AR1oL7*3#xfH(qYCZ9R32MNzxzyc_jaIY!Bi69etu+Bdis+wCr*cAR4= z8|SKDlv;nY1Y=_ZSI0mxZ~e8@`){vG<&=(OJ7#F_iS<6C=9k@nh9g)|ib0j$*FQL5 zt^F_OP-RQiPMJtV{awaHN(xS*a{K^(X=M4c(=&O(iziyI*;G?-^Owa|x@!K?9dwXZ zyrL>L{Y(~2T%f|LJBtAiiVf$n`a(~5!Uy|r?{}uAh)OUBBICJ={mNQ|@E#5M9heB2nKxuW3q<%c(viZePy!t1H_JEoH;OOxNhA)k=D2P#R_#Q~xQzlrv?1 zl>HVu8;1yyz3xoXE%m0f`_ks0OK`IF#vqk4_6}KLl*uzDVn+gup7|Mh!({Xe+8g9U zna(1!l|sa$eIfMn@|C~X%7$H^*wpOQ?rCKkwqR6SKIgl0d}D_uui)rM_}h0LJd(k! zmDJ)2^d3%E6T|1Y>g;!%3E$ZAJJ>xZnd>8cT%$)7#4)1~`uMYWEuC!-dnETdxDlqG6EjNlMk$-^80au z25WYQefnQ%!?nN0&@a!5g~-mRws6}NWfiKb#GEfvI<3Q(`EXL`_?_}A#oMEU@=>$N z=u5rTnk-q7JsW-9E$_M9)KaNgu8V$Bx<~a{MfH|^0$o%DUh1v5B5xlZDK3iK8&Oxu zllWesJ>k6-o3?qwOgZ;iN|wO;ch8v=b9p_0d0)W`Es|e56d_#Qc|TsD_)McZ+%p;d z(NlpDId1Aq<6`EG00vwOj8{u6!zLP(49rzmU1An!u4d_Ry1jm7y2zmnVh?!s6mqVv zbheS1L^g%b=nBw;iYW7JC1s7-O6jzHTBCdKm9w(*<><&=eXU&0btfswR`VkCvOk@* z#JJ(MmfM*Ey)LHCJq#q#!y5 z6%w~!zvLAZ9tmfHrWO+$%bp&zLF2{>=nDF-L(Y<=21?9qY(z;jtEnbGWWU3+yQW^B zrG;y>W`oZ#E0jB0me_+6@w^CoQl&D)a5!1a!+XTP+D|J&cCn^Cl}LF z97xqUAWQbcD#;EZyF=d~U>+_+r;MU{?jTt!nL?Z8njtbn1KZ|tfF3$aW7UWF@xU_bL1rAaTx3?NzJ=&uX!f1qXUue@QDm&;U@sN z#{^!vAf?seYMmKhl~zl<<4M(No5V#M7g_4#DsEy$t;#B~!=_k346*;le!l;R7=qCs zN~77)%M&DV5r!EkDe$X)EpMcl&}sS3G~`XprBSGwu~h4>Kjo~@V{^dksfWeb*34Ey z)NC6P7J6%E`nOo_C>>hCduc0IUgA7@aN$G_4vP7|jdqzBo)_+tS)vLZb7O5T9KzL< z7^dbRSi1b6bN(iOB@$Qym?zsAJ&Y4vxxK!RB=Zq8m~YyN`_=>z*>)4zmL^GRqm8tB zu5#X}&*J9iQh|>yWh8AmKDXgD?K-Ea6U%$F4 z@~vysLJl41k=EBA|AsOc{E3weGl51`}8#7Pu)8=2hu8ddl zaIUE1{8Gdbpu>zbr;sM=DhSe5;5w0xi1z7@X`R4YOO1<-WQ)`|2%7%yE2`HJwVpKT z)2`Ff>9~7M%hY~|%7Fpa0`AgA`^Dx|8>@a)=#EPo=8Im-4m-uay>tc+_ja)=hR^#c za#`Ys))<7jDUt?4#-43Soqvw9vX{wMz>4JHaJ>`BB41X@kvPgLAV4=3s!M$4qEBSD z8scs;Y>(ZyIw3Hk<6;-zYu7~=p(oltE4nSFoKhT5)Ga4lZJ?j%d%(n9C|t7qg*kvK z)WN4l@7%j)^8qJJ0LFF|>@?!Dobz22-@-mVd!5$hx8{|KXgMh->EqdhEqPUA%ubuh zQ+OuuX8aDL7X!s-SyXqQRX5osSP(A-SVeyRIv@ngk@L+)lj*S@YzmIMwoMV0T<0SP`ECfp+RYzH6%`3tqD_-m6Z`u#oKu zF6BU(a$>y`vb>jMsrsw9RLWut`NarnHhTuGLxZtCP2`9g83>C(}3=9du{0o&1 zKRf?j#(@hv2@@h7C$aM9~7x&1+5mU_y8YG5)PY7I(cW76oqH2DzJEuK!k| zQ{xLYdrBd+tJmLL8Exk{s{j0CP4!)G=yXRDR$!~;RV=zu2L&t`{Dg>jqHw5f|?J7#0#mUj_MhiC&!(*8Dg=Z=@S zgxTd986NmeKQn7^XHRY)r*39HMW>HsKwSPRDk_{1I0_yt@H8L-aD>MNd7S`=`s@k@ zeL!dgXmPvQ3}jOvgeO8zf<);zk}{c`Oa_WkY(!cLp$ghjxdvA9;m2Yes!vJ3jETM} z{E`3sUjRsO9p<qJJ!5qZAT;9L9M3)KsUx?!1||Q~lqfCd@V*b0fYHfVxI} zBuOFHQmA>nfr=;DVK#Uh7rs`qAG@qyI+QFQm~PN(|Lr=(S26u@*Yjc!;3q=(G>{C+ z%F5qccPbe{=mr{ka?i1>Bs|xH-PNyYX@w6rI07 zQ$s>Q@exEBVt%L9$8!h@iqwHa2VXbno6R6&XV!eS6NszMeWZgAVnNmcoVNw7|1Kow z01=(5lEi`}CZmB=W^#LD=2g{)nKyCH7{-QK+1z4cGZM4~1w1DFdw&MVMQ;aLPsKSx zMPXLc?ML}XGG2@FYEBFa6?m;WQ?sdBD92Rx?^Ew)k{HLN<~2^LWifRMyP1VcL)8v~ zWQbb$w!VthVW;C`cQY``=)3w#CX?OBHaOMN{XSud-t6?Eo9ogbnis0e|PAQLwT1z2)vtyU1H^$P0 zzC!*?8PzXfMg(Z%!oZ*9y8E@pCk}xeFGuV_FpTup-P{_#udJ%tZ70~c)tl98xdirS zW=_s%c=%5srv;8+ctA)e4JesFB5MfMqo688mT8*$TgB8|2(JJhJ6o!NkL4?JnqGMOr_*g3>>)8A{QA2llqej?q@bP{&ABV>6m^pA!>YRUXP5bhP z`ZEpsvqudPpOo;M=eaqtv2KidKhPz%(_UMf~9O9YIjI4q1&d$HPj8y*01 zw*=OoH6)*;KvBpg&)9J9ctX9U!6k&n&XEY~Eq-Z0X1e#F%wH;lq``eq>mW?0a}z1Z z4nWNVGA#HmE5YsoQgmr`_2|ZbfYMV*`86v(!>1OF2V8#}D}!#d&Q=S_g@fem(D&Lu z#Q-e@eh?rC_Wv`+E4+nlZ^X?E_V4j3pV>2!qS!ltEChoP1 z(*@8mHq@U;c5yY$cY{M}1Q^%Q(o#PN1xEv<;x{Nn1Y7?g>M7_)t%XhDzmfz03olde zHF9``A0Yng83eH$-O^x1apM6Jb^V!~AGcTQs<6=843)}L54~2;eQe_vnBi_EYFGGG zOh1X})D);a3Xk~Qi1~9$bN{!ZB3;jBo&~nNxxEbA+_jbJbPGQo*69~$mLw!UMNQxW z@ML?EeOHqeTc@1F+|%_|LvsW9+nD9 zJ3PZ!fj@t`1{{@{{eo_e_~hitH!CP|ipL{glFvV2L?5c*V7|7^im86#aDVCE!)qDk zo8JJU;iR|*ucZKVl(06F*>#(to-sT!G9PSa&>Leq_Z)<%h>Jjl#KOV?%mwb?1pIM= z6jcB}2cls_fqDw;Us(b#cyU;f(3*&d2z*N37c+IX0-&EsOiJ3CYvKWsW!0sm9-^@% zAtBjZXcGa?MA|XSyF76}dj5(S0ozjD2N(U>gM$tv!#9p~lTN_|?BsCD(y;2`Dy4mKpb&ZE;;W18ErTzSj%dCo9 zN&3m-ihL?7r*&}0ug-3zEAipTZ9v*-`EbqeNac68&KG%(3vZ z#|*tnZzsDx_bHH(w<@4E<>bR+eGokpWR`o++`Hzv*-Vn>SYB`OVHKpc0Uw_|(plH; zXLn1a+#_#oV`0v^%R1Q7VbI*DwP(+&;MFo<{T%dd$ZrplxoYPHad?ysp&X7<5L-n$pObzoDD29*tZwcCm!@LOsiseBHu zOQhHb_%=p5x)(^7Ei7ZlqdlnUgWV17Cx~Z|Vgj%I#RYT3D%3{zxh3K}SL}=R_{sYgNbVF^K77CPFPk_Oho4bv3MCl5o!yml!;7YQ_skfGA2 zl?SAt+JOMCm#Jm}>EKe}2U!S`kpSXi4w2|LL&Y7BjjNM` z9iJ{I99{K%*bU|-j~}yGFZdo+V$TM^ZmCpxI+L?V(&)4>@|`}|gC=FV!w}lh4JBwU zvgqF}Pz~!}9Z?lfI18j+B=1VE(#Y}>A7QtAXzLl&m9v698#Z)^$78N&dwu_QY^7&) zKAZ7v6LpD)SV86t?Yzmie6!y8da(O1zjI)T-2FbqKJvtd00WfNluX1=r?QNaq)SxF zv#$FvKa0owYG&scp!B7!bS!V>;6>kx1?YU{Au(Y7`M*o#0Pc7Hz$3o0yqqTP$w3$v z3~68vIRj4Qz!wIloQ}@hETf_9n#0am@z|gni0WoaH`7O zRofh{u>Px$;#V4?EOc&~5IHjq+J2h9e;u}3AX8`1+QD6nXm=z z#UIc`yZrxTC@6*hlUG|0B2DVgpn$X)>|PPE&T}p;STb~P)qEB2JtO5ak(fLaW}y>| z{}uP=HajVHo%7$OEb)x6?XgGaJS=|jF>;T23^+v^m$;3-zjAeJv7oK8z@3j);9QoiIgNF3i2#9{bG8>^6vk1`4lDJ_@b_@`MRAvr)7Nf~Wf zmPn=;tlIMMaiK)X%zCy|yl1`2_!1b8;YsXSKt+xpSZI!XJi+S)I$@;#2KZob@CC7hd<_0S68h- z_X5hD_S@c1D#a5M6E|n-SZ(UkhlkbSQKBJ6|3oI3UarIcLb7Nf0_6}cA0y&$)FGyS zP;)^C9Rys=uMaTNh>yJFelV(74GMIyS{6~zqx??I9|dp`kfTuEPvxAWrl3Pc6Fk(= z1^K&`@R}?a-&ZJ+>-c-_*m1Ug>z+GOOqg+^3}FW#Gza;G;9R>Kh;Tq$2|@~xX0Czo zlFL*{?XETmwu}(_D};4;gV!5$bKD@8T}kcyV_m0AejC)KBS6&2gHs7}yzqQG(6NZs0{CbU{Ul+0NQAUSj80_@Na=JqOZ{OotPqoKC&wC1)-1>&D3!DdL zR%6c{PUhSo>Ifat+G*b!hpT1*_mamzg+`^IkMmD11}vPopIgP41y`#~sPW&`)KiqW z3yYs{+x+4A5!3qB_TL|kj6g0Wb+XiMKTk>(4qx{KO$J==f8iO zNt{~@;I&k~L2A6PYcw7)l>xyiCcCR1YiHhNlT1pGR&fgdE<&dwb1=tZAr zArpf60Jl0LA(JGB5mbtA)G51v`d0Rm*cGx5N3%s7wp%b|D;?TQbgxkx*IkLr?_99c zfXL;#{SANP=N~-rY59v^E>#uKPgL>=e2TkQY11uVb^6ppT|KxJ&QCe9!Gv&v{ zVfpTx{56SRlXXQU2|Ax|e;pdB9#9m1K2=@xDh^XPoPid#wj+p(DbRHIROi{p4+JVo z#ArGg@xrMn4bt>004D!<^m)))jX&`gOex%DQN-N z2;QF&z#xjIrnE2#Ku%>saxy^F3Q=pYPl9r)u$`9Q3g^F+4rpjc;1$FH59 zfIp`!p0JJLX=!P}es~HaAoypL6GPscci9O>UbV%bFUM)U{%^scUspuIQTO0E>y7%d zEVIjPgV`O}nk&a(&uy%6niICPw5)zm0cjW_VsGi8o7fiYyVBX2qtJFGWPJhWT87x_ z=YZon#lE``8XU9u4-C0urfnxN;o)6t?mF7q|L)G+@0^?1L}R zFZn3(htrHU25p5i75Y5ln-kx$rY96A@w+Xbu77z_N@UQAQG~Z>ld{Z#vuP$*QgEdE zhBi3sX9+qgG5!JH-)23OM0@W3mtQjh*Pgr-lbK#xB9?!18`Eccl(jf{`6grFBKQ4k z!QQ|1%3x?agR#1D6XvfPK>KFj<2adB~4 zQEO=Po?lEdrdmr&PtVTs*do_+swTD|TL2EhrWtX-4ZFU@mdc?8zJCvE#!m{X zHlHndO8nPPf;aX2`-y!QCvodc8BRz9Zm)labv~ z=J`?1_k>Bn;jmwED-nx^wernv4c5Hp!J-^o5vW8W1M!P@%F179NJI!qSNAj3iB?|^ z&zu{|oPVFrrfujIR(^bUOUuebuu}DwL|yrx^^cPAR$i;2)sg@H?L2xdef`8XJh4ekkfD-UZEes`T6_z3h3C`A(jXUj=$kg3E^nHaC0jzDH$tI zur{&*y*ofkR}dn=uE$O=AD(!+I@~fG933+krd>zYTt!E>Jm5bJ4hwr+4=Vo-GvBw1b4 zkhi*S>~)KLN+=pfBDk|CDT`lgn*6k3lX+(Kk&2~L;5}u2MmapeFRwkr+E0(KUb*`R zHIl3>%*X8Kukaa0Us%E=&kBI@e+aB-GHp=9Oc!0-o9^y?XS(BlUL z1WZm(C+6nH4OlIMf6`enwXC87If=pc>kjCe%}%u;XGlnhw!Z#HfOe2k5>PhGt5*xy zRFlr$O2c~!l%{J&%ltHQyioEcSM*Z|--j(?+Ho5<1r#c>tn6#9XU3lcem#`>+3e5& zDeKl$+YL0*k+wI_e7qxLx6C{K1u#O2t^$^<>|9!jS~IriqPuR;ZB@(JVMm&fH+o~0t4X-2&roaqUCc!~H8gj7sab?-y*so4*U1})H37^-Hw zo6d5+qEtxl$G?6kDNQlWV^Aad#6Op;V610FWgl*o7rYWvJPWl!1X`KEdQ&$~&B#$PADCRq*>% z?fu=~`Y&SMeN{PXjau9zJkz-~0*bpK?E;`xSsgMi%|RIbpFylraYe-%Xhj_wV@>?X-->1MZIhCgw$gNDq93_90A@z$Gvm&wgu4RrFStyOJJioREA5KVlGGH2iH2XGlSBEB|xkOIpiB&#v(~qG?9Hx{8OHJSBO0difC_DG5nr zuU*f2b&`Shi>bXXZz-?$hbLaxXcgdfQ5Sj$fl>vIRSog5Z2g`gW$~^2U*+GXn`5_o6g^Y zBM60Z6Qxd5X8~h6OC;zB6e}eYnTTm-(cXvj(7bGQlJ56o~^+C1{%q=;GUk65l*woE+y zutv)>NQP4>FzBEya$7F)y5ctJ%hE3i0n38vGcD1yQt{}x?HQie@1w{SP+~^$p98Zv z9~1VSvA>FRcw#vhK<(@BHoVH680t7*Sp%>#aQf>}L_`cWQNAi`f|p=+0KsyxApW_p z(J@Q6P_b_Oi-xmBNA;_sNyWJETXxr%YfdS|u<$4+A``3m)9ZoG++?+!X=;mH}!p|N0+!fA@fwUI86BTIRlqY|W3UkGR z`W6GA!R{L2*bcom!#w=?!J)3kdP8bl%ZlGZoxvhcX7-aA3Way)j`E18f{F&J-7BB% z>x6ralZsMFG5MtrG2CCymVREJ=ijjb{W11v&&C7Sv*zAA#c>78bC94rL}4HeI~_)> zpn!EAI+3pTfPZ`4-BW(CpuU&X1|btx?f1 zqY#4Wm*arO^sz^RlFYFGvUD($DzD;(!AO(>f&Gw=0?C75B6Caw%%-$)<1FH)pVeSA zKR?-z8?&~Y-!cxti^Md#EPpuSFey@DfIf)o=ade^$7T!n(JlD zJLt0%eI^$cR@Biey|)sbBpp; z1lw6P_MJEM6+TYawf6d}&*T(el@z_t{(B}OM;+(hhZx*gaf?DM1_s8ODLq~5hQ!>| zxKC@c&xs4=Fglc{80q=M7eB^-m(>p;PkKN(yWM=pK-RI@xk{G43#WDaei9OSgnX~^ zxKBA>MLD(UrB_rGv@Us*5fK{!hmK7i0YFwR= za94iAgJDmUgY@&&f9;(9tF?p_%c^0~D&+jHDomBzqbKEOs?Q}{smMLNsGgLd$5E56 zCmm@$`m%b)+m>3|!a2y*d?kf~?EZ?Yw*JH5Xb&BoLi*gIZE1eDIbI0`a@A}{ZJx^J z=5bno8RKjmbj4A6c(TBjviJyk6m)!TgrSy>X!5^bOF}WEQAH1(cazCk3!k`qPzY}S zNJ#`}Z1u!9}@yc_Y+&TiU^~{A(144!J^|dd=)E<$~K)J#t@rq1ajn z$wzWK&IdmXiKORKy+=6s_+{ENijIYf!f*t(h8yS4Q485iuWYNc_J$ikiuM%IR-61D_HnLWj9*AuPAv z#=JWDqKKgtzv$#f=bd74ObnS|?-!dvj&|<3W)qbwnq<@ABW)NW-4I)Xz!gZSn$+c? zF4FG+fcLEb??mf#U=nH)iZOt9>VX!QHZvk#6qvICI^B^yej7>=xrZzo7dIyDiS{ZxsBg)N` zFFUzxMfFGZ1S1IQs~@W-9|v4s@6G?+N|deH2dO4-;yi*xR8G@(lt!-*2*~^2C%Dz9S9xx`P0Y~xz9aP z>hJdT|1ipJ=l5MnIzKLWs?0X9NR>>Ms*`CDY57FkzZIv~!6k85$#zuW&+)A-0XIsC zMWYWTCSf|psixJ#@9eS3$&X~%7udt96aj-C24wK(;o+oI8?Ry3>lJ%P>XhU1q{$(! zuJ()@(|1gs-sb*ktv^o{d53wO(2=^QanPa9N?Uv#m;a|i>5|_(xkNAqUbB|luj#Fy zjscf`CHt(E2Sb~ZV}Tff(xc8Hy{b>eh&LD=%?Mkpg=5#JuFkZ%7-RYv$)d*oTB$7O zMI58kVT2GG*p#>2J5HieuD#WGpTdO9itinAX;49g%<8M6A z&(uI=(RS&5e0aE85GTdJ%^i!FcMz@uPzW7E!+xY-1c0_D;K1oY%mo8htybP+V`H-o zaFX58FE!-P8!2e`q!YDpub(Dj+Lx+{rTzV)_PD6HDbpgR{hiu?{(eyn znBg;H-7Z8S$dB|z&fT4mhU#icFIR9aSMT1vbDp@t z-99{{YisCBmts<+sr{%)M76Fc$@*O3(A;ZTnS^BdXY6&Q{YNEF2of_)PY6?^KG?d8 zvKd(1r1>@)R*ZV)`=yBChsf*PW1oxTY%ALh57pa%O4S@b!o+GYB^n+WvAAp%A7Xsk zYIX14J-!!S==S!Wm5=tCg+S7+woSe~IMtWoXZGhV%1?4T$F4Zr&+Oci1ilW&qJ+<$s5|m?S&bnl;2giA%>D!+yVn8*jRJ~LlVZwYe}nm@ z9dyms_GB~ew>y1DWbBn-SDu?c`1kHGW4e&GBDV5sw1(C{fCI(=4xI|&tO!k&kd-wI2AyGWTOnaaNX|j)XRNBA_WH%juvdv4_yF7bN^@CruN3OsRv*_v{c~(N@r|H6ouQi;K(RQ=T5-s@1Y<3%4)d z($-R5JFS>|vse4$+2-`<=!pzA_mmB!}drAZ7=F`HbT1<*Y0w6?gwy~{kc5j<-u=VlP{lcDFv z|9M$XCv++d0G&f6V-$j0_w@EQIJK8{x3z6k6r%-D+?D&>XF^4^6w#^FUi|a#-udMN zHSlghv=?wa5Ox#uzlb%st&>nwtHTW)rn8CTZ@>+~olBrgO_Nk@$>(Z*dVp5 z3xaNubO=FW8@OCbA+~CsTH2R`(gVRW`@#Z|@r$P02Uo9Q|5*D#>LU6o z;7{!!1bu>8>LCB3c_9&|3=lWoGPxZz0;wV*(`LchL`sE2y(uhM5hxAYUq>ahFvvTr zyLxO19VnCrF0c|L>xoezgRvWytTAzS6p}$1?5%3HHzx`k(RbVVPUn<6?|!RSXhb;m681Y@_~ikJ`TEXV;McETOw7!`VDSp= zP(Z_5`^DCwk*gTLLw6&fC3E^34IV`fc{@-@#;Vlgphn^-ci=n+)I4Y3Q>E2mm*Gg zBw^^YVh{B{WklkU_#B!mf3{Qi31$fzNL2qe>MGmrf3~+t zUrwlWMMRjqushPzQGA5aR_4cPA)xGZtACb#&ZF&oZzDF(9-6d18Z`QW(9+HtW zFo!)`jA1YpcA6iKNpd0DN~|LKKTs)mM8P<%hWwAwAbIn-5p#{4>vg^*#SRO%YeU|6 zXxx6DP1ZZ|*NQoOePsgUorZoW#b^O}25HhN+>v{ePzuy4i-u#1uldMpo9V746+`ow<-z z0iVJU96C67c;g}DDv1!(k}ypHi~@+d8Xjq7iK0&$IRh!h&%b?taC&l5+r%WMv$K<> z9LXo`gX|qx#BiHmW8SfQW^8L&H-m_eh9F9J5HvMZ5a>QIFyIG~bDqDkRV-oZMuM-v z`U|19_SCV{_kI{d+9c3`t4Q_*!g)f3f(`sNgyu~(^@%_lW*2rWc}k@h?qj*VSN8AL z_T)bvcc3P3pysHe|7}bh!ROW!7UJ-vR97K%cWAh4-F5PFo-z0CK)T^m8l?uYwl`bi z*|9Isp8xRI`+PpEesNsr@Js7Kesy)cl>f~>T@VrkgVF-9`o|w*Z(R%b7%Rx0Uw$m!o1 ze_M`%!wkn_ZI)F`EFAzS0HFv!<*(FY-fWZgQsJrz^mL=d7R0g4G;=N*-`XPLJ^#Z9nxAzT(3DC9i^77^b zE`Gqsn}+P&h!q>eFo=Q#^4R1+se01((*!SzP5KkN%+1j&?A_O=3e7+9e9+PV)EMcY z8M4mDTg$rTZ9BljQzoLQgUX@`opctByno+Qq4Q;xi~oE~NQl(z&O+NUFN?iL(xq0m zWN+FVKIso01GIlOmFm!V)8PQB>~@;LG7yd(BqukhC(o`n-BRw5nhM5UvTf#j|K7Gl zTo3mR_wMZHlbzGYouOhMsG}pG#ittWNM5>$@PNA>oxT+Z6XX3emo9Ci2K;4rY4Hl`iV@i{oMMYYh*M4s>6@)XS!dNg^Nq0ju!65 zOacN)rKP1_TIbNX7|f&sV@N`Ld>3dz#NWlnKIp&vd(sJscw!(Q0s>6yCz7iTWh#*E zKF3_z{NKd`1kXqysYvG;0my)spfqX)c>CSOduU}>Jk40PD|NMXu7THZ`?Yvo`0gR6 za3KwSRk?apL4LBH&ZRy7)b0KD<@~|WXFk(WX>u{b^*uctTY5&>eNocM?IKSRI(pN>6=?Jx`Xo+xI82ibjX{zy0|x zb6_uE)1G}{`J@-)l7qrTo{|K)WOd*~r8uUkmPL_@>mey9Sb2A-3x2w*OEda9u(iY5@NL<-Py>-w@>GfusW)4cW|LqJoxB zk&-$K?;DNqcVIL{s$JmzgFIf)z2%iUWNvS&Iyg8y1BItI{FyURgpfXnd5e*{2J%(N z6mj~M27vg}IY<4w2DlI7=oPNY$Wl@siViwfAL2l9VkYU_p6=HqtvvA*=YO~A4TooU z-qbu|<6>W%bLo&vv}W)mp_yw>_^@1|1W-6*aG#%otB+Q$RgN{3riL+40M`~sx+ zz6)HZkh>Jrd<6;2_~KMdqbf&7#sxdNR6*7pS- zlD@Gz!=|?ddXuJ$E)1e+&8KPHKiVE`^=)O2UWGD?*@m5TzDMFPxB%~bFqLXX`t43E z`jzvjsPb#BeL5w@#myYX0kc7~_Ms8XM!qd#<%xXswz!AYH9u*t(b-dAi?{5hY?18M zw_-Dds}%K>G~bM1$tZSDNb$_ozHwchV{KE+%=GRwsS%tqBh>d=slJt8G>%EuFvB}- z+pyF~gyX^z0zgmyKcc=np6mbZURz5^C?km?J1HV6g(R!&6|%BrXC}&sijbm2M)uwk zg|bJInGr%1LMZ*tv(NW_{QkP{M;~9_@7L=&uIrq0owKq+92a3nlUE!8FGzCsp!XZV z#t2T!QB@szne>!I9~|Q6&(x*sf#o%kzeS0a>hKXU1SoY_THzN!gq_u8ss5$XSZ=Cp z4=Qd(>ms6_Md$!v;%|MWi=juTdM-x}Ou%1fHm=9s-rkS9C0{`~{MNBM%?9>dX{Rpr zUW?oEK~pkMMrF;rrlvzjkIv<6O2)NlA{8EzcD6<8Q*`pC9OVL*q>0aBFPB8;bELvE zOg_K*Fef}v@`<^+`ruEwuR*P5m@((`|B|L{lUVCIN$Y)U6IFoy=Srcw9S+B;m9Ncx zDUIJ6_Sl2XY@Nki`R1ROI5T{T-{^cb4$$XUtST$tyzukDr*;~aFxi#4LJfw$t{Oj% zJjp*5rgu*^Nrpo%c$F_-O;j!R?3(3`ssUjKioPo9743CADcozj4(7Dx${&6#E{;Lr zXFc-^gwrg_R#LKJ-4M6}UK;z49HEvCwJp{Gu?RLgvv@?f>~DB@c>dwNl4sF)z#H-q zoMdHJ0O%r|&H!^K=(mr;FqBwMA-bY>#KS$?sQ}f>0H7}uv^kuCK9Q01=;{+-%0o|k zyBm*r`E=1*-A(THdA>Fw5&j`Nbz&ZV9NN24xxe=o->pnV zX#v(aKL088O~GG{_r~;wjA_O7Y*4q=p^h|JA<3vaPX3^PQ6FkYp>C6GjUosZel7Ia zJP}umFeYFEk$;1-@L`wb46GtR1o=n!)g5a+m)U7w&szxX9j?K|qM|*rp|~Lu;^Nk- zssj3jf|HtsMG+M&Hgd;4iSz&ZLAW4x?oxm~7hrSZWC^7v(~0Z8RaKI)d^e#3}z%F-NG@nbvxoQ999kukmeZeUy zaI_ABVN<$%V}7ScFJ3N5yMdrYOAO}iFx3EWhHaEMPsC!-k9^b_0xJaN_YgeT%#DHp zTVu$z@#7R?YmQrLgh?P{2Hl9E0PH^NufiEyewQs}hKFx;AnFeXioJW2mQZJ}*(09F zM{~bWv0T&6%8EBIZeY-$*z81q|NP;IP22Y+m-oN&;5gBBA}+q?b-(y~3Uv>r@DRQA zx}ML6HtT9@gngIu=D?+rJf-WC5?Sb*?zYSokd*49z-aHAFISJUu-|oznfQFe5|A-~ zi^QZNdYg@xH@)lgRF=UTprc=&{r$}W3Mi=B2doCM`^FMC#h}Jx$7&!;7l1~=tYp-= zVkO2TY6-3MPB>q)%aVqz7jD3C@fEn%#_kC-e~bA({Nu@=EoVW=?qp=FN0$I}Pcp(7 zb_OIr;-jSsUKTX!T_HDVzGwXOcvhGGob!WPp#}FxeJ)*AXM`+M2A1l zC!uJ+M)l^*NqHz1yaTwGgNSXf97kKijY$ zI)3}t#*e%{H+t<2>Hhv{y=!jrp;w~{Rx88`TlxA=nYMQ+NB|47rn3W0 z#gy=aiHn1`>?QJ*#Ip(tBA|T)IC$(P0vLJSK@npA0b!293>d<=D)Mt+PqFuu=SiYy z=jY#n>k2{8n8qO$H{>xhBn}t$#EpW|N$qw3Xy-8G6dDr~4AqjpfY7dMeLivs$H3kB z1&7&ah}g6~paFN}#F1QNmOo!*PD1HSHW`2fBzl}725E(vd}oJ{BLKVL)msQUUz!~u zp2Hq13&(o;2^EZJ2nvwIZ%H@|j!C4}4iF_38{0bIS8zM?YJs^Y_FoM~E{H}4Vni5+ zJ$uIeVg|EAGgy|kK$gS8!>jQ_BnAW#1~vuLh`E}%fAA)#S>(s=ATHU*GQTe%@&xh0?Vt{72>#SFdp6f2FdJ_>B)6s(e~~M-FBlKumOR9lw-JZ6dw=KC`Ki`bE`swqr{O$UlZ&qZ3;sT}6#AH(MrhLyi56siEY zgn0wGrdJ;KS=Z_d#CA?Hrk}t%M$(3T?VA6552?Lj5ZwkXEiR#y6tKL+a~<%cWtU(& z6Z%9r$o-g|jYD1v92=3c1asC0+(8OS?GhDAJY-kGn~qp4V?(1Fr#cNMIP_zB@3mn!uxTJKJ;>r&Fry6AaMHkn9DKhA`+vJP8IfYdN6=p7F{(6 zX#_ptm=*j_K8^J?1fSJ*!cj%r~dyP>9w?Hqy7ALPdYB&eW^}DEXLW?-*^ENQ`SP{On$PH>!QFkjqYr z)itY;PfuRhCERy1cX*?9`O^V?1C#FilZQhtxY6;OC(-v_%h#bvYg{yN;-^&sFJ1hi z?780WtEwB4F46moS1DHZq_rGXVr}T$%;~b{xlIwx{g%mx8c?NV*hj$vnaC zA|D>@_X!C64lW{5T?EzjwtXib5vumU1w5Xa*;(^1l3xY~pKFFaYBc%gRC*``NC>JW zgaBhqczXkf!N}0Qa=p)Q+p2i=-{qujs4c&b zxlKUp!q1-Mjla6ZQ}5#9f+n`B*q#HOd`)fb9TdcXUA5DCf=e@Sije6=yp%oSH-tz? zOJ?~319F5Ub&8vI9#I2SHE@aM$yJWL&ak9jO7Em3nbdoyTn2Wc(v4#iTjR_WjuXVc z$!u)xNX}Neu3LP4@|R-7T8ho1+-g;+S-$OmSAX-(xcO*vK;!uSmU@MY_ro`Pm_HKE ziFReH*A&UPd+P5C|47g4A?njS!{K7}OY>>hBQB;J)t%;E7pJrBp8b*iZJR@>*rV9| z)_iN+e((hUL)E^D5u2%~MsY5T zg7JYZzD3X?46&#+BW7^fAxZ$X#0zCtj3rdHw}$~a21ou5Ap$13*fGS-6VfLVtA&*f z*CK%|J~sng*QgE}wNi_Et_em#hlCf+D;=P1wuFNQS7@go8&s$OPaEI~nJ>s^xdJEA z6NoepnsO|RH=uiQd&*(44?_kTP?_NoL+NC0by+nW?*pp%ydpC3h;m2i(xobhNww3o zVZO{4qaXuP0^5yCr57h{8d41AO* zlQ_hRfW-rL+Y&9$R|%aRekJLS@4S7h2PD@r@iCt_3kqQK^He!8S(8x4uvJs_ zP#v>iSH9!rlbRXNXx>R)rq_J8kU&{wPvfvm&p^3B!nk;8Lf;$3!Nmg2wXTqH?f?U` z8x9WD!c#ZgVBD?~_Q4>seqLvEGZJo}p=;1UI=&6mEGQjzmh0W? zvaB)B$5V%D1*;g>I2cQuNqEmJ?myOGWHKQwZChy{;=9-+ByjF2nwTWgS$34CBhe9O z8e|YCnsJd>9)B{rZ1_(Hf(Oa_M&XU6D6nL$p1$l0FaV}Nk%w2mF|{KQaXIGsv%tdt znU&Y)d~|Xa=gr3jVm?O-T6S3?pqdhbU>T_eq+tU%G=O6{zm?eypOsJ>`uZdq=HbJK zW_)r~cZNefM(D!PMF-ry3lICyZ{IBO@#%u3Xs)kUKehexbzvE6>x?Xo;)wJ7$;P%j znvb(M=On8+=+U#u?h?Q8a{%4I0rY^Xsstw_D~xp3T!ru?$Cwxzg5%5X7?k*pBwu5g z`l|=u;FH}Yt$38}`=dZlGes&(*_(<@9UJJrvI{Dj+I?*?@Dy@W%Y}4T{b?}c@gv3) zMyKB@7k~S_N7uN#Z9HFBwJe<4Cr;>F&^{|VnYSl(_ZPiFLG$>&9b!LtsRG1e(|Zit z^#znvRD9z&@h%WnQjPJ-_b7;vgk|$31+jCQQwDxL^R?x?Vq%P{s!(_1l$%mi?U0^6 zJ$<9E>sGH&-hRjLHiA(IB_dAlK0$h!o#$9@RTBTwcq`GEjOvBscf*IAHVH;u)Dl~_ zZk=Y9{u)fR5)Zm==WCz%oVDfTv%X2F9+{jAzI{l_+Y=Htp_WS zxy;MRF>L1ME_gcPVsN>Y{m|=%t6^;Ui=X%L(#CZ9y~}AJ1NNw2HQ@?OIC4}f@DrZF zxju_>@yD;>dxa@!km_Sfp(FVlCczO0q>7Ovz^3|m+&{m6eulBUj?I)&QKV1lEA(;@ zEa%w9>e=KH5<#!*bewTzY2aGSO$aC|%?2Vgg<~oXZz&9&ev9VoE`xZe-EeIn0^;9> zA6gq^yCa1q$-^x z6K12JFq5xy^ty7Zvc z6qDAogebc{@L!k5MVgUGX3VH#U8P_ zqlZ(|r}LJbzNg5|j44F+#>@Dgf7ai4UM^Lx>uX57A*KzI96}db$HV<83W>a8eA4eW zL7FsS4*<=+{5kL2hwq48m2c}_U<{Tf@vAARsr*{stGj!cP}CfEK^7jF(u985SYVFlO> z%mI@JB)1k3KgfF}+5t>8zJ7h0Bv+X{+nIOH(^CTRU?vda{`&PR3r`WMY8NzOnn;j? zTSuQ$sQ$u?QPr*7@s+RX?45KERCRo1ZDOyu>^OP%&O zn)$W7Jd5o_+JgL^xcKC{R!)<;Xx5ur5&O$|>}vg&i`MTQOZ%e!sYhiM_A3~(iBC-2 zh-M9!E50B~7J~5zVEh>h-26W{;pHz~3OydX9jUzy4Gq$_K7;E+vMU`rSsS4r_uyvj z?M;Ey;To8g`rf;@157lY6`6=fnhZmJqnVH(ei?q?c149(>f}F~AE)_F8k%*lN!LiR z&t+f@k#*p{uEqOQRt<-V4U_k;UoM{L^$J1rU-60opM4$k9|UZ>9~xRkG_|-Eil9u= zeC6(1sNMMf2JkgMb|`<{Hcz|xCQ%`ZUe+IP%9dcz(sh>Z+I}^gl04P^Lj}00Pg4-J z3aB2ABhqPy zL&ONw1~Vu!!Gt2$e1!$pEqLDX?c*prIYdPt|NQA-wSw54N}Tkv_=}*q$Ys+_;R2Rm zw&m;&$cg1aIuS++901$&p95Bu}o%N=nLO zVN+qzWo>PKpDxP+=^l!@x;ic0RnRcRJ{pNnEtgsj2Ug(?5SRv&lams1M>kikNFUYg zY&h_LT7bEGitd}Vq4 zJXf_>FiRrc$+|dr=yAcO^?y*Hkq?RdErN>xbhXeleQduKvSwIf-vv-Wjbt9s&`@8W zj#+8Kz9c7th;v4h-#BPH1Kiqx2)BBZ86M<8f~{I=f42G-i>eXy?2jKm{=vUoTo+QE zF=dvfnY+=OOh6Kh5yMAvAE7GgJvjCgYW)3zf}v>4>`2xZyvAqo3Y0EizJ>W&$dMi^ zZOFnvZ9i}^wa90P$wohpY+Xb2zgiOmc;9Fast8Tq7}`*AMaXVP|J$ck?mB^6cfhI3#&2L? zKF0IUu5(P`)|?s1>MsPTzo=pP{*zU$kCb(EJcfqf0Pj(&JNtN$;A_U7>#hqQHGbxt z%Zj||Cp+kSqf?WjNF|(B+g{9Qa4!wbSs*JI#pj(4Lp%f8$RG3b#+X%uyX)GW^z?Ul z>Ipd4)A{DjEr3H)fADoEF#ca{l8eTF&1rf0?Z=KC17~4Tb>XbsBh+3fFOi{GX2iVx z-sDBJ&;P=O;mEKTsYjU1*?;h$AO1;&W)q3$gs+1v7(S3x9p{oiW}(ohI=Cl2eNoK&%_gR8D4C|CUMIvPkGA{GHFF7&o|7Sn8zVl6~sk%Df*8nCm_FLB* z{L|pnsUiz!3m)E8NB~5{_UBvX>#`<&xL_H(!F$zUeujOveo944m$}XQ&KtY;-Wr&A zGQuo2iXwpkdzEI>J({$mG>pt$6J`@APlxFn4;akaT5?8bMdb3XyomU7p{2a5 z$bjZ@qJo51U!VwAUld=Y@V_TOKmx9FZ#Bjb5l<-)l8*k#L!;?2OY(-v(5Nx?*o&ow z;7A&rnrg(?%#)h&tJLS_=3YXU@Df~)83Gt#3GjISJnW}1p`}%lzaU`#ffEW~w2l%U z%eJ#$-cx19vjLMQ)BLV;qp;L}i(sB60#{?mo8X0n_9bz9#2biAa2Hnm;RW_T09piDld0QN?tiA#F4S{t8_Oo7a6xL9D=PM6P9aRyU4fEIeGN{Xjv$AF zT)U5G;F|%w*E#rqlxS(Sl{bW*so68Y>-np1C$-E-cdQ&nZJ7*x zH~f=FtoNBdskmjw4)s2X=_v#7h>$ey1^E`#wnFXWYUk%<$%dpBi@?8P_sHT0kZhYHpot(0&?ZZxeZXOxC z5`kqm1FE?V4Lk- z!K`|RqMISDAYDa8Eq7sM>YR+N1?sd0xux8$@FGEU7ke zDS4!v_UGz*n3q?QH$pB+;oax^GS=)m@G1S@pZ3W(r;$c#zxCm)>sCS|oOV6YEuwG? zI@-2BBv4E(60@vdA5GrpHZLEtKK)0jwPE8Cef)SxrM|%a`k}78)3*8XoLi`5YW?1~ ztczrRmwR;WO}%F0E$ch`0@K39sP=w}eEw%8i+gE*t)lVM=4}T{eq3N3N~V0gayYdw zhn1I$pH%DSaGF9B|KY<2|E8Ukd}lDM1*r?OmI+X_JK>tTy7H>3w6KRhTSs#}6+?S* z@1)N@*|s1qF8;{r>@Iujs0+5SaE)Ny9Q2pZ`1?~M3Thdt7M@Ga=KdcNx063`VB@Vb z{#>XFe9^05^cQ}iREHId)^1+!!yPE2vVWmW&~nK**~BB2{v@?QiUPY#aHULHGc$Lg@3QP{Fg zFGz&TXQ73c*@my1bC3(VjP8&)&R(Y;D`F7yyZP_$9bh1;+uJX@iL}yzp=zC+Pftl5 z{0v04=in-EA0l#sj4(rV=IbSoj$UVnVjX-RAk?3@S3MXDt|&ir%7<>nbFuU@Q42Fs z)v7x3Me=A8fOM(n^J)zcRy$E7?$XVIX9~kyZ+L=Sr1_48?m8r#6pch^W9-^Y?Ap@Q z+|o&9PIswNcLjb~9HO%yE-TKUZkPe(J`4V97d3Tj24j}C3h8bUiDMYw92Od?fes-_ zCabxrZuH6g=K|}oUcr=8-M6?i_sYHG;-2W=_Cb8Fl5xU&L~fJmQZ8;y=U)_Jip)tL ztuc9(VA8lIZE^?Ofo?sC10jL2NAvDl!+3rRkE9VAvve9YIv$OGB@Da>0WXp{OoZJQ z7N-Hce}YFqH|9HCg5nS4_p=3h2n8|+&`Y zZgJS2J$?Sj*#qTyi+^qE_lD34(aIaHE1~?#-?Q0Y%lOVEwP&L>1+zS3gc~7w23PNif1Id3&Zv5oLcJqJwY>=sQu*2F3|sIl+5|L<9HOR8$YzlE`8ZZ4e$N0DOIsn27JtX{md~bLpVP z$FyrgwGWM>G;>WJpcvmS-0NMbuMch+1`S8?i%_TD*}?KLWUrVL5A1S)IYh$af49_N zgtj#+DppV=7~lK_%({5+HY1_cQ05??IKSz-hBEOOdh$V4Nh#K<2V!fK{#E({S)fNP zk2B(7)mk2(gS(jBbngjy_M)s)kQfFz5@U!Sb(}s#aB%zycqtJmD>hCXEiTdFOaBXK zm@hI2pEf@wX1W01MG%BNRBJ%hqs5%5R8_%$tLHkFR$M_(h-&?fNiI=EVka`>f9}iN z-qWG;xupIH63kdxS)pasr7_tp#d>1tZ?5yGovNzaU$5^TO$O4&N;{=C*q__FVH11n zxr0`=$)24;-12#;(owFZifZP$$IZsCM%i~eupGO5xn%VIZ5pm?o0F3-`cS@e84!rh z_3~=zV#XP^+phcy|CQ?tU2f_5o!xHF@+DTp&f)2+Un>VabKt~@;wJvF~b1djJc@H7$7dH%>$jKj8TBeORVmjrV~! ze$Pj*J5d*7|Ca7((vuym>JSRNAa_QYv)m=TO1$+^#z@eeck*aND6Q{=JQo_R+57+~ z#D~Gc4|h-0p9hDlprAm^xgfBI7szY0mV`w@37&wdoM^Z?0k)BplypJA`(t4N8yQ)f zk}y@H=hH!lmC!5sNhcCex~AsKNy@pnlbGlLr~-36By=0#Q(t^66aeF&UFe@NtJUE; zj>#o{ljf(5VDZmmNkJioFNXg2A|OD(!UT(lF_0~68zD`(0OKZ7r5_4=*;YdQfAlgr z@E2gfvWtdh2HHdc0dNb7kRbwXCM@gNGp~J8%8yRioA|8~SFV&al7~dQJOR*$_zriyMI=kAP$K15o#e7twIbuM4t!) z5C;>VknnI?UadUDH&^JaAb-b3Bm|}r&q1Oid6z5_oE(JMy7n!6U z1+pg;=#~gn`pXv;ma(JU+*>zox+6C9Z)L(|lZNbfZuN{W__U60vFo11XS9{)(^DMR zikeQJIuZVRF)r7hTg=kYtJL@R&Tu`p%m7eckP$&?ZvrC<6w%o**u)pnnL2`n3lTp# z3}P?RvVgM1buiDB1}4qG*w~L-{9~jlQ1NUk7)aW3!RH;P)?1r=oCCE zrLG>S{qaug;m9+}0>H4uUfM+3h*KN+PLKH~IoCsp|Y>(lkS-SQ2Ohd9xiyd^;TXukH{A{*HOTx#H-GnJt+RLSR^Xl!J5R&rEC2Wzh~7~a;%`B z;9|6ha$iJP*c+TfzFBP#v-9&4u)fP?>$qV|HG@3a4q2D;&HSu<<@epRy4U`2`L1>@ zY2xq^E;Hi*j+LU9D|!tAwg(HHTvb3n`IVN6!Cp?}#0fh<={XHNeWk-wQ}Q@&k`!Ww zFf)2Os)vA@GVrmI8TVMudPkcIRx7kbP(8FnfTV7 zm~_CeffDm|clTpl-5_$)3mWU{0`d6PVYKpP;#i3?GyeGYr*&KF(#%C2zEZq~Q}Mdf zW@elimsvyN+7X^bpd!?#BrKVj_aH^_7?&3i7IM&$lu=$SOjBYAf`(M5a4rKvLnDFl z{~KZ~n`COWnOskwIn0&t_1%U*HvZU$kKf)JK6JuKDD>5zWq%Q_wX9hm@*W6VCTE#Y zQ%*YpJG>3u9ljGNgnKZGMwZ+X(JuuA7(g|cXVpUoN#j(0XC1Fvd081OPM(Q+b(rUm z44LUPCq45_$)IPKjf;&vt*e0qpO+a(pVcfXDZv!f5rr60DZEM`hgad5L+-6!IoY`x zY_*hQQh*gP`GGUtZlsPDr^#Ii=5W8Jri5LaxTMJE-`Zj4v@m4Ff)@6PAOkrjQ)YhSur5Kq1FW_li;dwE(`#ZHeaN>|I6 znV8Ia3V88BA=$WUY+Q}g7t;VLwau0@u)>JkGXHq8bZ>M_3?^i^cynbC2#oj^0)dgW zst^7Jff||KgQH=^M2UkqlEoP&0$n>caGO4>r60a``lDw77WRMkF-w zWyD8jY@ynZAL*Q(ol!PIx7f90B}=Rlq2FSOhMKRoxp{{- zPPKN(x5zS{nK5|ny#}6Dlz2#Rssl6!b;IE3=C#(+z+ zVvGd~l7!a6VilJ})Aq^pa&lKOfVW+u0KQgUpIyAlT?O{6I=vAr{iE?J9N#|0ZV9Vm z7~KvDzrM`E1(z10)dC;|j>>DSf6pPm&{Ot?nX}yay+Zy>>M-;A^1v}8N z=1{J8X2UrrVxnb+#1f&|!V5B%| z@;#D26n3M`b&#)Kkl@SEIR6IKEH$ft2Qd&!Eq4xT@PFqT|({kdR>R zI(h_VQ;w%{%Z{g{ESkukKffPU3AsrrutDIiT@6!13!aomwZeDwnl~9HMca%J`!#;s(=?oKV5^*L-Le>8wg0{h z4U2>OiaS;NB0?{pGdVN0&I6(G;lRLAjx=@WTL2V1gmFHs`WzV3LshpU=Rj9P+$8SJvSdTj+S=+2f}TL42ef;H?*g-6Dse;4T)HXB#!Og@o!xa<)ls5R3Co zzJBzN*^!q!?NrtWYv$gc&a1hQ-=}G`cNgX3pY|6+v2$=hp_Gxr)nM!FJcjXX!s6-_ zU-!dUBNG!7l#N4Gep@lz`n+?pb=)CkL>4!5YQEZ$<~bOmLk(Ng-CfcJ%&q*pte$`?oCVx zEQY(@yrQ829pe^=4lwnVS7Wf&8VhTm`;Rk5nl;tcesE%fD)PPgqy#E@Qa!S>pQF9m zz{f4jFj?1)!c7W+o1o}qLfLT$sIjhK#un9gPTLLnLo|qG;DpXvZOorc*+EG{QJ3b2 zZbHq9a!qa#RFn@z1Gp$q#Xz7&BOChb+217=B6lJ+3J%^!r@YYKOSms|neL|R-#h1J zklpqUQbBT2BK$WP096TZtar1Q{Age6V(f$1gj*r9>rUF*=dFF6%*oU9Oou=FJSNj2 zdSgF)_+_03VC#U2ic^hGgiTRU;6_QQ3S^fBv#n_rR9@~;{Nxjp%^?^aLKfd~1E4kq z&Ze+18ua%RZ{NOsSlT6i@+6e+r3TCqwa3^Ybu3$5o+Q!%l6e4Z0@v|-e7z5w^ilt# z>0|?&2`ImVOSK!fsw=(+DPo8LE6zy{6oBX$vdmiJw3bdDr&Au`Pf()dn)gQ6U(~*y zZbZQ%Yvi77`m?yIIH~<+TORd^H3VruW{zVMqD<8IG>nXlkZFzi>*)<^Oa z;{b5t+&^W&^W-}|THz8FjwJSysIb5$l1hl4Uyo-@@2X~q@yXD~dF`|IC__jHLP$sm zmToQ_As-9dGy!5!dv0xC(}dx=BS_{&iu9fQ{9_PozzX8Wnd0oHh<(qW5@ZNA%hv+B zL1-ZK{Ag!x!Qbu}P5b;GEzNSUko&Ok4jnuw73?<$au_>l32aJMVWBBte+UheFAO$b z(!t17W`1&8ft5BsJb5?7O{%La3W77NW@(T$pWWwz8RF+cqPFB&_i0`0FLRCAiaDeq zO!LooCzob7KvdkCrg;=%eU+e)CnF=zpSl!(Qv2k2qSSwfr$Vx-CJRh7wF@j+4;=78 zSr&##^DM8wp2WcdLlI)J9Qr`nNTPNY5P@YUmUAosXDJ%?9M&OxlTx6RG>l9M^1 zb+5%m_~^LRjM7BKV^251*dD&4;citpdvc=UOV~M)v0D^7r}zl#wiz zF~v&7+>HFbbT?yPQGTAkGHb&5xOx=itg-ykO5SAGH%& zj4Do7&98Uw2iAh3I0717)wkqNS1f7eq;;OG8C{6V+&pJ08~P!#bW|dFGPfRB{vu& zQ~n@Ru6d!la+!u2wHb-lB{8g6T&FcBcT*Z%UEa3CL5;4f23=p4WI z$3VZ``D+ckndqb8WQPg&9R%B%)|vJnC=fPxPggvxk%t0|!9C4YgHB6;VxHpVh9H!JQvOPm< z+0er+mf2k}cSCMp{VRcc>Z*=U7LRiL6kxg9qfS*OuDw}Muolz z+jReLqHon+)>%O%5DXFR5foG~kqA*pVuRyNzC~w5kdsx^;JY$${P({ILMDzj_wNgC zr9@W_C9yoHJU>z1`qEdrn63Ky^&KF9?7~70C|aK9e~#FX|!QUEt4Vp8HIU$;Fjm|FIm3)U0S;w$4_ z%=}hVxBNWid&XZKT`v{q-uVOG#dk|yolj4R!3+n$4xC|Jjh~F@e7I73cy6eEEO;Ea zCp=~`xGA^fhK&&2ygW)HO0fFq!mVtTM+$y7Y*mk~Q8g*&w`F!Ho4Fq;%IaaG?w)>` zr*k(yKR*-0bDe;)G;d38usa=)1&I&PoRm_rA%G@dGzN2?fzd9oHz zu6L~FNjn`SwwRuybEGtqlA)4K%m1+aMk!@ZPELRTSGIe)=l*9XH=V_@7R}H8WKLF2 z`I#4WeZRLWo0Ze??G##)azq;;8bhV7uHMSJ_RRKVo|9*<9&V3*`SO*{1em6slnl); zq$2JgW7r+$Bm1`U<->Bfg_m|Jy}eoiRMeCiVcQ-idird?9x7=|O=<2U9bbu#Mnl6z zn`S?D_gd6U8rs^zb%MM{k9E*%&7B=GVG-OuGf<*kzngOU73~Axrc&DDi_W8ZfAeGuN~3s#*EjJZ9fwx4Jy z*B34wW;a+lE&OfY_gnDi^wLu}l(K(aGsmXq*S>FYEW`?Q%rltzTZ~3JQpArploniMO21wB#>%% z@Ab5j!piREt@j0J!<8OB2y#}parY>RYd0&dEoBzVqz%oR6bXFq(D^fnd_sN}k z6?=CjWFJcw^i6$0$nR+$AXdJ=?p#ULLisEj{C3Y3b=EW?Y9mb(%+Dh?NvY2XBcR~k zlx$9PPo}3YeEhU+QrYCCp^)nk)O)t$||KxT2c4bVdK|=dXOK$wHgN2WZ{4aAR zCW?2_p>y%k&V8YNj^lUmbq=8%E?)|^qIoow4^}nyo2`Z78dupw`bqpvR>Sr!#f8Bh z>Gy)<_;<%RrzYJEJ%=9p5k}V0eB(BT>~0CH5KhGO%P(93`=B;M@{e=z6ap&7P?MR! zW>GaQoXgMr>s58L>mpA$=f|0~Rd(Huyq%|d>aVb>)IZO>R^P)%Nhdx>Ekh?DDao`rCsU`mD)gWnz^&&Nof!>}j|Bms%tf#R z1!`s2)ul0;?{6+fv^ZRU^KGq4=w9kF9jxMuuC!3A9r-U&mn;w z{5(9`96jCLAA?2$v#wh3oSF}P!Iv{};er!&>&qMSb6?h^x7JU~`#|$F)wj~6*6CE04*qhLxSp{EO%17*hW<-bA75AA9 zgl)J|;R)g8L&#z=#B>6`FL4@3smBV7NyzctFO09AZ%q7Z?kX%){X*%{!!xo4PaA%_ zFVsAJ{*zxgae#hbZGW+5Skc(xbXU?U^r_hFUd6msDIa5RO?U6fyCnXHruRK&&iLL! zAk&V~&JRy4p6yg)*bG7L*q_DEBpc-AiXrW%$U(#nFjA6%X@arf&euM1-2dU=PfW@je9gW#TVmfs8_O_Rut8=rnl1c4-c_JP6 zL1z>Bb98hxRt*OqAJu;mg^&kGg|ZXE0j)G4mjF!w0O%MQh})6>&vgj?dI zw#LQBLlF%$XK-Xhis0Oe&tPn_-5Ucj)JP@*C4<^zY)l4IwFL#nQ(^1@*c8L~S!mf{ zRq{M9Z#Q7IjhLtodiIP(D?I{E6*yH;jlKr9%_b9a|Nn4qs7f(cSbL9!gPS{5+7W+0 zdF41e%(4@KhEupheop~nMG&d<6qstc;`QekX>0I$o`Vc5!($~ZA+T<4`{}`Fo>opg$i}S>dOG**D9` z)M}M8y`qItNf;RSSc^?KIje$N(P*M!7XZA6HSnIOI#w?yy9y}}(E z?M(-0W`E3N)xMwp&iZ#*gCS81ML#n1YHBwAhs%PNH-VZB+IF0Yw-l1%QRMv#v-=H- zme_{3n%O!yyg+G4q>E@**AQz&cXxLY=V>M!#2f(N0Mr1Tb-~;@&gl_2Vigq^+kN&} zG!WPWyak>A@Yq-_dc&mt{eVA(fL-UAwfex+Alt0<07jf_G-|Q^iRO>d-O}Fvuaj%5 zd3{Y~+lvoOBJY1QD=CPSP=ot01;5}9DC*Jb1$j%sC=$wpGr<5zN${8?|FJkG(R*LM zZ=m|9s<1^qL3+#O+-!@ny1}hub~%MfQR&Pct4AIl{VRT(HPde8gm#Vcwf;CB&p>ib zLO<=#yO#9}rLxR^vy@27ofcC zNIM!{yusMilyC_UMq^tK0=hT1#b6XaV8)go#=%qz1yTAU*cWozP?RlCq>{mNoE?2xA@AP3(-uqwstNT(0W3Iz z$Uyr?ZJU|-&MTLdlupA`qNmUX035KAO|K#2!c2v3aQ%1i5V-NSF$no%qx>6^jsnbc z9Ya)j`3#*>Pc2R_%|mRqgI#efC$B!d=-0zhM$V>&b@Vb+PlJrlDPBplOdpp><5xZ< zWKHIt7pPC>HB2@3^~s<7v>ucXC406WozUA2P(@h_1IC#@l=4A%^msT@2d{bX`i6^v z<8H?13GnwPl)H7@wyYujEjHpqergeBH+E(xkeWpPT!puTS@n`(V`u3e2@~a&Zj-9HuZ= zaUxWY2KrRhdvX^qz5o*oD4{Qls(zRu6qo=Rq(DR+nUDkJz;wzp8Yg0;JS}?wjIY}O zwve`XGQH58_W2FGNsojaYLbajMnMr^g4hy_1tuzG%(o&(ENv2!**W-t_zW zdJ84HgCO%O>*%X4T-EevKGlTwlw`It{2fkQ|Jaa5R&!&SPMu+tgY(~&0~Mi{FFvi* z;Gg0HfHGEcX)l;DLs((}!zF`t&`J>5I)33Z^rYc5t~{#e;*emJ{! z-&GVDC+9z0zRM^a0w{@$hJkMYcpNM;cQ@|z8S1*1>@QZC2Sw{?(Xd=-uFiL{zj5G{iCEys)s##UAhr!2g)#Q;DNR@djH<%QSQGPz*D`+ZQvm zO;H|TD1z8!g>3qxu|#O->D9kGez6-bw`uQ&##>(B?Rzw?1(d}wZ)oa`9LLW6UYDk=MFfV@K)@3&O zD|uSHAmK*z0ND2H&}vPegC{V}p=Nz{zP{6AY6TMoz7|qncK1i;2aeq00*HYv294St z!V>-iITW@(H199W*(L*?l!OyuQ00i_CxO_8a~AmWkcX?e>{napDw9{<&BV-1yl?)8 zZ=hv}|Nr;~yp=IMtp|J~EbJQU*J7)5t$ahIKdA1z{6zm<;kwHgw_Mle$V%TMU-nB& z;&^(Dzk+N{ydRBqjCi(FR)PS>--7&qMfUpry}k?``&C3;sr%T>x?wH?4p1xUDulZ5 zyxNE;x8ImBm%Rcxq4c8efbBYdFuO-+fYu*d-d zJ<12sx0Se7qr}|`9&7%*(clR6-d(_epi;>jfczF}LpYSY?^!;es&ot>u@OW_JQ`Wv zB)Ey>bxt^2kwC${guKU@7+&+s!P(gq7eDxib8yUB9zMm9A?SS0?M21t?$75EJ69zs+ZD-`>1DZ+`PTD)!RR&M8B ztp0irPf+w9DjHXAz+XX#p~Im$KYdu?Dn6yWy&jV@?Tvz$0&;xs55F!^wZCMa^Zs3P zZAa@(s#V>9KDVKWAS1F>_wQUQN3&D+?di=7-UyHW47E>u-S=jc!?+`_49{9xS&^>c zgNR=TA?E<{Bem5%ctaGhZ`M>xnpQ-RTg zs1-&WEZzkC`7gwiP~tgZ+Q5%DA#Iqtj0kCNZ0WiB3@Rzm?*z zlT1HiA3)?XSXdoX(0Y^XIZRc2iFoz|7^2Ad(!p=PkA@BK@qY4>xRX~Fx-m61amSCk zWWHZkR>=z60duY2elOQjs(|OJpss0x(Iw7T5%(PHO};R0v2(Q5f7eheTk%M;CgGuW z+i`;aplTZ7+o|(*V6(Lks&9xxQu7{ZKA1Q){g*!#&7MpP!C75>rCptnJEnYNe-g$D|mR8}+D3d4;DH!|4#bD$;AvXXGT zw>32+UKZ!29R3lcHSt!Wqf0zg^tHDbLDUCzifj=K{qXvqYo5;wAY3tNcytqO0-6Bz zilb2%$&y+4O&TX1!F+k@ldvbf=Ils}D*Wjqxw7&m34JEYWN=S})4@AejnBcPwMK#EUh+RDKn9_a zzG4|c-8cld%S`)SdysgRGE#9w^SAIJIS1c?kmt2662CPcNvSFDb^bMpTCH3AP*;P( zTRQdmu=hTrnxx~Oc0`Y8@BQ}8<1?B^4(@&+AsKJ*+!pLjjQ+6{AEMw)yaDX)W%Rya(442H)Oy46P1 zLSWJlz}1^PKyW#pOC$6sdtgvQQnnDo6~`$eB7!zxQ@*=q1ekqupSu@q&dM610s5cU zy5lL?P$1vNaBrD-1yg1y=rCeJ0X$qXz7>CjD3=Hq$`HH}Rs~4$!+jZ#)-Jpt7gZaA zWX9}#BXsD?x$@j4xpa9EQIHlwF56oqz=R4GDHQ*6l z@dz>$F4O!tt+d@=J2qX{aldryq9MW8PGe5zOnDHW;g9cI0JW00AtWRSpJ=~s zto1avYs0wo)oT}ACo%K}QO#}|u=^=&NzP#kzf+FlNN6yd5 z&K>BauuDEnVeitm9a6u2!rKDsVcdnP>5{0CNPsCYPvRbk11`&UQ1V#nm)JA6AQn-h zQC7L#)%Mo%`2Zw|ptQ;8AXWk~NXEMwfMN`8wG)@xQNVOaCV-vpC57e)x-Dc2 zka6m_eSI;fR)4L-QH~`5kU$E1xTGkvVONc1xZ&ywI#+-&YF!FvI-tt=fihFY^^f13 zJD(qlsp9VurFd7C!8&4cBJLJ}y&QtZjGB?r&Fx>BnVE{t`@z@GhkrSg-jUhIbne20 zYKHNcAtzT=cU_>`RIjZ~zt5ivsaM{|eC$x)p3BYOVYS{W+yn%Mgo%D}&D-o8D(r3sP4b~n`toQDC8)JrPF zy7Dhl0VZ`k35&tJnIX&!DJwgP*80Uh z3n7MaTzvolDCjo%MM` zc`pWCXpI_%wPTTBLkAbah%{oU?q!Ug|_=}np)lP#6;i|ZA~6YMa4H%9Tfkk z1yDp)7an+zUCIDM`nbi%ZjV5T_i{wH8LaLn2u~6;uk`iy66j4c$4EB8SkH?EU2IC{ zWz|QSsVV1WWvS`7hL?lrM+37${7`bt$RkVdtZ+b7!`C7 zjd}d4%SiC0wR9-^%bv!n;1eR>=dHy$JB?lME|sA{Byt}PAB~8s*U~Lrn<6~)srnIK z&Xspr=@?+FbcYoz8S|-K>U;mLRQ%OW-+wtOxvhoLAYt>7rq2i}-QumlHly)fO;Y39 z0a)bxKg!-a9P7XT8$UA&X(JUG2_ae8%8F8y1`=gtgv=1K3XxSwWF#rFLu7u{0P4Rd`@R}$5 z{1(DVamQ609Vl{wjkWx{)t)>)c`v=ltWN{pEs$7LZ{iCjS%!_?>}5Xx?ob;)N$Y~| z{5YHvMZIO%&aW_od4G)f=V`gK_vcjO9Gpp?DsRGrK zQm5n)vWbev${@;2-yEWhg6{XZPja0Ko)o(<2=omPpEK@&{-zqr?AQ^RwRkU^oSynD zewA%mDEzIvR`qAskXr~(6NLB=-F|F?wHQYMPVgKU7Lg%4%w%Q&;%UBz8h=xJc>^vx zn7YZd0_G+4ak^VawNK^^dxr7-JM!c_*@ZrrTtDa4bmnFu=Z+BQeSRYcxxe6}Vd96{ zU8167e2DJVOBMywh1%Ql|72x3x4!sRJbUBOt?JhoxOGru0U{d!{6Qk)k*&eFS|#Fu zD`E6p;%kKXGM2`(YvMH1`D37F5)=G#YME^%h3?fA!6r)y;={k{;XxR#WUcsHLUqR; zi20+yn*gr%tSnc`1U1Q3_Z5ZvP>>-p0k9l|9LaVw57qOe$BLJo$>LZ8 z7~4UV0Yp~LH|F89N=e0>>4wfhw#EH7|LoJ|s!kSdyXZhKvHrt~hm^{Hb6!rqJ1x!V4=FA49o_tKO}_SAkftD~=y27L zvAzBCA;F&zYmjL|<$ss$fbM>?3P+Y+)Ew+qM~$x<_LAO*rXEacxfl#Z7RvLwsrOEKwpqL#jbTpwzSQ|>{2|HU7eWO-?rKEl4!)Vsg6RuOgf46$y z`gHa5=|kFh=eW@#>t3AchFf3lzl=8)MfbGx%Pf8BwRH!-eO*i0k$DW}usDqsIiE8> zbzHs-t$5Kb!*r7*ln+|vosr0G%%ngUj)*f8oJj^{*NVQHLUu~hED@niAvQ)7ZxQ$J z>+JIl{s7-is`jfL&7n3}FzYZ&ej60~NChcvRVq+|=&5{NsIu&;ENhj@1&4MXBmoUHRL z+@6q8@*%I6sQ3?QlL#7wyPfOEojr1wm>939L?cUYjp6BKgtd#;^ZrY%)-D!19pD8;1c3mYF89EMX3Ur3+DDaNs zR#?q{%1z3)^F0noB;q9Fgdm(U=&8@omQcwOqa)Zi5(EKU0_r?628hTPak3HZkzLKq zH9ox!o>uawbzb>vweKixfHJ7L9txoX&`uSFsK>jF%Zo}*(m82$UmJS1aCJu(}M$Sv~lK_QoAY2c?537g~ z1wKWPnFs zLWL#fzx?>|W5u(7nK`FZEHI+|=SQ&^H^4xlbq9gn5CRKDTm1GXpD&8#xQ?HPVz&x? zh+VsL+{1_8EXPH;7LXQ0>;TF>C}h^Xe3-dG>0NE@P?)S84#<;e4lvy5`}dXu>l|&3 z_Z&HU=!L8BQ4YDsHw9Dn{rvsDG;8R<9+^WIS?+x<9)VoS5sC-Gy3CGuA4e@rx){Je zgi`);5O*==&=4RhFHam-=IP8sIAsPqUhV_%l2yFX8&m{Q=%Hz(Agb^=UM>jctKiVu z3oh?Kk3w{J@GUiE8OrUyxs2sNrgKwB!YLTgUKFADSj5Dp?uQKGobpA809;>vK+Q}6 zlcMJ&?u#bN?>M>%1jL0T?!b4y+g1ce_QrcEfrwDRZ#v~sobX^rli{=frTrfUupj-{>W)Pj?ecHuy@%5vl5OL1JpMU(?zuE3`KWP=7$yVUY`!qY}H zh^SswImo%V;fL^Kfa{!t0A-q^uGH7l67QV7TPI(rMzJg>}6^>+!7z zfV7A$oN#b}o~7aA1m0r-48?Us=)z~qM*Ts*gcsza|5}~>-V1jG*4{c&AV-76MTs@o zXP#nvv`|OYh213m^nfI;rYdZ2R+!dd*HBMs-n4aVHINEzrb7x1VikAXJoNRqW006P zE3)-LbWpyux04}v=;j1lE}i{0GkTJV7GyFs)8T-ou<()Byy1|x6{OTp&?y6I%Yj~2 zHVRT(By?E(V<7r43NCFb8kb<#wg~sLk2ODrF~%*?9k#b`brJsSwrN0Cke93hRL!!Cm)v?{5ptm0aaoNzNs)s^YE|V+qqD z=RHeyS=TZSV_*N=@Q~Z2>-aBmr(vO6`8MsF$HUm)`5=@-NrBUkMah)!+Ru*zKZ4FU zBr);;V*q9lxSp9VhBYfI%gW_*TA}u@!2bx1TaJ9(*PC)sjP-N8xAn~pyt1@q_R!)UQY?O$^HMV9y^BxO%R3E8yix>|5XQ{$x`PsXe6H0!hK(?fkt z&Fm^(*KBCM9LTXo$9Bt@68>4^;lh=gy%3+1MYH#x`mwX@NTE>E(8B^6|FE~EM@#f+ znO#O3W18%4I*z>_XVWkLo!ohY?21Op$E(5RmCa|#`9jJuO{8i$+uQL9dC+!iQ`hCLAvf=%CN3_qb@Va3xS~-^VXDH(G1`yR8{~bm zv$L-bI;{yGM!onE5}20D;5AUWa{x)y?D{bNNdE*i^u%LUV^DWXFNu+kaGd* zfTlqUjKbh?D?@BhN6_bMcRCrRJYMmi;w&t=oxgo)r?*em4G*pwse_dTxp}Y&)X(@b_DO)Oq4DkTQIQ<&A3r`_S7q~2{AmSv%DShaVwHKs3;LwQE4(yyMybgeM zrQN5W6-)0FHKD;3hTW9dJP1`*3dWG3IWxU{xgLq+kIi@8<)KH_Mv?){&3Vb-ju$UZ zGb&R9aX>tK4`}O(hKBWk-pD`)SQ>#KV~LW^W7z;x~b%uA}D;o+mebEOezLGEH8XOL*nA-Dtf>0c0X zL|$IR(x7Kxpdz94*ll=N=}TF~1@r{;rn7CODSohbzMx;DZ~w~gDh7APAy?oE{K8N&G4i64fd8> zQ}w4LvALzQ^ZC1H&-Vz#?}~Cfw1&ZUW*^H7*Hz&xabYsYJ3kzxyE>#)ylztE?tlO- z3t}ficvt8SzRl6}(7vW``geNy5woou4i21}zCE)TYyjbk15;XHcW(3T)ixM(ah1LW^N-;<)WEI~ox%(;5q!7*e{cY9W8mwI?6UWO zMF+2XX7S;E3oNfm&}$NH%2juF5(7$@Mlfr2cze%*NOE&i!J;ToZGq*9tpkR%9i|>k zJA%2_=|2)LB*bnd20g4%V(ft41seb;VS4TdKsBkq`{3LV2dho=uV_PBhOOZIBwQdQ zeZNtB=ynu9>znH`s*hs?z0<{(XWB@Ief4RanE4Q#Bb23%!r5@8w=L~I$c|`L+Zj4R z&0p$9|C?a>Q4FJ`BvbtARP}R=MgAjyB;$Tv2otv)N-A`B<2-uu0mYQ%G?V}LQw~c7 zE^A~yZB+&g1ko_WUlT)tj@=E{;)I{%pruS(_M+&#fY zEVG;!cMo6e=6mp=th1YAu=Lx5565_oudixYoSEAFz++tI=fmIfKjnWG{gh96u!2~6tO1;6CKDZ2U}bGiiL$m(!AYP)r}`CayW2E zSV8P@)xnyK;iib%#htRlV8Y4p9L&I4T_GY3&dg=36R1xZ{ocf+OWUy#sdDr3M!i1P z)Vx7Ft=K@+57CvfM~*3pd4{3KAA0TBcJznQ%EG|y_fIJmM$fG&m2zc@r!==*i~8s% zA?!y-=ErS}lhqH*^Plki;(~WS-&VdtKqtlY*0&gF0AC)M>vcOlMnokfCAs(SXZBv~ z=pNC!W8Clb+y$eK^W-=yOmbdZN+@UQ^dm?s&+t+6%8FMmv*qRvgi+*?3|bM_F#|-o z`6OewW)vBu_ikcB1QYrcwV6Jc|BfE5C=ib=s5J3?W8`y~hf1?KE<%-O^Ba8Ei(;V< zc<$F`RLCCWYGZntIUM1z- z^4|gy#?p4obSH$p_}b%=E*ncoltQvJ35@ z)l{^53QwF0j}I@ubxS4X#MIpKeD%k_*Ik0vdF}Yk#i_+i&abOIHeBlRTe1p5=OA?B z;^d^DLlTLtKf%ug4C>dfUwHp-iQD?JtGTZFgtzO`9B45d{Wp>I(9+tPn3c629un?5 zfpM}DL1B@&s9^&!0hm^Jb&}gMrV2OoqtgON&k4a8PWwr{Dk~0)%hy(x+(06k;7Gvv zgN3So;zVO%he1lSQtIii1K1gsF|*HXaKO-LHUk-{!eg5RAmDgO?tFS$+7y5Nj&->v zW(<3TeFUc_^3y|~jWlxaHM!VY`{Naz{PMV3bY}O{J&*R-)P#Ru$r}5lwBLwTd=$0B zV}v|kzI-__EUXF#FcRl{puZutkZ{5(AIwkwTH1!x1kC7~fYI%0=8D&BUP3Qo@D-0A z|9H>V;=!>1JS&yN6Fm@zsTmrwyN*7MI{%i?n&=vt|ISw*B$H@C<-QyQz|_9H4Dn_! zz{hIb^Wir+yjXFFSCHRBL)(uJoR$J`;5@ZL1m(09&9wfmuxpMR-zx5TGAB$kz{eF& zOEv@Vh^2$ywV!-fsa;CM4r!wR`T`P&oc(&4I*>K8z5M1bi2M!}xHYgNzFz+LBiq1X z=A|O1qKAjvdGBRsd5n-ImkmWxII16lIn@gnI4=1ext@Fpdw^3=a4n{e;5lH5O=xH+ zDGrc}tk^6eD=TYIaQx`ex@Ru=`k5OU{75))S!cc(DM;S6R?^`{s}3Q7}qZ6t*8S05v)*co2zhMd4PM#s?{}Obo6O_VWaGa z<@oKqmEmj4oHCYrPptjACe$>!1R`E6mo=bkh|d`%mG;S#*9!_H8P~5bzE*|E3IdrR zGK7(WJdlCw;tH5-aNar?3@|&=c>4TaHW{qr*-TF|wlQOSCn6GGW8N&ot;ZAn9Di9^ zf@#TlL!pqJcVF1>*2022hOZxlInwdL4-mJ7-mWe#eGp_xBgr7!EVc2$`PY;OX_GSxxGNb|RRz1phnvfE z=6UTs_`~J3#-ma>dW@Jhfz}O46cSQWNJvu>VsTo(P14io;v$amjlq?1Ndd;J!Y%>r zHfqQSz*R9cG*oDf9razN9(O%{sdC>jl#^L8myC@s*wCH&*87`zp2O%6jsk?rU}!T& zS>UF#&+Qk`lq?9+6AHlj*=~c&$>m&4l|U?}YoI;KK^m-9*ckz4Kjp*@Yvsh-b-(qa zs&C)EEqc(rBsP2%S+Zwy#Lggj`4ALcWd9i(8Bt)OPiVXq_Rv^-$bC9Gd774zQOBre zc9X?ikeW-=c)4?&H*a0(>MQFXR7HA$_(t%u_L(#OsA2KKNTMJLU{IpiJ7maTkyAVT z^mk%o>-KyFD%;r7LUW<}&J_ABh{zG3q?oBgLbc`o%0tqG&`)BE$0q_gtg&P){u#Ml zF-PfHt5wM=2h0L9VqFbv`OWLsKI(2r&~%v7;zfgh=-SeIzZGbRR#V6ZB>9b$5Y>oo z>>#vOp*W3@qd|Z0PtEZO*wH=it$_LRMGD7b%tb=aB8J2~lyEmuLied3T-bEpV{|{s zM~=SdD(C*4^*;07-M5aBI^TNdX4WW?ovPfMq*htHG=45BPQj_6$j|gRG4YMOxb%PLDI-HWTK;{)h=wb;@i)R_;$(G;TcpM zz9;y^Qh1uR^{{P%9|JxDcO!S$cu-Qq!1ua|kUhIZ^Pjf`sl) zlK-+-ETX=#(Uossj&J((!Z_8MyoV=ew^QV*oAkh#fd1J=auwzKaXg}gSHbFnc<|MV zmW5UVEk(#6TK!%WK5x3V%q0JJ)?9^g$0m8pm%gx!=z6+b7up<`v1ej#X+15Jmejm>xYBFK z)uVB!`p}P}QunDQ@rJ>NV+y+H%Zp1}9(u31jdT_vuXQ~RQe=k>u$}oAD@247J5v&3 zVs1gel!SRaIKDe);}Fk*4Z0ec7w0{qVutjO9oJNHoRXmUyo-8wfD2&F+t2|U2dnZs zX-NfKeVlE23J={az?{dgE=7!##B!fU%@Z#mm;~(}= z_l#~Cy}Gi7e&Z*mdtTf&A3_zQuU#B}7HK^3W6~x29XF6pb#L#3Tj$?zgR7+)tXYxK zOMGM$wd>D5NrYm%I?ic4Jt@4Nj-qE7`{KW~04;58)Rfh$SL60+YHXw!@l54wrQA?X z>|qmJiWCuuWB_*r>7?n8H{P~lkSAS5V8~>xV73v$x}p&p0`2w@$ADK_%1+u*m@U@pCORbX6WTmL8w6vz1qlKzQ^~ntVIe~4rpRIz75`y z>kod-&ny3<(Xc_b>fzt9BRfrLcTMpk0E(oa;l-lh3e;-M~vp<(NT=l=l+UZ zDbcFX)Bic8%K7%9=C-OG&OWLFIB}l*vGmYa(~$~qYa z)s~DpEi*{WWK+PYB0vU2iq5P-fMIUL`vUQb(cV4+DBXyBM7-+fGVhg!IZEWSdF{?=CvXN}-qq`Nps=GO( zqZ6V;V~mAL8T%hp-H8Qsy+M z^W1v~Lhh|6Q<)%)6y)ei1<%6E&u{sb9@7~%qU=8J*|bAO(=KUxORsKvzv8mR39m^- z@nVS|M`{F7&|w|M$H(`3N%Hcpme5Sf&!4&VDgdc+&-F7q9X>|fsSedRetg5+c&oKe z@vH2_vYN5;;j-LCG>5~f?oBmy+&Jxd+i#6>9J95B<4HzpCr!R9H~0BAvC6m6KiwR3 zWb%npsqL)C7L$z4SlNSnODlXm*Nl#+>Q218SAr7BkuQnd**o&u8S~mlnl?3=`iEKC z+3^YLWG&WAJm0n`JY(EGt;kj)FMUainPO>W6*G}HcD*}njq57!(#SQ&n;BI?SMjH> zVctoxGG}5<{W3%I(Aa2r=k>Alqt6SbBWg?1PUy;Th?$YvAZWVw$y^*8T2%}l1Dtm@ z=ievDcgUgoq{rGmy`ojpr}z7)oS}ZgO?PT%veU+6;j5!r7z9L_Hqwt|sH)ld<-Ay* z{9DuLeL=z=qv8vh*McTB@QuIy%0FT^6i@#E3^`VwuhANZ4E(rM|JKzlSFUT%+=yXT z*c^D@*l4AIHlV-tdrQI|(}&(1W}K&}&~-+K?2MnzLJ@0kwy_%RZgk8qO(U)S6ceuL zR(78z<)MqU(LLQ3Zh?P@RbMy#C7*&Y=~V+ZzGhxC6&IrTNXjvW=54-hyf)K7X=yd@ zxa{e&k4XjD8^k@*?gd9L;#*I6hS5CP%8M5@&MBw^ib2;nT)5dP|5TO@R?dL~CZ7)L zUeq|AFSfb)A+GP_Plp{!=W4m{&`D@+S%m|`0p-^R^KteOWi~;`i_-o4_ZT;Zvw3GU z4<@U&T${~s2cYWbfAfx7%Ff?slX7{nT)7YteFV%$o6n#rw`- z&WIW#33om(Ttf!xAA%$L8{B#~(#t2XKFDM|pwJfjDM0C@FHJVuF771m#*XGSsmEl^ zGWa<-M6at{=h}EX``8xoo7w)3TXvCZBdb;0JZ-KAFBdl{n0N^uU;EGs5k@>>pF6Fy z-}H*`vfDNd{|pGNOQoW4uk!E6RS7a3ko8Tzw1gSSYA}`0odZyf)3`l-`-b<`>LC+> zCouf$i%r2E?S1h7oL5MHC~`*ArOyEOteG0KuGa+`Lc*ja;JB=+Eg;H6E~ zwa%(%Qr16c^6K{*bCjBVb-}sc_c2Cl`a^QH0VeZRfQb;tNaRjeu3R~0>9$9+nFQYw zF+)i=24GEMXd%d?<-s$~j@UDxLGDzQ{m}esJ);nK!=Jp{xu!v@x#^3G8+`3Odo|;E z2{5(H?CBB~`FGA)(5hHXPIL2h&&hYWtYhQUQ45C$3=d(+W0K-twAUp0^eVJIO3e~p z(@7kpoqr9*!z9Mvv?RTNmn1AYdi?9%*(kn(6&~~#orf$6k%7>Q(w81vv4>}&pIW2@0k^TvD0Kc~`96fy4M^9+= zA3WtiYKIQd0+bGcMTih={Zq3pSFRY5 zw~L~JE2@rA)XD;pCaCL?Ov(YkBk=Ji+Y`+((QSC2c*1lMK?cHeF{dg!FugYGT7>`Y z5$3qi$jzijqj~`cu4Y9>)KlDh(IeHWda5Yr|88^hQMRSMJ7B~<%`#06q z1Oqvd-fGbP&O{VCpH&nB*DfqBD%2)nsAq|*m>aaH7*@Z5Lds+cg*g9!{I8*~?%Y`g zv?`EHnI?`Hk}3qDch3gz`5WrU$6gpFYXq~Wasakq;t!PGEXNQ0;UQQ!aWs=;i0oVP z9X66zTxS%srH&=`-``D#@ssHlbcJu&)?b{#sgHfV7lZo3P~!)xJ{BE^7j_;qbeg_? z)es1qDCJ}c=8Dv)p80^9+X0y7X=AXE*uII0>3i$eheMZKoSlio%Vm8CG?M+82>5GslwDW9L}0p5MkU}5FSDt+ zvUJR1XyE#3r4;RuhQA}ie_knvEBe1plCZY2GQw6q!T;!Fs*z+Y(m?~^lp!4x5jz1G zRpowz&EkMeRI+8!w1XN`gd`5w5!AwE%d_XuusVFi8cfW~+X4(8d4eQ^__YY*Sn;qh zP8<8W*Dy3AnD$Yt)h0H!5MZT!WYUk6Lpd}-X!33WzyP<FNUr@q?+;Jg*mH z!M^00t%YmHp^`lyWiBn|98%AcTkiPbQgkm}B7TH4yGVN@|70qhVA6y-`uKLDl-zwl?QkEZ743e8U{%F2L{d~i@Y zFic~ia!N^U#oDKk-GC#LhQXf-o0NM6!g*6LleaaVLXW)z+LNZvPDTnD$UZyPwU$C4 z%OKz~B$JcK)xF?ibehy9O>2ofrW1Ld`8o~7hcY@|_&}vv-tv;)oB0fGy=C`9N_VqlZ#A zHQnW!W(i3X0OP{$`N7}gv_806O|M>MMM}s+F|I8T3n+5FZfx9$`V&_&g%b?JT&L59 zZw>ry;CG_T*gumu>S@WL;I zYrj$O_%mfj*(E6TrP!FS1~(Oh|8=Jf0@!`rFC_)-+-4Y^K#HNaHn=$)z2?L`#d z$N;2}xfj^?6PStR`Ig!@$rN*!H~;ywHhy-Se!Ok17uTo3D~-eJo+NRJss}p#D|npn zD7Wv38S&b|#-?g%`OEoF8Dm8c$gJOf4?}~3-s}pOrvkZ%Rx7~C9QxFLcq)`}8UUHv zh=T-qz6@lH7f=`R+VwB=Gs%hsGnlB8PV`;SZuDc5s>1$VSUZihZWGvJ&<5@pxR-co zJ5H)j8U^eiumT1}{>r`goHCv}H-G!qAXA6WyQ!-yw58>AiN`K(ZZZ@P6IV?j_JlPS zy^1opctQ_g8h9V5tlV^ONzd8yI=nEu`ZqLaL2+wUE3HE?4czwsPyld**NLh6M;1&S zZuhFT9GCY6^6}x)tB(K%2_#59{jA!huy{WDb`6g0+pm|G|Me3vNN;s~xZMsAcmGWE z)>8_aks7r5`k~lgDG%F&IL)3MrrRE5CZ@tgBa(aai6%g(x%n`?hX*`mF{c&>P&f>S zFJ8QOR9?=3f(1DVSpTf8gPI8k*fDIC00f|IHXy7LsoNB&2-NV-Vq#-AK}rmc!~P>s z{VxrP-wSCgt@1CJRYd8otei?bK^I&}g%LKry~f0Im9$!iC8Fj^tL$bByd&%nIW4@v z9y}(4q%q<|v$+sS*vNSgg=VcEh6GmEuh2CVjuv!Gz$)E`Bb5xn3<4%*3cC+R)pYqW z(#O`Dzw{4k{$sqiAwjTuWF(`>bG7)Sc<-KDREJI(@rn)Pi%#%t77r3U6eo~0eEmP? zxcgg6k-nB1@uaG2c!A(Uvv01k|Gu?+o)+N_gH!IPL%_Jh>-FJ~S;=0}x;aN7Dy{Pdr-x)BTk zx$v5pz*Ec+G+TESAl=Z{Gri&cbZ!t@#uo#kpPWm*)3Ql0h z$bFF|j5ZjX>&C1&)5(p7pz?ok6{;QFi6s-OY!;S8IBa473F8+sa=?ZMsB$aerUJZ3 zZ*-CN1k@~Kgl|ctFm7uwwyG%F5QaGN)%G!8I}0;&Z*r_Hh-HHQOqO&nugBx9K<$NI z>p85l;h+AXBAfV~@RyAY7s0kJ?1r+8%sA~q3_<*~SCx%q#~&)cr79G7w`(q*8tWX~ z;fr;o?v* zmaNK3OJl$>prWcuGiP)7@O!_~RG?tbva-~`!=N9Ugz(>8VS^p64w5OMh_V?6C9)6% zSp$^dt|DWt44YVDIF^5@lPN$Lo^97dytb%rQE!MQCe5QTJYvWyjv zGV|9(Mz$s$sLBDGg=BFxNLsjHDUn!UZuZ1HvMyHU2s0sH z<_&n22oLkcJia%VyX`Z)T~2=VnrN|<03S|D zhK7WL8vt{`PfY+>kh_&wa%7!Cp0NgW^*dBrVPM8_!2^wrt~Un|oK#xcWjh>xf*)LV zoRjZke%tld_zV%n3+#y*%NUK$Rm8KZ4a}f)v7al*&rd8X+eu`1Z#H=OB&q}wh@TKC#PMUWjQk0D=+kbZ#KpyBj{z+u z1v|zWcqn>h*JOxIJF*@;D!Jz-F}IAx?$zXK7}*`ry@Y=PZ%BTsF9+E0xGh#tW0PKC z1>4qDd0@x!gW~e?@&YW3%$Ob|9s3>IDV$0^z|Sv4u2A5}?;%mm!Lg zNE=qYE}Sa-Oehi8w|7%e;GxU;oY`M(l^4^eO#5<{$p#05iKNw#U}s{VnFL6+Ec~ z5i1Np)x)~|Q{k0o(l?SX1*&qVY&l~w7gk+HhQu&wtq)?|zFpbPtw{Y68S{jJHl0@V z6!IAH++1xknk-dKO_So|BTxnRSBHDtQ%55LoiG&V44~LZV}WAxgg_*e4{Aq_1XU~j z&D0S@igX}8QM|SH1CAs=41EepWx)EqV>1YPN2mbK*0rVQHv||z2MHmue}7_0$qv}* zNHWF?{n7Wg%(rR@;0HkU-46#s=Y7W5`he@#$yX{pJ*gxdwM$&w>GXLla&%0J0G)7! z7M(c&RLEC9Q_a&;0T$!<^TWf#6^LnwOKxv%9mur>UuI!CH#_?^v*56%rvEYCe=^T= z2!QejQH>UEV7;uv=bbhSVe9wBB*SRz3!7<)o&;VxY8QS%!5ex)Y8V@Zq#*08hd&{u z3J6$@j}+p(ule!mvxsJP7|cNUiOSWhh0Q-vnW7|6%e+3x(-~+WOmggAZq6(!Y9F-n z@QMj@AL;KG|G~iKvio+cm2*-3hg4HiqG92Z7MA>@1-i8-O8BPs9*jl6xS4yqnhyFKj8e0TNqhTmB;)ZTa%ary6i|o9^M)y zgvR>;mNB6{|DBERxA@v8aYfYFqdj?yJ_`?g8#80jFZ}0$g?p$*K>Upz2rv#j08`Ar zm;dT|z4;Bu*ZvkwvMH3H6h;^L1++rvhxm=A`TB{dzM-XoG%Wn%3BHZCs(7sAx%{Ww z!SpO7`>n$rsdn_}+JJxn@_o0o@R1-uaDz_XdFo=4Qc@8b02crKID<`$6(QX@7>^+_ z#L8D@>i-l6CCWqFaA)U$6a1>~?y>|pz>g!l4YCdesv4_&LJV~lb#B3`3ttR8OVz6Z z-`iUVg=PMnN00&HTkwcDHwQH~Hi{T~=C<1)ZA}quFuEk<7*aBI>e%H*_jY_)QlT8bg-AOpvonUI1`h>oda6}4@?GyguHOdpzNwrj=N{u-Xxr346(Q zAh^}45?xf|w{PnsY9utq2qSWYJq0WcybzeVcOCf~B8(O6#}8`15|u30xG|apuW4gf z*JaneP~%`7BaMhPJXE>R#i*m(Bu6p3jifbU-{B?ufJoHO+}S!C)~}CEo}n`wEnE3= z3lus>WA7NVLT|bm)Ep2vU7K@ZW^G;^1$-V7dxq`TZ`gnV8Z}bQ^mr!_^9~VF3@eo%RFaWL<^Ox5o>_lQ3Yw~ ztH&zWuU(rbxAod9_6k_Q5>N04u2L^d!)YJR#=fPAFTj}K(b$#T5)w>g2odxI1V`HM z867x=mK}m;E;+f5v26jy$XlU?pb57`-!GnHF$Y2|g!;E|aD>Z^6;k89#<6u{U}#`? z_{$x^YzGfK|24BfUpJ#y%!1Z|V`btd^wm@qBBrdH6Z8WD$iY zjsm!l)J7Upc|PE>Ct5)ScqfJBb=X3^HZN;HPAnx%R|i@%pvTf#1+L~6IfZvs^4de-7$X~SW@d(H%K*Mc=TA+rEjosD;6j@!S8p1{~bWz(XaM6U^`j% zylnx1g7=|}k38`NK~gXT_u#>9tqp9tB0;L$Wg9z>T>RM zCBOap18g$+E_hh@MhKr9NxI4zE!J0iu3oOu8N8ZtbBtZTU0e9x(i(# zh&IOy*Vq@!5QAeo^#W@FKMW;fKX|(zL*LHC%lsh9ck~w8e`*IDQzG68-f6{5TZjBo zLAkm}w%p6RqUr#5Z`{897DP_30U^P?51+8O}L6diq}88r+Ga`(4eP2J|Ld%rV+eRY}RWW9r+LW=)h$ zof?rS>TDyUljIi`7EIuT!zhNHPd(Y6P3o$?PBmmripJJ=rnv$l#E}bFN$UVD)vA<5 z40G;35cWLh7uKyk9AesGTaG&ibXTKYIl(k=@^gIqK^qQ{hh=`56-!IkAS_QAw-aHN z&r)%nn;gc^4fC$7g{)S6?;n%MX^nVs1SJw+9@$~YHzE)}S|jwr%Gf`+wunF-%`UDg zf>Q&bFnD$Kjz z1iAVAS;zK)EfOu~W?~fqI&a^-RyN+&AdHz5Wi#$5+MTLaQSe!zLc`hN+p}Ub@huQ67PyymRM* z5vXAVlnM=KAO=T)6}SZqwL~H=G#f+$mM*D<0hE31=s-Eq88(Ppukgy?-R4|$(T<|$ z^h^W0v!xfg56yewZ^p>}H0%?#&Q=N;WXCTggnjFW(-*;#m*&oN=G3$6 z@=Q4ILRCZ}HGyJ~rA%h-wD|chFAN>~jB*fFGvWO4zITE3AcQ*#BWvsQQzf$?Ka-{f zd3nu`{i`^@f&#qth4xE^eaAi&H3(P33wWHFxem25kVK-|LLCmUv`7yCnNW_C8cchP zk&%%uZk6xeaguJH9iSo*rj&8peEm(^w+}fku>@BV#&~6Uu}IdX^@k9?JZb2gNse@8 z9+nn7ne7AE*_a$4BXGgx%quCg$b4t{%O1KeI+re`#*gGWzAsp(*^FZM9f%^_gb>Y< z^#o--bPT8nxD*uF;hO@*022b?hOSD}qu`HO zdS>RKvu7W4v3ek2F{KTKDi9)xaib8@H8ntz#Ry%P5c@^pY_(cW3@LQcpW*~o3_s(L&e26Aa9N%eZ4~F zFtXRS{p)#^o2UJ#R^0mZK*SJZs%$2B3JgfEfO4#gdpO8kkY7Z^zD4yzyC?1dT-Ckz zm2=;I{}l;SK$5HzRj(C-IT_=%)&v;8O0z)v755!tB11b!mMuPB2nTQuBfSK_!6kzl zPHm7}E!ca~@po!2cIFdWzu`{c>BPO4BIn+($JM^JiWWdL#3tuw7We7bFc#*X8`Dl&TcVZXCHHNHb=t|yQZgTqkqoFMAtBoWs8Hl5? zpHQ4Ue)%%0qxh#yP)SloP^Ad~2mF<7-`DQ$kF-Ts%-X~lD>NnB9l*0*Ii_$X_4K1l zU(Gl+Gcoz07*9$}Tt!3y*4BcECJ4aUf<}@YZBL(8Hr#oeT<_IrJRDswC?xdZ68qUq z9bBQ(o~~HdCtU{|WpF^;j*RptjsTQhP>SNX*XoFizbco$2sk3eIr#*CV`ryLlseQO z(3X;s<;yy{x>8xqEY-WxDe_hxt}ZOYbT0Q)TtYBc0o5;%RBFv;!bV_f1L_Ot4oL2Q zYpXw?7@+CXGc#~+X+67OHrx>@RCqLEuT=TU7gyJNQo6bI`_4Hz<<*IPo{TXNc9oI( z-jQsonP%9Y0fg4{zV6eL?KP|AlG9ELfR5~_F-3t6u>7Ev|GP+TCWagYw}E9~Q*gg> zFa9=E-Z;a_IUSY+5a$|ZV!9M8Uj12(aS?Bjpfu`r4l$(sXD#A$8b%T(r*~%!HFhm} z+)(hCJ!Vs>fy?csu9aAvpp8)y6hAoKUqcV7@pLm#6PVV(_Cy=LW?j)${~S9!asb17 z5g?;==g-^P?zV=lJF!I&12;+hUHj|FLwfv}3Lph+IZ~LgSh!bdNeM3WFSP2WGh8Uy za4wSVixY7ZywaXcP9v6vg9-gZ;0bV(5|9fijG$9Cq6;%9s`_Ms*#p})kyaF)A+9YH zia7Y_fk+^!#$nCU?oQSdO#8=jGV<~wI;cO&a`@h%_@WSXDaY!v6@p~l#eM&_{?qE} zYgDqDcIh&uq%7(!KTg1VqHR zumOTRDkxwft@?ctk54HRbz0g?KYwiwuI%)WsGPjUwReSdZ*sp>Cc!=m#kotPP#wx zT%evH94wFpM~Ad3E2rvWsn~kq%MTJ0xk}^__Dz_Hj^zTAN``AQt-7!%Oc!V54zQ(< zcD0|)VtbR30qDl>=FNV%>e1z*gdhrXtZBe#>wpS>{u}_56-9t>V^&H*Ox}Xa?zIo6 zTf;bZ&zoN7%N?~1F{?gYZ4IalomJADvxT^H-dX6_L90by%9DL}9MV%bPQ&h2BQ7#A zHMJ%)&w^Vk5)(Jj92-H!1-Y=xavVrMq{DZ~0XR_NjW9+?BjxoB2aaa6*RKnI)Z(~n zCV>bkxec|qlZ3I!qr`eM_BrU>G%YQcve78WPEPsMgIxoMNU0f-A@m`A??`4A4mcmQucW@rmJU zrQ_2N9`mCl=7K#5l?|CN4DcREi^YkJp1fDB8%Mx9XgtNN(%_!)@ePo-M%CSkin@9K zK8xHk(5r1vcWGhUuxEbFdk70DkGef@XX-e}TK@E*A9_2X~?w6WvH#Y54 zst#)|#BQKrJ6&=oU&zFU10cY3U2yHE39I=%NFK096TobfSF& z@d5>+G3>n*wfn0)Q363+(NnM+%$RiPI25(Gh$>*fxQ$hV5)?ZbAW{!pmda4mpsi$} zATy(|`kOVCu|S0|yP4cGh#c`WnQ^Z2@7ePPWi7_MLjHw06}O-sz&Ft1U|dZNNhJO| zk-R}^|2RAQqp;R0k8G@YtRTaoJv$!6cemq)+=Z8oiU>f^%f;ext%UYzFfU}HlkGN) zv=N6yLFUGF#fke)ca2#wK$Z>(8WoV>si2?0{SSDcA2BJN3L`l&$SeX$s$^loCu~q? z^m3^^wx4OSbsT@KmwS=kwsb}Z4GH=g+s={kam+wSJ>_Y!NPnQebsV|P+`ypFM3Huj z$h2TTe*Eki9XmU_ZMCi!2l~_fR)bkMW!l$F&&|p0mFp-+O=XJ0l4#TLZUN%I*Lk!@ zR!ye1tFiI+DFrfRhc)00>QZezJvvI!W`dVR&rRHmUGv|D9HxE2uNwTV_ph z@_)ar@Ze5&a>l8>0s^&T!JZ(70cxYbr}0(n(eW~vNjI&zULw)%wq3A%NtEb_chOQy|oD^6GAPPtr0d84?vt)uC7KIbvFPZO6Oi$%Feq5=~(%)|P zx8dZ43*lgsLhm{k>~l>%ig^Mvh5LHjdQpo*m{m7tXALvRdgM-$E)ywJp~d6a2ybyp z+ZGS<>Scbu6Y&KJ5z&*^TDu_K{N_1lShD=R0mhwwygJ1EVd+!2xNy|q7pi(G#pjC? zI9Pse8v<3z^pKrr{^%#Ranq!QT#tkJLfFzqKA9_6H_WDOq5Ec@J54_?Jij-6>$N`? zp&Fk}zoA&)s)8!Q-ppiX7l0D;yazit0agHLbKRFNH=?sfec37bl#SaLX$|E>`_n~+ zgW|DKaQebW9HdHlU7B#1hg<1c&;d8ig!w6fNR6V>WdtAXNYYE;^jLacZ{Ai1ZwIQg?5r$H|E@wlXrp`zvSf;*IW=j1LoLh~q$S?Ulh@y)Q5$ zL&n-^#%{+Mim zx*9#gKuy)KQAg()w=cyO>}*T2ro*QYzv1>=$pkMNl;p^inOTF4q$vO+RzONPnCHCu zBhN@09{=hkBv;pz_;#F+Bt+)#Ikz=Kv+Ci=x1Xc>?XtdC8j)#|Qo^ZjXZ9W7@TOY+X1RhW7r+x}U83VFwPp!G!v`=kV+UNPwrm#7S6VK(c!Y?TJh-eITQ51Z^Z1p3 zy<5DqvQG=B*T`PjH}6SV%t-O1zo5f@nQw($5gxN6#0TB%(o@X{1nPRb&CYUDGg!%R zo8shl@aV?rq@>+aNd0ai>17@}-Qv`>>}`LKKF-@0+%RUEJz4sC=}pMrr@=JOcN?tZ zJ(a*V6L@fy>AFp2QtjGp^9wy!IsST8d&Ccn+n!tRI=kpS<#Med{y>TQ!@p9#zam~% z@qIpQv_@w|SGjCNcIYUG9}GV5LAyl8EQ#+dRnU_0Xm~ItH4@R^pU=l=f7+rQZICTF>QwmxZ4D|1GMOUI z?63%D_4zOsSI;`V@v&pB?XHfkx^jg_?9y|aExz$s&^y?`V-X2C(z0da&_1ATk1YHbF`59ZRX=0o+8_Cc~E-R zBTTmc!^-4~eGXSP{~qY>itbHY|EEF5!qKiRx!*YhZ>$qJS;S3%YfnUAJ|3JGru`xK zWfB%^rR=ujmamX-kL1wm*Perv{lcX~eC@cU+0*E8i~L+{SH4-0M3{i830Mev*iTr>Z#04o91 z{uLDyTJ<{K_nhc^yPL#Mg?`nW?Z=N#GJpPjT)K3L8{a*-=4sg`tNpL`n9X-UO!ms{ zE2*=I%FvbS*kskA)oLBTV+8;d3I+1=@(>jjHLBw@o6TrxX+cRz35JG-h&4bU5Pc#L zZdiTdZ(U%Qr;=?b1j6+NyY-EQ-J0}$I3D@^4f{oYGRrYl-rXCp@4;>%Abs`JYajm6 z&5oy7xw>{Ew*S@oz;Zq7%y{e2X0uJqu|gma2m}IQ>KQo%0^$49amOu4-*-%)B%8 zoj-5Ycm564RCRAzd+#OJy4LQyqt#So(U6IeK_C#CyquH<2n5p$0zqRS!UHW`6m2RX z5W}*cmY#=(sW;fg&DqMtYGE^s%)9fqYgWTkeR!ugP$8*ndI?o%YhWP8_%8W z{+%xQxI6NczCC5voIxdjWHaDJaeE@Pe9Yz2@=-P-1E1X4>2~w?j}k?5v5e5T|LlAS zG)xl>{5@g!lx=>uI6r=Qz;eWv^7_yHb7Fm`+VfTH^~lps{&~*XLHYf|3H``@{2|-N z`ac_;XFb;YuVm_!JfD0kj1%tzw*yiP4;S_c4Q}H95U|d!Z%i9gR}mC8AnlE9;Q2){ zFQW0ELi*7T0*p=B2T2oS<0;Huvv(7)v@Go?7<{hzyfvKew=$+TbdxSzem|nu-|2Wa z(cMYpy&l{)+&dJ4|Ge?+`R5kq&aPYX%j>4=EyE2$?qyU-rt zh)N}mVxfg2sXG>M60cl2M>936YT~88XD2patP?BlT8^9q5izNcHVv;_bLrLOpj>`y z!jdd5d9V1YrP-`BLtS&KWzN75k0Bx5z^k@-#o*(@YJSJ2{=yQE=>n141n!Q>JRvUWBpz!FF4bLC2rPPaWy+ z4BPJC8S$5wK4dW6-FZHgYp?Fi+WIk-Fwd3zmb(2u$0NB+smoLw?l!)=Uyi+8*m-(# zxmI+sjPHda%)#C`g@f?T*nh3qqtiMK-+G6KDb(Jzrd78Zbi{0Ve#n?K9-nFT?&Q!m zt6orYE_No>Ecm3gd04pPc3Oaq!`&sEYvNECo@6wVm2k}Hu}4wS@P2gB#VNvVW`&nC zl0R}GQzrcb|Lf8jKVhhVw}v0m)@XhsbLOnjussa+ zqcc4T1>tmlPxY_V+dPoUDAS-(eMsdb+){yae>lf2QC#d8*}_$2m^5M>-Q}d1izf?u z!Bi6bYQ7gvFeia{+V3TL0+Bh%ZqzRs+0Mstf3BxjXTEmIVjxGsH%t*)G0oSUncsqE zbxf>IA-_{JSb2PO+m${IRh-2~&A6CS zgKwJVRSe6gjL;>?yM`QyGUOD4kBHsPEv9#KCubaKRG0WUv@_|9vsE5;c?tE(fpxa;isNohLbA=?uk-cZdy4A*zJmp? zr|74$?S-o~Gmaj++zr)EDM{qD5hqi5-%KfkCY6?zs4UdP!o2rBj~xqd_O8}yvXiUI z*%!nHClv%z@+W_(_{tQnRH}|ZO56?Tp@-{OINLZeTLb20#JCX>@YUW&Z@V$`7r4>u zDy*l1OR=jwH&Pc8Dmi5~f{=n}IR~iSTt#O|N6oc%Ae)|aVRm3oIwIHjKMcR9G<~8c zzcUS^zr~Iyr*st0)ke6t)WHX3c3{4*$Y@~xZloX4UksC;MMFi2OAAu7MVWHzd>$cb z$J-9KzvL@Ed;8O^H_`ZmyhE!jdf-(J%Xh8SIE!Izu{t$}2CM#*)jmYJgC+RH%p~sX zpxI?Qhh!b06B90115#KNP95aMY`O-bDY5xm4Nunm)ym0e@Ytq-`exn}(BzZgoF6^2eN{)_0yW zafbb=io0c0L6SbHPdF3!Fj%fkjVKT$0;siRR@4^%sX=lG+LUeGmrQe<8Pl7Fb8tyK z{ZENi9huEvhRR)1*pX)(9Z^4;Y1xq}CoB2rynGnn2P5cw`5BNWLLWUFvmtnK5@pls z=osIl>k_2+NsYQsD2+f-tWVkzVV&dC+f^vZv3X&5bv}f|5nBJ`aph!s>WuKD+LS6m zWZDthY_=JUYi7D~Njd^TO&Y)8{9c-5=;APfjYq_AT!}U19;_6o;>Z$|w}LOVtse&R;+xo>&Ktj z0y3y#2*WZ$I47ls>8#Wq}$tgr~oU{VsA7>J%|O zkVI^X1?v>VMqq&?HX_Z)xH(QH-NQb`VgpkNLwTAA9WeWRW;+|FJ!_GKjUVYnEt zQn;}>jk91+8Wy_#hyruF8Oz&lj?5*=@uc*5->-}{AKrd;#V2p1-lO}5RQtO*<2|n9 zS7fO4cb_%Qqav3Q)y`do5cm{8vZ2^uSh<$%B2%_h(k1nFwvl24jMh^|)s$*@6yGz-QLM7~lUWkz_v~wh-&L%~5 zxv0?xU^bKpVI>;C{eZA!Cu_*+H^3!!crm&5y5%W}*vOy}s0c1a#P+oi``%c>$ylhU&m1Z%NLoa?2Zb(^%80C+NZQNiLZ5-R z0_$ltCfR4t%%4v&h}A?k3qy6+TJTMhYsRr7KBDVb{sbL?X!vq!#lI_++`cez{954O504b&JS@yH~LdYFl)C7FH%1o5%2Pkk#!;a*DL$IlT)4Rj>)9OcCG>QpAK?2fb#OJ8PxoE~DZ} z4p;$t^xFGh&N%#tYV$E`I28l&;-JRe5!ogB3POwQ{l!T1wtIBcslS-W$`;u52?i0C zUnAk42EunD{SH~rVA_NOBlQfLHs$QPASc1WOeYZCX2PiLgY!mtVQ1mg(tjK#S3!Id zG}jz#WuXbgo3l4y#%MlByvKxHB%8C4CBee%1czNx^9=@7@u52Umhcv)^J0}LY-6oi zzaS=j1)r)HUocX!>ovICY0tCG;`4>x^8t2uJJHd zS-E^Hcw}P{>>Da}ic8S@Uir%e;Fw&^^S+`c z#jDD}b!Jl@p*n$&KJeu`#2B{QRF__YDI5TOb!Aj3pMc+*(Zt{1+7^R5e8Q)iW~LmX zHuxF!J*xz*9qdA?AJ)Gpr}vt}vq~*UQ!V#_*<&x4j&400wxWOgn$`3@sMCq z2n9`F>do?wu)H*#`9xL7>n2OoqxGQ}9#TxOx%^40?x4Im2}Mge8jtQs+*_%TUjuovyaE|$e zKiY*$!A!{{vCD7vN|9<)MN(3LsAE5VN&n3whjyjZ5$~9OMd~5+yQC8W6uz?kts{Q}I51vl#7bqT6$st-d%O zmJ@`=$%@J9FCK^sq@HjIeoBjCmBBL5bazr_RE&?ky3CHTAC;Fvr=XHR?D2q9l6ab$ zd11IDB$&(ivFpP))_pRHRr!UDbFTX9dZz>FEs*NVnM#n{cv^yHJELJE!b6v3t$yc1gplJwDV;32BprWlOM z&%7UWzkd>vjX2PQi_qg=cOs_=V{HE{1#>qnMq9p3#u!&3yS{lJREhlcH7Wt&da)8O z5yCsDTe%XF!svaR_W@j2dsoE>GdY#}A&a&&%n6uB2|`(nDp>F~Ry60ESd3u^WXxb< zUt#q?MjlGlpYm(RDtB7PCMzWs+LoKxY1U9ODAfJh*I%`6VAnHwjP)Ot+qc8j%tj^A zh?zZ5W5uX8^#sLYtLb(XXzW9Mq!(d8WidP^ir08%bS9(C>tBsHUM_SA;8U zlOGy6CDeS$8>x|Fd#|UXPlSv^m9QnJrUQ=pi*4XzLltu>LnRdh~e5Qb_hvjJGX#B3!zF==YmpfKwPY1$7=pv$Orm$P^yW}C43D6#RR}Xj+BsRpyoyd z7v)akHwu+qf}?qTlCiDYt7;7J0;8i8CGyGy7+Ik!aWT)kLQUREey@+ zYkd!9bWd&#{+H5q`YoK9^iP`%aqbQyK~NBs9wPrj513AVo}YKo>KAog^fgSrTK+EH zt<|;@I!s3Mdjs@Nq`|!@uzF9$ZwyOPa_)dO@Pj?4N$<8)FSeUWUuq-WdyWOVf>GlD zyf4}X;_NLIYHm>#xVx@m^Iv>}$mT)Tpf3`}E1SF}QwH7!pAvD}R^^{%kMN;G zg{0yz6l<%Q)*J{3YrCo9@rxBOjL{7&6EHH=w|^HTMGmJg>ArMpcW23`;k0OJKil@W=g93+C?xBB>) z(-8YmKFu#L5_qSij~Rk7V_liUBYgYQa`4_ zgBe|X*Tu_@-l&^UDgGgqE}#d@$z8IGMDl(mrw9*KZ@5wE;hpThvA41*e8L(NVc^4> z5bBu$<|Il@Lo!`8p;>(&TPI_u(;@~smLj3%u2FyW`jBpz$C8^!Z{=tus{-8+hSv6m*P)=ztdHeJ5#C(QK8G-S< zwY?+{#7l#3wv0yy9ErBzRqqlBJbtXRtA?y_DvC|wGwi|`7q0dmnZrVY9GW#g{`IgK z(O^udHXdfu<_uUPJ*z{_1=WfZa|Y+9%T#{3yoD(I_{{8ff3wojn;`6M9X*u=R9D1s zj7Os5djDuXJkkJ~a5^8^*Am1l{X^74Z{@JkAW{0)Yga4C9Qdeh6V*7Ym%e;~=Pk;b znV!^H;c{WW^L*rp1~_v(K>2f42r=zO3^G^I6OPTKLGEwRlvllbMW3~t8fZA|LED*l z791APaTPQpT<#x@TxM60)Z|fT!YirDWT53R%}1ep#>N8~iR`1&ejQhkOzIPg&Rpo( zWRVSHq!6AcGlr73^?a>udzHNY6&h@ws#aITk5>vg3j(iURQK^J73$d9`y;6@?iCem zPL6N452mvfTD^bHrSD(crQaTjN(c~l_*2MCVZ@lB4VRA9+=ra}3 z3UQ_6ER!F{`y~7!Zq!2BuE)7!ge%-?MyEyJ`i2h2HmKdg)#S@>z2uW}@A%fQ!ZhMx z`4nK5s4;z_;zE$`W6<;rOqaXubli4)i0H5=Wb2AjsDFP?u@7I47YlEdP2vdZAhodb zxp`>q=dEbQnj@4Rb3XL!*-&!Hks5ju8XE59QJqk@6KVO}du_MsRAGUI$*NoGCgl);GG?e#39>3-E04%USl~9# z26r$vP4DavJB?(%WPX{iKW)OeZfgtO8zrzZ;C3wcQ6uE~A^ntMzY4#Hdgu=qVcR@Z zM8_=Q*5>Sfmq(M(vqM2yQDPyAfD={^EqT-&rt^<@6g1<@VRNgKf9EWX9zk~Cun33d zWv5!Oit@}%E<%(w%}8xX=bS3Ef7HTO;RmBiu!TK8!k%fIDS#S$%gE@5od6vp_DCyl zs8y9AzfOS#BkqO~B?;ZhvljZ=f?olHxp$ma?9bUnT{ z8Pv)pC$&#+-qq=sE>M!4wtGyh8A+}M)#@WnuV(9alUen;u4sO@Ut9ic8hCyu>~_<;4#pn^^hzH%!-|ig(uN1O}l`4LpV&o9YoW z?nQX6Bz#)}E>x1}`qD}?kERWJ2JHw@hsRkAU0h@nbM0vRWZ&<3M70vNw{hI$E9Xng zbO}0x*K&=`*H0pxTMT1TIhWOa;`wXKiyVXVH3;-@)QMNn(w&)@Ap_boVdS}){jaGx zIO_0sbXpWevLw>8keq*bk4qB<{Ygs@E|kBUR>c+T>ZA zU9ChjUvF=z_8Ld}(+h_+Eh>JaQ-3L3kyF!Ds~EO!#=uZx!1|)C6sF`YVGqB(Z-a3v z*BERm9k0YmcLrhnGsjax=7iTdFAPnMns%!d?d#XelNWwSe*9=4hgqO%=n;kTn%@;6 z8`MhJQ#{VlF=1AXQsO*cqHUAtV=k&DM)V|Ly(m-7%rISksO_ow+vFHJ;)A%6?0smY zWDBx%7=v`Jjm1EX6k6TqyjS#VBaVDHExD}-g0kB3W*F(zg=8*zvG{ISK0#qp!qI%Y zL`Z=kmdbSTNvcu9Z~Iv7s8N(o5Nz2Nzemg-(W?YFQV1Iq$!ho;F!~(({Buda?x4bB zv|c7*5p{+vvj$WV{@nn}0k6|9oE8W6Q(Vnm#J0@}Rt~5=WHr*)b8J?wqH|X~e&~li zPi&=${Zd8SrmOXfn;2%o5hOue+yUKKS;)6Tv}xqZ_5CJE71_*cy>D{Ai3?|l4WZq1 z&hh+dRMhxJ+1g#1Wfi-WbF1YAwfLz!>)UXWmz?#JN7Bmox+LYX#D-`+Gc{Z4`=Fe< z;|9jjLkI0oQ2LbyN&;&f^B?4Mg5h@_ZQxSvv~QCg+*#5(g5cg0Ke7hVJB^OX)rDyc zMs#6;S7kACAyD!wAC~nP#AZV(Zs1%fq_(sI%qy&M2DXwW4Ch@qe1z6DKV?>#?wkdO zR28(x^i9yDf^XyH{E%Tm{x_^=%mQ&DxAb9E5nrZIFJ0`~O^$yvu~)N)YT=Z>_k=yr z8KG2aZxP08PsYvnRyCozUzadDxuhQq_1mN4_r@%*zV~xli|?)d)kTX@A=62CQSxJ= z#;?_(ap=lxsUK{iS$CLiX=kp8jTmP1?F|jHS;X`77Hl8m3JdEzRCP=|xMYq-4_rs5 z&dcPiM?3ntLRt;aGB4{Kv&EAE*>?v?b1nQad8J1^m0486*ORP~@6e*fO~h7h^G2e= z?F?_z{%jG^P&cQLB8YQhOFobKqD`I-w_3s%r`HQx8zi6nbETqGSKwZ4^ zgyW|uS0L~k%&wA?djiusYP9#_?1r*9jbVDZ(?5jpt^^_^l>82`a&YUk3 zWs^$bs_YTOG8lMDAi7-(@KbW|#~oG;lz-HKSE>M))_RrUB4KK6Rn5;?$17`^eI(aa zMznNt>L9IY5DoZr;|)lH@%G7LSlVzjo{XD) zB2(duYqy6nR(83~-Ka`-E{Mf_^_7ngZ&~bS zyZGxEzEfwj_O5m*@D&oWc?DRDVn#=XCeB&Ra`@@i+1c~PQ=6bm1*3{f0>&lb-H76w za=6w+)TEqg^%{Tr#=;1?{?|Mx*Q_0?-uUB^Pf?OgO|%1>Y&uOSO3EM7W#0=|rksea zt6j{uE^3{*H{QGdoDSw+h@er)083wBO~a~d%ugl>gtS+)WM{q4{*oCPFOnnBjzCR& zPhOZEYWGZbShw&H(3xovQl;f3G zG|lsdF;d!wDpYhy;_ib*wVJ~%Mg)i#bofj*C!1*upH?pPr~I>)K~6MdOrBNp)xn<1 zvL^U-#3*rkdq+7lTe%-nvup+Mn=J21bgu+z2bgmQFCul_3+>uCdrAB^D|xHoY|Twg z)OG1MW85{)o#ztH*gb^J{Ox|~kEF~^%q!0DhO*b(*w<#Ir1fiWF;J%YbZM$m2-Us` zbbO4wNqBr+U$#J&q_QU5&0h@Dt5qm7qRaLhv)TQ@NIY4B%vKnQ-P0CMliE9H;S zBIq3vlIlUoOFEk8d0rVrDpG{$nX@qFRS)ZAH-bDjq=7Id9C@NzoOA7jnM+MxN}G73 z%U_2fjF{$AmOVv;_RvXuxdy=x4J$t9lrncKTuzx~_J~;fPWF<`hZj;>x>JM8pSv*~ zpgGU9iS@sQ=d?(ZBx(tc6QaZkbgbNsESUUO!=Q;LOS47{tvLoG=ivs@V>KXr*^Ij9 zMwGk~TaNRZ>%r$Gkzlc?ogT_m@X?Le;M^)e_2HUS@7==`H>f7${}h1WT{K;$Y#L1<6U8p+ z-zoJ*Io;BZKw?Bcs?NH=I%KiW;jES8h&FgocZ}JVi0A!J!5Z*8y}TR>LrW(|;q{Vu z>ua$3x_wAyAGKLq_Vg2~=0U(a1XlE)pd3dWx;uI()91thZO+B5YWN8c?aYOs3#dQn z_=idM^#bg0lo+XRmwAM@K5rom?vl)^BT;CB)+oy%vDIQ<{4cmN?aQ55x!K$z3!y_q zrjVi2g{lQc!sr#Ja~lq;xb0JNOSE`#drt#^VYrihAv@dwIr!fe;x3=}W>#p3tnha38np`QYUGAm z!Y%A}pr0VQE2nu;71(6EF%^gwNaH`arSlHL=Dkb5DOhlFXuX#V$G_~h<}6Np(kjdQXQ&JR=Mq+|6W8VfE4C z3mhy5XO+Xm!mzTgbS)(AFgVyyxv}n2R|P+N1uO}CC>o%%;r~XNS`0HMtGyiLZ>Y&4 zNQ@jk`Z_`vN-f{COK452{DCE5F6@nf7|L%POgQyqTBXKSxUD43D9A8VqI5|RgVAZ( z5AnG?kFbPp{@u zky1bLV6aiYR>kerRsSYvInn9Z5_8P(o3nkWy3Gduj;EnH$%2axHA)x3ZvkFccLZ8$ z*t?85X`15I#Zi&K>@G&l>k}R}4Cz6a19+*V)F(^*IVqI38@+k;UGy&s(%Bfv=o?IG3{A z+1%;*X|SlB7P~sD3gT>|c;pfSMCYn@3fguK)iqh&oe742!0vnFi>8ji4wd`P=f5YI_{#)^$IX5E&3 zGDq7vq|h9Vlc&XkP{IKS1bnG~EOMWdYd)kY^nl7;%lVMFG$ zM1|mJ{O(~?v4vjK4R8KOTpD5(v&WQC`q>wtTFcisPrOa=h>(CSwQ{-W8V&Jtq{CPI z-G-|6wqBw%H~cPpAOh zM$x;4pv>7VR`cnOyx)0b6qLbgBugWObUePNRh%{Tb+SHGyX68*!6puYZy_#ozXnU_ zZx~)X`nBgKrwhD~xV>ygu8^Vs+SBbPMLaxN{JzNR6$J)q>Sn-5>g*B&J9GTAHe7Cn zWM_zqFx!nCxO3AUM*=o5^6@~#4)KFs$y@(qrtizW@oW0H)#mHHfiqF+>PDy%9K{RqqL8nFXBzf(e;N#)6XT! zrnyU8LV3ErN_w&t{8%%|r~M$9p~-j^hho~~@mLx~fwrCG`^l+W8;W_henGjOo^C}w z`r<^6XZEThnq^DI;+-$mLJ`?epUK<@$EF0_T@lel>glYX>D4_w1NX{ijTT%XHyS>8 zaB2r7Ew^4KsMYnXC|PX}#E`jtl$f3>G#+Zn!gUMGwcZ_1oV*-X-dy(l$RQJHCxn*`HDh2|)Rj@MLlUBJ`+9^J>DmvAh8X#&*p zDr8LG1^)NNnf=BO1tIOxx#QLOMzG$oKw?o!)E?PneE6vDPLGWzR-Ma}&mTHv?>{Ir zq~t#zas(c2%n3*qmKzWw9WvHbEY%{d0dFT2dNzR>w=1+6 zB*N90nvYG~p2FzRiFc`0nID8nM+R$3gh!_A>fOY{9-m^ z2+<}^v~`w~-XO`~w-4#lzWIFp<8FEPIX;sGDA=NIMy|i&-N#IWt!3hr{POrDnA1P$ z9hvFyXl=jRws|wpU_AOM=b&pyzji_YA@4DKE2On)(leV{&J0U22`nK_hNoppsZuQy z6U}u-FZ4K&U`&-EQHM;(kFOSrynGq@r|;ZpYI`^A1Fi}vm|*oe3aZbjV7}q(+>{uWYiPaxEhpOAht4+B@Vat9ctVL1uC&pMkcV{Kyq^u$y(e*WX^$Jqww*>fOBGRZBqT2J~0co>z~7I^4XPgzO8 z+}V-U)WX@!lGVr21$ZbG1QHVUaWOTwxAXv;Sz6mV2~(YSex?H3S_o6=aw|iWT_i1S zY~}piEH(X9w9NhN&G{{;L`9H=d;|aij+P##U>`>ZCwBoKVXD963IOk4n%Stpe+}`l z7pBrvRs%~qyIF#{Sh-jsEYd!2B_3>*8VS>;!(1X=>)| z=^;!-1@wdexj#o2W#xZ~cXIz*3xGb@d`w-~*jXWLj*e{qKEvHZ+6xf!_lEwjGu*X+ zXLs2&EZv#Ze(or{khumryaFE0z1nVA`jDJM543nw=>zo{h;hZ&D4 z&%cS1cXIbIbuzbn5d{cmwFTr@T5y{4u=8`USn_i6vv65)Sh1LLn?YFExy{*4A?6nR zrrehQCPLNC7Vt__hkxJIizo{~6hEhhIS(fXCkuxqk0lEizaih~vMKP_qwrXE(n1Ys&A zTPIJS|LM@Ob+pv1Ju_;q0d6?Cc;+^|B@K%gn#r8!Yq>qsZC110#H2JpON= z*R*u~$ESaUfP?K{U10EEZYyAF{*Oi6O}#8F{#po__m3`f8&fB1OCY}gcBp^0+x}mS z#b?H4VPOfeV&Q=RdgbDSn6vP4^YF9qK{(j0%-JnCtSrp`Q@Xpem4~;fo29rla8lqj zfCK$?8Zg6Os(kgIqrGh`U-Se4JPN`MxPTTrj{rBj00##XJ465ipT0-@l%{6m4Va|nS(1P^&-X@q?^40ulbOdr#65C{yCmlD_VSvd{x zew#9X_vc|OWxh=LTk|V24|Qag@K&{Du;pk{Ws?O%ATwVQEk_z97++c)7lDeAfg_DY zK^${g?T|GW*Wi<+_X?M9-Z{l{-h<*w31_Kv{@uwu0nN;4_d%Zf5B`HZf7ZPpKc+(v zFvx{`E;jo@|MBKNL$ViwstWgaW2AH+1l5P+ADzuD9rC>?!T&kqkpR3a-~0D$8x}QO zxHJVgdwcslLLqW{Ts%DeUE%rp`HG4P&_q+$+QsJHaERN0VDH~+ChB+x3JVFTsjCM+ zK0eAmKQN{td!MiGA#97nv$3%?+b>QRolj0pg)7m0%%o()MON3)F#DQ$uor>A#v7kO zB6;!Z%fCbgE0jt|OT#fTGWwWZY+n8WV@HFN{iqG~Y zj!e*Nb9XG|5fKbR1Riy+c!8Yb2zLtSI+N8{N9BJ<>clznhhbp?)0ji zez1d2_qn)l8;_@Ceh=OK?oS{op9_e2!fc^NU$5B)iy_ADYo}hi^hQqr7BR8H^Y6QJ zjP5symJ{jXtQn!Egv`c0q;4Hu($VHsEQN)IE}ov;zJIFgdyp|OFd(RsE91(W%B8YK zj>KFxn9wjVl=!hM>)v&2iO9?o{fmnPJv}`#$Rb=^xGE|tyMn;q^~vH)6vc|)#xaRv zxP<9-_vg=|Lc+o)Z*SGd#3U)x6#ldzKW!W?{oK54H`yCc!;F?nQYg)Yn1;-97k=T3 za6am`CAG;O4uXP#1pM|8x?6KcL`H5}%9-A|3|STeONm5@-EJPzytoLE+;1! zn%@2aM$_?Vp_b(I>`Z<)zK8)k`edbr$-&VP2sT@$iKhFb^85lVMivfJx4-oE$?GhJ z!1yhepx0@|o)kA++3&AO3U=ud+_Az)3?HmL^i1BFJT`^OPMV9rCOKm$``P>8e`h- zM}t}!d3mH?UFIVR__K}_0oPb%s`=>YmW5i3jV65|`0lN~&FFN>*W z47ffgwQa;6_4)bv`o$YS?Boi1x9SG? zz@wm}52v#jUI4?nW5$Rgpe|;ruFh85`kI)3O)=@#6;xHltPM0V>!pW_frEg9zYPc| z)TwrTxOH?>b%&eKGK7VO0$vO;5-u(fEk?XLqQU}XsH|w{8WUel z|M=c1Sv|k~`{qPhLxOo?`}S-#lhYdACObl~#@%z;lD|6#Qa zSZrWm0Osz;cS$ods-Sl|*nmh5PEI6IYYU6bt%1mfrY4C)<{*34!A)9O-H<^L{{);{Y3J~bp zPZ;o6#8M5UTovoaVlLFJqoe5FUNKZ64p@U)d;r^4TOA8*iMfZVa5)%zx~A_f5vl1nwTCA z1R4N%Pz5RPRUmTd2KoQ7A*VotIT?Z^t48S*l(l_I0II2RyRaK0yJKXj}&pkw^-M&@e zZSuSCZ`QW0Q@x8wQ3j0FKQPefb!Lzw=#AbhTA5R=Q)`DCN?2DDBSjT8WQG_H{9Y}* z#ePwuP%X*7{T)3JGk8ooz01o)J0poB$Me-J{izX-Sjgdk`T!uakjNACW_{y#L<=N7 zbmz}cJivZOKiV(Wg}-Lybqfj&4gHX-V#~0}r7TH)0%JFzOY4vvRb8;?XGy%_J*q9@vbY1RCeIq5Cx%uM=sBM&<0E zRbn7u1-wpQl4vpD3N}D8`sh9Y0WgNqJ-7S&`^>f50*%Ve z{e7zv0>J!0H^Dt1eq)2e=#vLKlRxRZ`4UC@uam>W@ZZW+>u&;VY%0``KfbA#4Ga_^ z7kO)QSwjxs-K-557g^pV?P14b^!n)AG=3~1Hf0_PnpIXK=lIo6@`EmR$AS~%WHU{ z*6?zYa|Q$gpefS!TiN^-0;;9=*n8TGySvDbA2}E5jT3=5fx4$h^Z#|VCsj9S#xC+} z7bj|H+i%YcI1?fg5_{JA)Wp;dEpNO5)b!Mpw38Dn097K-_vT+S0e8g*s3DE|_(TTV z&i&;MA_j(RzDU5AkJdAOyjzQd!|^1A-;MwjNuUr-sPFkbPLoot#i*3ShsD-)0Uccs z2q@|h$b-ODFf&Ix36Fyqz$LKKz1MvahK7a+0sfHp?%7vMORKl959;Cej2az@cM}T> zE0fom-0OTjJ`#gM0!TK}%^zYYB_j$HGgvP!FM~BIrKF@_Ny*5jzHaYNeK66-2avRX zZz2Q8wJ&@NfH{fc+00Xv0f^_<4F3ZFZsos(8WK6j^p`Low>fXfn3#aKcXnngHR%DY zqoSmQdVYRpU}OwYq8k8`TwH42n|f!B4ItA&?B*DR{yhFbA<-NSjyDY zG`6IV6E(Cv&kq?$wl7RjzMuifw1hx3HGTY;oR_!GK)nXIaddRF3=w--V4GwlIt`(Y zh6Z%^n~i_8+fJ z3E^?*lzLkoSJhs>R$5vA{O;Y_Cr=b7C#S=uM(V&nPu|5n@r3NquCA^$=HWYiU0p&F zx-mt-VAK`^BPN#Q9kvKlL?eR_R=^Hx(}wk5zmC(c)(I}NjU(m94h#%rU}YT!a0Os0 zFvb3kj*b8ajRANGQNSO7gqbYX8KF7JdU^4*I(?71xNteV@spC4-n!TtX!klJ&dJHS z*p6j0+a8R5iJG68v9Ty+${!+t+9#o=>FHts17Lx{jxu9{-F;t4PhZ~@&{R}(bRV!Qh}j^b z(9`v|c&{Mcy4Ui!A_M`IN1%_)C=?VF009DseeyXjGTcg=bK>ElO)TU9NK;sNc+x9H ziznj?r6+eF0^==(9~31AAkRyuceCZ@BWAYrQ-_$A{BW{ z2q-XIi%~j}T-XKBPwXpb$!9Ztd;pPT0Wbklh)wz}H<^hODPJhNfB-R>fCs>#TH;0* zB!F(cbXxx%G~XcrUVsRt(SAis8y*LIH_r`lv9Tw>838W>IE73Gs}TU#;ho;+R3ajI zCGmHs%Q(9AZ)nfY0Zy->skybi4PB@f1)L%^BZHcUr&Zq&dy=0Wl$4qpR%g_?-5-tu z3Icj*=;;SmR)|pt#29e3Q}!%S65PQE*g;Z0G{z;6@d9Zre|ajI5;>YrKiIK#S|_+{`-^ku+UJL z7jr6q-~sp!K%!@s?~z2E=feDQNebf-K&km_eW0Oxvogdj}w=Wv2Iy+D?61)|$8 zF^N5A0N~HDFKeL|V~E^?UK~M~Xq@`GxOfm&J2<0cF?L)>bf3EPz1U z+uNghyZifqvImxzmrvc>oW5_zpS>Hi(+7$+pioZE&)+ENH8zL5y>}_X2!0pSRQI|A z8z6cdzMpA#BT{lV0w2(vyDs5@QsR}6!8fnVpFcUregYL)R7{M7j0`+9H1tb(^-@(= z>()mA&RPGa`&h^|qKH8$69NUmXOI{e@Is(+258)uBM&~mYX%@!MzZzXL%-0(MA7FZ zaL3+mLkAG)3mG3|_Rh943!<90rO{ZddF9Wfyn)Ka-zWR73?}aMn}q@NI2X)%Y&A6E_bB2ez=^br4Vt1B4j>lkk`91kg>u^YHbb zYR8P%^54|gXSCT%Fyp5@E7D*$iGHf>g&Z6Hd;l`_4gk==1yZjfTX&eS|1D66!MtP_ zpp=Qy1%3Mu4iLMMo0G-MG5Y+VGTXP8Lj*6ynk&3c zjb1R&J^*AuE@f&421GzNKuLn{9n=xH-V;DF5Q#AojzR#&kKH;uiwDRH6%7q6a33<7 zM0s(2Ev2D>?FVq(xHwdRS0v#HTU%QLv1isFhSbo~0zkmGaty%YNtv05qN1W-XeR5WiV{*4Q$yk4UJgdtHR;5Qg3K7ou1R17XIF1=|?x)+Z>XLh>p)~U~lxb1KQ zAI^BOOAm5}FE)&va$dG831lXE&v7rK(sg*vjE7qfUk{CPdm9^vy%#Hx+#9+ z0_cIdmX=hLIdEkGupWS5%2zo}fom#zPk@vUzQwE{jLwyndSwl zsGxz&w$x~j@KP+30;s}wy53D<9B_jNfT8QJD@%|V5C<>5QES)+4FbZCJ@C;7DE!O& zWQ1fT3)K*T3#FwcJt66bfJ$(b11=Cj9@y)O&zq z-M4?hDpaB(WHqT|6hcyz${t0?&WI#?lu?vQ*&&3eh|KJjy|XI2AtNgkAzQqk@BRP( z-}gO^=Xs9j?$+h{;6zXl2m6aVF93%|pz<~o? z-{KBHfa%leokdxud006Zi;Ih(|J}QHJ+{)Y#k_JDlxh^*Au___y$PKW{XAu{i>%GtkF}=G5}9Y+&(6 zXZDt(Jd(-{se=Ghr&Y~!%eB8%?VOyXfi-N`R_{1FJC}d|9&MQ%=;v4M!^Ha}CT452 z%A@!1<%(CA#vl9nbMwe{(1_8E*5|kI(NXoQ_|OJ~uwYyk$QF zrI_6h%F=}&TYi1Z-v*SfRqQM%ufZnn$PIk|vTK}h5yQ_JMg-u2cH0d%v68PumEwAA z_;b7Z<;w#&Qd*hDRHaK}yr*t2Y(M+zQ)~pQ7l7wEBcpvluy~^WnjdkT=)qx$GQj3f zz4NF+b*!}S;1Cvwx_!-r)mq$aLd zn@%=_^2({GP=iVr*zN;ic-1xDKR&KV6RM@FI{*bJHFy2>!;Cw34uA@hd(7fh@o#ya zbUcC#J3E>GEzMRDB&?&Oa8-$mfqrAxMHLHbwStewt-H@CDbZ?$)#O}nBLWKQCc(EJ z|7LeWt=^>kmF>=08$Gb2n( zm4$w2@GyPNy&?M{_w{u)Nl8ia`52p+^bZa`fQ*B?7t&{o!H zV(ZO?{gxxZ!p5Vm@uW~eGQBZnr=N9Jl@Tz=i-_kUB23U;a0~130onfkD#96EXIfx8 zbN}qCGcGPCfO){cNwtV`o0*<|^5n@~lx}h`K8?@ftlMOCPdl#+B~%=1^P*#a-_XUI zUhH|i$9aQEtzQM&gdGGTQj4H6Z>M>POR$l`zV_KGqt5Nm8b^<>#3=se*NGB7SpsJ%|@m~jRKgr+! zxffLFg5)9>0|SE}#}^b3R*l;!_1pY^>*9$@F7$0Ep6_vcUtfO@#6{Gm$M44vV<2?Y z*Y{V2g2#3-F;St3_)c6Akv<(}D%Iu~cRl?g_n#KoJt(2;$U{YI_^PzzaOatr-ToN2 zi4&iM=}HW?9Y21Y;rhR!@GAmFm6W$v7e}1uzFf<67*TQj^_d=`CO1F-LoGfTSSfg8 zeQ1K+-FhK8BG37*M|xf4wrr6*BCSfm4b)5!1qhmu>||RN3wfRiD~B*~y1BXGT|R%# zk)@-fs=6*$htA9B(_8(Mn<&?-HEmdUlNjFLBH(q8@tmw6FR$<4{DJ}&25(ADO-=ly zQb610kutD1d>MBL3A2%N0@PI5(ZK|+U0dzF!w#?>FTb*KJL|x!;euy8_QncfLPA2D zdLfpU*VH_`8e*%fYN4rWv*mA6;LYwUmX>@t8`LeVN=Y!5$5 zSZLI<%{w7{BY9OdN&Vo4dfYZydwU^npGxSbe&~`xWO~#7O>X>EbYZs#d1wPm8`6?XAaq zZ?~BTIw?nA!BLniT%Mnt37h3Sk9Uc7Dy5<+@Cc}!y5u8>0WPVWq9W&v3r+)}731T+ zP%R;VXyt4Jnig_X-XHX&iRVa3mzupvV*Xo$5*pAB91l2R<=mG%v#Z8_ETYulv@m>r z2N9Q%=3z^o0FGTWQUf9%^Y- z!t|fwo)zPsZT-^{CktGpJV!?m4GOF`Gx>r&Cvvl}J= z7gcyHcibFoI=@XUJ8Nu`TdaH}Q6bg&61W?<_#p_&tBz=9qu$eoneJnxX`YkjW{iwa zPr9X3`N?gvWd6@Y(d1cf#^8?oM1XzMCdJKomWzRPibA#Nmtbe6PUk7n>~ zK_i6$V$}Lto|})4zytgYinXJ#RX%55+olpNPKD^@3Xt5-uJk?C#+gB!yv)9;+S>9$ zr^OcEaMR$>%ls7xXS2Be<^c2-K+i{-DF?0>x|YO=UTthaSnDn0JbuCSO3h{$#NBwz2!w3!G^15W|h!1CnhG|zkk2iQ~K9~!3`?P9~ZdkeW2gLL1&&Lb^9Kl|f@rLHYPeRJ&;qei>n6Tbbq%C>Y zwM2eZh$+?lNOL65l`FTWr~sT*$G<}xv2}1bhx3Z&aU)Iq*-2{eE$fA;pr1bzGNnmP zOY@)eaQIsU1P2nc@z9||=D9jg!@@iht`lkI%e5B|K}T@}K(AW9!!eY(z4G-&I{hxg zi4%%eg(wXiCvT=|?&A&^d3g4fDu1w7IXqGT%v`@&FcC;_m2GWp`(^jpK{Nkc;&vR; zpZ+z9(zouyvevYtBCdbUjoWO+O&0$2pQj%C;R5usZUgo9#fvE&KRZ%(W>(>5177<5 za#XpdUtqfqP&@JMTVi+ttoi?1AFt*O>bURZ$*9j8{DX9N2j&wn*8`uTtTRS>IaZew9m9`d+6|bHjQp_3)CdpQ+Z**9ZBP&?J8!U-4)zWf^2D=J>xXfH=); zNt+sVR(}IWS6yU^lhePOCd;+@1Mc4#^$UANUuVZJqzr4ZQOg&2jK`K3i66WseEj&Q z)?fj?>M8+Rpd(crGEIj=D$lieH4XzDM2T8e5|uMKxTxqP)Nz2`b&%-M&p9F8;1(by z4JW%C1s5P{8&2@_GN=nW_};D3iZYI@UKMaWFKTF*=J${6$2latrllgnCE~UbzrY0_FNq9H-E;c!P+FL=O z;By?J+Hlxszlxrj*}*~k6R>{e=K|!o&O#=K2h}$==7Vk|cJgGG%TrA>pw-o7*miUt z9v%=is9|3~ni7gg{SbFrCrXl0x*tt?)7GsALuK^!_5ICjtqz*u3!vO;ASa?I5h)}#c0GL7N_3(>zw>+dpFZ9DGlFUhb063w z^PX)gFK~y0tu}fsg+@gcXgF3~D+ryc{ZNw-GteSxXkv2z@TCM{S6@|o`>ZcFLPJBD zo!qmtvN9Y;TU{sJ{`9RY1rTSBzpQ++;psokogcfdJ&MR~D;z0&`K-V2I~oWfwfIi3 z>wR>-7}1dfS=PNNs_hlLK7y+@(a|075P5i`C05#BT(siJ=na*@S=J8zeFb!Od2G|W z6*WCXXNyGU&kFz5_xjjA+a0GApVla6ZtlkRHNST5Td*TO4AGo)Kpa6~Hsz?}VSu&p znx)i&fJ`$iI(P<0Mg~yO5>r#pJ38j5CNn6veJ;9n6mMMdS8v&i*EFRwA5JcSfKH(R zL8mlojuavC_(ksOLoaT7ew19M1p$S0CJO;6Lg3a!w>QD%v{i;*vP|U^6tbL8(_Q92 zCM4vSZ0EpK7szqKGwITsSlEV8e~9DC!^^vG`=&nx><%|Y;2xvR4n7WrHOFzvc{?QA z1GNRv;!E!=BSvC$Q};~se)n#leegI8 z-@Xy}iVvGhHo||`NoHUUz*jJUTKHXrjwnS4QGxYw9d;S^N!HfY1*T-h5hYL?`WxPo z?P%)(rI=H!5C@<=Sp`UPlo6qx2;vApC~$m2J9!x!>&bErCMIlEoU{ic$}P({W5>t3 z2xmk!i5N_e{QH_a`HOI4b8`(YR%A7=w6rwQ?QiHWL;NCyoAg>pYF@ao1c=CSF|6R< z^NSu)F6{ZV7@H~nVq@UD@?Gp-!#sOt>!tNi^*$M4A9yK5dmlPQ@#1h4p0kDO$w1j} zR71nVwW8ND4*Q%1!>4*4c zhr_iuZ{B?0*vOgm+c@*t>%9(CVNFa-$IhF~oncK_u$>fjJVJXZ7oaLFjURYlj=eDF zs88%(U@Js@p5}erHGpe$Zf?|}?o|86BcYLsTZVh;cFAAGiddJK;r_M@rw>?VI9@!1 z4$sG2h2+7|(9qR%?)){~^saM9!q2^FgHh^p8vp}u74F++3EJ#KIOI4_%E<}Ye2SiD zy(Wj>M$owD9=t;veIY=G!TW(ah3F|BAKo#u_cJ0cPsSgiPUv}9Oo#82kls)4D6XGv zUR!@gU)1Z(n`?0&1_2&`xc@`@NNT```T@~L46G$&{SKbchD7&`fos%Ia0m*XcKMof z{Ym{*I#jH}Zt2J7W-CXZYj==1I3DrUM!~wrb(}x@3x^jNPWsHIR~|*(?WZgP zu6+MD`QE=@k2i;s6DK5SKPPaWbB?oKY-qQjk=|0U(Q@Ha&IxXw4|~Irh!MHLOg>)V z&5+l-?Y;61(xF`+RM|SB#cnX5cBZiX#zgvXrgoTTVf)Rh(#}(z$!1Fu;SAaa2G%zf z*N2CF#Xh0P!{LOV;K4zL=?8IzkRAt#R=&e+d|Cgkjd*mx>)9xULql`RERt0MO8lpMF;=_CXEOtp!DL{!+&)7yNFKE_B`y;X({Fqk^y^}ZPn-r_yWKE102SDw{* z$Xfdi%eyb&DXfGp4h$wnIf&EInQwJ1*$qMO8LV_DSpIXz*e2Elr9<9vJPoroun2gR zWG6WE{+XMsqP4uh?KSYpen=ugau0x%5hlnrKVO_Q`g%6kJC>W{wEOc^?ymgYmuanU zUJdAWNu*`osbg$rGkyTnTwYampJn!TsK)M7tAamLl9QV>3x+8Sj4DRl7J((yM!3vQ!h!61&&JxoTh!S3ziGjZfy^87YvMBdejg)$l6a*|^z%BHkY4`&bT4}TFC^I4Qb`b( zwl*soPRYDNyqa9R+Mirql0u9#TGEJX!Chv(b3yIpVINOm#SJ)y6!wMBZ{7ay5qmFn{Bh>WYSMi%qo~UGT5Xh5pS5$;5lt)AVRMnl*P4MA|D)t> zN6%k*c6nj(tyN1xa`ITv{3SkSVs_#bYW9vfxEH$Z9@_7vnIa7uTr$wg{H;T8*Gl4Y z^}y6{MBdfYE4s7i@04+dDy+LJR`C>gpEsl)Y{-v_v&KKrjI%C z?s=vXEqed-4GaRHV7k_2fL!A`2oq@8) zO35ed)Z<}la9ys5WZr)C+0|AKRLZ7FMWHBbj`CIs0B_4|%}7hLivEa{g}R1DF55>P zUEL@>L7SA{7Fz+<@Re|On|Rwi=*1*6b91die+A0k%S%1PNF$v+o3F(OHfhL`@IesH zI;5@HS9(SPE=&3@z0Qds^b$dLj0dFeO z6>`dpjkkhTlL#h6e1ZgsSpB_dC+f}mDgkDz@Z8+oFV~=yi97zhd-L~Km{SA*;^dS= zTAMvnPWw+d$8!}eEiFHb;3Mom zc(C@zK&)C4Tld>Y5({xf3~F)`&Ybb|U_JBo%MRD0LqghK5_4P7eozj5YgJ#Rn~^M!~Z^Q7uMX$o_uI5@*6EQW&t>}54^n29t_zB zB3T!(i*vf#l%`{TE5({vIh~Zr!3&5Vfb>>@Ou_hipw3fs?Zq80Xii2*UV$xUe7+lL z5w3Tn4&geszp4Fqe3|)wh*01s|0--Tb_zlhQHpHs>?+`~AR-Le$NA9b${C--#J{yE zU4$JYb}!t(bu&<|^H|cG4ErGkf>OYQFT_Rny)zv9$?g;T>CJ^b;0aJn2ax^xWG;+W z`18}N4b*gO4{~yZtE;QEa`>(2M6Ppg--HOynKt2u#zxpB^B2CdE1x?ULev4I?@piI z<62TGUnbusjOR(J3cCH3!p z1UXArmu`TtSbl%UgwKhjV;YZ^`H>{(M0X*itskMkO%mtV=z~(O#{)0JJ|K zgmC(A+p@(iHKGpU4nh|-_<#eAs=TBQh6LSf8=r;$nOiUKWvY!#ZE=r!!V)N62vP|^ zwy`$7rMb^cKfRPf;Lk0NGRjoDcxf!<&!0c$AvE`lSSUActg5JZrMV1QoOqig-daH) zALeyt?-_XE0$|0bX4^0Qgalhs`L=D8z;LtKiiU<{=?^}?U|Zk5eS2*11?w?0NNDk$ z3++y6C;kE6pC(4+>c3_7S=~2nM)>Ft&VS70`(}2%n}rBOFrf@tsF67#864PNd~@!Z zT7KZ$h7C^-vq-oKqrN>Z)y*`PE)h>VQli!CKHt9Vlbfr``Wmbqa0%M9z|Wq{ArILKPJH52g#f>(0}nkkc2Qe z$$gZW3P_Lh;x0KfnrS)@VcD|40j7J`i|a_4jxE>1C@H+4QO42#%9I zyWmv{FRjLh8&u*zU)0k2Y!S2&NrK1!6M@}|g1ghec^!g&QaBUQwTd9<_*YtCRyiRx z0<@BAD-L`H#VimLn2+5?$3(>U0Sv09sN)}hmUyiUz_NkZEBaH%p>JX$07=QcsAZ6T zNXQit7 z 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 SiK`a{f2a;F_Uv`Lj{gsQchB(v diff --git a/src/blenderbim/docs/users/type-local-view.png b/src/blenderbim/docs/users/type-local-view.png index e4482795677bcca872b1ab80a2c4976f8f40c012..4ce3f186d3de9c95c4884db7feb5304d64cca448 100644 GIT binary patch literal 312728 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

      HdO9R1$cLqy}axs!X>~b+41Z-)y=4&E$-3 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
      748AB|cH6Z2QA<@S7VDCX^k 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 literal 202879 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

      0dx5mhx#FW&rMCa5$TXW? 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%0DJF!rJFL-NA_?ulToznR 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 z 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 diff --git a/src/blenderbim/docs/users/viewport-dimensions.png b/src/blenderbim/docs/users/viewport-dimensions.png deleted file mode 100644 index 52dda47f6873c3540643f9c18d2c1a7a9b7e3e19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 124009 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 ZrkapBD2UFvtB!#m9W8y$%8S;a{{w@tuhjqm diff --git a/src/blenderbim/docs/users/viewport-sidebar.png b/src/blenderbim/docs/users/viewport-sidebar.png deleted file mode 100644 index 7931d22a93d8fff8b3b1a7258b77eb35717a925e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83248 zcmeFZWl&z*vNa5Wpn*Ve4VvKY?h**@ZV&G6P6!YnxCVC#9tf_%U4px7fS^I%$=>^% zdv1O2pIi04|8A<1f@jUuYt5eBqsQoeDq#w8k|;>{NKjBvDAH15N>EVG%)rkh2yozE zFM)hwC@8{2PZbSkB||q7dq+D{3u_38vxhx|1mbRC3I*jpU!JDvNXPw3_pu6z9y+Q6 znhriU#Wic|V3DM>v7}LODptyC$b^OU*{?NJD7}Wq1HaZ^g4d3W%<=P$FR%L4@gRBq zam0SD+gFoDH@?35%SN|87j_k)K7NAn?$qbWe!fQ!=jMLR4}Ss#iEYlx9=1e$9v=+v z?_cKL>9sv>hzM?kX_8NzpL=DWdS$2kJ{Yv&B%iy{Dr0+Bb`xFv>hmLJpdFVw^}=~)mCZ@+h!TryJh>F2Q8mGM3N&Z;~2f)?p6rwyu-h3ms_F|@79pBh3i zc`F>3U8plb2BT)h^MWNI{mbI-Jni!s(-m#y_sxXvL`>uu?7T!X(^eFv@$c?yCyKMB zCljmbGhBBzG?Gwq)xm7dxb-``HCz@ZL=f?kauRQPlC)NtxcYBH26)UcP zh};C;9c}#@C>_=Jx{u_19GbV&dOZ5m)|Yy3O7D|0L9mdixiLNS&=8C$SK=tqsYE65 zBTY$2`0W;*D=j6p(|{&n*w>;kVYRKpWEKgy!8(=9`R&~v9(^9`DAvDf3)Si{Dw?uB=~(-wJ@WNLT?Bk zfpc12t%vQXZ$Z5P<^>O&F1oZGX`x9xx4dr` zN~^vU@73dE%6A@(!iy&NTWQ&Rb#by932|*YXr4}q&Gg|-(yTd}EULltnv>(*spr7s zqJ;QY=If?rybo!))HQo~fy8qK#f=E5_i>`>hM68;_U9g@VXZHTMe}kT=ECv##n*ak zi-@RfS>$tsW9L(c^Lbf|k{^4N!ODNoN?EXC<);%g!bzUoLD>ds%kYSg@fPn*>{x9X#qDK-x)*Ib5?b6cqA)cO{!gOcQJ%)e)C4=T{`UWX1G2igB_k)(4|Vy&6x zU521~csedo3(H0mqzdVD_G_)gt0n3?iqiH2it zqDJDL&$(&myB<*BhTiI0Of79wL`8gJCT$Prlc}0-atiYt)y>ajyDWm`MSo;N_3@#a z^)0)c+*=)ZZu;J(5I$=2plU3FX*jI@%Tj|1!-j%6>YEH9N9y_K8&@^hul4$8Gz;Sv z_OHIZSGh~(ddyIa{4@PR9MM9HjJo8^ZSNr&j!U7G6&$XPPoX0=g2$ILQ7V3eG6dW~7%nP{&tp#N zHK%e+wXpcVFOzn+6NC;Luum{vkI99_sHDd13Xl|w=|jy&By@(j_cODHXyifk+)=nl z*UW4CaS7~w@dl+AR({^K+tF{n$}6V6N<*ZlPp5+SA8&tF@M$buLaLc0%fD7Ub6hw< zhj+=;s=4#pe;DSs{JZG6bm$LD?q6mWoTC4{@%?~Xr&LS;g#=fnylyNOPmSlfq=@am zNaF5~;&cIr|5K}>3m=iPNp*YN%^*s-3;HL1wDP%lp)rheB@#ZJ0WmRByJ}wES&MRP&49qudB%ij*wziGModU$aPb4)3V$?KjEtPAwA1ws}6&u3*Mwv^$`Fi(F$yS0f?K+`56ZN{Po zHkeE0xV<3yxiV2yE^dy+_`#k0hf4SAuK6aP zW+4@i5OkzESAIa@CuJ6LBHYhcwkQo?8iH}JR($p>kY!Ygin=lFR#;VW3bh4!7K&5@ zqnicaEH_p4g>z`7$Sh~~0JTTohd<>nEim9wanT)LQz1!1Z*QbDEx4 z(^w5_6uK4AzcH?*jJ{7Ys9c304TU6B3k6PWM8!{rcV>iFE)KGXe}Yzz}6u~U;^R6(cNAM0XsI&wUqW_F(ofa1`d_)d#r>#u<)Vm}sVn&!Mm zzFWAwH2?WN*_=(MU!;fMWOf2)`kN$)_!fzFk;bM@HmP2qZi5|hU(BSVIQw~jqnwT- z5gZg@4pamC%4o2bv*5KvHi?EkT)A|9@^5dk$BuUd7O-?IHjQ{MG>Wd9*R*e7v>2YD zhD~Hnjd$cEBn;aH2l%&(A{t?fHNmDd7WLarwB6t+-iSvIkpvP5;Yt%u;SYE& zMp!q-?=8=A@f^p_x4wnucqyCmP8CJ2hT$~4z|2=B#3`qaWqou2MlQi0J3Lmp^No5? zo-yxoE-RTyW(<4hr(g|7)72vwjBKmCPWO-GwH%CBgW^SBn7cpLQ1eJmYEa!&!mm3F z9$?}8k{%tr^tZ)CkKKg&b`j=b)yv!T5ivW?v{&&BA^Ek~X-NIDWUfEnyF=x%m&e=a z<+T?d+48CxE_!?5_TgW(f0%>+sZGk&ZuIf%mW;c7AfD5+HH=V1VLlRM8AIC^iE@j8 z;;}P*$V{`m0rqTy})kI*$)d*%GFlaLJGWf9TW{pM8gX6gnF*p~zLNzhkJ%UWoZ z+h5O20y^SFhkv0$!8;o5G-9_Flm#bZFzoT}c6?$*j5*{VJw-vwF{iIqG%45FPyLFw zdmT8tjDawU^1h;ur5o#$aE77F>@)qkS`|T3y3UvwQblp%?Ag?-Qh$mgDEjGyErKwV z9M~5hqmRYz)|=yII7~;N9}5P=|A_u9$(L_}S%(tn@v|hS>GP+Pu8et&H=JAx#mi<3 zOY{1N2)yhK?0f|}QkL}*H_nge@>0D#zFNx-{yulG$I5S`i%>jc?|vex3R7ut+@(&A zZQ@2%JgtPpttVhSkWWv_5H{$2w&xE=)ER4kun= zjv>F9c&P`K{U-W79qq+Q4l|QiN^%f#yvfv8$!5Eh{nj9xPHj?CYV=uMHk6sc1^x>} z>tzClUu22P$d(GXC`(+_{c~_rlFe^KkV?fWgv9-!+VAlw6$^fUFyZLav_~hA>}R6) zMO0@)s`NG=<;rVN-|uT6Z%V(fLa$dU7J(7IpR-z$Q6Ry9%4s?-XnrrSE0w>pP&%3h#+-i^7 zL-_s;rrocF)3oz$$fKvfNf1@9C3363!$WGVI<0IG`>Y)Av-}z9&V@2W-_=Z_?pdgc z=b&qJIClAef-Y34%Aucrfn_vgAt?}e7t}Zs+}n(E9n~H8&cv(>X$+@Q?6+2>FAMu_ z&wC}ltoF+0;Fobh^w5eZx6)b`L3P<}T(8~-r{|(X8jT7Ogfo)n;kGzXuJs|xrv@P8 zYh?2M>M1p+G#;>OS*+ya}<;m7EEZaFZAlRh=Y(nwyDqR4@%~#v{=(52aHCRRk5lT6dHvJzJqr4xg4Sc zKUq0)v1*-002>$X10F7W_9InM5seVZVYa->@sy|eQJUq4+|hbw(u0ri+VP2R=QXMW z!kNW_i#{Ls*YxEX=fL*6w^4F-dzVl2@V_>F%;Jb=uqaFvX87R$!{`k)+!!KGb_gcZ zr)OE;R_B9L+qfo&d#d=k8f(QPQ08;*d9%*YbfRHb4@}6=(RV}SnvUpy3A{+(Z9yrR zjmcc%`Vg7($^GN`ahAiLPC>};z2sGnG0G`){|v97@Sbv(b7Yr$RYmmjRFT{|v2Npz zBBSwiOQA&rU-SKFvvc&yu#cpn1uZgkp|ivI+x<9!Kgf|5$GjN$13a2j))z+wdzfH@ z$lg1mk-+_G`S^1zu^9t9jK)RG^(SV6P9Lh)0^;*@^L%M?Q}-X}wTQZ5iUQCUFP-*p z;|C?ENphJoSBezh;@5S*5#5&iKo_%~w{0hGs8Vj)?%m9PXO-wD`)UcE(_6GH>vgoh zerI}tfbctd^1O%oh+X`($6j&g$X^u^oATo-RRi`%lR`G7^`BPoPzK>w9)fYP!o~9m z8QsS!A84|L)+o3twkf>CloTqQZi70T?#Q=8t=kP%(7)CXEhyZ%A5c~CbWB7b<6P}9 z{M0H=kGi$hULe-u80W$>_tNtI&P3L&^sA~F<5SjA-Qpv|Hr_`8#5TB_7XcS=9%#JD z^`iXT`1lBQVWV&;9a%8O(m!>m1*E->MX;$gQ%9lvEN9tZb>3Rbsk;tgj0C*ur9?h< zICfWV=7QCBaC9EmNH+T|n0V2USoutD;RTW0>y-2=lxg(O(S0zRpB^$2p3!HD- z5Tg;!2|wv$B#&!wg~jkG!oEA42viEy`VSw`&KD>Gh4kM!(Q}1HMP80$9xcI?QQ(w3m&w?lGQ_Vrlb*|KVM|AcPfjYS|8E&i@%WJo9Stk-T@sAGZ7 zQE6;_dLuwz4Rf+wjQ%yRqU8t`7}~St+ih zxNO}*?7EE`itnN_zs|#3I^N6^(>4r^n@g;o8$6SSE7^|BWh)-*ZB2ke0_F<;@~AI%(wStAAH~Um2pTNh($Ud2^OElWK8g)v<1RxY8_L4 z!G$q0bl6a|+ftISAmghRTSkkB6Tb6In9ezWGRdO@qo;WoyMnlfjY5%7_LD14$ z_Z-esN)x_;>@u3chl<1AlVs?+>pjZ2I87f-%f!pNcOwW61HX<275Qj}3PzaK-TAPX zqeKSuBQjOE9k<<8VIU@)he9FsFiratCqdprU2#Mr)&>GGdXYRt=o?}6y8(&4NxH>; zl&m?&*e5dRSVX+f0~}j1p{Ve$W(Gog)e$Eb)DJ#MvIrK^v9J4^O^P9s)|mhLHPEZ1 z9ow)2B|(9`RiiL1dN9F4S~AS{4UzuaumZ`?wbk?Xffvn{2MQ5%eE8-Y^=QMQrd0B4 z2Qza49~Xs(Fi&Dn@b2l491AqSkO4;WeFISRj5qfr^&t? zp0=>CN1(=lb1tLLC_<49GRxN*dvlKRo5d!)JspMnEq%}%2Uzr@mwJ5h&=YCe6JhNL zsfg#L`5H%1O7$yBwu#sQ62y7!8VbJV{rlcvV4y3v&a`x}^ONU@3W)N}m z;B6|hod^xqqqg{Lpobz~wI(Z+k(J97c1QBPmzObGizRKyR)#Q;w>2gH&QVigbsC4R z$%&+vdJ&^rxAq4G0Z-*u3M+%ZX%9LS!4Tgsf7D)r4dkjmdU~6E;&OG1N%-@D3sZb` zS~hyuf$_Qx8S+lac|9a16}aPu(6E4p<>+7oo@#qs1QI_=m!rGOnmuc811?|taRx+@{(HLh+IEGAzzq;J_-?@X=M9TL;5Oo zwcK2&@Xo^>5(M+t-Y=-g7gD8Os-f-W^DK3TNQ@4);wU4?xL6 z!NC4tL*FEZqi?@2s!q6^!6zhwZnL2$@sBXUZsWB}m|>WIEM^oqvQn6y;>s^{BAX9x zq;y0Kj{NYvnXM1fw!>3zm__8_pGS%M0+wLDx-hUxEm-Ydwm+#RsPV;#F2h|?l^cr2 z?I%8%PK-F(;W+47dW{yB+A&e1fdaomwMFNoV11Zri??LKDL;A?)K=>;@Am!qqS9x(7*DNdA*D@@zjmZ zFIJJ2x+MXMgHvYZ9aKSXQBuPxckbK^|5#>fEG|l`*Rm7QW@sh%hsJ!~`KozF`rhN|B2c`of~B50f=Or22z?Yshy734E-ov(bVnc*tV2bZ_Cz!LF#%ej^~m zoZBtUtzVFSX;l=MMV}u5pS5a1B+eu{Ekp(_GU*!p3etwmc5P@Hj(C!+1Mf?6sog4W zrWKsV!dSki;PyQA*|%gPq7Ppv&EV8?MvKO~h1$(r$o)F+`nW$&Uf58=<>F$udRi>` zOC9Dfz4;kSc7gp|`ng9dOL9&fwrn{zd98*_lX`bt(9RVcK~q*^x*q{+5Unt}vgIX@ zxoHcQ$ec7Orx3bxxdVhg$F^K5+=qz<5k1CGem&xaav>Dw84g~ps08ureKr4)QUC6W z%b&yoa_}jAm9CV`B3$9|BALYp&WBg#(Px5-vc0NhU2$5)N3khRBxs}?MH}K0ZA0q5 z^@V%oa+NJ_iE4f?u8)2@+n;}&n~;x935>E+#<-l3qa0#!)^dTVCy5%AplpNAVP9$| zoqOw=k8?0;M4V7rOLRAEk^H5W(dZQ%<@lMuOB0evUF*I6_-YB21 z+|p8*dEweRN$8*XQN;j*Ada4=H&F2H{#|7zGGUxZw=FvzBcjAdUY2_if{=n~=Hicr zEj)a3asku^Q*x66p}8d;i#$XS=F!Fx!WDRIRBCf{)OL~uQW|bqe0+UnZJzdk12%Ff z)b%(s99{O!%e7ZlmMJQd*mxwhQCy!!;H`wn$t*ul()N^V<>!RW8MX(xE7K{HX_(C; z(r+)-?JZr?k=YJK6g@*!wAQkE^Ae7f&dvfsH;jOxh2p3eMo#Maaw|d|4N+!m-CiIJ zdb@rA>pLm)*!b*}%;Zgn4v6i!Q-F)(EJO;0f3m}X|c|j;@=I9w0 zs7!}}`R16f_&&y44Ej4ZJP!$tgg+4I>#DqXP3rh!|(oouPmVcF40kbj_8;zC&XMkcdJ1%trs><4M(iibQVwr1x zJ`}|{>O>SVyWExK8WL~kH5@ddWExS`j~e-5O2UcB3Nt0DB7eNj5jukMXlO8exSUug zcGF=`XzbQVtlu;bH-x{#3OBQH5)Zu`+hF*tC(xu^gS=)GL$w`g*a^DjHPVSwvj7a4 zogcxTs#&^#vkVW17<<+Si+~Su=8C!`0z)tE$JTk|(z@?|`?YZ@eioHn=Ofh-e)R?J z!cOtf`_I824z30jo2z4)6B|bY2rf{lTH?R9yAnGRfvKoV|$8}&lgYfF~MOru$tJ`uD2W`-}!Z}y=Yu>+eX zM#&R@Y>xUzwbUYp_(?prQ>%0&EKfiX1*@yggOV6}?N&vUZe4|BrX7}C@LqZTIiNET zON@r=jKzf_8AsNlIO#sRFSq8SRlW6=RF zxbi2XuX45ss!qHohDr2Bo@G3Xyf!@*n_n$Am39;titJEry3uR=F)MjUYr}!`ftUQw zuI224VxtARM?{o61@>0*Ku!? zS9Ft`|5zEz^dTO+$}r1Be{k|}d3c99ESdxY^NWF@sT~UH=cA`CFJJ4Qtn&^2SKt&)xK4K;%0hl6=&0*(6Y11%7+@yxN!BxiON1`5 zQDe_YjYDOfdfi-ano7T~F@2}GN3(oJ^H0WI$XejH>LHg@aw#Kpna?C5!bDgqhNN<( z65(NNM{oJ=x}x;Sl0?2D;c{au1R>3x20eD1*bc962B%@lK?UF}JbZ-i(9N2zJUTI6 zu>At{V7B`1;M(fF!FJql3CRdz==+8C9v4aFOaDP4gI(z)l)0EYwh$w9cfnk{0ceMP@wxK=12zz6LlSozYg;ECcYdkCK?gKPJF${AA|N&h|WvjBajj z3~sCpc8+F@%-r1Ej7%(yEG+b31-+Apt+Sy!y{!}ZlZn4=h(Vl;9WCsgE$nPbo@^Q# z*||9LlaYbzB>#Fp8~gX~|83sZ=^rlue=xcm+A}gUFfrQLF#hKqPR`=4z{o!@^nbm> zNd*kv8I>STb}o*_5OG(Ctuy(5nlLf`_x<)Rj@Ex|$HbTsVhynYOP#<|ng81(C8ggh z{QHh47noVt*#C7GaQ1&&>1<*8U(Wh(@Ah=%ukHNji-6nzZTG*e{@33BS`1dbf6pUk zXYBIydeUP2WKYlMF|jkYFyZ;@M=mZdCLtq9Gs?x z#@wdH#{XeL-q8X?rJ?nIzSWZ{6JUzjn2QwxF*2fOW&!WOX3P$uH{xJnqvtR(<}hVr zF*G$aWc$mMi7}6aouiE*I8F;2Lo*1Yy{*|_7oHr>Bdj3JPsYN)^k1JSSQ|QiiHhC+1c>Po6H>SEF4T+Oq?9dtjwHje{cIQduk9zClHBGHkp|iSpT;B zbSykzGr+NiPjLzi{ACvGg-6s8V(4t=sA6Yl%}@4Zg5>GWzrve@@9#sAvTy<`Jf0%{ zpO{yMIQ;$F-zi{i@z*61lE1>1$I$rihd3F!LQMX85V-H}OUCAgwq_8J-~R;EzdpD4 zzZ{k!goBlh%Y=!Zlbe%?o{htZjo#46goB>jn3=rQs2&TfW|5MeX0 zQ?MHlK!5Fqgz7I>QvdgNaWjWJ`H2bSHWNENGrI~iHxC;p4?71fGZPOJ6B*+_8)kgU z>VNH+kMaNG6TZI|{09tx`~Ln6zzaYt#(%@rKR$bMP%`n@>(_VbsBj9kSbt`I0F5-4dg zVHNlJ!!K^$Dyp}SD_6_Z(r;R>BmxoH0|OBdXeKZfp|Q|t-zka->4rZuf}z_jIVkD- zTCEQ&-tl}Y!6=_f3I&ZPCgXF4Y;6BfOPk=LmmjO)#9OqvKOQaH&%bXiI%S-v?|6)y z^X(9lGBC&qhoTbkIPZ>Si%LfLQw>(jJ^$y|P)X83md40&sSVk;0smez7$E%b-!_zl z(O^3}JAa*?j)!FvnEh=gG)l%Mxu>_+xK68oc(`SEE z#{MvE*<)F^-)$c#$!E6I{mvG}wFD_iZ)j? z{MvGz~$7mv@jsT{YSp=HvJM6^;k8kFaO#~M^B%h zlOxiUk&zMAV^mz{TTQ1Q&#a(-eRDIe!abp6$c9hN$oR9a2$d-EvqK481!6!zK%Hly z*>I{jcsg8AKzKNk>&fyFncD|cqLO($%q~i;DVzMu@vJiUT&V3htdZ# z<;*Fvo12?#v`6@x+)Y=@UN_rmc8d>Bce)5YKHR79y4mIi*U=3=o!3D{TgK(l!epzD z*Tm$cB4)_>&Zu$yLJTAYY{8ffKP`dlcz*(14Gav_NtUa-Td1=N&CGmVO=snziW&0w zr|prPi))sAK&D)|La)XA=U1YuCAZheI1Cg_Ok?D%$@@0NHWC{awYE#Cp~Rk2e|Skr z1KRGk7+>Hr2{p~sn90MvBt8_`5ENao+#fvM=*4*by5jUh4%G{MwvWe4O+U5TBG}>Z zJ9(d?drdld*tF4kFX!Ip@%{>fkg)9jOJ=6LgG1HjRc8otn)tVt%XzC$gxs&h6%kNT zP1n1_#KgqdtQH93oj6STK6@gsefsnQn@*!WPF`S+q#~x#aH%lUcK~cv5mWrnb|SrY zQCZnkh9c&3aYZ!onCokIC1vIQ(NVLVkuSt^*Ix@7KjwU-3P%VOl8}G{j<;TFoZcd; z`zkFhEfp)a@Xdyro_?!6045cuh}uP~)%*L*$V-81{|tVwYRhRFn=Kg^Evj%4a4-Bz z;ymR-IowEzZ?;P%)A`@NO%)E&Ry4m#8~!mU+Ts!to(qYI!Aj)D#J!cbyi5P`<-M>l z^z!mD#oM=WDJgRlxnlX*w@z*qZ{jm5erhxVwSkB18qz^UmI$$+f9P?xlwD=g*&o0F*SWeITfuvqlJP=RIi- zq5wV!CPAQ}p!l4aC;@>`w%uP6^z`%qZy6bpSy)(XZf#ZBEO5O4>UO-CQdUOywe{9g z_6q-}%^Eo|zsKH?a3gP8Tv*X3@i;jczP|kZ3Jv|A>VXe*_w_i?vih1oYXMOV< zN$1WhD3}0g1ftr1&e~QnP%RPiwdt4#COy`(eaw-1_YO(7$u%DYXZMdE9ASm~3vxTBV@i9u zR7f`Swcp#xGm?`(wzUbCYt?nGtULx@feQ37EX*MWxwyC(pzR0n0DvUm5Z*@`%WqZe zJAaR7JHNPqZ1%9wS`J>H+-P_ZRYgE${(xmqsO%s6TN!*DcTXFQt0PrR3f zqvsw_QbJSC3Mv#{czF2kbSX|(=*wQqx>v7WbyhgDR}7qcb#-FQfU*8c*N*^f|BF@#bD(rUa%q3k%CNa8qAj z-)e5O!1@4fg~^}GqrU3Hm{#wHn;rHCCCuj$J)OO;{d8!L>TMQW1Cnf}OH|8ro3OE$us~VbmC9~~%i~Pt;o&j-YCaK?l4je8C@3hn z>~+F#^NN6gV6eP?c_4+=j0+UvAWShG9YRe_O@xt`GDd2SB(va1kEP*F_}Is-JME>3HN%_9&Az&Jio4mX{F|UdaZHwR!A3&B= zpb-(3dkiHq>PLaB%$11jTv$kp7JLBSzpV7V_q@G0=mlXwV4eOxQ{W4T7fabK!XFN% zC2Hkbq|&eaZU*&htpMEs*TpG31g(MMXlf6i7%& zY}@upu*LY0jMOURKz|D9;E<3iyA=U&Wfu^j$XbOi4{&m+&FJ;725}G?WI{mpVv3JDGJo-) zq@V}}@C}G1m-{c0(3h`gZi`Av!k^0MXkmVSOj??Zude{Wzb8t%(HmU@_DqlIeKD=x zMEA~erIlYYijb6s1}UiHsVq{_(vq{X)<|2xu~TdK2f@Fb05IlzyZ06fkeK#t(NMr` zg%cqlkU>%c0%`wn=K+9xg9RHT`>(63oxT|Id5UgLR7nX5B`vLYfJ{G+6A@SBa^C$c zaR7KLSS$)kD&U3Wl2PW!(o;;~z}b?~#FT(~f=!rengdHB*4A`@rFX5_1DXv2{ilf7 zJ}Y>limGZ1pa!5ohlPa^@_VXm1nlmbk7No)51UTTmz@oQawsh;3%fd7Wjt%m0csk$ z_!FH5Y`N|6!7Cy!+7h$aXE!}UOI5W8Bor>YC8pKSuhX}@OiZ5vJ|{BhmbBz9FVtGZ z{dhgC>}a{pn81*cm6AgR9#-4o{Ojz@=w9)@Q0({01je1+6Cf6gQ{#Z(HfU7!w z_ZRUA3DZ)@W{qkuzsy;4)Y}wCw2u6?DC;fbX#wO zkLFc3-0qSEOBn3sI*v6M2`hc%;8($a=Nfqo+5 z#lAM)+5}v#3%DVf%Yh6OSaz_UAB33+s4vX`-=$)^R~{}o0cXskE&)~k^zM8V0|zIR zLfZLo79G&nD&t;0kZwl+@ZJKhvjqrtrwL0;e0=u@6auh4*6vPgxYs^ceQ5~-?zcWZDarq1oY7vu*Olr$3>gQUO@J#0rt*T z8m9Ak!~)Iv?Af#3nR0>%YVE)O;3 zGWev0grN96f3Idf-n|7908l27XRb|OKrq*G-Ev)hX>y>Ieg!}@yRuRtf(Gz?0115q z0~4Kg(?qbx>Cb>u%46DqGkyTleuAFLEl)-eDEEa&7p+wngbY}1wAL9yr{Ai>N^^C* zG`QXqar0;8aRlJ-Y_kU|6mS>c!}Z49MTOsU5-O^Xz>DX7{_lvs=~eHb5131p$SV zJ1%8w%MeR}4%C$gbNbaYrH!o;tfg5j$jCrNf%tO(?|^H+!oevFVfOL%X2N|zywECw zDW1du%Ejf$iaZdkr>Cds+)htSkc^yssa0P|NyNY)Yg_L!xYL<~O5pC7=<)X*;sUuZ zTIBR4Z3jA`z$MeOiSxS$BWN}>0Nn$oEw`e0j|~9%{g~5t()K7PEBgY7Ebr4EoI2mq zRvSQlfPl!!&6Spu+XlQDNFWe|y#X-rP_wN*ynuXeJfYW->o>cV5zzgZYxQZ8M6of` zbHgtAb9GV?b9vmlRG}}3&8YWj+?%-cfqImXlZ!H4<)JMFjt2F$ z2k_x*aCCA&hQS4O5KVeor3hiU??Q?^iPeHNx*@8 z?@lGl)Ji4d5+yPlO@gVywf1`-?*G*B>9{a!T-+`Ke#1cg6F@U&>9iKPANTn%kivW- zHH{)8$4r(}MaW-$0B?Un#&lk{D3E!qcFTO=OojlN0J3`raJd~IW+pz>?8Bul+1gba z!ujRNiHnI8Jm9vZZqSun!bqUzr?LybVLT5+YEi}YjC>W1N4*;6K*oE8v|4j z9Lh6$bbJ&<m046r$g`lh_2(Y zmB2oc)6g(m&J;%x790EOuljI2@H=??yKyh-lc)pvbz)@VvNs{ln!b1{D!QPiq||wL zbM681g4^qo4pjGMpl2|#umH6Kytc=v%6x4BWHve)+UmGBwcBrH%;(av__BZ6+lBPJ zj@X|tuhE58`)9N>||tQpzi_{sp=olDRY?9%W8y|$nOGN zuJ#fe3(Jrr?ey|;8+7OZi2+;0!onJk)i~k{_yZIi5Fq*=qoTIMX}=nPa^`(GX9k)w zwzgjrO%+=7OMdn*A(^R?mU?Fb@}r^>za64JDN|D6YK!>0IKp+Gk(D)0z~^@L;6Mh{ z4*xfkCB}d>%tzgn;BeE^57YZiZ*rL<4dc`L0l~Y-!~LWt0F^_74FJuGV8~#i#g!k( zhBxvV-W^^g0R?i2`1}2A_>r<-c(8zIx;ftoi;6M@da6w4`>UpaF1NxKmUKboA5BDd2aiE6Qj0zy%Rb}=8O20Rr z8=Cm5;)k2+!6{I_aOMh1)g%b>NGN761E|6m9eRmy?pDm%0I%)`SZNFOalLzPV{rh(?GC0(0zW&B-HlcwGVmk)&R8%os7 z9iEkM>ui-y=mG%E6c`3)1sd0s3=C0+ht}ncUm*4K3_FcKIUZDQvL5tRgGcr#=@SH? zAP~s)^>u@_^YO+;Zb&x`4Na~0k6*v+0l~|sc5{ns+s{@C?OIE0Tg01qpRZ}$`}2us z6}(S#6`li8(B0kr87L%E(}F=>fc@;Y`Q!2AUjS|B(REu2iH?qzY0ZAu2AHbDL3usU zmS1fY7^PnU{<#hcDG3DytaL1w-$V18CIAaZoxK}BA}3A!Z}nP+=Rx_h_<(oku)PQ# z2IUS)b25hw{@U7_1|7CU6k$I=fPj9JbsG&iCP@v=BNLpIb1d@O{ z_zq}Eka}IV^-ch90Hur|L3rv_H8gM~jcG|q^@%g8tx~11D+aRO8FJ zj0m2w0S@~yGIIJyO?^Ela3?@zhqF!TyZd`-DXFpDyzNkI92^Xw-phkaZFmzw9kwi{ z0<@lx*Y$-k8j##YP6P=u?_Ud}arxeH;o;%o`~B$dUOhRfpyyH+O?w)DsOva{U~`mO zlyTcVl7t(T->DL1WN8}zT5?-qww`4Yxc{w;`dXlj=+grr6Jw?7jP)6HVHj`EPW&F5 zH2D%seooCrltgh)%k_k_yzQDVU8I8j=FZ$GPktRKM&Q0r**LTG}Ac zA8atL<2mBZVD14Fo&Lia4k|IgB>mOSrWMm*ZjX)a< zzynD*86f=Zpou~zDEPW*=_~zYMOm52&Dj>1Mo0~E*J#kuX@7eGxQua8+il>R>B*c# zPJ?!+PZH!nd~bn5JY4-s@gf)%mkFw7PF7kPQCL`*P|!F1XrbO}VeM(8F)^V8Rs)W| z{zNx`xLkDksS9RH=4-{N*vSAO>__>pR(E!KL8Fe_c^55*sv0yrp88&(2MX8;eUt!A z8{q1R3${&>V5^ot#*_4Yi{CfG3axZ~!BSFQ6h6Mg!#)29Tp1Fq8m&bgS9P;+^Xb=crrnF(uEC&ss%MAQjwU(Iu zLk`f)0Etbn1IAsol{u-_davcpMIBYs>pc|*UDdotEMA4@09Q#`SQM*CUIc@r0i#At z9Gs@$bs*Gj>o*P#O1DD7b2KXM?1#z7WV)1fgn&QgMpYK+<~JGMry z)O#D&xW#NNX~Xlx#?$;;G>^Q6eq85S^Qdmr+?HM?=Si&mkrL!!Y$DC3+$&_m@uV_? zE(ulSz44fhU_m!I7nD7qYSX7n)j0>uQIV0I`f=>2ncR)q!9^LFhN*1P-kzRJ%02xh zONk|lX-MMrO0ba&FNUfnAPx>-EW&C&MgnL@+15bOyN)$`b5fX{G5>RZ_KGg<^b(q! z?W`~7NaOpt=M`&A~3$Fqd)HOI50kjL~ zZ33xTNZ3!xo0|zsr#;8jJHM%n zrr16`D7OdK?D!KqJE03T4!6$856z27_$e%RdY^nd7dCZwcCSo}e|;C=(J^~8f0de@ zP&+9S^yUHn5BnY;Wg^0Tfd$Px^Wvh``%erFY0*DM{J{TDr6c!YFhn3JuyDWWWr64B zGN>Aip1RZYsm>d+Am@4TsdimLX7AW$7VJGH3-hD3*`tqh2!uZ*TEHQK3K2dc@y`$+ zm53e&&gWYRXpR2$eE^5k>!*zP3ipkroM>);7p^_DEJp zfnWwGR+CBa)K>lby98ZWVEhdx!ccMyLTcf(-X-g1(>yZeYi8zhS$j(EH|&l$gV~8 z85$jpUR_<)(g)0P0(HJc1Bk5-pgMRB>*GE58o2IhKT14n;t$hN4AxPEs*SIseU_t+ z7ORf-Tw8A(g^dUYt8u7_@8X@$!4}wBkCDaM6+kFSTiavEv{^=8q-S7H&j-(sjR>Ib z>F;zUiQsCKs|^ec)Eet+y#sHa{!pjmK;Q^rb`RfHKaj)GLm) z_>cMhE$WR8$HSVz5DryU)$7|^BZZffSucTVv~9Uidzv*pgMk6v0$wn| zw*JM8s8(7h5%^Q30?e-adRBF+j6xPpkOJE=!G zIA?7N+E7m=kBHZG$_r!Wc4n}*xA2EsS7)b`oZK5SvS(mOSEfc=D4)3vIvSv6-0gYf zRMj%44FjSEaH>{xg_ec}=&?G_bp}dU;dX@;V+Q<*svIg7$N(n5?qmTU9z8w1=8G9^ zFii{r1t=LX*3lcL#i_xSmCWbJ*i#3(J3CL^2AOi~o@_GuL1R~F_;JUxRp+~kti~Z^ z1cX(vfj2ZX;ebVu4YGiq;3Nv$%L6R8r|B0cz@RF#^Zjav0mbxbJj3jB>#SC$(E%Eb z_|{p|`L#>BO`zw70KSp}+A~ix-T0&=<0=iX!25wuX%5~CLK0V-9SDsF6tz0e8>MkG@S)hRcrV4B}5QV5TvCAlc{H^B*X>UzcF@s_LftX zmn=x|>eZ{7w?06B0F%MHIsF?Wm!;Qvdpyi;wqEaRQIqEp5{KDDrfU+ugI)Iy71ccL z^~PU$OIy_r0T`Z{OywbEA4%>>8^;r?i2b|~qHT$PL@W~p?i&UU$yX%rgB&8o3v+76 zwKM#l?zU1L8;~^oz54H9m8TOFtkb+i_5*OGiHBOMy_7A@YwTugLBMQ|7bht;?6?Yp zQxQMi@gz8d!>li!NMSk9u+{(iuh|A-?O0NP?dB}Rask~H^G%1u`xe*@WJnVnd;BRFdA5$6D4}ul@|Ct zJw2HIuiF+Ez;x*}Yt_4aANU_7Xj7_!8;OU^Fqq~o~!-8n^EdWa?p5wFTrR8jW zl_F*aJYflNjp6gH78I6z1FtSBsuil2ppcM}PE$y|W>fp~nQoq(oP<%v^vf&<9d9*e+=xQ+M_D76Jcz31A<{a-qr~1%C^?33@1p z3QOt>Iz_0>^-Gl5#%1SEKlb|yzC5)?ET!t-R6c)H-)_!6RZ*R9_KBkZ0O-P^ zy#VkB>($eCCJ;#?0yxPXvX?-pye3-qnsx%9=>ThOG;djVOc*bAoGzKjRY- zjpywGcX9}&2rRJ!x5duIB_;j4rWVSivXKP8wB_yI@B_iVU>Oztd zwm@TBMeC7~k=f?;TOhd%A)4{tYrTvRBx0lNv$VlLB7@Zqvl z(jKwsHQ=>WBY26=LD22@^Q zE=@eC+`@$uSKs~3DHl@wie+R`32CK#>SzU{clqtsy`w%I1m8r@ye{#&Hi-J!vQ!WA z!t)j~NEl%cijy0*R!C3+YP?YE9Yu$V%jJfZ0Vg}W1kw(vlpMtj=3pX~B`M%xM3 zZmyA30&k{XNbKtT&}=uklkH9MPSeMagiA|H|0Y^4-!TP)bOjBo7{_*BNGK7mzX7un zevbSP;7Na{j=+=PT|-8;p5n#@w-#;}sfarVT>cLcY;f(Dfp}o#dbDg3(v~cv;Kw$RXQG<`KstQ zPBWRfq+ZoWZ<=7-q5RdhK+YAaOIKF(chq2mV=cunm!7qI4ppmXDB&QJ&(3Jz``5^+Gb<2BG>F|1Q~BI2xLgX zznMgc=JXF)H%yGy1Db|+_bzN*%#rk1F+BmGxuEceSFR0MWmJlX1qu}z#DgN>i)Mo5 z8870&1=cldU}vhVhQ{5?%gaBTBkz&QQDQeID+`Z`Y7oLXJ=0XM#~_4a^8p+z>>!)3 zE|2LZAQ%D=S|131(eSr_-Wj*Ibchg0Hs$&_DWeI zf>IO&4lKVw|AG*t2U-##RX_keg^3Hb{m)8E0?3^J{RP8F*3{G#U?*6K;bOVXZ-Lza ziy9}$JwQRRz5+*3w;V3ab{YUcu$^IC!UV$bWR#s(hX$=Hisng{>9gB>*pw%^bd;d!Lc|_RFe-LJTOACcR-gA&mCNg*#>?nin1FUlNS~YoBu6g0~p7` z(r2p&P-_(3OuP8UYG?VwT4BS-Aurex-k5$&tPCqg+L2NA3DF;PUl<0;w# z1rMWe!mtZrnTLRt%I};Laz(&EZczw)1(!<>GF!lmaVP{Lk>tO;oC`z*z?XpgAZ2oK zG9-mHgH={z!Hta~NUZ`C%)hQVfs8y4QcCv)6a;;Ftf&b3Lq{vWEGQzP3nV>=Y5QM4 zIgzyW(d9oA5Cxl{n8CFH9N8ZtAOyfN)n*V8nb~Q|dHCWJ|KZ_b*`&>sjW(}503j;! z@{)^m7E>$9&=I8-#>8`b(eZ_>hYWiQ^&iT3gll zR5@$6URc`vBQ+vC+?Cm&89cXsg0&}XCBWAK$f?PF0O}2KZT}s&T+MFq@yE?Ee*5o;!H@vH z1oCLO7v#Ke@)Sz*QmsB2z{(FR=+dX>`mKVUSBkKtdo&+RzA3h|fk162 z30{jmqk;7jrVd-Dw!6Fg+h)*&Uaj%)ex=+mq3&fN!UiSGHi3qQrbip1%r$`AC>ZTD zG&E3}+BO8kqk}z!1mrwyuWi7ofm?>H83K;7H8%R_lR6->krmx~yeOYr-_zIgOYMJ-L*Fh#lm12Y z5YvC}{ekn(@0MdiC<=t}mp`AP4_{+KKh+Hi!7<#8;xzl@)enCE3^Ee7n zR9cN~MUVU(k(ZZG_q)3EKHI4QE0-d3xEqR*?b&(0BwX0Llo7 znNrW5MeCkKM@FVUkZ^OvHylcrKoDL?&Pd-WYwwR!I5GlGfbgS`3LcKAh*?ggv>6Ui zW&o+dWxpUESDYxKUE1VzOpA$%gww$pdr)=PA3cSN!mwg8@+GO5Sc|O3fz=P@0TXdt zYbs&aQ1Hk<=B9cE1HhmP`)jVzn&p&yw6nym7mtItW95L&W$R3UB5f$+n#S()i0XW= zvi!zh<8)>m7Ef5m#IbR3+F`wb&^hcl$u!w^rWXG-;xNzqp6#I4c!1Fk09h``7M+q0 z+@OO!0B$@1tg*lY6Zri;x(JaU#yH$}5ik>82Do`}hYGPSK(vCLqIXa;`sEWfCYUS_ znVI$CfBui5vMz1Pc>pEE12(oC7}SZV_GVTtX88{@5@Xe0&D2I=5imT3$^lBupwQ4P z!116)je{Dl6P~EPemGzcj#2bjs)T@n3s8iUZR==iYMN8ZJN+%CzNy8G&Sy8Rm}X~5 z&)8mWc2UaYkD|(T`FwLKzo^oIt>(4IuD5^dc~_`xNkLZ8H!R3Lc4cb(|^A8gkYqS8~fN-nuyYhwkKM1^M?okz> zcKGGc8IhX4HTWqu7Qy~N>;X#eorU${&Ibq-zHf%8( zO32%ucM#FwmHHJ%?%v@c%;2e)RJkyLfo^&cP&#QdZt>hlshW_?YszFCoO5{pT#pjC zrpkAyxKSQp+XF>$>wQ}*WcA7*4B?H6$9=V9d6ygNz4M{5;WWGc1q(YnA|H``714e$ z@ga*n0f;MUMcejP9XG7D&1b)biQD=nBS8cMhC~4$9NZJ-7T*g5m6P>SnSgE^p!Le8 zcVN0{g+!{~-qizk%0}&Y?pLd}r%GhVf!DAsg1dbTcjZP@DV`HCT1E&yiAKGbv!VR)yE1r+^ zSm33>^j>{-BVr{PIEZ&JK>K$@A*u+%r+X2Q*zg3*5a$ryK512YcJ_!W>xqMQ0u{qD zEj$@~uzphAm#`r276(j+A^GfR8>lrHl!$tS+F$Scbc>%DNGK?WRG&T-2WSVZLJ;h* znuB9SM@J{c{cZIA2CV)NKaL4WJtuqz*=Q6@WC?ODf9fwV7Jx|Ny)EJB$c5lJu*M>G z#>bD+P?~2jA;W>yK}*@&_4&jpQ|8*X0m|FqzOAF_+SSgIKfj^}5^;4oNt*Bjt_H`? zZl}>QeT@jHB?WZtc3t9O^(td0EQx$@3}h^42n=By?gf#Tpz$L-a&o}MKK6F z$eo}zv)lDBRw5!IIzT{%A*tJoJ3GbwW>la{5ake8`C7lp)6%3IFi}%8vuY+Xeh;4W z<7vn=!6I-%sx#Le9bz;MpAwLMF5?=XJm$R*alxYcSpBcng2%W_tFk9U$4pZ*7S`2I zpRzw`>#<$_oqh!*8Un~_Ym-9Li>_VWs=tMV8V-+2PYPHf;T<8w4Mz*UpgWPp8`gCb zz9devFdV8!=crNxBS%nG!}Dq2?Sm~HB=sWXXOKYBD%=4%fjfuZ%-6JZ3w#R>#Bl}x zB?H!XP(Q_U%iq*0Rgc}BI-!n6@-pyiOhCgDhlbRL2Rafjxz;=;rUn3bfK^=`jg^V1 zyVz))eo$LWD}K#(|M0NQkOP=)pH`=WI}srvnV`gA3S$o(J`>J{2$n8bn4UgMb#?Sl z>Q=EQ=&Jvg+KtQz0k_{2;1Als$_SgK2Dd*5Hvn#t^b^#q@5Rw`+cyCZ|A3nj&udKt z`$6Rz5iUfV;AtX|By50(aV_UEy~GIQ2u2aYr6Q_c=S~jy+x#BDbK&u@0rOzS0--AG z1Zx8+y^x6a!Eb`efM_QeK!6cweKADACSqBDtQ&YrC>u1b_23o_KygCGvmr9pay9Q| zwov24$U#E?*X-V^%@Z1Zl*Ol-uUVMoG3YuzaSb*e;Ezx?g&14kN5vyt=>0Ph>%>(P z-y}C+xW8|FSgj=e_Cty`BPPz?YTV8lUMK^xR4FHFzahuo!rR*b^GboW1D4aT>6!>o zqEIt{mm~zDcI=K88Y-$g+%xDa5s!UIukg*Ps@}&AR5XGkg1^mSHzNRvFIeW#g7bE@ zH|`Lap@UI16^M3TH60OwzvPuUWmGc_Y|Ra^^F1_%7==TYp7Or`58Xm2U-E!Q;*bo{ha%9n5nsW1&jfh(t+f5$n(YhE?lHoDv)~} zC{~c_NbvyHTMi6aXldef`~8AJDgG;bQg)p*?P5(Z5TGN%vCbFhZn7}7kd9}&yQDZ6 zpa86u29ec?-0eU_qvaeK$*}@R>S4_OP9A+Fi;b9pWqUVqQ~@Pt@=U9 zyZ1wpo%bi6v-wzkA@O>Rvri{`acpXl3pPsZhFTRfG)76b;`@&3v#+y zd8HSUcQr*#vjT0@U#@`(ii>+6XaMclDo1rJi=8Aod8LD5!=tlNdH|A<2S?79EV(A7jX<)lUnV=J| zf_rft0|VA5Sc-N0@+x_g`oU!fyYIJGQopRcJSJ>eP=C-JUzHZVPN&|Jh-{oN%V$8CIJWfV}0(jtKk6VOR3jJU+y%!6{_lZ=PETaK#Anb2ZE3qB*{&8+LPddk~HQX!wC-Io_ZJ4&bpt(!xgl8AQI$H!+1WBuiePmBS&>X_wURf+- zB+$__Wra89m3PzplS8p);hG@gU%k0Oxd3hy05$4|k3jWvzSgNutbo!C#wXkH=(bf! z+`}UE+pilaII8rw4z23^scY#u3q5GJB+=I+Eo@zyMk7Pb8qvOSoS++WT$UNO*K(zBr8cbB8}j8+!otCJ-t zF+gxH>&AO5yGpJ~Sf!y^Fua|dT=4gE!+P>=eoyw6%Mt1NB=iEe`<+Ozj@0=u#9+ZN zf2yva@PVOQ!&eRWeCt@GRVIcz3zGF{7D5MM zsp8}1oFyonMgA?kZ9Mzk04j+SIC!CXkA*ikws;0cJMP|kFQv9JfRQ(~TR`E!Xpk(* zI^d|K5mN=wfNND`7C=@5NHfZOlRlUhlCMRGSeBrnt>9=9h(^bG zpJPjp)Uf?){2l~T&|%yVRxFGx(|>+V9!8Uxrv_Ghac~$n{Iq{+&Kiq@qzV3daal4h5NbvhYPNfIlj(WeSHlC; zN88fR}3^3dO9G` zI&ijIyu+4uWc+s_VWI%{0@<)xw7$HCJ#UmmC>1g&y?SROSZj|`O-FOXczf{HKZXZ> zAC2_~+h=dmJgp4c9xnGI{E+H#38p7xp>mKhCvchsb`7Z8+yq?<`2L^m2^HO6V?UiV z$upjhnin2lWd9(A=3ubuk=D-e@SLKeP%sW`b#I4sWUM|(6>=%iwkERRqK0k%B#p&Tlid6HL90pjajqEp4^%U zz4c|j(~+pL$UBf4NOP2}Sst8dV1chN9oA%!wyrb9w#E9Pc>tQJkf$^CcvXxbY__Kn z{_j+XAUvCrATk4Ph-a`dyxx+fmkaUK;oSgx;)X6lFnq)={t&=IwFsUqakjpT2mY7_ zgf)23*HAoqZXoV51#noM(>fG6Fj_2ff5AEmP$mGS)aZXp86o5!HyYO$J?VG zL2eQpkUKREzxnt9A*yWr6sum^$uV$Me_&&AHO{#H>se-XGWWgH_&+?CN?f~x58ZUi zn;|jZ`fH)oV$IhV zVzax7jg8%EhelGlust|}K`>@-Fz-2=Ow%Zwoj@wj7( z8FFpJ-;1-SNZXIzH>XS9U}8!?FY}yU+J4_LK@2f`pP5qyJ0`vr|A6yGEhe5gp|mM! z0R>m|lK3fs&7=JP-hxdfQ%RMOg-A@vjKC~LTew#L&(Lsy%fx3hG-dd`7wSP7nEpXU z-2%V3qVuQ~Xfv8wU;hWgSeU(4I*L9yJu%`+*gyE&*=r+P;A-=;T<^19me1 zAQs`s9j@qq^CmBx>6HKbK<+=7)Ch^+!nf@KfDR6;U-Dg_53~Yt+3QN;Aj9aYhYl&P zh~apMymF08PIAklCiz0CCuR=i3GSQ< z0QP2ssr^7%OMs)p-u#aiyi~`ElC?~XjnW=4>6)GF5@Hi;>+9`(539tL zrN=tRZW#~3va+%&&tI1xI}?UYzmbffnW*!pEV9$E5QUi8|Fls~`yfDW>00N|IR{4A z*3k?wwp%Vtwr~?G!%%MElC^J*6@tGE2L^!B9a_-Kfr(wXQi<1ZREi~37iJkt={SEx)QHWuCHA*CN#&BHl0~)Fc{3lk{JD3{pv9B>8d~ZL zWxd{fFs+neMmJ$zLi6+Z$qPmHSCB@4U5jMbQ9#ebvL*q>Aox^ku#KP^LN;{`k>!Bh zMC>lH2YvH%^NJPKu>;-{@_2MaA?w!E<9b2T0kuffOHydzf!dU4&ihaqXlZO0U6Jg7!A}LWh3!L8pO;bh?;Y>-(jXt+C_!~(N z?(aJxn#;lnpKZ+IOAlgn%quaoVluO9%la3?t7W*;DrH7z58|xh=46suxO{HTojLpW z?*-8+N|8?0V{C2;0sGg$KGe?m0cQ?fnS=gNX@EV@3$~B@W_Fxbm6b-*oZ7L8lP1L$ zCoOW^0un?b94fTyA!Qe2U^f6-;kQek_A1DD=C}90<`ry9Nb?`;&74r8eedl}fbES@ zB{d7O8t^C({dcf?)isyU^;{!m`>NqRw~8R6lO%>bCO*21{lfu`%7?`r@YRSqS(W3O z#Wlrq1;skWQiVIEn#D~!RmHYdF4C-+H-j;QGrC0rt|`DF6{aFR3CDY9%Q&W~L3qw$ zY0oMK=fJ~yUo~Dacho$1Hf6n0KTzs>1W47xpG{u;5NvaL3Zt1&>PZvs>}+2; zl=^{-v!hLMIGjj4U+*rx?z71l!YPgEwVYs{O8UbAn4O>TP4B_Cgi@>>%9e)2g+nsV_Nh zC+K8D?Yx5TDQ$#roaQ{X(nHDNeNXdCqX%e}R|4Nl_9xbCafRIlHkb8;|BCwie>H{rlXFxmW( z(KmExWK}jdXM_$y9E?fm0R_?9T|Tqk3>o;N;uqw6HuAX0&vfYP)|;sNRo?sWAg(2p zDcB-W*3Qn3KScLH#N;)%;n%O`C?Lw$5%2}}f1CN{6g3smPrKgh!bociNJR6m`%flZ zQhokvuMMWDSX(nE<_wRH^4PQ(zD*9hbLrYu_u_crW?-)>^2a`}1zS&@LAHipTq2Yz zR>GTq9zFBk)}2R{Ke4{YmXHYTUTks9RTrS_k4cGsISZXkO*Hdacpzr2KXulY8*~%F z!3i_lwcyK_8+QcT9e)xrFIt4lTY_R4iAnpC_;2e?C_v|4Sr?_rOszwvWDq#Q-=ho& zWt{c8Z1@Ony^nfXH|R5LQ8{=3CvyZFB1Bs&HB4Tl^$vbNVtiZ^j8!Bct@jZtD7ck~ z(F?^6M)=(skM$H5oys66u?F*-UFRA-kh=hK@S5HPLc{>-VhUy2HRRNR07;t82&xE{ zUZn)CcjDAv0gQoiUD?W;5d96T<{zo-f9Nr4o57L+UIh3g<0X1Yjx)#ZBFWA_5I@w) z+Iq6uHc4V2(4VC=C2B9l#$f)D7Ich|kF^f0I+oclezP+zU|fVIMHRt-+kpU6*i9D{ zP{#I*@3^`Z&VwqmZ zcLBp*4O~1I7hb?MAn|*qs``c+)93egsjA7lhxl85XiSRFIS2@b~%^Vu+6;jo5Ouu2Xg zEk!&Jq+g2a>Ytpt#ws}F2tV_`j{1IBhdUt1^m)NX?DwyY${h#}xXP8vktfUiEhqhX zH(GrddM4?vrZ_SVDSchr@Ga9}*qB^hN}*uc+S*oDRUMVLQ?ULintzJSTFwhS2=n*B zzux<465%jyTXRHPMJMrN0{iRku@h9IhY-Ldo}PL_=IOri`Tet~WS<@DSFdi!%UCk> z{_$)=Y$N~#_K>4bfPOL6&VdgD?bwM=nc5+0@=P&ju_PDJH1cl1sHfemMwSBFD0zMl z8W~j!8yk9N=8!OQe$+hxANK$%%djLv>?zRqd;ruf!lR%8laU85JpWQi`!BRi_f0ha zoAJsfZKq_zD?A3KbW?h<+eqn;Cix? z=k=8TLIh}ZyE>1oNR5h5`|HsrGbrCx78o`D3Ncx$M^yN>po4;Gs%*W5%uL{=U4CDxn|%Im0}-r4u1Jmd?)3S+SBp zahQPx5F||t|GWqN(^;{c?6nL2?r5>NHL7S`M8;(#$l(~zYBT+l!ajeeV2eo9)bZ`W;ZJ|=eb=xx_{BSepqJMiu#&Rq5)R+lkd-) zzX4@pX=g|IgIjP-^aJ~&CQRA%Cw}{z@8q(40Twuq_w}VKo`K?(~Q~2$lEcJ>rPx;?8MOLPtPk{RSpb1L46}`W#G7AWofB!!Pe_o%7sHBFh2BL zmurud(LjnM6ZGbX>7AS}U%rqF_Ck*xD{FBQ4S?NQrxGC@{uxa9hWV-W9*H^lAEcpx z%J#}HU6*H;J$#h=zYI2P9^`*Gd^DTgk4$Dbx3>=COj-bi)fXK~#&W=TA zT!CtO#&Vc)%dxt4i!gWTNN|j+bm~@Pb=@H#u(YvJI`V)thvw>Em)JAZIlt49wAZym zwG-Rf6%`e_1`WVrz+3|XZUk}=NKCb-Pls%;=b8IG#6*3R7GcOCZ)?kn&_l3`(}S`D zwT^N&PcLx>V>%*(sg1!b4a-q;WT^FP-Rzm*u6UObKDUO3+9PT4nwEx)?Ch6A<^HXP zrOW5OSCLyl>bn6E;p6M9=QN+<&`DZZT}{>$0XqW@$%f2#=X(^l z7|lXRLni$vjX!TLw4yL3W-!6gVG#)Vb_g8B$j}gkUbl9ejw#`ME%}<&fyzoAUs&H3 z4^NPGaAbZG${>5GFO2z&ZK11+`Kz#k0s#Hycac4K3A$5Ppy?C>k^`WYM&{+zl^d`W0$JvCuE z9(n|6^WZp3mCHLTn~xHtnPnV&es~C()$z9XKg&^e!keL6!nfW@O4F9n-MMS>_4OMQ z;wQNTg&hI?X5<4y<|4Ir&Q?q+iX^oGY?@pZ9sXd5+wjpT+(AWJ!*AUZABvWZ&|(Sf zFox+gJT>*0iSTiqi!?1h9F#KvY?0b&#Jzj>X3zT|Te33vAp@Ae=Yod?1<_Ga5{io0 zi8(aAjy2+?rUT0`?GFfI>9I;D6a^@9ii>d-qU*1-gc2qsB%nRS>`q(1eNZtY9(JD{ zc^Di+R8fyFS+Qt|CId<=>D@LGQ%`lrT-5a<(irKvM5+Hsbl=kMG1Zoh%`%FRdbUIX zmAj1%`cmC{uhYm68S>P4;uA+7+3kL$v5-E^-WH0c&!%OG8Lt~3A15^0*0K8m4X%tH z_w*(#t*o{*DG#x)O2xbt#M%qjtLJRJdg$V~qQ(6empaK`QT&OAzJQNfJ5ill zrD^|-76EU`oNb}R9HS^DfnvTFe8T$gvD13PrWe0jRxR=9I_MM$^qJX|VW!6DIZkc_j=I3X&%%jnV?e0>f4NdNAD3kzA{}#^i5t`&z>14PzdK_y^+1d-H>A7Hz9RxxR*A_ zzaZePbei0ep}JCkye!Rn%!7wZ(?&P1x`qB$0`}q{8M-u2gE;OTW>b~AcK1EFrYAI* zwAwN3s2egvI28Ulmh!Jy);%^dGBVk!;I#J#uxk#>lc=8ldEOP1QVv7z z(R{avUA4r(DXsd(Mq+p}wOK4W4S|e8=o5RG12@`DT(2HFRvm?*kCVaA+Ea>aICHXh&XA93MVOgc*k zk-j$6k^{Uka>MJEm+O@_omqW&`gS+wPg7C_LW17VZ@K4e=#o3O^5t-xB9*!^H19?x zd{ST{ksPTiyDAPl6<{!~nSO6-E0QB8B0=~?>sDH&mhHG|@x*#@V_877H~+fQpcF}# zc2h%HcuJKNb|T*Ol!TZ12P3utCO0*X?)}Qc#lv-TJZog%>xvs6A>Cf=`ke1={zOo5 zZoa>H4cKJI;itlG>;f_KkIwM%XG1@?m@ZUcXnc4Yxk*nJGW@fI`Y~61Nz7t2Ru`d= zRN|tXr$9SPiTN9CJWjp1d-6_K4mw$NFK*zkvtw zFWq1H@KQGP9kU6)F}U23`s*TVX|+jD6oQh|uEfPjozEGbwqP<=FS@U7E4IoUMa>=2 zD49jD5+JZBbk?q%h^*&l^~j(foBw zW5vJ=leV`)efOJZM$`I*0S-r!5+-Ih5jRm1u0-^gsU3l)xlw{3=EW{cNhcrCf{fR< zK8rIxW|_MoXUyrWCpX4pY$bw6omC)B_^H}HUMV+bzhfEbAHVdNC-;JLpWGLYBB*e? zDP%O-d4JJ998Wg$yshQQ)k@!MiSLizRz$tQ45!8kyV$6gl?Z&-vpjP0<47fa!(qQw ztZDC&S<($rR%0~u9A$Yry8cc%-M^o$$;vG7^lnH*lEm3%^2{rQh_&a4 z?riugu@J_|;*Vad$RT<|y{GV!`?LHDJg$BtXC} zeRW+a% zM~45PRht>t(QGR=sw7pf1=@+XrIhpCA1--z)|r-Vo;RTdvcJE>yzED_$&IQcK5n}y z^_#)L_H{EP^&4&E;bFfj$l?`mOXUmBQvXj;T{} z=f{jl}P`2C3~eY!B&1P~2X4acxox*B7K0-gFvdTJb9p{Gb%km#n>9cQ{3w zUTBecbL0G%uz{&$_$PKHh4n@9Cv7ZN76spLuRZw;w<%C}?XR`U;y}n?s>v(5@(XWy-^>WBR$MJ<}Od?Q=Lde z{DC(q;xWC6l7`@ZvJ;c=u83<@&0$ZD^60oaoi*7B8}SiU>2l0iA;4|n%%{0IgBTcI zcLG;!a5z^@4kgo8~&<>55u2|10#N5>zH$-F)k zaq|a$0kk(C)g-)&(2po7G_5Uq;rm!~!qyMy(*WWTdOS>!yXjzy;_$=)1$Lx`RA*z9b5V6e|1!O=x>vK zp2#Oibjx~(M@9AX5jE>}U@Jaas*M&Ih*#~LJycnq%bhbnxwQBGOY%G2-T2Wb-Y{vC zhkR~C_oA+yk?E-3eTQ|zCat>Qx0d#vIzfCw!D+JlIAQ2cvrCfexJkJO2hEoGj+bBapIb3|8_60j3d3m*9*723K9a($dSCYUUn_NeO8(ndC zm&)?e6d$}B4lJ<3bUc2E|AsF221C#thRJ|_J9A@gQaA`jDN!Who^DM!us{rJD+`Aw zdz1GtQ&QARv?Oew+!DM`(EYs!8l3+w#{3neogjH+o~HcFEV4}Hcoqv4lgm|wNVOv6 z`{|SF<~_+JHJ)_V(_UxTibx6Em(qG2ru&^S+R!Cci^6%D&pQ;ba;Ml*GMQ+|xX>}e@w?5)$8Jo; zzhGIc#^&L({)+$4SMBX(*)$x78k~{$@skP-9d}G$9}B&L@rdxQxO>p%VStfHX{&rj z$?;|{i{hQsN}eZ)oH5@rjQ@_SS2#{`6}axuim`?%rQMEedvl*8%i+SaKt1d{U#(}L z_daVsxxsIdwTv6Goeyz)C(D$&akyOnBqrt1ezqT(2=6lD9T}yh=Wpu?+^J&mw#LRp zEy$r!U=Yecz1rPeJ^$Mk_vOlvF)B}TtodzFv=Rq{{ls!e?anmu5WYGb-@_9Z)^J&w zn1gnwAZOX3TjczLJu=m7y-j({yS9!fX+%-Y`i9?0$ESe1KdTGbK25VddOMCgiHp|N zEzLNb^5G7H7umMks6*$696S=qzYF3e{&HVo^v z%iZ_*Z-I9~-_tepk1>?*l~ng&?}$_R$PLjUV;AZk6Yd#p4P$BA)=XNw`=KYO5y}CQ zMzoxwpZ=W(6kdsB9X9(|3SQ|nhs0;#{tIgHP$gAio#M3b%6qtxDB10Y7edmpQ$8|9 zNly`GR9&x{LDMdM!}xgR4pwFQJKg;p4}qU#;$iPNwD0}=aq#q8N`P?Up2yNoUI*1T z)3CFM&H5)iLytXW8H9%LF-^+rIj8jkrpVKd{oRwwdzp2l*>OP&(GZkSrX7mxMq3*}*h9g07#=i_T13A@ zM_1CsCTc*tRygv8nUz%{{;1tlMNUmahn!qZ$Q-3btje2AT_jbX>>#oHD#RY|=2MNg<6^T;bcy%7T^n#)%I;?+(du zHK^|UKG3=9=x{ztpjGXRRjAqcmMQq-ljNXD8wR2<$|@S^8!z;CBWYz~VtLXA-%l@p zPX7{FpTMYA=0i>nC!SN}#tevGi zDSpqe=8Bp0l|Gv)lkZ|^YQHy44nv5fl>~F!%_%f`g96Y@;vz{+HgdxYPQxWwjir3` zuzt|#Qgjn}J*-#SU^Gvm?uoZerR=)r-?R12)P>cHFegtvDo`JRsvasjt1c;f}FuD_w#`E@@(v++3=5%J@#HAaDWPV2=V?Y zbE*Bfhk@zAX#Pbwr?D78^<}iJ9NjQ}v+l^3GkWdl{S$BZJM_ig2ZXLWMTQgAwpxja z-F9{i+@dKqHAxmyXu5@kYV`fvM^Fwwi?g|%V7XCwCrII^X&8$+Nt!5^)!W~Bf2!$L zY~Mz6Yx9|W7j^0LTgmyA&~7zPDjd*9A|>Y*o71_(MJShv)^8=rI_Do*jjKHriGELe zNbTy=`!BN-kFWw=ysxHF!)^?&wuR+>si&R(r-kEPedcfSqEb^aOZ=HeandIie*QSv zKPo1FD55D{d(05)xOhMApmRxv#rIP1+aiacM_pSqJNfr7JRbvA-nWR~r&i#ij3Cdg zNOpL4T}gCb`tQW}!G6Q;k1yu8Cn;5evn-2?e`!@yIJxr4#6)CjCw}{ZMk;;uh@l6y zuV>q^vo@B~Se$Gz%go{(722(&%r7$!vx0sykXk>=wUNi>1#5Tw|&x&~}EX08;z!Uu7uz&H7q3EE7 z`dw8jO9e@{=(WEK&H`}U^8J?d*B4b)MS6A7KEiI%+egtcQ4)!5ZwSZS9j=swlm<{f zEL)%H6-A^QL`+=zm9}N)q09-baj%QabUz!!EPA zENY<1tL!_Mrnc-I8EIANJLu99;)F8j==3pI3b8c!6o%DWp4wkO#!Ir?kySxQVH$S7 zRAb#|w^J3aEVd#ux-a|0603ti5iq$Arx7zBfyV;GtY%tD-}ey#gYviN)Pe9VE3#V@ z;$iJt{3oucIiFv~Vp^f5@ze^i)}X19)M;#gd5aouwsfd?@Mz`73~&C9?M{bC^)^@M z^zFSEg+aPthqY5xMM1y(`XDDRe#e)K!K3>jTTe_JE-YX0`##A1=Su&G>KzZqsy0xUDvwtR5$C`A(`?C9Er2{Xag|M;0So?*$3ZAESM7?(VDK)dF3Uf-% z{tO#$on0jRU0&}?yRvQeYdiW?FoWMBTYeY!seYR4TKm3FDm!MrQ~en4iJvHo zXEgm`U&WxqNSK&m+iAq`7|G7gPC(nDJH6(TdP<4kpFH!3ZJfC8yf)g>ZLuy7!?0t4ekdYOKuJa5|_lB&jn-&lXauNCc{RI8Tt9sNV(08-2^z2WY;qA zLuB{QF1ic8w>OITCk8SE%h{rqwiBvr+-oAHc}=efryl|-4L+sPLw565%DAtplckj? z^~ETL&@U^vlX}13rT{mYf=cuDZebIT8!pY*_vq6Y6pN4!Zf{o9lh+L5jpwZ`{yC?Lbhc6{rw_WGZpA)DH~t;TRiST`_#&k;u_uu zY4@!`6?ZJA@r&LF~%oQ(}QAX2xrl;AFSUcS^8_+n_+NpulkmF`Ti8 z70_lB+jN3)KbruKw&orb30a1dFm`HU4y53w@O7teYkwc;n^8(|qEgZDv0O2=L1(94y@3Iy9UCPretnM9w?7FY ze}59#OqRcU%F#UvXWPP;(EJ;RBqp9S2D)!KO*)m#2Ad;2=1Q1ayHU`kkdtHsjfi-u?tti$?8Rm@mk-T-onDd%*_Rf=97MFwW9<$dXUPeG8P!6 z56mV1gaBuTuQPDk%yz1^o2we#DP2uH^BXhQqg%u~p7j%hmN&8_KD%~Pz8L5^R#PMJ zr{>6SOoky6h`W7qdF=OfAoylZiajmFo3j{ma(#cLo-zpJF!#j&-0?RUTeQ*Q9H zyPwc*Y+=1WbM1&$W*~SOlY@8jorO(aZbjz37zIiK(&dny8}XZkBt(MbVGkM2uWxvk zE?m2plEAH!Q&sh8+U^2>@hPT;n&43-yZyMf`QgsVgle7B4WTdpj`;rp<H^LF$-H)WcSo5kXO9xVav%W{&|^=?9*- z>vpprnzfj>So3-Omq7Rqn~9V8s|z}+#+HYxEuYZ_&kuKz!_7At`&Zr`KX)1%n}D+y zB-6RSYMZC@!?`YbGm{sTm;1*p)R@M`{-y!dWE_SIKWSbD7dX?Il4@(4GNzo_@+p}) zSuvGQ+bAWuqO!$>@DsC}4Id8Ts~J0Rjj&6MV9C+)@bjuRI58G`9cS?J=gLpY8*RDR z#oeWO>E0WYSdy9dP&4MkZ36@U*I)l6a61UxqoWEuqfwgH@#-y$*VB&IbD)bL!&;a> zVk;keyW8IDb@#xb;@xslmAlWQBF$-4mFkj*568wd&?xCbGURm{}IkJ3g|7zE3hzD1d5C=sA z0x$|S&GK4?$sR%#5*1g?TWmGkk!mgUM@`cA6`=*-+x@t`wWSUgpM9CvkFazE?l25Z z_RM|PqnK$Tr@<4yb^VN5Q%XvN#L)dbPet;xrO$cJo!~ro`VUo#vHsUa%pp?5_$#=L z9kz&4e%s<9D>?BU?8->5@#9F_-}+qv*9oTQ+|hJ>AJz4kZd+P9M7t7prUwSL`Yf1U zQw{B67NT&q;bXS6)c>}K*J>D9T|F*=ee!&#F6}$+=sT{Ti|isxx1Wepli)G*!Lou<{ux!Q6jg1A^z|fU7)WUaNT;6}& zX#0$p5g(L+-(feu*vrnoQtEfYotQ&?lXha>ei^TqAirR$L#ATz<-l_`^YJ3?S~#5n z%ek||-IkBspE`%uh&GC;4CtWpV`ywpBsTD8>D>>Q`fv!^i(u&oDe8V+qMc+RYGakR z;2|`)^~B^pgD-QrS9A3d4&5!C_u>#pfXF4>wA5E1peXkf^m;}>&I?5CfloZZFGn+|?86<78z__Qt~TsJysXS%By4fhvUQcoI} zhx~(#N4No!pC9=R_V#C%H2=mE+`g$wST8D922kn_D`ZLiy zrrj-h(c?1FZw|+yh@AC_{Xf3WIw;FDZ2L%~bT>$Mcc*}KH_|2DodS|dNS7cWiZs&Q zUDDm%-QV@>H}8M%yfZsHvpX*P=zTrcea3P8j&b*z(Q{Z;<9Q_7akuh#-sGNxi;0ez zzQIwL)dYDKi>qJXZvFNY1lM4Vyq>+6b?ZY8wr^PUlPw_k91u1@w>VD)o;|kaz`41& zT+BAsraSQ|1U&QEc_6Gg{Ul2BzfLQ*&#Ry~k9(FOViQ9!#Q)pZfqKz-i;k6Kd$Y3KCn=v=YePwsBhGZ>1u-*m%G zuLPp7mTsZHDzRbS__;=TOta`lL1oUeiW9X|X}2h@8JE;B2Vo&WCBg^R1N{>VLPYIruoc4kSe zj#R-17t7lBi)>cVXss&!ErnyJ3Y8(@zsTnNvP0<38((hp1FkO`z5M$#z&am9$Uyig zbLG!wEuNjR2L4xp%-z0+W09q zHNTQK^pjXE_NE=9%GlBX#M};aT~srMyg7_z#JNJSBdP8*+J^q_zeL)NgQ&||M}WvW zX5nbNJH@Dd&rMCYKCvkK9&21Sl{V*5vZ>T?pyegyrowLy^BH_3_Q2=byZf0kpe(2W zsb>L~E4=5xvU-+J_LBPYJpQHbq{SBtlh`@rrw!r3wEvLzj(P+LI(rfW1U22UD<`U1?H6ojz=7Qm=oDy15Z z_qO;zpeWPjbux>dWWUk_sA+rbc&dD^Y@3W&d6(RW2LEq1^5U@0)f+AM0TJobpjz)^XI z5fb5SgAcs1%7fMCza4KyALcPAu*&^3kA^{{uUFe2SUf8h`-@_FYOPAQALtBbkNAdZ zC>lMh{@5yip;mS@?Z4>5tokv9EC#`{vep@Uw9?uyHNXK?35w2XB43&I)rDY$op|FfW4NN*zZWY+t)f3RLdl-eRdSEY$u!i8-c7ni(IzEi zXSdTHOy@DYU)-mD?bW=eknJJ_(C>D0O>18rQlKW41qc%D)`8kpVrIQqU|l{0I**FN zU3XeTgImODpDJ0XzzaLSG~WhkE)Kj^S(UNTVdJ^VzHHDaN6uIc!edKYOl}_y1&ng+>^USElriBL<_7fR^Sr4eF^{&j${kqsDwcMxVgE3I2(p}Ed?0W03oFL zy4#c;V&((tQ5p5g?}%f-I{tiFB+Bl4ZD$&39B0li_t6IYhk)7vq)QNF(RUj{fFWEB ze7OmPIKFmwcge9|pMeW24uRAw2#C&j9G4Y32gG1dF14gfW1Nq#Z${jEpgC4BpW$K!+Zd> zW{e)_%DIakEscZ_a<-Fi)1?9D_L=TA&}nF5=S4~A(@Ck9W4YmoQ?kFpb^=lwz(15* zPkLj;xsjv}ET)oyrV<|#Rf0d1938L!Q*BO8RxG8lOjxSTmG%AE)@ROo&vJjR#*&_*>p}ogVsi8l5)%|zfk?_#J zKNFLGejM8{;7MC3r6a0@Q^dt7ak>1=>+!a@lxg>$#z~>iD2td(LRZqQov$zBN$U+u zLn$RS@nhm>z+||xnijPx`qxjA#SEWFl}_`>gQ$YDxiAtbe4LLdPz{Xy{FAQ#CQDw) zCE?Mkf|l!#GM5&+(g-HrgnP609KExlxYd#jSuQQ6L+?v)t~_}55-F~jQtEiH=CE$X zgZx1(mrZeAU0G}y85wuWH!U*${=$$LMj&Sn40p>;MfW=V6_6EkdDo5>&<4(cPO}d; zpqs-1?1-`s3bzA@niRRA7VIwVdN<<^#+EdRk%>wIkr2LNY4A+&Bj)DeaURC%7o46>XqNV` zjXi|)9I5M%`L8@ogDMQlE=!8@95)t zHs8zYjKDsj&!I?lkR$Th^N1MS(QT?={JzO zW0XYHW|87FS0y*vmkV&84QZTn>bi1U+sw22dZ+wZUO*y+y7Qe{S*}B{A}OSj1KjKm zwT&x5U&LFXO^l;;a~`d@M4lFSS@F*+SQ>}^Xe(^aupScsMVrSkx1!Hs6Q2=3JfHRb zdF<&+(hr|^(9H4bvKk%9@N@3J-zG@?FVwOlt6O^^LH}w*1cYuDTlt-GNp+LeiiLeF zk;Z(J{QGj4TgrAg#}ij_X9YP!p!|ItuHDg!FSTJv6VDHtnk#FQ?(Xgo zRrF%u%M*COK)UOFR5No6=nCM@Sp~m(lW64@9tZ=Wgs%RnL*(<21`HGhy^lwZf%3ZR z5Vh)gZR-Xb_D9!d25IjsU5{tBc|s`^gs%~;U>VIHdL%Mu;=7* zUR<>1;;U1&Z-@&5Kwx)_MnE6x#FyE5+?1Z7Z~aqv^N`Hmw!@MGWw4iCX#o0@8TA5J!$1VCV|aLMjt z|D1j1cI~P7;8=ItU>3U)tI!We8hH+p9JDXJlH#fuy*W-4AfxHLec)T_{=wOtoq0il zNtGTuJ$s0Lty)DlD(BpTOBsd@PO7Yx=WXrW&`hT` zJSmgDo3W#NLpdC_JiC)lFPezxoTo!8;Gj|0)$NCTO96saQc)4bs4RsR)J-6kt@Gfw z8|1rR4k8VK3KbAdjoJDDSo%LO#Foen4jvvL%47#1t%Am>7nsdQ0qr0Sa5KPrh+On( zPnkVU0jz?64<=2Z_uvZBWdRIrgYKP=-cz+yX;bNR1JH5z(!wQ3nVC_tq`XNPgzy{I zobUmV%+b*b!1KWQ0!=qi%t3;>wt#WW6yykKXlW7VHwT+RNB!zbDWMqmLhb+AQ4EF} zpC;4*A=s(GAkyu5-GjusZ{L5dEO%ec60gIw?0g;67 ztIIW6=?7hTaxp60d}{pM`pz$B>MgBHMvuyvMwS@gCn)Qw zsgi&T#h^|aYdl4}HqEU5%J6pS7Nwi8dTUcjGRGp{$}4BMjZ_Vzk>GnDo+8b&?vsom9@)zO`SMf|T)hemZ}q#Y=3EMmFZY3|5h3*mEW{MXyg7 z%rDTWw6>-`)wsR2hLQRh2P>L+%R!_kuRF(OzY9BzTbnEVXiEKndaXFdQ=@FG{_rV( zzFa1ORg+J`9e)>J6?;RgwKTac--}Gf1>@rXve`r!2FzIW{eY7L3K~mJ@CbC19~M&- z)|bl&^pnTAVu9(S5?t@VR|7H10J}zhMFsHmd;icU0V;Tg5H7jDK6-!e_YpS;T}{g> ziBV;Eqf?h0WYE_uIUv3f;3on0nKO{%l?@OxVZhC0w#m!(?vMGIoE#S}B_Se6egs(N ztxfg*{^0_!5v+8r#A;E2c@UMWRFJcwPXRBO68*;Hf;S&5N3V}Ez1!_*l9Dgydfdn{ zQ78ZXld_kFv#+VKW@e_Ou*iyMBUxkn6AYz@q&D4{9x>Bt+lh=n0WhJzqoNp!Wt$Px z-&yg2nB{8CnHWOx3{AhU^mDk&rSGlOWgK1fEVb*5{od$~v>O&t(P#H^0uef3P``ft zrZ~f!!_eDo2%a$vJD~g z_EV2MGg*7k$4JIGv8}WFWSCUFT~i5t%Cw34_P@D+fZHc-A|GcKz+xfb;N)aALqkPp zXLdlhfaGx?O5{8Mr^>V=SYo6>DBpndkF8218XyE*qZZ&%0xu9`hy^b4;5vhM6M$|(}TIqhE1yuWdz(@m1$2V44?zo`$1;X~318RI^@c)BklJRXN zsRJ>c1#p>!e=ZMZm+3QQhvO!c*4FrEjV!J?4i~IG`aqHRCFi|E$GG5fz$YE+K#u>> z0=%ug0~jp>7T!Gq0w(`EX;7&>7qGGiJbtQMabBNw;*+qlLYTtAsn*bzw4zm`i?L7r zp@4u|T}vyg>zng~X^V;C^7w_|vB+VDP%qX;$W^%1orbpZjT^1Cb8E{;7p9f(u#r}4 zeaRbfqC1z5>C7FA{q93>9^CbJJ1ne4MKY;|^Fef%70&`cS#=gYM|R|UH_lXaH2ThH zv-?`+^+XJ6q8dUG&Qgar>y~DjaqZYYAI*0!HwaLK1pTh7i{>6q9w`5Z$9@pm|v(v|&A&lN9`@Te@4 zX3mCl74TPq{xt+bm4%?=fGe!?0sp?Ztc(`SqyS8x4yS((*oCgI zleT{CF#R*X@dUjcl*rP7obr2|`Od6s5K|Gh&idWVD?9R?hzpZE7|fzJ-`>9>1DpV>hX z;QV%bS_?wI%#SC)=R}mr|5<_GkeAnsO(mwSDP`PK|H0f(4rv2HuY-8~(+uc8Hb9p` z6*DGRHMjj^?M_l>){c9IYo{j(I} zWumX@IM?N;744{e6aihrWq&kWE)})pFRh$n3&C0{m{c;D@#g$nDSv(u2Fvo1%4%1o z+`Nm-Er{VO^lG)ktP%Mj*CPCu z>nT0pQ!I3tu3k*Q6fz>alP1v-8bzOmZ80Q47~XSbM`$EdWoi+DV_4lGVL9BA z>lnf_#IhyUm?i2kx*8M1hL^;Hn)CH_Xe+*^CK9XwuyvRQ+B1`t=!NaxY*gszbLXkzc=`zFdV3S|TD(SW^moHDq=kknBn}jc`gN|v*Ogqm(vy=B ztvC~Lq&>|E&54e5B|pGrNL%DG)h(eWH$SnX zaHHhXiDl*%U=mB=U|)@4S}iO$H`UtlL#w!?;&Qz;VV=AUKGx-nIp3&PT_QzODoS() zOekt-M4qw_qlLp6XL?NL4U1<`(Bf^>?{|-%s_7-sW>rXP+UOEFtA3(SQo9-M?u3RE zC2OH&q&81^VIC~J|MK2UIo&+s{#WDkwCmUe);*Swc5$@%rKu=IiQymoC3CKZ!T`eK zC%59S%bYr^Z1D4&{@)Llj(?Z!;I)=XlKHE-D(+T_J`Y<{+NuEh34XG)T^-4|N&u1d z2W`2ywIuGb=a$bCVhh4AN)D|6`2`7I0tvk!-WZsimG{%b?ZSgAki~<3{$jVECXmWg z{Too7yrf^NDr5ppU63ytPL=hPZ*QOE<1br@^qcA}T2)pxm8|Z^6vUzDTx$kZ>9>V@ zKfnwj3-wZ#>G+mA-RuJy(ugmnRKXy72)T-0Cfd$;Ms9yIk{&tnJE(bETb*X6V@FLj zfism>E(MlvLW&RA^lpU?b{9qppaZ;Y*H(F!Ch zCh^Zu?{0OLeCaAwCzK}L11=MDI7}qyiFo}a-dXbC88~57u{PjWb-#Dl#6g6vq`K%L zd+xfw%2~asy^-UobUjb=T!Lu9Sk9cv^`EMj*1fG4<0-Rq6U&n%gwXIN)t^Y z=81l@gX!^3sn>sbJRBF^4c}jN5fXmwG%2xkCG+|Al+TG-$Ui2hE`#u(myYy~0)~`K z69+Z}XWWvOI5t#mY64<4F}hj-($aP8`@VJm}_L4rN4CKmO)gu#L!c&%9_{2lCr3WYSbbO{d; zsD-ex@mv?rdK0+=pku$2YfepJ8(6<(c>jspS@s3nf_Qm#XuKvU3lF_rU zHpIn~`K5&a<+J`UO)^Pu7@kpAZD}*S;-vRuB(0qM#kvz8XsAl`>M6D&{!K6U#PU9W z6+Ed!QJg`?`XoQ&KGM1>|9E*VXl*Od_hNO@+<8EEQvEWT#95?$W!j&-Y1Bpn^05kG z5#Khxv74nTsq*$tNl+x;oPV;1o-9?)1Zqc zYf&wItLS#-2BmyuoOznc$W4QroB*d4pfp%!?*tq>*6Zt|scC8Thz4$C0GoQ%?N*?$ zc?d-(n`$6@-ka0}nb_D^K0_8R!@;LNL;`B>KK|>gbm^e4nX8P^FI=IPTd(L1?9K9A z9EtP%Yiex+3YLCz4s|wdF=H>HaL&lPg-?k^ow+4V#FU+0k*T2}--#BTHh_L#)#GTf zoy5~G%}Z#cv-KJ0q@^)bf$O0EpwI6moXBw#WU0`N2%PXguvM4aVI<)kg__2>5ptoV z42CTnwQpRlJJow#h2eSakH5%o-XEm#`|@mU;b8fcP8Ped%!>Y-l)RNf=n)e=r-$AR z8)D9C7l+TQP~~Kcc*UtH?IGyw-OQJXDkOp?Oe;WexGzpmFYUy~p*LGpYjQ-~+hiBh zk$cy~!i2k5jhs&2_n82%$OQkVn4UUP?=S~ZJIJ&?JvbG2G#H4;Xp| z#*%=%^Ci!~FmsMz@}N;XnuCt+mtSS@ruv;C8;sQhC`d=@DiW0*p8C6k}X$ zkM4XEZ5{&SbbS0>-UVZldK9R@i~80r5Y4!{|FIN|#IyakZBYOICI1{0|H`@^qvziu z7u5v@C&x_gfq?c0R}wIJgaA~c2HrPJXNx77Yn3)7!0n{k``;C~AI{n1YWiOcQ}8{w zzN*dxPuWsQ`n&(eJM-uc{%E{4Cjs3$Ck)ar5!y3<%$C%ZC;mF}km=VafDD{i!*`T| z@`P-Be6q^DNcVAMqi_%U76iWyZZG+{U^vCO;+b{@={398J=V`2%J~m<%-@KVMVNC) zQ($(<7V*~`jKG+Nu(9NF3si92FQ+>gYch5Ae2Irjk3kw^O5-5X4Z@A;J%xffIy#)K zgi9GzBww`>+Ep0p&V0J-WziKW7ITuQtq^^ZTJvxI&{^!ZcIKsmZQ;^3NA|@~O8>{c z|5<`Dnl#JGbdGEXP6$xi~Z}}^1y7$Shw|tH&LPMZp5>7@O*2h0-%8^=w1VHQvFa% zT9swIEER|jL8x8w5d4FHIySk)Z%dTWPgT3(OgrO$?*o=Gh_KKG&fVW0w?6o#%kq6D zkHSZkH1dFEo5p(|@^ZY~FP)&-d<1TCPyegI4Knd4t?E4g zAIwRzY*TxiZ3o+V4r>zyvqwB23o3GS$LwXfxx{~8F5%ZelswCK=XwET3j*bofniNreRd}l7oT#BZ=6<%5=A_DvVy>gR4P;_ z8yzcaQ9%Kmrlw-MlWH4V*LOe5<61FgWi(*97oz_L^KWVjczZx9gcr?*lGK2&E=$8E z2P9D(PvnIcKx3i-rs!gJqjk#+&!{7sRV47-qOYDFg{5v)f~8^Cw54v}k$kkr@@;~U_06_Ix1}aJ*RI2Hy2c|n!3R40TmpC-Me20f)#|y~%SS?hXBkhR zhJ&d-WNCN~FnfX{oPzt=&}F%IrFv6IENkYi*iElfUN9-;agscEbx#^nHN(y&(*C2=_Fm)2i29@Udw%U@NTH&2}vuTkIqDlSJgPE;7E72Gp( zeJPpD_S_=&qAxqWk4bYy3=2WNyuo;ll3Pr#e(RfQ2Z#o+p=p(HnF%Po9Xb8xm=R0y zCUMBf;^g1noAg`fM1};>A<}Adgtsr&U+nJfeXps3W3#qdmeJP6tJ)bd8BX7M2OArW z%L+gT&sz&C{q-m$s0ix&`#|-7d3{}J*2{w|Hn3|$cz;@nLi13>>3RI9x^OB{hyrq; zDE<^;zy$-4hpu-TfxaaoEp=Xxj$GFLOZ^TD@wApI`gj#Tuk?xDIQXJM+xJJ|*m>_! zo2z!2)i@gu;%2ho#l{vkB@Awv?wxNXC8u1RN3)jSd$tzbB*^o7_N&bv zE4-kKIz{%(EO-cv5fh8P{6ICv?#kUu!56wZBoJ!C zu4URFrj?TLZ*cPz16Q`F6FuT<=*^cHY>!DjkFx?LO&7N`0-@pqB&bb1M5K)*)M=SQ zPPj8AejiWp!u?wqXWL3KF4<>1SWN795=?SL7XvKXcbY6;Q7L=J5u+k_G@|4HDK7>s zZuI!llsFZp6s|O%U{n2mqBi9q zM;=|8u?iP~sA1nOvqWjB=5zu9b6@=Y*TD(7BG=x57B_F{;@;}V7yzq`Ge6(-R{pEW zRB0v6s5jnYAFHScHcQK1_cn$1(ue*}c7ay!FrDxh;Q*Qzl2GBqW)&4t_4UDQ1z+@$iWK{=;Cl{J7WDToC5QB)}2MgPi+E z910f~YOK=#JHbf=&Qsr^b%ClJ^|zAMkVS`d&CZ{^sV@b0{Nq@ftXl$npSzMvhHq z0uHqq8PE5YhaLz~c`Ab4*y@T@m>`e{Xxbx?`3`uo$KcnfE_lsT2@p`S1DRe0^K#lZ zJIm@HxUfE$_xWJ|v6gTy|0vFIMEKc*~;k$zQVaP z2orD4*}cB7R4fwTsiQAG7W-xH;3c19}vq4ls0bR{=#D|)JI=lnM>b*v+N`w zs&X?(R=jwCNlN~Pff})Qa72R}o%_*-iL%_rv9&o2tg#T}5>zH_j$hVVs{jWM(4PMO zO;!dBT~WY*g%qe81B|6K-`-aocXOxtaHLhjwh4cDU|4xtM)TS&dXeKJewS>qe#ZB5 zMut{yHPa|`ow0ISbvf63V8}TuqW_OuzuOSodbu?v=jG7q@#vT4 zqSuBZ|KHQbmwOVUfIVplMW)<#3a@@GoTx&F3FK6!G`9F4lr^2d_FVGk{m^{C(sGgI zxbv&yWcg~uW&sqq;SR{f>aGdULlRb^dj{BKf7zI)U^$WpEjbK^tx{pi6;3C!RaJ!V4?wX* z*njr%*3(1^ThITe%_*9=$(gaP+)T5PbY_?o&XSi%kCjQEoVfE%3Zuxdu%b9Sy`lJV zuN!YqXbd`ai$Y4SOM)~sx!8WMLU6Wv8xB8I9LrVOIyO>Ni1LHbuE1xC%weYMnCv3@ zhU5Iw(zsyhXj&Qlizm|x<{R+pX<{ekVMET6q7WA%1z~)$Ry*v-l9HGOG3i3E?+3gd zU!JlXPwp86J?x~h6@q@)5;l~g72`fu<-9~m9vv;dgr4Lb5LQxIq>{lH@?O1p3Rbfm zO&hGpm$4RgbCR|2$XFTyU+eOZJE-dw)+1M`zr~ViYZDnKtlIeB;F-lU1Ku8-ArPx` zx=xItBr^%-IPpncv;a#*8g?#GVX__%JhS%9d#J`G=Xsvb3D%@5e0Lp|qLXe}FJ7lR zZl0cJtT+Ch3VvUyxD0s>%ib9+rhO&rw7OOf(62IP$(AMmJWyA|tqqizAUjO3@ZcV7 z*F;9GOo?9C6v(GwMt9FPdY=4*IfH-*!O@oS^%YzJyhDhr$i;MPgS}`{jtQ4YgwK*o z{N`}3v#qU-pqVv4i}EATdB0()3j#~JhQ`LZaub+wYd49+G4pEG8TaGHlNO{Kn{koM zZI}AGrx8K0j_8H*X=wDm?x&R_6;Y^PkW`zruDhkcWipCk>X*vLn9s=A`{*cha3VA9 zmgM|85pA@Mt4H`D1LuX?E#uq%ylsi@UnO+eg2|*5zBJydIC}1a&Y(0Xj4W6W87d5KO;ld;k(f^sZYuMFnp(vO5>{41){M|)0u zrw^dQR<>Av4CCS&>DgcwpF&nE#$Gba5<2e-oaFNNVacG)aHf~XOt7=12I+3fj%a9) z4__36lBDM>opAE3p>x}Vjd+^w2qP92(7O(Iw*Q)QwEtz!kfm8Kgg1j<>`REDlDCwQ zyq3Wn=3|yK--$c2TdJgo8R{aQ#iWk6*XJ2;3RFfNi_H7_Dkm-H(3z9qhgr>ABHm>C zD!RzD0E~BDw;btT2o(Dc&$^oa?vT;8{>h`;ZsEiL5C7ryz}Qn!;C+!Z$;`&tY1WCK zmDJLRAM+rHhFCrG8gtLe&L+jmR5Gr)2h=?kH8qY9?9_IUnqdK!{~kRF`uSNfLws2> zWd2FfEDeZ;GZ3uY9YjEh!4TkRDyU?iZ-S3?JelY3hF=Y|KP-1$w7Gd9!8+I(Oyl?W z2X=Gi!P{9Um4Sn}4W365yGPyda4?)OyV39V@QF87l+lF0lgCT>NwhH)6vOTpCa7qd zE7GPF`&vS!18X|{kljzy_g7BF9v;gz&c``-!uZH&3tEIuu2f4s;g?m9^iLm+(&7C(d6tNM_KCY&h5vg-&sedU6)PoDdc879htVLY~Z7n zZ;?AVrVe-sj1Rc}_Pq_+m`&pTZYJ_+wRKDYc#1fgM3Y!6k7obc%$${1$<%kt# za6bTaDh>{g-F$UFF%<^~Er@ufikAf;YSF+80zh!}8^dXw5g?cpD;8p<`~T6ed@h@a zXI{j*$!Vg2BA_4#JLfI@uEPp)XefY`WoO*YC8E4~V7avQ+d zvVqrnD}5{kycz3Y?Xvae!!2|}X%+Z9dU|>~4O|=VeID!qaqJi$=x;&nbmH@K0OXT? zya2d&YX=8QfOx0EMAFmOm$CCSGu!yea||LkW{S2S7&$&pGXWp9JnU| z1sGt2f%X@7d{D;x)$;6Y-%NTKwPE)5k$NRcJTusw(N7a>7vJiJs4;`Q-dhPMYl;sh+Yo- z8E%h2D5==eCLnhQ@~=ybn(u|(`*Dw&*`-x={`&EY|n79RX;P@?*_E~U*H?}S`78n&xB_v;BmJ$LUC{Rd@5a6{!q zni_X#X^V(NbMsf-!>EMRH*YxHIFtIIN)o!x{_;>oB%Tkv-c(3q7)I9(>c;}UsMcfw4 z!G;(o7Bp1AP9$B1@X_6z#<4h@25cBvALLhcVq;}lt6LoSsLrJ zETyWh-U-qn2LVP~nGPE)OGq~W6@0t6D0_YEZI$gkfNCR5mwosGjxmswD`fD*0=e%x z`OVwvLqSX9WCU<|Zdl8|8K;!_=`5hik@%AwH#^wI*7)5Xfz_YN_;=h(Y_bOe(Jb{z z-Gj+h{s#-lm)8_g6e4AK;^+j2$8R~^(`Vnb6W#3&oY>ql6 z=4L0Ztkj@PU8072`Csr9PG83z;0uPnj7U!guu+5pNdUe}oOm>CB4W_svGGMT>-u$F zTJ0(^mF|GeKWi)l&w}N7fuyhRdu*aVSvz^tRn3oQIh{VDVor7>@sZG}!u7tTUB8c= z6$$9af7D*fQ1Z8pT0P{lODC9hDBWFhzzYZr@)CMShtHLW=r)XOiQWC>FU@x++sm|5 zD`tv^SVzCmxHwb@EgonkJ8N66m{G|@VgTFI3J7TGW;Mb7WIO$%PU|ugKX_n(&byHp z%|d}034E6cFzioHPvC?cZc4=?3{|c&i6#T^HsE~6PVQ~CzC5%-bXBa)mzd1V%-+#q z9XWrL0Xo%hUp+@+$b1fj37O#c)QyTXlr-`h8wEXIqVB(wi3qyfB7!Cxbhv5Bd3oAy&dLn~!u z9TD-ayVcudF1uBZ%)!!<*gsvreL=t$bfgyKUng1(@gn)sv3`2kXu-aqa)#zTbZ6N$ZZQuj%^Yh6|HXswb z4l>sov(qZahu3eM>wre13ScMQ`;{=cUj5eg#Ol zE=(Y6ve%L zw+3Zb684)sN;V3{s$1@@XFr9pE8?Lyr9^S>z)`Q&czGwB7ktf4oC%waQR3L}$0A0rqt z=v`h`($^;fWpzF$e^waIS<$rdwwM@Q-2B`E2Kddz)C(YRN~c$M;?E+s6_nL~$1ut^ zl%86w5p_O+Y0Cg}>+i5ws>?^rW8`g5#M)Z8h5!XeWg({UQ`@1QcRm)(Z(I$QkV|U3rfCSvZlVFrKDx zDo!kLF~^lLtU(F9bkx|dxAuGr#7$hLq2(hpaC}{dY4A47RHHa|t7UJdsVa|I;M_V8m z4EWnY5Mvz}Df5Hab|B6IHv_~IMvlG;ng2ADx&lD8%W7Nj+nBL00hjs2lz3ly|8omD zIp99_puLWeT2?I|<$xf%r0=_|l(}B$l7yUk?wi}AA5;^oT#jsfA=JBC19(fW z_m1Wq2B}3*Rne>_%ltba(GxdfvVYmIarWuB(ONH=n^Tr%l56@K+wWrBFTI&yfg2Wf zk$zf7{J2+RFLV~6&G%wHX~j}xPdVMp)SJ(4-u6+b~iUDE!PpR*u$TK>e_I3Z%;K!7u*3BnEEd()FgmBA+GX`H(gHDw+;`hHKuG-D96n=HY(i z5RRFVs0#6D&Odb+y0+ikHnr3$UXduLdjl!K#%xjA8YH_8hurfGMrDmuG7i|4=(I#D zXihDzT2$zOYYU7HcV=lpa|Bw9y5oj}&%GPg>EU^F0ITNX;}c$Y0Or~t#un7EZ1_X< zdzDDAbMuaOJHyH>ePvZzdg+SBNIN6(e~7eq`738iYzRS0ck7BWNFv3J-ik|6D*Dgw z16+);S3AC4^-vlOTWT%_@4a5sC*zd~(z z;vJukw5kH7RVH%_kuQIIPR5j_MNvb_($JvAfuk%mmTGbv@`l9-4YZ$+C5|IU4M)EZ zMKo+4TaJv=MNq_3pbkEKNuQD9@N$VGxb+himcKq5VI?#sR>-s-=iiBr_=)!P=6Tj_ zq#FH5*KEYEGVDuAQhCYu$R6OiJ5S6h2d-#PkbccLr4r9oP)#+hs%olCa1?#~$m6gw z!rO8dySRT7I#4)w!~@dYjLPu9xQPziJh%0Wu@jV`JWe9wNZt~N>7c}o5}s;#I&%E- z)L{YNt`4)&&V-qo6E?T7kO6}VDjZ0E56LC04{}$c3Lt4Ca zchm>{*Uq=E2!Y9QG9}KgudMk7f+oS3lb0Aoob?n)^ z0c{E8qxYk1E^OkG>3Mc3aiTX7b!7j@LqyXk*rd%YW5skd$4G)~jT&_ABjyRv0W9?V1ma71X#qJ94N}S4>V+3Yn zVQ0??YHOE$qCo+YoBJg5=AP`Ri844YL-|#C7J0{06R-+VI zI^(*mD0wnVGlo=h!dc2`7WnDGM30K*=(=vNdepnVdI>ji+B`M6_Ze2h3VD@Ys;a+L z0Jg2QlOl(og_}dGYqE`3r9@2)dU;;65z*4S!u#`8kGge=Ri-DX>M2NQTS(2t1nOUU z1o8gZtgB&hM_x`!@UshzXfJpn17kpY!4*^ei>g^e2A`9`cvgWhV9>R(K~I>e(S@+aX&kMWfS!5@adeqo;S)3XAdBo>l#5qE!q}oiZbIdCaM4H<}$KQEwJ*tm3jA|0bRSDTD zuDtR#EKyXd6AWMx)BT1eC@HK)StP8aAfAdt+I{$N*o`5!a38Uw2KE>6Bb`I{j>36G zeJq!zHa1sI6wcP?!JR|}I~a0;Y#pHwE@S4Rn(V>Su9@SmAAeyeCV=-sZ?voIW&P{99=APs0mr^1C)f_#+V{RnyUkO%CptE=hJJ(2CwbTXskZ z76%;&X4#lm_Q3@|H?w@wK;mZSY+>dSFBml5_8pPMMpp>>>qf8bx9y`L2hamtn%!(- z$<$0yaB@77xc7plREcu%Xk?a8@~j}aLXS<}w)v2vi$2!sdU1R3=eb&*4?e{6ylZ9GUEB0r_O|LeT60QW03+z+bUhYU=8fXg5wx{U;U=nx(H$_Y z$NJJ6EeA`68Kl)T0(64SHT|P)#B&;kMV8xkwna)7XO&xE%Dp|3G5YN9t9x^)?v}+j z62_=a@fsTD=_wVz$4;K%Tb}bi7sKFF{pxdei#TdccJ7InsDw^;Y0Od2AxcEW{81R| zPa1g=@)I<1baM3*1)Hod`IY`IxPiK1u&)f1uyS9O_@B$EXo_(b6uanV(uDpe5p2Jv zwDa1t0N1^G;XfRW@X3l(m(^NXEfQw-=ax!7g&vKGKZz3viO?gE7!Qz&bJxS$BK`ul ze`IB>-%Kx7$#)(elNhxcF05zJ7*(nkj&%N5%Aw|rYBPar2%@fn(_>2eA*nuUYM@KX zHtDu+Icl=zy)!=cPpXX!>J^yiI@KEjeIt>Pf7q0=Q2UVg#qRO`5LHcTiLSqW(61<{ zC~2B3Eds=Md}Dq|PTF5DjZGE)G9@cuD$?vBMf_Ar3i;TeShyEXkdy;w-C#nFPZ40l zKNj_w?KqVaioO$u=IC#eoC{Y_&u1v+1U4*;d$gJ=vq7yz2VRlZK!tGCX}cgeNB>XH zmM3)!$Br=+_&A^6y}HQ{s;iQ#{|&B80J3F;MMR}E?-3XE7sZ`=Z@;8PRj zU<*r&Mt8`x5+re@H%&3cA#$X=trAXrs%)j~tB_85O(M0kl`WT@JqD{KCwZWJDhWK& zG}3P-Y#fc~+yLxpz;K`zp>-(A(h(B3vJ$0@^S}}k`JBqr18eCY&(^LJ^K9+LN0f9Y z`oTFba#VvNq2V(gERsn9ZHD^!gJ>SUH=!)b?FPSnE9SLXP>>-`m8w1r9F=h z13uiqJ)|t*R|Dn*7TZZBZ6?-4ABp?&yCSa|MxP6Idgxs~34hG-}l zYg~YADN8LZai{S9GsO(lh>&=rwtBh@Uh&_m?rRehY(Q5sUA=zDz_1@NwqtQG>Q^|rgyFbUr=G` z%IEijK>HyBA+W7B_hb7_La}CKYmbg zSE5d8&6MQ;GtTC4xe#87QIleNZEM9QU*B8D{UHvi&I|4bD|D$rgcSyQcDw2~Mlkfz z9mTAf@UOGk2%PUJ0__5;*UIDW8MV1i2DM2!%QqfM@pM(t%CY>ac+#1}HUwDl(0!}w z-LE*p^734*>gTHNXIfT1(}>Sx4W6Pj1220B*q4c$UK^ zkRU0U166|>s%mRigI+ms#L?8zb`C1B)euC>+7KuSmT*8N?&K>0y!j;Yr14839L5ScHYi(eAD+KLdz$odw0_lvZhXi}Q=RHq zK}ZURc}|9vX!7vcrG=QnOBOkMo{w3xP8fC~ly$I3T_XHOHrn8XJ4$4m=$Mqm_YDR$ z1`6frrKK>)j$KY#t#hV}B4Zi01)qJXRbbjJN1`6D39eWPlff$?FH^>?2CcouVv(9Q zO+$B%X0~p$z)?hlLzzKlWTVna zw6fGP-6oDo?Bnp^r%%<`^7TBc)1IYlJVTh(o@VlT0y3jijA!g0Q2`K0quV#I@?axH zen0+cSng>Ce;FiO3-4V%r%77^NWXi!QU?ZMAW_zD%%0TTmlw2CWhI`wZAoz@H-fgU z8jJ<(OmR|!fkr*GWp6*$?kh1Nd7}Jp)0L;pFVT%9S4sPR;j?_RXq?h!vK;uYu2)@v z%I-`A%T3gDklFCbM}=Z+Tx^hsjE9Vvy@BicRNeFirsGE;YDa8~MM_-!m{IbvHr`Eh zJG^+gNO^{GR{kMo^3PVHwxNMf{%xBrzxvx@pUEfnkSNKR4t*6!+De7Xu`c7x6UI9Y|!-Nsbm4 z7G(TMsUJjA8#Z}JKt(C zP)N0$XwB0AWaW>46jL#op)tlpwvZS>ORVdwBogEg|~;NmN1~6qY<4lyH;PRP4RPCCOZ8&(6-=vGPg()AVHm zaV#Ho7BkP~HpU;vSK?B--hwdusX);82k(nY?vhIT?C3TQrP|&;Q6Ne5Fa`?TBPu{4 zA2)gq6t)d9Up@XFUH1FL^teGuuOz=={OcAl)I5-UL!`nGW<)X;_U*@-%2y$wvah0TVQu0}UpzeA#>r9bcXBA<~R9NW(|lw|(30s7(E^CwMe&WkbF zUlb5RzWFeMAHP;^s`F#P%YLF4wxVx3zF?oX_vL)Y`Yhmln3NG62>?GSf*u|Z!{1|k#5v7?oO)WAE4yi*VBNgMabpCOm)v2XsF&G-26=bSf_C(w2>4GidkwPH5oZYIsf>Sxd7s_ZM2`a0UZ z&_ImsrYU8hF$DJ(*x|s=`FGIWHgE}*k=D_jgy41cR(6vTBEbt5VyomtyaGqj@agcc z$0bb-ND;6wNOrWoye4qYlmThLDyz3@wn#Fgsp$|J>aUg4tESfEhOss=8W$nT7r3;A z@9v%(SZhuYp`?G!(nccl&clg7AF;w#C`N%<>qVoKeT`y>Qe62Is7-*xp~nQaUQcLv zaP!os%2I8J^)o`G1us#wu?8u%>3enOtW3Ou%1@jmUArX)RJaU8w#LK6@6DMshQir4dPYXa-z(O)HG0DoxUIttQFV9I8A_~Cud&≥^HYfxWk5`%0xS&2xOy3yb8C3MKb<-QMFb*bp<&%v{Ex{qNmx4%OcgJ73dlX9A$I;K=$ zO%%1=M@U&&PKN*P-+xDTuds1r;ujKn*KOU&`vSpU zNmusw?XR>{t7ZcYof?b1sWZ`WlU$n_?4(HK!%(H*gH@$H)!ENBjJ)>eUKC#|3zkng zGR)*nQ)#Q@2X@|Q>1qbs9h@xB$rKE!6jTO9O&lSu&kXPclAt4_r=-qz1xQ918DpfR zZ9UD&lb)<(Hc+tmf{ZwX9g;@u^0JDpqgGR*B<^pxBLMaA(|3)u-mJWF4mKP;$(_zN zI6K#}Zk(fuk43Nkdw2H&#ST8>IMVMeay`;H`#1aeskqGE#8d;>K6$V-Qwf;_+|0Ss zDeGnr!GQa24a!&iD35gRPZ_$DCaF3S494K@yZZCU`w&HvX_*!XSOWrAu*Mq zImmqb$st8Z9QJMJSvhwd*z!{j1)CvBN?_*;x5Rr{lF?&0Q=D1lNJpb913~DK>(*b@Tnq%N-f>MFFfpvZZ zGgnmOmsfdtYQ`O2taA=m)y-;}L}E0;LfL|&Cn`xcn3j_u4=d@(t2bqYWuvjMQw4HH zgMfv%im;EPgm{=cg!1bRS_zc=WYN5M(XqX&y;37;Sic*zl&je44Qv+V2tuiL05#z!cAot^2Ka6K>4ZSMLz4=}`muv2jU z=akOAKr}8xXbM3yVimy&Va~Z|tvx1lh5hXg6|O@ce5yOf}qc>*lTlP3tk$Utd$RC;U`hnWPruFUDoZk; zbu4C?Fnnb!MnWk_ql6bW75~vnSA*y{gJa1dO%7EA$^ZuWb z12;n;;~XX)G)utAc(TzQO$uVcLG6wqjuz}NQef(R+I&FP1-cf%&Kl!Wofzk;O++O` zDI`y?vU%7MROz@dlQk_8O`(4;=l~Z#P zGhQfpQ{(XOY3OPXs&IGpO*$|3J(E<@)`qo7+u|0Odg5@`ngMTR-p)i-U1^2mduf-Y zgb$gj_~p4WuZFFT%G9ilWEox4kNvJ|Usf7l>Ks#&!RfBRFu>UL_p$M2uirh@zUOhD zqx)x)Q5uJF!{;tb<1u#JAqyTdMIJoWz67^H9&P?qRW&;&Bvrd|H_zA1{Fw}y9fIli ziN;EbQM80^Zg|TaBO^oo(B)+dMh@dNoRN#tlIH7gercPu8-5ELPR%4LEkXX3CW|6| zGj~1v;y>Tz{k*Gw-3{;@lwjfby8U`$boc&USzUT765=YO<=>EgEdPuo!%HidFeNm+ zPt$q9A6Kk+gV8}FNqs2{4c~;zPEA)AzPdogSz1+vrIdsxk8is44&WdR8f-B1s!{=t z0hn8&0gBqH{uf|~CaW?#Iy>{%nu5jJz|rXRl@0D_0((p3=#C{2e#7OopqRl4eC@kK zDR%#B5Om@7>ddBrXm_RE(;oLp(~8SFn0ErD+n29j!*bL!GH->oC@U-f58+%i=P=hp zw)f#ZSoA>N4%hL3-OqVQ=wX}oAqWn$0|E@dMDT|zCXQ=b z4~~x5bjvcf-kX4L5w4;EpgdUFOE55~sH$S5!Ub{m%fM0-flJM|I00DLa=>?8sPPf} zo6!>!%E;0MKy?F9c|fTdGHg`{);XZ7s^>t1YLDTSs*bKM=q~&B<^vrP{Hv9fKp8A* zE1CiUqSY?~u~KvheL&%yA^t%K2!)2DNq5|!(03O=uy3RMt$oD>zNtfVxnv4?BIVXu zpb~~++!T>O%z%bi2C=4OYG`~09g~76oBu!x%uKl8PwqA|dB7C2wN=z(pVLTiD0te) zvfX0vd4kVswJ8(hgaE}-2L22+VF+St)fIc0g2m&INxi9(mQtiDTlAdVlY<|BMyY+o z)z=?H+3s}>rtCmhk(Ir!pyrf?ww1Q5x(F$LDLcKz%IgKUG#<-ks-~&7EO24xO8&!$ zfJp<$oVrFt!ZVfNZokkE@8_ivkTJfX+pBG3S z2P={3>@PX0&4|pza}vd`*G+p1*H`4;;%I1h8ebs|5I?(SN5HZ8R454cL%8%6$pR1x z;oN3vJfFjobnMHG-=}NuF2 zadkC-T>%RD-7;9k{a4|;`n`XNffhKt4+Z++H^)oyYa+OC7YN2>BXG|zCb=(xr9o3u zlh=w8I1q$afl-vhX9Emj0C)NaT>STN_p=OWE?<1{`}tvWN4WPE2WZT|(!yT@^n+^C z&a^teQ)j?z2h?Zq?Q{9POqLqANqQ=Ip8&46*z95H<1bV3eaT}hDofXKfnfqbgr$-o zG`_#2f!1_7lJFVApFQE;$gfU-+Xo`*U&K-I9zp8Bc=Yez_dx0O4rqSnyg@cPTwDZh zM>_{|#Xe#*M@L7?O^#se4qjZ;gImB@^Pg&_u(Dr*V({?r(8|IBxY#6^_s@zf3^cVU zPAxuSj)$72@e=b!DtvbzIR7&yKRHT2DX8}1Gic+B8=SteF$56-mh}c?C&$lt$&kyO z2M*|;%qB7ZL2@b%R1V1G2XQQ-$g=qBTxiTMm_XlIDGBG5(_jv&Yp0)h9WXmP8@GB4 zt~Lt*3+}WXC!Ir-^A{&)XZLoK6n&k~hneekY~M_5Ib4CW3^wwbdUo;(85anp-o^f65Wb3#b)$bgbf8Ab>WeJRa~=AOkVK0)w6D z5(Y97Xq*prUH#dKr}Vq^l>pyjY!BaKUckdUp;xOzsrqK)a6L9$0DSrHX8>*TxPTSq z&ywSXqYi-K^~5yO2m8R}E}WN6kB3h7AaW}vg@?QcD6CeLfI|X~FJSCWfJB1BP(5G5 z^g=irV)pjxK$C>iNDidI&U8$n*{|#)0@)At>1z-gF=wT~kVy6T`Eq}j@-#;>fCdB) z)*esgOXjzG?o+&4JAEUdHh6qJzqY2rmnncm#3%KWVG0wRo>^Jsz<&%|qXc5%EjOqK z|3iEtun`zRgE?tNo%!Nf*B<4f(@5W^eJZt5M&q>+*y*UXehbB8ij<>K?8>;;`O07W z^oPT=sQO#2!<+A{bt8LjyDlUA2&XeRl*>0~oh~5Iq}IGMZKRY53iDPPJxAQSOs%)t zRYtZrW)F}Xo@lU*c5kOb5u8!x2xr0>VmK$uo0NZ0)$!bOgJMJsf?|C#%W&ls#FKo8 zbbdKJF#h8A3PO#d-#49skrbin)8AXy?<3^~uyIij#R4cyVF|V%E1l~@K^o_J!)RqC zTM>&EfQG|W-Ee^?0MY;@6|jlyqnF4a@jpTtIe;EJe=mpo>fd-nOsON4gl|S#8p*xC zq)HmcHZU?3w}72FQm$yr8xZ$^Zjv#pCLv)K0Yn#wSiuFIl#3&BPw$;4T%z z4zI({ieo2&Y@{syx$kJngYx}y0$%S4Cy&eVWe%Obfh{jPWQ?4?d499;mbRm|xUzCi z0Tp4Q!B=x%A;|{pqt9yPVe}Mgx9RPI)Mdk>;VzFM*mA|zFWH`B{!(PYY#0rxs-EJR zJ36HP9G53*-$)NhRT+GWST&qt%dF-&4N;P6(bw9m8*y?N@>sG3pcJmMXw2UHz5RSy zO`^0~gCH2ML?DU29BxkC9`$7R^3Sex)4p0+3u13Q{b55x(tZfe?U&vC{7x64NJfVl zg=XIA9FZpxgPE&-CgDgrcv_uIz+?LA)hqBk7Om!@IjHELro>vQlcLO_Gq7;iDT*|5 zn+;U6?^!f=&iB}+zhy#V6q7vlOnV8IHV6P=A(Bb61$G2;jU5w#cUB$MnM=pEK!*uP z6YvGfkVr;ix_5I2i|{QT91A{T>S8o6k{|#}WRKo?cIFC*)j(<`jR$u3 zp+hg+RTORxh@K2dZ%NtC=ONJ@1yf8 z{PM|RN=Ho=fV#kSyTwSGj+9yx4@MFtP>?pnYwQxS>p?ln(~RWFEQKp6vNAVbM!nCH zFO*zKehrO=E@1@+)`^u||DD*N^f|oAhW`5Y0Yuqe@#3Bo^W*wAw8m`M3v~5|EFiaR z-(8`o()NB__DskvL-D`g=Zo`R#r#%R&gPoWO`I!|giRHaL6xsTO*>x9j}Qq+dY->e z$cyF^ck6xFnzlbR_X}2_7pe6JMQ27ZcJUtg;M0HQpFHG?CQg0SXgZtRoc#Z z8@}9^m3O$hAsQ@RN@a9}$O*i&HW>)7pgyAqfE-N=e&& zxfpnWGQ%tIb_EGkwjhTFkS)Mb_WiuAaF?PY)@7T0lCQEdZaKZOvb<6mT-nZjax_?M znsRx~ZJ+1HFN8ysfPx*!@3E5|ew(B@+#mBc>LE)j-ojX-cNGo z3*(5a((^B}PvL1AGd}y^EHE&SDgrJH4c$~Z2Ft5NLv3=&Ce_E=pC*FHovvb|a^r_y z^9xNW4Gj&N!iK;GaP=GYix)~d%u$Zd?tYR=38f4Ydt|;yh|QN!TOpF!rwSHt6|w!a z7nQm_W(Ees`}db=nJV&{Uk30e2$f7ou$VQ6I3~jt*a_Pm-*)0NVQ41(($OIcn-$dM zm-;64@@b?OMZN|f;gmyG`&mrTV}vZdgwLbjLzCw-*uDQ^wejdlczDXA2aVsV^RDoVoQ132SouTh zIBkJg3#c+nTAyPx-QCgQMeTPzXDsDOA(z8}-}WEgXMEU+U6{>$?jhAT9J9>v>oOx3 z5u!A(>yh5JLuwczq-%=K&;Vgrv1R<&XZP0a`_Q?H1j221{5+7IB39jp+OBE1h=tMBn@znbM9RYmeIgEkXx6Zf9y3j!H#!mPD)Q0% z>+az=eRFwXkHSb1(#N;igyv1%bUYzCxa#SQsU(a<(K{!1$Pw*XrUOW|w%LUSU#{t= zH+PjiA~#YUbZV9rr4dP&`W+en zS79TJ3xmlFb19xP0Tkmp$bC(RUaXe>0TDW~M6Ha{BS|agj0B zIG`rAR5)3+$B;q%>MT2l0j@l^v1(y3P-yRJ?Io^T>u+%G4Q=hhtokZinD$DD5{s03 zie#T0rg$!6b22Cf%QRD}jq&iiHq*Ea<2Q=_H6N%K@k z6eLy6K2Bx4HowV?FXAIjO_A)G=!86I8fByrlMyCDd9mfYu#r1JkqdzG$*ia5CFU%Iv%j3F#az+!IWuMNBDvyd zL}p?Pfp#L-phhTUJRU7>EJ;pQ_DO54`K+^X%dge6n)QpXbsFXYD0YpR#T$Cn%A3oJ zuTcvy@FL~$Q_(lhP*QIElbT1kU;ohtFDp<_jKVXj$yNh8v*l3)`T{+V|9++~Dn|CW zd9hB#kw(iD(#=UB@KP1Y5WV0Ww8`LQOiU4ZM-W6V#ZY1K`~CTn4q@~N^!=Gw$Q(;! zshaigCgmw{aj)Ok)*kH|x+wGn{fyZ><_U|cw7Vz2q!LxNR#ioFFLT8OI32APyGpux zAL;5|`DH3XRd(s*deV5H5k8e;_?%f=BT@mulJTFAgxX0) zkRdO&&uxGZ6WbhVsJ!n?lijx4M>l=aG#{$yTGH6%=%Jm^@9yd-@0ktHaHbu#ba_6A z`>;>c8*wbZs_04(@9qwLnQQeBL%yJ=vqgdJ!9~U#6t0c;d8`!U`{(boh4H*w+=O(y zZt46#qr#@leTZKe8NWNf-B)D8j8)Swng66}@ee&%5fpMVe=;lzU%xz)19Pwm&z4_;4GGc~yHs<(~o>1Z>vIXv8>Fa-)3vQ#EGdJ_D$XS~fO z=6{z~E(cysSW*#02^-f6H{!DrK`BF4nG64(4kAB*qrTG1k>D1Jc%rF#`%8qXBD7sx zOZZOWHbed^tfI193Qr!j2w#phmCQ$gOprN1!0*1xbjceJnSw+>Q^Y!MJN;O3zwyIu z*d}ZZHrITZob)GSB^sfCn!bLmH3! zE_Ss1_0OwASh^t3lbCvMubiSr&Dq71O%lr z2fwMaExIR(^!$4ZJjRNZ6ndT1or6KF&t!D^Y?99P_2yp-!904BGm5r6pggfDZ{+Y4 zwmYmhB;sS&cZvU0Ict{;&ig&5R@XD@#_Zha|E+IcczI&D=)cRpVD2u@HvbmsGBxUl z2}a-Xs6?O8PlcqYC?%Q?a^;JR>XZ_M0 zsHo2jt%cT^@${22x?Q_=cNsJEv=5bmMBsCJ`dq#$-pjI?F*M7a5!~co2F%eY5wO&3 zAz6g%jgfgJjj%Ums}TYUF=@vmIROd7>YWIn&^bY4-5EILU$bMuw2Ng>H1M#NXXVAyQeVh#)rm zeX#Tl&ef%3L4+cMM2V{Kj{ROmd7oV?v0&Y>HSbAL=%^Fz;=<5MlmE7=fyK}fMiK}A z+izm zN1ix!#C<&kVP;ral@+DYG&P5pw=o>wnL3Ej-=x$T<==C0$)q!}X+|mw(2J~5Q`ztk zlyDQ|Y4I}$mL7-aXKq+>XU)*l#21G$EPE%EbgjFK9t=QpcN+T^$`y$GK3$4NmD0!Y zy#y?Co-)MryKg!LeV((4s&+^yzQupOld98$vg!6nE37XFz3iwr-2X`Tqx@%MEHv*S zTUz_BrMVxG8gq@@Po=UNI@&T?Cfx)1)nH1@$%;uaEb6BS@|r*L9}e>snUn9g&?H&h zqg4<`LN$FNC2lz!#iVM$=TI}UH2C6H9YXVrDjp^Xg^sT_B$B_<(yd<=U#6Z(jCOsJ zRa!J;m643Oh$JY1#z3EgYv1o5>TZ!2nPR=*6j|_Aeij@RJFVy zNM-rpx3su8zpP%2f~6El7I1m&K_=#439sUNM#3{Gm!wW34|@) zfL{T)$6IK?LzlZNz+hlwW4j%EDV$ZS(yrzeA(U&O6Wl>B!lP%#+)zHC*BiYCZ;$K?f12 z?kMYeCR%EY+x<_CDE6j?of_j_N*u5Twpdw`d*|l=(mdwcUJg4jH$3I^HIwlb<8+TyFr6tMaVuU2_q7 zIH!F~1koPVKgJ|is&*Kj`yCd0u@jN+?W&VEKf)vbEKb$Xt11I1UI=;;1?hnG1l^y`3VqI?lq+{{;#GL3z zz_JS;&VdURu!!*#-EPCDx;JMVV2ao1bvU2n%x~00kE&ZlfMdS75;oHqU2IP($<56T zl23TRn2ipPM+gzj-mb2$G(Z=UB`QbM8`E^DqM||?=<4=o z^LxvWwS>k&@Q;@{xdU5Ig9pHI&TY|URVGcTkm^pwC~%Z8_YnCNx1DcdwQftvUf6#G~2N8w*p0W z8ju2v;8*~->S~iClu8})`+UMva@c=X+()mvZ`*4Re7G;R~AqR#BX9SW{$ zFaeZ1`JnGg_LA&bVN(=ojZ;`)T0{#7f8hDJe;>k#qm`V2Bi6w6KT@F>jGZ>&)6A~> zi%9^D0Up_aUvn>L-S7XvX_15QpslSfy6*07koO+){H!e`;7>$=)RH%RD6ZEh})EWX-6m2s?D~|sb&4Z@8qXPo)+r2xgC_`8V?q>b`z(WR;a0T$r zCPCamx@^7sjsl?0BlLnt=HTM;<4d8eh_#c00}w8J29E=vHU4Dx-cka*Yoz-R1aQtF zEY_N47mFm@W`ckpAp98y;)r)=?fbyA>-%Rr0&WinNKVl2jIKR~Pc7%>f*?w8qxi|U z?rg$m>IlC8JB_gFYZOGu!8I=iw5tx(7qf6QX3?KyZA4fiCat_{4 zp$^aw0Iwp4e7Fst>9Wp2LJnPB8y<}W$K4}VZ&~Xd5)#V1|0{OATDdgHo1R-{KbH$<%x+h>gHG+^k(6$Bk`5$BWu3hH}z*BGXmquBD>pd8W;pFoNey!3kcBGKVkC&p8 zVn_r-H67iO)>hKiH8nasgo3g%G)n!y$tj^0pp_4ZknQ)nMprmf~n<7A;xokFPCZEiD(qo9x(;sw}tm^{y6g z74?F^X*=qCh!PqNhfx=L=itmS$iF+?O>g%&w>r7yqUT{im_ld-$R-4qtZ=$0M{PUI z6fhO4tO##WRbpceWS%UqjH*4(P-O6jFS;o@<7)?rOQS|?STY1di7m%&Wak{H zR4~G1;1KicV^8D_gN!mdbTEt}t6Q3!%H#+AH?S&~z8KkrG=mij+t`>62Lm>sIJjB& zdwgfgJln%a{{pyuPJVt7s2+1Uvno2I7Hqa*znR>{v1`Nu)569_W0r^DCakX$fi z{37tm3uoLu1%Q!v-)L&{KZ!4kvEWgK5KxbxG!jm)+Pqs9+e1T8#ny|9UEt05%eT<* zDE@7^BbD%3Tyf<@#)$AdQv=5wPg&4&VV8o+Qf5<43&}z^9~mv#BwJ8*Z7;69ev!b0 z+k3|qTtq}_bC?`H!ck!%lno0M-Hk6}Q5tNjV8QGtwdTv#NRsWbudHMM9b}dKb8QLF zy{Wc*Sv{RFnElMobq8oNfC}BRW)w91Zvm z3r=FDS`j@9q17d*QeQP5Do2{aP9yF_Lo;SrhT)zsP!s^D%l+@xUM7mz`PJ1dLd#6Q zSEv@dH{jg@r7JDC!T18wi||Df81K@2IN=2-v6v69fsxzn!>OR0rT|$-W#!3wdorNK z?Our|$|W=XMXFChLS!UA)n`cD0;}H+oY3I2X2L}Z=o&4Fgf(CMZbyR?2<*VWLb7D` zp{9_tam58F6m~pw17>abG)+xo*LIn|tjU_2OVY%zx%p{W@lFBdG)106i)0QZ0uMze zH#3QxqlXHy?$UJ8&O#ZyWv934!-(U#_sRE`x!gbr1#Pc&*Me5Wn#GnrjkC-2Ndvsw<~${7h`OsB`S;JSmOP$QrhutB%&dvE#N3 zea|NM_U&8uPi#tXddNPY(SU8?98AgM(PtEj!CQ5{10vqRdEx)NG5;KHOP;#<`_G?* z%j9Yp*;X5QOu>n5)7Owiek9C5>%)g9U^IURGPqPkPc!KdOqUWH-?S(%s;j2i?mVe3 zFQ)^BU2N2dOwPu-=@YHXcqS!2s%U;hB=BUz?HE5qWY3A&+!V54MitRTS@rjT_G5kZ zYhB&g>(odKFDR84hurozh3-ie)YHI|~ve0X%k zKt|PPqwE)bWPvA)B;@J(xer`ESSaX;V&g(3+N|E=yipoph#E@@W$o7FSK>pj`2J(@ z%4BWb^@M8)k8DY+ve-aC*~S7vS5uKW2{KQirVCRnT~aX71j?S!$|MbG;AG>qK*Neg>2wsOptsMs4LCy4|;p@HAG%R%7?Cm+H~5Rv@= zP;-&ZJWfwf15ivatIwnP!>)OQ|G)QiyF44~>n;vh4>ykwn;?cf48Hv-gwB#`sg%Z_ zcd(Ww_AM&bqvuEbz#;EXq#jQTkhrv*XmD}((1@bm60f!gWxTqG=MTUNmI?^yJ^%1# zbLBzomNsDT+tls-{~p}W7>n^gS%78vV|&sC9TXz`My)c(H;vQPqowkm?dv%rupmBY z;H(YJo_!i7!bcKLUV+TUQnsVEpZIc#VbP@gorOV+5yp<+uEaJ>oedhSQ23b*vREly z%yV&xmb;xvbM3W)kZ^E3!@rVJzhVGH;%%?*p6w1<8&V9JV@|STh%@%HIr1<;g7HFh zy<`r?j|}5-NT#q1Gt=qxy6(m01G_qJ(YTEmW92h4OD|gcu=VG_o;y2UC9k{dXjW;Z2mG zYRKmXrM=VK=Z9h+(vATJa|Oqft9&3~+OD|10waBG8s0hoyI51*$*Ft6S|UL4Tyk|-w z-#p!G7uDdM!lDMC3!t{N$takNzu*8JG_ONJyIaa~3v*g4vG9_F{1p^bgqY02`27|E zJWatGDWugD%7uw4{p}n5hJV-kx1iDPd8ywsFd!eTB?x`i#+||x2{e3X>uyhfp8BOr z-un|SZMr?t=QK=;^Ce=w%JWjp^lxOrI~bqKhz$OiBP3oHj7X$cTGg3Q!};V*S9|h@ zvz5RNyGcY4aLZrsXCbSE8zioj62(^KktfNxspcqX`mX(HT~SdnA?^zi;gOD3;}#cq zQ4DXcwQUJrfu;huJl^J;pLApw?{ctzYRDS+X+XBSPP9EpKwJRyuv!HB1gQrNmJ8PV zzMwAJuI0)ZNSG1~Tp>e3xKQdsrf@f1s$Z@)%$7xLT$x&bclpaloXYXl?(OD7+M2M7 z#X~BV_R0k}M5CaVq;*Y@LxWD2%kk=sx0EgsAL}VYJ#>Y}AAk!L|K!rEErs9a+_JMr zsNNbD=;C2Tumjod{kuzt+k@g1KxFtb7a7V3NgnswzD~q%G;ydHcl7?WwDWzvZ<)H` zxv1zLK#wwZX-Q;Xd>l5vM?nA_POtvWr?e7NfZY1*gb~!}MRfi`r%sG3IMKPiicXa> z*ZgHXu}1%OY5hjXZdm#_$RNwGFtsI~Y>@2mfsTrqYPtr22md3KAd?Rf?frS-QLOGuaWm|(VoHLXmw}JO z@uB76L@Inlq<2A=G4ARL%JhhCP$XRFQ7N$z?`|jKk=!k z6Am1Akxyd+-&YcZ(py%NKl`(M%*Jo4)}71;rI4k@SUvB$~K4=md0y$@hy(t%_kf0$0}7-6HL;>jw+jCL2M)d(+zV~irmX#EBD}T#48Q-#!`m8 zKhF=5NAM9W#za;GO1s~2(b8g|$Hae7DN=m>;rS_OfMtoptu_#4k%0lbMmW_PF!Vk= z-rKhb^p0H%e;Z4UCfUAz|BS2v0$SPzZ9cqjB0`qH=jSV@aocs3xf%*)#+3Yp?_O#i zpYg~>XOfN|%Op;NYS!shCKM+|5jWz${tBYPVT0s{ zZ-bI{0{&aCIQHKLm2`CnLY}bv^D_{n)>cO@RuAwAMnoV?GbSCW*Hx26m=LG28jWwf zaiDBWZZLdYaxX0rxM=!F{vOkQBJDG@QVPo3m?eS5yV$SY(`|a%XV(N^(6Xw zkit-C#gti!m$LiTbS(B2WZeMC?teoH5QBza^zYwTRMN$ra&{XXH3A;C8I+M)+D<9S zgs6b{xCJk592IK1u`$KMy^k3{ZjVbBQbzS25PaLBi$-DXpT$3 zHStWY_#h4dYs!jlj4Ye{jks%7tEwD0^kRsz(kqbC#*`u#`GYALQ-qUgGg>51h?4l! z*vP>1pZB1DRgRuWHA0uvggkq~%!kZ=`xS5J7sb&?GpJ~2|1qn9^2=l9=UQt#c)040 zo2&u+i16m`G1N;Dk__P%zT8)Qu+zq#y6D7@@+GiV>eMUxZ}C!5WKuE{U@-XkeVhY@ z!8=76EFL^e{J0TjDg>T0`opl{k7+x?LPChi8oF{3AvY5D2_ntjpeaMoOwi=ADZQD* zG?k+(Y;#1UH8y0|+UT{SwN4}a+$Pc6Icuw^aAi;^(08Hx3=WtUx#L4}~R;R%Y9 zb7Q6HkF+|N7j^Vkr<5iFWK2|Khxf`V89GD)rtoYtpndsMX?w8feH?Db{c1)>H?{lj zcgg)!I10tV;3^Ax?WAuWtr>5l#}L+gR07iK6)oM=-@o6$Syk2p@Zdhcnzd&@r}L^f^NwLU5p*;$su&1`RH9QdsAGAIksV5Kxnz4^S0#bxEfQ+*lQLbyM8P=m`Y*=n#eoF+ej) zrap2~S1IWilqy3WUrCWERPdps8Oq#A9i-u8~u5Y13KDP>Op<8@Ve?4 z8wTmE6GMV-M8>jp3y941{jE=z8Mrq)HGBL%G1O6;zD;KpM%}u6Z}|3d+Mq_Sxb2q5 zCGpxHwB}Vt4`CzTG9Dt(d1Fv# zFoOg&iFh(?R2x1{Gteg@GbuBON^y|T(?lm~=;-LGggocf4fU?Jc*Wp&$t@lAZ_Xpj z^n~7&YYTLh;l2oA1Kg3&xW+JOG_@J&2|Xk(LeA z)zf28nzuC+u?1c{pwhLpt^&mCq9UZarRb&OVH-XW#lzk9ez*k9p7Ac5X}~hnz=egf zyB79!GoU}xF4v4(eMP{|%}yoz@#4jE3Lp-q7JQl`pR6=tKl91)P-{<6C<#QZ-OW5t zQ2p-NS;5A=b8^1pg@T06Ovsh)%+j4ox8(&r*Z+H-l3ITkAMoR9Jh^Rh0{gRo84eRV zXwlq1U{3r?rE+%OF)*g=Y2X6}_vIMMUmMtk{KDtp2^eXr}+)nEQ_)j7}i`QG&&Z%_gjjVH*dPqGA)+kijKn)dQtGHe9J&5@76Q zFXmMb&XV>Bb&?VOsYiJnWaEt*=N!pv}4NnO*>dZjxsSE^RG zfB9ZkmsUT2n{Ke8;!RH7(&4eofR)y+k0_A+gp5mn9O{p@eK~I zM+tFyq7;tt-RlZ3Gz9_?1OyBuN^&w~^T^_Ohd%=ycAS^nh$(~ocMOj~_8kqyllueD z0%TcX#oF7RRm!0E092ZaB;)7mLr zYIzIj+Uc1ow|t*U@Ha&BDt@+x?pE#;={90oGkKo`9t$~jrfcJp1M97&jx8Mek77{F z6lW@B>wVNYGgwE!RB@J)38;n?FPt7Q0qx+VQ_}JTcf|A;`?k44gm-bPGf>-)#w{z3uz)qQ%2UJY=$sm0LcLdr)(FatNhZ z*V_f4t%HMx9I~T-q}+Q0BrKFXW|1Fe+YS+SB;Sn%OdFCrgO7o-!sFGIcGw@MN9fZJ zJh02brhY2u+m5+-zXQKs;T7^iNWm0$NG$(0wwknow?#<*VtO(5YS369-VN017kqDr zvVp}Q2QsQ*KK}>=2ICBO`}=EFpMZ52_CrX{FSYExHseXk4>V*lv{uqf|6JSc z8yr*+h|jF9P5@=`f31OW)#q9P6|GCZSMv;@~*3zZf)^nodX zP}JgLR9#&ilf5(;2;q2uZ3{(K^Gbg{10^LeVC<^C)6Ef)e4AX_P)t(%41s3qzrG9N zqIB|s!AgDDV;nC~+{A{}e}O~pO7j5QXJ5AShsZxDyYrKxP8cg1ze{>|wTGHjZ)zAXYviK-Ve&eL&Id7U@5& z{>iDE0ZnS^5ff%H(9ttFIr(u#7GnK4r?mE5#Gp(Kv{4xg5~2CV0*M@%nZNe(Bd|xe zEDY-Szcf7DEUH&bEf}hMKtFf-sPPf+m2xm&;#sM$6W)nMMZ7@4b|whJ2Z_&$#s^Fj zz9snlq!^EB0_u4g+2{5@Hy<5@c}4F5r+EeVF^&%*kUSg-1JouS1c$&fNQ#B~Y5MKi zYerzK;tc(P4=?qzCz4!mAo85QJ8>sq6<;H$%l+Kvcn7Q~kmUeQz!`uB#f$4tB*1fZ zggV{0A1+Z*#=Z5~@HkX-+|7SyX%IDp0?GKu#EA%G$}mpswTQZH|5i|^xuN~@3El}X z=Xi>9#DXIgp6V7sOZuLp{jG?NFO`*Lz~q6^2E2#HPyjLt9SYD0L90KA#}+V9007`C z3v}UttR#MUqMik8i_4|0-!@vVGSJgc;)`nlasCVRAGmDB|Ml5aTtc;0?T)_zg##E0 z@gEcrn&6FqCr+?iQq!q!W<%`ay=}F|(!Bg%z~Oen-UOYG3?jSWv1O8UbNWRPn4i!6 z^h+>w>HLP48a&_JI)m?O1ww$B&~B*YEqKfr2>wAcL^`||)Hs_!h%Rqly{v*nUH}3j zJv*B;tXUS$HaHlP#GDEB2dm&qfQCb;O97Jue1!O)YHRD&dI(1&Sd}gzkw^&m1$s*( zY8Ou&Ge(rTZI}RedGm1!;!?5IB@3(1&7l~RTQ&n%v714iR{4<_=;d{tFT7xES1e1#pU9)7b>Qq#!!)|fOBqI+(;0Z3Y@5_y1%00d z)%wBo;U^>qR9VNVaz5@`o0+V(7N*Ux?@QA3 zLcH>sz(9wCmj!zJJ)wm;-TIe??UXZD<~PQ@iTU%fhVONFMvmggt!V^(o^tDn_lKq- zycYEo(>yER5scm_`C@?k;xr`-Qg?Xnp-r%OcCh|L81E4TA8dwt|MdS1g!m)n+nFd@ z4&Ldax&s@y=sGnY-!tE1F%#hgV72DtUM7Ep>E#-w>sADwL2zSumYaXJ}kD) z|Dx1SeEut->|H^pwQF7|d}z10lrw1H!LqQi3vv^9G4udG1b$JmSBo^Ix&=n~Gr%PA zG8mr6O+bw_wYBBJo(e}c2n%_dkPVZUpD)lL^Edv?K;bjX@S9tpI6Yp&%X9#tz7K`% zAT5C!D7|`bs6`we1jo%ROgs2Y7Kl5eR;Q`LK`0Y&QBXJmLF#zdxL^=Ihov==nar=@ z5nrv@o;$SWCErAQMnm)i_52$s0m4(-?2#)#<&yq`7K7oEsw-syQ(78OuLJKSF!Z2bRi%wVv_pKM=8@2y0bx8eTzFV73o4TqZg z|93t{RJ;K}2mIGse`hFcxJkmpRchVG0SpJYiSRc72|5h|+<^Dv41NBhQy8zYuhOQ+we5(rrIaOl-0H$A;I~Tn4&YX1~L1ke}-tvn!>#se?T}D+gqsu*Q)@cjQJd} z14KNPpM686I6kttBdFemv5=)=eZKaMH5qYkicT}P4@okMr}SfmvlSFYnd!YK%xXit z$cySR2iLXXW~^XN)xy9?Zhg8`x3l-M=}U>E=T%m$CaFQFr&4l#FKxJfDLi+SLdTAe zORIiLpOD%*&!P8_NfB_KuCVn`rt$8UfajbgMXw05<*O0Z()SbQOG1M8Nx^MXX%-7rf$O%?-z+qL>C{3(5ak zH4#ebz;ed6%Y%{VrfL#YEo8-cBYr@NK%Dps4tPnyo=Zee3Cgp-9Sk%3W%Ft@@~huw zDDm|V8Qp*bFa?bs?K@am@wdd^7bzaJ-G*Lu7<^bncCR4svyFUKU~H_{S3=gw3VdPY^#`t?S87v zW5Yz(%vc_s=Te4?o&v^lng+pseBz-Tj+s)xS|Ean-yD`=m&KAOB~-m+ulHa!=WfT{ zv!r|h^GmgbL`Av92JWh3k5^4HLoL32q@>v-X=q156`A;O%#Y+xM^Z?qO~yt(2h?i+ z$H6(i&1CEFyxs2|1*EjhJfSDMRhZvzVXA~-(h}a`dB)T=8cK@YORJ2*nXZub^uCNR zi^=OvI{Qn-VvFBbB=eIBTaGh0dL9-H@^Om^#+z~ds^ts~jf~9C4fsLL_M5&f(?z|) zhB8rwEzfLD>#{;uo=9^;!F$rep09`U7YXP?QoIkWF^*g_+oS#c&G`NtroRby`psOs z(mBCp=Ke1&2=ZYjhi!}J>Q9#H_rl;WP03f?zz!-p3Q&kqrS99G^_KxBJ%3^+Mo5Ig zIBBi*!x^^Xx&tnh)Bz{Hc@>PDGd{<~r_JEmR`4W+D-8tF#PH!lRK9}0;ny}RoxC>FZQWHI1?BbCk_U_ zy1_s3-_jBWhS|~4B%r$H@6v@a)X$@Mt_EAQ=vl4u(TVj5MZjiW1_D0gsP|Y?p4spu z2FHh=1f!$o2zs+6&MnF{BDV^Uqy62=3~^EVuu3?e#&yE8Kwk>y879Jpx5arvAXHXxl7Ltc{D!9g^uf9DM@&LuJ8 zYSRAkN%v$>lxz!!UW-Y^q&iIxgZAfvep*Ee@^z0f0x>4sIU?cD&Efqfs<9t?dv9c! z$YB`MO#XJanJi{3?(vH8aRF3TJ6#GO#zyb`z_-tVqAR~udZEbHubpb@G1b|hT$P9L8zz_kay!tnl zmy8fHAn>gBYoFcMcyFR2LgNeicF{LKSZMGfk04A9Oq2MG56O+D%dnopf;4eBzKieW z0Q7}v09~{sKGQb%&71-vBXwZo!Jlq0&2%IPhk;TM7Djk0!pCeIUjJ+aSahE)5p53_LmUJe|H$&nbqJ73v**Y*Ezmd%y^!reVE1=e}20!*2o8 z9q}2Eh)lVDr||n;O124%mekSu1Gqq8$AgI!to)!@gTfqylF4|DJE_si>Z*u_sTt(6 zNd%o!SBfrqS{Qih0;{b>IhKrjPm+`*PDNm@FMnM}YqqXctt3)KKfIq;JTe zN5;Z2Z2iujU28{?Z@T8!UN8Mymea&E*qt*LA?}j;=rn(ws!ic7vhf{g$E0MMxD%L)Axwof>3erQS{L;(>LI6#u zlHvQA}x==N(qt%r0HweeR1;`sQ;gbxqQZfZ)}Ll*cw_%6*?m zSgohvti_?xXS=t)z1ijEHK+-mnlgq>kTie_7M2pOD_5Zr&HGpaw>E)lY?R?YPb9Ct zhy&2b7-l?XQ&Usk+b*l4;vngq2C=u>{^kuR?Ytu*qSIXc`%WK*4|OWRO3c)1?CeaP z^BCO%;X!xq-VLj)6iK@GW}tIPSV$-U-h!Z~pPa%3x#5=MDS~V4BT*<*2M5YnK0{cS z;^N|R+Z5&pcR|p)_-nNmC16v=J=lK?^X+)iM#tAgNsnzZaNcUqgQOFr#%eSq`<``N z)2>yONAobGes^8*yG|AtAK&PcB$oh7H3VG*P??qM?Mfm0oYuzg;aA);ZVdnVS(hrt z+8~TEs4_<`tWSwiW@KdKYH__)83{VyQA5DP4B-O*L2OW5zb^x7h)2dEgj($QR`49$B*#Cr#Rf$|~; z(bx86CkL&M34PXQtBz#emh&W0m?tNiDP z`Ycbvn+J~br5KS2+uEQ4?2jLk-g{Gr!lLeKEQB^i8+B8O*~#+NRaFe|#X2|?1*T1k zQO20Roe={dOIn?VhMXiWI|RxMjg5>NF7)%#g&FD5F}0FZ0(6%h@>1dgvhR9(*^;Sz zrwYxUTj%p^>mU5*zg~fLD)l^-A((~JF|i|YPyG?j_G zpo)07(v%;GVjWB6ETJWCTtWZ(+xg-lnKOI8miDXplUK;5Qr+{^#7-WQ+LrYm)#H;$3N-1_#_$rbSd)sMVQGe${>FH3z4C6U4*RMVjbap(tG&q=wZ zwUzl_5&4oJMMsIh2q~8rEcKjc7Ow~|v({O;k)O?)5cR&xEauXxgcog?fYjmG+V5lM zivsaqo{i@s+VO{awu$)UaPN-9jdOWgtE?BNTFM&r_*aK z#5!{1gU`lMe|O~~P>QyZ#xCjvY4cm2b_b!gGmHwIbyjvf`)xYW#7$+-w=7u=WvXh< zM1OpG=kOub?Ezh;ZpQ+>TFlZ*!)`5jyf*i14(S$l6w-HlE__NjHM>;L2=v)#Z_utpPp0wvlpZxH*UNovMhZ0H(ASdufvfI|EnH6io0u@ z`&++|JC1sETH1w-@WtoPd(0cS4z)Y*e5#?S@^;u!*=^rh`_z}n*R{sAZoGQU_PdL~ zg@QFZqxDb{6QP)a(1RqBEZLdF1hs@`zTBaTh-vNahmzE-_gQ>U3wb$v81zXv0BQk= z2~>{}J?t$#!&Vyrfh$;(Vlw=-;Ly%7YEGp{R zg~H9Qt)$vc(~7x7ziX~t?(E^@>cO%!A$t-8=ebS#dv>y|1<93_-lfN=bN@0DfAc%d z-CU=?zT65c-oHGIwyE-Sk|WDJ^%poGiikD$nDE6OzMl^_*HerpR;OVN1!0u$b+RJ% zDxVL|%&+gUoYwSCsBQJk&YFF??9+44+qGpPWq0Ouyk6$u%)5G)81u9xkBFH=mzA>- zRn+c&Epn*5yj%aOBW2TkqoSxs0UcpYb~k^jI?>)X{_}Yq(zkLnsXuYoW1=|oMLvsO zOjP?E;r!PWgX1kG#F}#V))JF#?7W@54pNp(Nc)WP4LLDNCd~C&erfJ@KXZD1BdSQb zhLXxIcE6IQO}7T+DlL~?p^S8li!y!uweoKZRHPiN{A6z}=yT~kR)&qB3&$T7qOI*= z7p6%@TkD6;$&m?u_o|fME#+)`=_I?Ph~1EH(W(RghFFWw!MS&Kbku<|wi5m&IxVw% z_0oG}PemQ%Y~S3?&Pg#jSU?2mp5KuB!KzC?k!>lXt#!1yCGIbwA&jN}ans zxl{K%7Mg?S-GfW%<$iZHwAi G-~R#s6HAN$ From 388c72360dd77a43668bcfd1c851346d930aa800 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Sat, 21 Oct 2023 22:26:16 +0200 Subject: [PATCH 126/220] Use --start/end-group on linux to fix ld geomserver --- cmake/CMakeLists.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 79dac08cad..6d8fac006e 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -439,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) From 416a572664d031a2e99f1ecf7da55ea822ab53cf Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 23 Oct 2023 15:24:43 +0500 Subject: [PATCH 127/220] switch_representation not to break with temporary mesh representations I've found a bug that if you have some object that consists of extrusion and can be edited in profile edit mode, when you finish editing, it would remove the type object (and I guess the other occurences objects). It happened because during edit mode it's using temporary mesh data and `switch_representation` would replace this temp mesh data with new representation and remove the old mesh data that might still used by the other occurences and the type. The issue also was leading to a crash during `box.template_icon(icon_value=AuthoringData.data["type_thumbnail"], scale=5)` if you had BIM Tool thumbnail preview opened in the process - removing type object would make thumbnail icon become invalid leading to the crash. Crash mentioned here: https://community.osarch.org/discussion/1753/bbim-two-door-types-with-connected-properties --- src/blenderbim/blenderbim/core/geometry.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/blenderbim/blenderbim/core/geometry.py b/src/blenderbim/blenderbim/core/geometry.py index 54dbeeb49d..7f91fd15bc 100644 --- a/src/blenderbim/blenderbim/core/geometry.py +++ b/src/blenderbim/blenderbim/core/geometry.py @@ -104,6 +104,7 @@ def switch_representation( return entity = ifc.get_entity(obj) + current_obj_data = obj.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 @@ -125,6 +126,10 @@ def switch_representation( # 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 old_repr_data.users: + geometry.replace_object_data_globally(old_repr_data, new_repr_data) geometry.delete_data(old_repr_data) geometry.clear_modifiers(obj) From 3f8a0a91b3fb3007727fcd7d122d944308ccd96f Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 23 Oct 2023 16:39:25 +0500 Subject: [PATCH 128/220] switch_representation to automatically switch to unresolved mapped representation The cool thing about it now that it will automatically create a new mesh for "unresolved" representation if element has openings, otherwise it'll stick to the same mesh representation as the type object. This fixed a few bugs: - similar to b9a9abd but during extrusion profile edit - applying void to the occurence used to remove the type and other occurences. Apparently it occured after 744c08e - previously we seems to rely on `ifcopenshell.geom.create_shape(settings, element)` to unresolve the representations. Though before 744c08e there still was an issue - it would apply the same opening to the all occurences and the type meshes but wasn't removing them. Probably fixed a few other similar issues. --- src/blenderbim/blenderbim/core/geometry.py | 9 ++++++--- src/blenderbim/blenderbim/tool/geometry.py | 12 ++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/blenderbim/blenderbim/core/geometry.py b/src/blenderbim/blenderbim/core/geometry.py index 7f91fd15bc..42a05216a0 100644 --- a/src/blenderbim/blenderbim/core/geometry.py +++ b/src/blenderbim/blenderbim/core/geometry.py @@ -106,10 +106,13 @@ def switch_representation( entity = ifc.get_entity(obj) current_obj_data = obj.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 has_openings = apply_openings and getattr(entity, "HasOpenings", None) - if not has_openings: + if has_openings: + # if it has openings make sure to switch to element's mapped representation + representation = geometry.unresolve_type_representation(representation, entity) + else: + # 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) old_repr_data = geometry.get_representation_data(representation) diff --git a/src/blenderbim/blenderbim/tool/geometry.py b/src/blenderbim/blenderbim/tool/geometry.py index 8ca65ab73c..5dfc29e69a 100644 --- a/src/blenderbim/blenderbim/tool/geometry.py +++ b/src/blenderbim/blenderbim/tool/geometry.py @@ -631,6 +631,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="") From 29bd30d3bff3ba7b1df5511c54dffbd3ef56ab53 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 23 Oct 2023 16:50:05 +0500 Subject: [PATCH 129/220] "Edit Profile" in BIM Tool for mapped representations basically now "edit profile" will be shown in BIM Tool UI and will work from shift+e hotkey if the active element's representation is mapped (for example, if it has openings) --- src/blenderbim/blenderbim/bim/module/model/data.py | 1 + src/blenderbim/blenderbim/bim/module/model/workspace.py | 1 + 2 files changed, 2 insertions(+) diff --git a/src/blenderbim/blenderbim/bim/module/model/data.py b/src/blenderbim/blenderbim/bim/module/model/data.py index b97b16c614..bef3f91a7d 100644 --- a/src/blenderbim/blenderbim/bim/module/model/data.py +++ b/src/blenderbim/blenderbim/bim/module/model/data.py @@ -213,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 diff --git a/src/blenderbim/blenderbim/bim/module/model/workspace.py b/src/blenderbim/blenderbim/bim/module/model/workspace.py index 0f8d59b683..7c4e881234 100644 --- a/src/blenderbim/blenderbim/bim/module/model/workspace.py +++ b/src/blenderbim/blenderbim/bim/module/model/workspace.py @@ -616,6 +616,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: From 5cf1dd42496f356727e00e3536e5b7b567a5bbab Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 23 Oct 2023 17:25:07 +0500 Subject: [PATCH 130/220] fixed core tests after switch_representation changes --- src/blenderbim/blenderbim/core/geometry.py | 4 ++-- src/blenderbim/blenderbim/core/tool.py | 2 ++ src/blenderbim/test/core/test_geometry.py | 5 +++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/blenderbim/blenderbim/core/geometry.py b/src/blenderbim/blenderbim/core/geometry.py index 42a05216a0..79150a8c25 100644 --- a/src/blenderbim/blenderbim/core/geometry.py +++ b/src/blenderbim/blenderbim/core/geometry.py @@ -104,7 +104,7 @@ def switch_representation( return entity = ifc.get_entity(obj) - current_obj_data = obj.data + current_obj_data = geometry.get_object_data(obj) has_openings = apply_openings and getattr(entity, "HasOpenings", None) if has_openings: @@ -131,7 +131,7 @@ def switch_representation( 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 old_repr_data.users: + 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) diff --git a/src/blenderbim/blenderbim/core/tool.py b/src/blenderbim/blenderbim/core/tool.py index 070773c457..076787b378 100644 --- a/src/blenderbim/blenderbim/core/tool.py +++ b/src/blenderbim/blenderbim/core/tool.py @@ -370,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 @@ -378,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 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() From 74132dcd4905ead0108986e6d9dca2b3b29dbab0 Mon Sep 17 00:00:00 2001 From: Massimo Fabbro Date: Sun, 22 Oct 2023 22:12:56 +0200 Subject: [PATCH 131/220] New operator that creates a ceiling from cursor position in covering tool --- .../blenderbim/bim/module/covering/prop.py | 10 ++-- .../bim/module/covering/workspace.py | 40 +++++++++++---- .../blenderbim/bim/module/model/__init__.py | 3 +- .../blenderbim/bim/module/model/covering.py | 39 ++++++++++++-- src/blenderbim/blenderbim/core/covering.py | 51 ++++++++++++++++--- src/blenderbim/blenderbim/core/tool.py | 3 ++ src/blenderbim/blenderbim/tool/__init__.py | 1 + src/blenderbim/blenderbim/tool/covering.py | 4 ++ 8 files changed, 121 insertions(+), 30 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/covering/prop.py b/src/blenderbim/blenderbim/bim/module/covering/prop.py index 330632ab05..76cd6ee3e0 100644 --- a/src/blenderbim/blenderbim/bim/module/covering/prop.py +++ b/src/blenderbim/blenderbim/bim/module/covering/prop.py @@ -30,12 +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") - depth: bpy.props.FloatProperty(name="ceiling_height", default=2.7, subtype="DISTANCE", description="Ceiling height") + 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 1fae82b3c4..47b85fc904 100644 --- a/src/blenderbim/blenderbim/bim/module/covering/workspace.py +++ b/src/blenderbim/blenderbim/bim/module/covering/workspace.py @@ -92,6 +92,8 @@ class CoveringToolUI: 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"]: active_obj = bpy.context.active_object element = tool.Ifc.get_entity(active_obj) @@ -101,17 +103,26 @@ class CoveringToolUI: 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() - if (AuthoringData.data["predefined_type"] == "FLOORING" and - type_material_usage == "IfcMaterialLayerSet" and +# 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") -# 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 tool.Ifc.get_entity(collection_obj): - op = row.operator("bim.add_instance_flooring_covering_from_cursor") + 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 @@ -136,7 +147,7 @@ class CoveringToolUI: row = cls.layout.row(align=True) row.label(text="", icon="EVENT_SHIFT") row.label(text="", icon="EVENT_G") - op = row.operator("bim.regen_selected_flooring_object") + op = row.operator("bim.regen_selected_covering_object") @@ -230,13 +241,22 @@ class Hotkey(bpy.types.Operator, Operator): 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"): + pass + 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() - if AuthoringData.data["predefined_type"] == "FLOORING": - if element and bpy.context.selected_objects and element.is_a("IfcCovering"): - bpy.ops.bim.regen_selected_flooring_object() diff --git a/src/blenderbim/blenderbim/bim/module/model/__init__.py b/src/blenderbim/blenderbim/bim/module/model/__init__.py index ee8f23eca5..7fe9bc021e 100644 --- a/src/blenderbim/blenderbim/bim/module/model/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/model/__init__.py @@ -109,7 +109,8 @@ classes = ( space.GenerateSpacesFromWalls, covering.AddInstanceFlooringCoveringsFromWalls, covering.AddInstanceFlooringCoveringFromCursor, - covering.RegenSelectedFlooringObject, + covering.AddInstanceCeilingCoveringFromCursor, + covering.RegenSelectedCoveringObject, space.ToggleSpaceVisibility, mep.FitFlowSegments, mep.RegenerateDistributionElement, diff --git a/src/blenderbim/blenderbim/bim/module/model/covering.py b/src/blenderbim/blenderbim/bim/module/model/covering.py index 81e2c3cfcd..17256b56f0 100644 --- a/src/blenderbim/blenderbim/bim/module/model/covering.py +++ b/src/blenderbim/blenderbim/bim/module/model/covering.py @@ -51,11 +51,40 @@ class AddInstanceFlooringCoveringFromCursor(bpy.types.Operator, tool.Ifc.Operato core.add_instance_flooring_covering_from_cursor(tool.Ifc, tool.Spatial, tool.Model, tool.Type, tool.Geometry) -class RegenSelectedFlooringObject(bpy.types.Operator, tool.Ifc.Operator): - bl_idname = "bim.regen_selected_flooring_object" - bl_label = "Regen Flooring" +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 = "Regen selected flooring object" + 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): @@ -74,7 +103,7 @@ class RegenSelectedFlooringObject(bpy.types.Operator, tool.Ifc.Operator): bpy.context.window_manager.popup_menu(msg, title="Error", icon="ERROR") return - core.regen_selected_flooring_object(tool.Ifc, tool.Spatial, tool.Model, tool.Type, tool.Geometry) + core.regen_selected_covering_object(tool.Ifc, tool.Spatial, tool.Model, tool.Type, tool.Geometry) class AddInstanceFlooringCoveringsFromWalls(bpy.types.Operator, tool.Ifc.Operator): diff --git a/src/blenderbim/blenderbim/core/covering.py b/src/blenderbim/blenderbim/core/covering.py index b7aebf457e..65b07bcee0 100644 --- a/src/blenderbim/blenderbim/core/covering.py +++ b/src/blenderbim/blenderbim/core/covering.py @@ -44,13 +44,6 @@ def add_instance_flooring_covering_from_cursor(ifc, spatial, model, Type, geomet name = "Covering" mesh = spatial.get_named_mesh_from_bmesh(name = name, bmesh = bm) - -# spatial.edit_active_space_obj_from_mesh(mesh) -# else: -# if relating_type: -# name = model.generate_occurrence_name(relating_type, "IfcCovering") -# else: - obj = spatial.get_named_obj_from_mesh(name, mesh) spatial.set_obj_origin_to_cursor_position(obj) @@ -63,7 +56,49 @@ def add_instance_flooring_covering_from_cursor(ifc, spatial, model, Type, geomet body = spatial.get_body_representation(obj) spatial.regen_obj_representation(ifc, geometry, obj, body) -def regen_selected_flooring_object(ifc, spatial, model, Type, geometry): +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() diff --git a/src/blenderbim/blenderbim/core/tool.py b/src/blenderbim/blenderbim/core/tool.py index 076787b378..a373531533 100644 --- a/src/blenderbim/blenderbim/core/tool.py +++ b/src/blenderbim/blenderbim/core/tool.py @@ -851,6 +851,9 @@ class Spatial: 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: 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/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": From df4cd493eeb7c644fbe3b3e59c53b88cf1732230 Mon Sep 17 00:00:00 2001 From: "Sigma Dimensions (Yass)" <79010126+myoualid@users.noreply.github.com> Date: Wed, 25 Oct 2023 13:54:13 +0100 Subject: [PATCH 132/220] fix displaying cost item totals --- src/blenderbim/blenderbim/bim/module/cost/data.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/cost/data.py b/src/blenderbim/blenderbim/bim/module/cost/data.py index 9786151c6b..16d915c6a2 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 From 48a0d8c508bae79dd5dd0e506f41fcc6a95cd852 Mon Sep 17 00:00:00 2001 From: "Sigma Dimensions (Yass)" <79010126+myoualid@users.noreply.github.com> Date: Wed, 25 Oct 2023 15:01:52 +0100 Subject: [PATCH 133/220] fix displaying undefined or userdefined units in cost schedules --- src/blenderbim/blenderbim/bim/module/cost/data.py | 6 ++++-- src/ifcopenshell-python/ifcopenshell/util/unit.py | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/cost/data.py b/src/blenderbim/blenderbim/bim/module/cost/data.py index 16d915c6a2..12af066c9d 100644 --- a/src/blenderbim/blenderbim/bim/module/cost/data.py +++ b/src/blenderbim/blenderbim/bim/module/cost/data.py @@ -158,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/ifcopenshell-python/ifcopenshell/util/unit.py b/src/ifcopenshell-python/ifcopenshell/util/unit.py index a96c424835..29561605a4 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 From db85689364a0e1b342be58219f32dd73352b7298 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 26 Oct 2023 13:08:01 +1100 Subject: [PATCH 134/220] Add support for latest uniclass and add Uniclass July 2023 --- .../classifications/Uniclass July 2023.ifc | 17995 ++++++++++++++++ ...assification.py => brick_classifiction.py} | 0 .../uniclass_classification.py | 59 + ...lassification.py => xml_classification.py} | 0 4 files changed, 18054 insertions(+) create mode 100644 src/blenderbim/blenderbim/bim/schema/classifications/Uniclass July 2023.ifc rename src/blenderbim/scripts/classifications/{brickClassification.py => brick_classifiction.py} (100%) create mode 100644 src/blenderbim/scripts/classifications/uniclass_classification.py rename src/blenderbim/scripts/classifications/{getIfcClassification.py => xml_classification.py} (100%) 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..fc017abb92 --- /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-25T10:22:27',(),(),'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',$,$,$); +#3=IFCCLASSIFICATIONREFERENCE($,'Co','Complexes',$,$,$); +#4=IFCCLASSIFICATIONREFERENCE($,'En','Entities',$,$,$); +#5=IFCCLASSIFICATIONREFERENCE($,'SL','Spaces / Locations',$,$,$); +#6=IFCCLASSIFICATIONREFERENCE($,'EF','Elements / Functions',$,$,$); +#7=IFCCLASSIFICATIONREFERENCE($,'Ss','Systems',$,$,$); +#8=IFCCLASSIFICATIONREFERENCE($,'Pr','Products',$,$,$); +#9=IFCCLASSIFICATIONREFERENCE($,'TE','Tools and equipment',$,$,$); +#10=IFCCLASSIFICATIONREFERENCE($,'PM','Project management',$,$,$); +#11=IFCCLASSIFICATIONREFERENCE($,'FI','Form of information',$,$,$); +#12=IFCCLASSIFICATIONREFERENCE($,'Ro','Roles',$,$,$); +#13=IFCCLASSIFICATIONREFERENCE($,'Ma','Materials',$,$,$); +#14=IFCCLASSIFICATIONREFERENCE($,'Pc','Properties and characteristics',$,$,$); +#15=IFCCLASSIFICATIONREFERENCE($,'Zz','CAD',$,$,$); +#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',#1,$,$); +#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',#1,$,$); +#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',#1,$,$); +#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',#1,$,$); +#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',#1,$,$); +#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',#1,$,$); +#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/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..0c3d182064 --- /dev/null +++ b/src/blenderbim/scripts/classifications/uniclass_classification.py @@ -0,0 +1,59 @@ +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 + +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 From 880d0ba753376e5c0343e541a769f2fad228fd75 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 26 Oct 2023 13:08:15 +1100 Subject: [PATCH 135/220] Minor fixes --- src/blenderbim/blenderbim/tool/geometry.py | 2 +- src/ifcfm/ifcfm/cobie24.py | 17 +++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/blenderbim/blenderbim/tool/geometry.py b/src/blenderbim/blenderbim/tool/geometry.py index 5dfc29e69a..f0232a5826 100644 --- a/src/blenderbim/blenderbim/tool/geometry.py +++ b/src/blenderbim/blenderbim/tool/geometry.py @@ -313,7 +313,7 @@ class Geometry(blenderbim.core.tool.Geometry): return ( subcontext.ContextType, subcontext.ContextIdentifier, - subcontext.TargetView, + getattr(subcontext, "TargetView", None), ) @classmethod diff --git a/src/ifcfm/ifcfm/cobie24.py b/src/ifcfm/ifcfm/cobie24.py index d45f8fbbd2..7f94ae3187 100644 --- a/src/ifcfm/ifcfm/cobie24.py +++ b/src/ifcfm/ifcfm/cobie24.py @@ -282,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"), } @@ -417,6 +417,7 @@ def get_space_data(ifc_file, element): "ExternalSystem": get_external_system(element), "ExternalObject": element.is_a(), "ExternalIdentifier": element.GlobalId, + # Stopped here "RoomTag": room_tag, "UsableHeight": usable_height, "GrossArea": gross_area, From cbec56c2f08140c4d8402b23832d7c04614a65ca Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 26 Oct 2023 15:53:41 +0500 Subject: [PATCH 136/220] ifc2x3 pset library - fix bunch of unit related vlaidation errors #3929 --- .../util/generate_pset_templates.py | 77 +- .../ifcopenshell/util/schema/Pset_IFC2X3.ifc | 5548 +++++++---------- 2 files changed, 2440 insertions(+), 3185 deletions(-) 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/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; From be5d291bd965577ebc78d9b7ee120816cb198445 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 26 Oct 2023 17:19:51 +0500 Subject: [PATCH 137/220] test creating mep transition --- src/blenderbim/test/bim/feature/model.feature | 25 +++++++++++++++++++ src/blenderbim/test/bim/test_feature.py | 14 +++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/blenderbim/test/bim/feature/model.feature b/src/blenderbim/test/bim/feature/model.feature index 3aa74ffaee..d49c455625 100644 --- a/src/blenderbim/test/bim/feature/model.feature +++ b/src/blenderbim/test/bim/feature/model.feature @@ -525,3 +525,28 @@ 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 "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" diff --git a/src/blenderbim/test/bim/test_feature.py b/src/blenderbim/test/bim/test_feature.py index 9fd1c4317f..87787caf66 100644 --- a/src/blenderbim/test/bim/test_feature.py +++ b/src/blenderbim/test/bim/test_feature.py @@ -108,6 +108,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(): From 973e4f00641700b6bdef34c5f17b366985f57dbd Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Fri, 27 Oct 2023 11:24:49 -0500 Subject: [PATCH 138/220] Updated default JoinCriteria to accommodate new facet selector for statuses. --- src/blenderbim/blenderbim/bim/module/drawing/operator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/bim/module/drawing/operator.py b/src/blenderbim/blenderbim/bim/module/drawing/operator.py index caa9ed66ed..c9edde9ecc 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/operator.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/operator.py @@ -918,7 +918,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 = {} From 1c954801b0666ccd17671e8cb9dc7136764cffd6 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sat, 28 Oct 2023 14:44:41 +1100 Subject: [PATCH 139/220] Fix #3939. Bug where IfcLabel data type was incorrectly used for longer text data. --- .../blenderbim/bim/module/geometry/operator.py | 18 ++++++++++++------ .../blenderbim/bim/module/model/array.py | 6 +++--- .../blenderbim/bim/module/model/door.py | 4 ++-- .../blenderbim/bim/module/model/mep.py | 4 ++-- .../blenderbim/bim/module/model/railing.py | 2 +- .../blenderbim/bim/module/model/roof.py | 2 +- .../blenderbim/bim/module/model/stair.py | 4 ++-- .../bim/module/model/sverchok_modifier.py | 2 +- .../blenderbim/bim/module/model/window.py | 4 ++-- src/blenderbim/blenderbim/tool/model.py | 10 ++++++---- 10 files changed, 32 insertions(+), 24 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/geometry/operator.py b/src/blenderbim/blenderbim/bim/module/geometry/operator.py index b659ea2a69..a36ed6138f 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/operator.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/operator.py @@ -908,14 +908,14 @@ class OverrideDuplicateMoveAggregate(bpy.types.Operator): "pset.edit_pset", tool.Ifc.get(), pset=tool.Ifc.get().by_id(pset["id"]), - properties={"Data": json.dumps(data)}, + properties={"Data": tool.Ifc.get().createIfcText(json.dumps(data))}, ) else: ifcopenshell.api.run( "pset.edit_pset", tool.Ifc.get(), pset=tool.Ifc.get().by_id(pset["id"]), - properties={"Parent": parent.GlobalId, "Data": json.dumps(data)}, + properties={"Parent": parent.GlobalId, "Data": tool.Ifc.get().createIfcText(json.dumps(data))}, ) else: @@ -927,7 +927,7 @@ class OverrideDuplicateMoveAggregate(bpy.types.Operator): "pset.edit_pset", tool.Ifc.get(), pset=pset, - properties={"Parent": parent.GlobalId, "Data": json.dumps(data)}, + properties={"Parent": parent.GlobalId, "Data": tool.Ifc.get().createIfcText(json.dumps(data))}, ) def add_child_to_assembly_data(new_entity): @@ -941,7 +941,7 @@ class OverrideDuplicateMoveAggregate(bpy.types.Operator): "pset.edit_pset", tool.Ifc.get(), pset=tool.Ifc.get().by_id(parent_pset["id"]), - properties={"Data": json.dumps(data)}, + properties={"Data": tool.Ifc.get().createIfcText(json.dumps(data))}, ) def create_data_structure(entity, level=-1): @@ -1215,7 +1215,10 @@ class RefreshAggregate(bpy.types.Operator): "pset.edit_pset", tool.Ifc.get(), pset=pset, - properties={"Parent": instance_entity.GlobalId, "Data": json.dumps(data)}, + properties={ + "Parent": instance_entity.GlobalId, + "Data": tool.Ifc.get().createIfcText(json.dumps(data)), + }, ) part_obj = tool.Ifc.get_object(part) @@ -1254,7 +1257,10 @@ class RefreshAggregate(bpy.types.Operator): "pset.edit_pset", tool.Ifc.get(), pset=pset, - properties={"Parent": instance_entity.GlobalId, "Data": json.dumps(data)}, + properties={ + "Parent": instance_entity.GlobalId, + "Data": tool.Ifc.get().createIfcText(json.dumps(data)), + }, ) part_obj = tool.Ifc.get_object(part) diff --git a/src/blenderbim/blenderbim/bim/module/model/array.py b/src/blenderbim/blenderbim/bim/module/model/array.py index f8a40c2713..7ecef126fc 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) @@ -196,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) diff --git a/src/blenderbim/blenderbim/bim/module/model/door.py b/src/blenderbim/blenderbim/bim/module/model/door.py index 06411761e9..a00559afec 100644 --- a/src/blenderbim/blenderbim/bim/module/model/door.py +++ b/src/blenderbim/blenderbim/bim/module/model/door.py @@ -549,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"} @@ -608,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/mep.py b/src/blenderbim/blenderbim/bim/module/model/mep.py index dfe709eaf6..f7a96f9431 100644 --- a/src/blenderbim/blenderbim/bim/module/model/mep.py +++ b/src/blenderbim/blenderbim/bim/module/model/mep.py @@ -856,7 +856,7 @@ 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_si) @@ -1200,7 +1200,7 @@ 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, end_port_pos=second_object_offset) diff --git a/src/blenderbim/blenderbim/bim/module/model/railing.py b/src/blenderbim/blenderbim/bim/module/model/railing.py index 87ebfb2a98..28aaab790d 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}) diff --git a/src/blenderbim/blenderbim/bim/module/model/roof.py b/src/blenderbim/blenderbim/bim/module/model/roof.py index e8b529cf96..5582f15879 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}) diff --git a/src/blenderbim/blenderbim/bim/module/model/stair.py b/src/blenderbim/blenderbim/bim/module/model/stair.py index 1f82c4ee44..ec7d178387 100644 --- a/src/blenderbim/blenderbim/bim/module/model/stair.py +++ b/src/blenderbim/blenderbim/bim/module/model/stair.py @@ -377,7 +377,7 @@ 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))}, ) regenerate_stair_mesh(context) update_ifc_stair_props(obj) @@ -419,7 +419,7 @@ class FinishEditingStair(bpy.types.Operator, tool.Ifc.Operator): 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 ab54ef8d24..8a1946896a 100644 --- a/src/blenderbim/blenderbim/bim/module/model/sverchok_modifier.py +++ b/src/blenderbim/blenderbim/bim/module/model/sverchok_modifier.py @@ -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/window.py b/src/blenderbim/blenderbim/bim/module/model/window.py index 43e0da7128..db204a7ac8 100644 --- a/src/blenderbim/blenderbim/bim/module/model/window.py +++ b/src/blenderbim/blenderbim/bim/module/model/window.py @@ -496,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"} @@ -553,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/tool/model.py b/src/blenderbim/blenderbim/tool/model.py index e58a13eaed..e974b675e3 100644 --- a/src/blenderbim/blenderbim/tool/model.py +++ b/src/blenderbim/blenderbim/tool/model.py @@ -513,7 +513,8 @@ class Model(blenderbim.core.tool.Model): else: pset = ifcopenshell.api.run("pset.add_pset", tool.Ifc.get(), product=element, name="BBIM_Boolean") data = boolean_ids - ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"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}) @classmethod def unmark_manual_booleans(cls, element, booleans): @@ -526,7 +527,8 @@ class Model(blenderbim.core.tool.Model): data = list(data) pset = tool.Ifc.get().by_id(pset["id"]) if data: - ifcopenshell.api.run("pset.edit_pset", tool.Ifc.get(), pset=pset, properties={"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}) else: ifcopenshell.api.run("pset.remove_pset", tool.Ifc.get(), pset=pset) @@ -601,7 +603,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(), @@ -611,7 +613,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)): From f0028c00947508302cbb719d6959a4eb93581d79 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sat, 28 Oct 2023 15:54:45 +1100 Subject: [PATCH 140/220] get_footprint_area now unions 2D polygons to prevent double counting --- .../ifcopenshell/util/shape.py | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/ifcopenshell-python/ifcopenshell/util/shape.py b/src/ifcopenshell-python/ifcopenshell/util/shape.py index cc9e9dbce5..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 @@ -521,7 +522,32 @@ def get_footprint_area(geometry, axis="Z", direction=None): for idx in range(len(vertices)): vertices[idx] = vertices[idx] - np.dot(vertices[idx], direction) * direction - return get_area_vf(vertices, filtered_faces) + # 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): From db06cff99783e77d010b33998ed8149b89f807af Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Sun, 29 Oct 2023 14:35:14 +0100 Subject: [PATCH 141/220] Update test file for case insensitivity. Thanks Igor. --- ...fc2x3.ifc => pass-3-box-alignment-CENTER-uppercase-ifc2x3.ifc} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/ifcopenshell-python/test/fixtures/rules/{fail-3-box-alignment-CENTER-ifc2x3.ifc => pass-3-box-alignment-CENTER-uppercase-ifc2x3.ifc} (100%) 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 From b9ad15c50f8e195b1bd2a3efd188b36db563d3fb Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Mon, 30 Oct 2023 09:30:48 +1100 Subject: [PATCH 142/220] Minor fix to Uniclass classification --- .../classifications/Uniclass July 2023.ifc | 42 +++++++++---------- .../uniclass_classification.py | 3 +- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/schema/classifications/Uniclass July 2023.ifc b/src/blenderbim/blenderbim/bim/schema/classifications/Uniclass July 2023.ifc index fc017abb92..fed1622e8f 100644 --- a/src/blenderbim/blenderbim/bim/schema/classifications/Uniclass July 2023.ifc +++ b/src/blenderbim/blenderbim/bim/schema/classifications/Uniclass July 2023.ifc @@ -1,25 +1,25 @@ ISO-10303-21; HEADER; FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1'); -FILE_NAME('','2023-10-25T10:22:27',(),(),'IfcOpenShell v0.7.0-c35be50c8','IfcOpenShell v0.7.0-c35be50c8',''); +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',$,$,$); -#3=IFCCLASSIFICATIONREFERENCE($,'Co','Complexes',$,$,$); -#4=IFCCLASSIFICATIONREFERENCE($,'En','Entities',$,$,$); -#5=IFCCLASSIFICATIONREFERENCE($,'SL','Spaces / Locations',$,$,$); -#6=IFCCLASSIFICATIONREFERENCE($,'EF','Elements / Functions',$,$,$); -#7=IFCCLASSIFICATIONREFERENCE($,'Ss','Systems',$,$,$); -#8=IFCCLASSIFICATIONREFERENCE($,'Pr','Products',$,$,$); -#9=IFCCLASSIFICATIONREFERENCE($,'TE','Tools and equipment',$,$,$); -#10=IFCCLASSIFICATIONREFERENCE($,'PM','Project management',$,$,$); -#11=IFCCLASSIFICATIONREFERENCE($,'FI','Form of information',$,$,$); -#12=IFCCLASSIFICATIONREFERENCE($,'Ro','Roles',$,$,$); -#13=IFCCLASSIFICATIONREFERENCE($,'Ma','Materials',$,$,$); -#14=IFCCLASSIFICATIONREFERENCE($,'Pc','Properties and characteristics',$,$,$); -#15=IFCCLASSIFICATIONREFERENCE($,'Zz','CAD',$,$,$); +#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,$,$); @@ -16494,7 +16494,7 @@ DATA; #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',#1,$,$); +#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,$,$); @@ -16558,7 +16558,7 @@ DATA; #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',#1,$,$); +#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,$,$); @@ -16891,7 +16891,7 @@ DATA; #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',#1,$,$); +#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,$,$); @@ -17442,7 +17442,7 @@ DATA; #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',#1,$,$); +#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,$,$); @@ -17672,7 +17672,7 @@ DATA; #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',#1,$,$); +#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,$,$); @@ -17702,7 +17702,7 @@ DATA; #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',#1,$,$); +#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,$,$); diff --git a/src/blenderbim/scripts/classifications/uniclass_classification.py b/src/blenderbim/scripts/classifications/uniclass_classification.py index 0c3d182064..ce55fae9e7 100644 --- a/src/blenderbim/scripts/classifications/uniclass_classification.py +++ b/src/blenderbim/scripts/classifications/uniclass_classification.py @@ -33,13 +33,14 @@ tables = [ ("FI", "Form of information"), ("Ro", "Roles"), ("Ma", "Materials"), - ("Pc", "Properties and characteristics"), + ("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: From 01b5f8f237c665b02347a06808aba3b5f367850b Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 30 Oct 2023 11:27:55 +0500 Subject: [PATCH 143/220] Fixed #3949 --- src/blenderbim/blenderbim/bim/module/geometry/operator.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/bim/module/geometry/operator.py b/src/blenderbim/blenderbim/bim/module/geometry/operator.py index a36ed6138f..7475cbdb16 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/operator.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/operator.py @@ -795,7 +795,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: From a7712a923fcfc08e88fd7b293c59b410156a15ac Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 30 Oct 2023 15:12:36 +0500 Subject: [PATCH 144/220] setup_pytest to find site-packages folder near sys.executable Used to get errors running setup_pytest.py having python 3.10 installed on my pc (`sys_paths[-1]` was the system's python folder, not the blender's python). --- src/blenderbim/scripts/setup_pytest.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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"]) From d8ff83da7381a626fac716fbb8dc26f1ab11a3c5 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 30 Oct 2023 15:13:54 +0500 Subject: [PATCH 145/220] Replacing old context override method #3876 --- src/blenderbim/blenderbim/bim/import_ifc.py | 3 ++- src/blenderbim/blenderbim/bim/module/model/product.py | 3 ++- src/blenderbim/blenderbim/bim/module/qto/helper.py | 3 ++- src/blenderbim/blenderbim/tool/misc.py | 6 ++++-- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/import_ifc.py b/src/blenderbim/blenderbim/bim/import_ifc.py index 17cef207a0..576340ae76 100644 --- a/src/blenderbim/blenderbim/bim/import_ifc.py +++ b/src/blenderbim/blenderbim/bim/import_ifc.py @@ -1401,7 +1401,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] diff --git a/src/blenderbim/blenderbim/bim/module/model/product.py b/src/blenderbim/blenderbim/bim/module/model/product.py index fcc4f9f3fb..1c54febc74 100644 --- a/src/blenderbim/blenderbim/bim/module/model/product.py +++ b/src/blenderbim/blenderbim/bim/module/model/product.py @@ -559,5 +559,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/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/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) From 4e1daea838d67431130ade36fa70ee55855c2ccc Mon Sep 17 00:00:00 2001 From: Gorgious56 Date: Mon, 30 Oct 2023 14:19:01 +0100 Subject: [PATCH 146/220] Clicking on an entry in the search field popup automatically validates and closes the popup No need to click on "OK" anymore. This is not a hacky workaround using the mouse position, it uses a signal sent to Blender to close the active popup See https://blenderartists.org/t/programatically-close-pie-menu-2-79/1488807/2 re-committing since it seems I commited to the wrong branch last week --- src/blenderbim/blenderbim/bim/operator.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/blenderbim/blenderbim/bim/operator.py b/src/blenderbim/blenderbim/bim/operator.py index e65ad34b49..8937205a9a 100644 --- a/src/blenderbim/blenderbim/bim/operator.py +++ b/src/blenderbim/blenderbim/bim/operator.py @@ -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) From 4fbbfb5191286d8b67c4b64ed4dac73fb37e5784 Mon Sep 17 00:00:00 2001 From: Gorgious56 Date: Mon, 30 Oct 2023 15:04:37 +0100 Subject: [PATCH 147/220] You can now eyedrop an object in the viewport to copy class and predefined type when reassigning class --- .../blenderbim/bim/module/root/operator.py | 1 + .../blenderbim/bim/module/root/prop.py | 35 +++++++++++++++++++ .../blenderbim/bim/module/root/ui.py | 1 + 3 files changed, 37 insertions(+) diff --git a/src/blenderbim/blenderbim/bim/module/root/operator.py b/src/blenderbim/blenderbim/bim/module/root/operator.py index 425738f4f7..fccbb2c850 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"} 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"]) From 53594de1ff3ca2c6da488bfec6763eab6fce7b17 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 31 Oct 2023 08:32:43 +1100 Subject: [PATCH 148/220] See #3955. PyPI release now specifies compatible Python versions. --- src/ifcopenshell-python/pyproject.toml | 1 + 1 file changed, 1 insertion(+) 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+)", From 7f7f35313146bee4cac0f7734d99f8819b726ea1 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 31 Oct 2023 12:31:05 +1100 Subject: [PATCH 149/220] Disable batching for removal as it doesn't seem to help mostly from experience. Still testing. --- src/ifcopenshell-python/ifcopenshell/util/element.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ifcopenshell-python/ifcopenshell/util/element.py b/src/ifcopenshell-python/ifcopenshell/util/element.py index ed121ac95d..f3654407d6 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/element.py +++ b/src/ifcopenshell-python/ifcopenshell/util/element.py @@ -947,7 +947,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) @@ -982,7 +982,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): From 3b3668eedfb9463b7cd114f653bf7cb9adb620c3 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Mon, 30 Oct 2023 22:51:55 -0500 Subject: [PATCH 150/220] More IFC class suggestions --- .../util/schema/ifc_classes_suggestions.json | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) 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" From b42f072bd5fe254b57bbba39e1ee9f36582f52ff Mon Sep 17 00:00:00 2001 From: Gorgious56 Date: Tue, 31 Oct 2023 11:14:54 +0100 Subject: [PATCH 151/220] You can now eyedrop an object in the viewport to copy container when editing container --- .../blenderbim/bim/module/spatial/prop.py | 26 +++++++++++++++++++ .../blenderbim/bim/module/spatial/ui.py | 1 + src/blenderbim/blenderbim/tool/spatial.py | 1 + 3 files changed, 28 insertions(+) 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 61f1555531..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"]: diff --git a/src/blenderbim/blenderbim/tool/spatial.py b/src/blenderbim/blenderbim/tool/spatial.py index 369d7c56dc..1e74db5175 100644 --- a/src/blenderbim/blenderbim/tool/spatial.py +++ b/src/blenderbim/blenderbim/tool/spatial.py @@ -78,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): From 2ecd11d71f5640d602a5c69126323107f696a3b4 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 31 Oct 2023 13:54:05 +0500 Subject: [PATCH 152/220] fixing test after 0d0b91e --- src/blenderbim/test/tool/test_material.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/blenderbim/test/tool/test_material.py b/src/blenderbim/test/tool/test_material.py index 4079654600..467eb34afe 100644 --- a/src/blenderbim/test/tool/test_material.py +++ b/src/blenderbim/test/tool/test_material.py @@ -43,7 +43,7 @@ class TestAddDefaultMaterialObject(NewFile): 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") From 45f2d301b37ff3ac9d62e881cddadb9f87a76b01 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 31 Oct 2023 13:54:20 +0500 Subject: [PATCH 153/220] More context override fixes #3876 --- src/blenderbim/blenderbim/bim/import_ifc.py | 9 ++++----- src/blenderbim/blenderbim/tool/geometry.py | 3 ++- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/import_ifc.py b/src/blenderbim/blenderbim/bim/import_ifc.py index 576340ae76..5115a415fa 100644 --- a/src/blenderbim/blenderbim/bim/import_ifc.py +++ b/src/blenderbim/blenderbim/bim/import_ifc.py @@ -1459,11 +1459,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 diff --git a/src/blenderbim/blenderbim/tool/geometry.py b/src/blenderbim/blenderbim/tool/geometry.py index f0232a5826..219ba0119b 100644 --- a/src/blenderbim/blenderbim/tool/geometry.py +++ b/src/blenderbim/blenderbim/tool/geometry.py @@ -70,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)) From bbe14834e488b4384ce17c22e426b7edfd06a711 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 31 Oct 2023 15:27:43 +0500 Subject: [PATCH 154/220] Remove 3D shaders prefix #3876 In Blender 4.0 3D_* shaders are called without "3D_" prefix, otherwise it throws an error. Tested on Blender 3.6 - they work without "3D_" prefix too. --- .../blenderbim/bim/module/boundary/decorator.py | 4 ++-- .../blenderbim/bim/module/drawing/decoration.py | 14 +++++++------- .../blenderbim/bim/module/drawing/shaders.py | 6 +++--- .../blenderbim/bim/module/model/decorator.py | 6 +++--- .../blenderbim/bim/module/model/opening.py | 4 ++-- .../blenderbim/bim/module/system/decorator.py | 6 +++--- 6 files changed, 20 insertions(+), 20 deletions(-) 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/drawing/decoration.py b/src/blenderbim/blenderbim/bim/module/drawing/decoration.py index 2c0bf10b1f..558522cce0 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 @@ -1563,15 +1563,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 +1931,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/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/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/opening.py b/src/blenderbim/blenderbim/bim/module/model/opening.py index 9c98680917..795abf3652 100644 --- a/src/blenderbim/blenderbim/bim/module/model/opening.py +++ b/src/blenderbim/blenderbim/bim/module/model/opening.py @@ -873,14 +873,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/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) From 8126085037bbe4ce93c6905b1ee865330c7461ea Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 31 Oct 2023 15:38:57 +0500 Subject: [PATCH 155/220] Warning message on copying node graph on Blender 4.0+ #3876 As we're still looking for a workaround --- src/blenderbim/blenderbim/tool/blender.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/blenderbim/blenderbim/tool/blender.py b/src/blenderbim/blenderbim/tool/blender.py index 73e245bdc9..07c04a3786 100644 --- a/src/blenderbim/blenderbim/tool/blender.py +++ b/src/blenderbim/blenderbim/tool/blender.py @@ -197,6 +197,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"] From e2de9efc33d3d63a5bbc2752230951f34e5df96e Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 31 Oct 2023 15:56:46 +0500 Subject: [PATCH 156/220] Move new Blender 4.0 Simulation section to Scene/Blender tab #3876 --- src/blenderbim/blenderbim/bim/__init__.py | 1 + src/blenderbim/blenderbim/bim/handler.py | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/src/blenderbim/blenderbim/bim/__init__.py b/src/blenderbim/blenderbim/bim/__init__.py index f932fb9a63..617c7c8248 100644 --- a/src/blenderbim/blenderbim/bim/__init__.py +++ b/src/blenderbim/blenderbim/bim/__init__.py @@ -288,6 +288,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): From 235e89ae14ea00428398b31b0439ed906870eda9 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 31 Oct 2023 16:19:42 +0500 Subject: [PATCH 157/220] remove blf.size deprecated dpi argument #3876 turn out it wasn't working for awhile now and in Blender 4.0 was completely removed --- src/blenderbim/blenderbim/bim/module/drawing/decoration.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/drawing/decoration.py b/src/blenderbim/blenderbim/bim/module/drawing/decoration.py index 558522cce0..a2195bdb7d 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/decoration.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/decoration.py @@ -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) From 038d3bc41c358b90ae02375787014d9e33ff82d9 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 31 Oct 2023 16:24:41 +0500 Subject: [PATCH 158/220] fix future warning for xml.etree The warning was: FutureWarning: The behavior of this method will change in future versions. Use specific 'len(elem)' or 'elem is not None' test instead. --- src/blenderbim/blenderbim/bim/module/drawing/operator.py | 2 +- src/blenderbim/blenderbim/bim/module/drawing/svgwriter.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/drawing/operator.py b/src/blenderbim/blenderbim/bim/module/drawing/operator.py index c9edde9ecc..9c49f2bb2f 100644 --- a/src/blenderbim/blenderbim/bim/module/drawing/operator.py +++ b/src/blenderbim/blenderbim/bim/module/drawing/operator.py @@ -534,7 +534,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)) 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"] From 3b298d44c1c93637a6ac035504ceda29503159a0 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 1 Nov 2023 14:16:00 +1100 Subject: [PATCH 159/220] Fix regressions in mapped native swept disk handling --- src/blenderbim/blenderbim/bim/import_ifc.py | 14 ++++++++++---- .../ifcopenshell/util/representation.py | 18 +++++++++++++++++- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/import_ifc.py b/src/blenderbim/blenderbim/bim/import_ifc.py index 5115a415fa..6312ce7f50 100644 --- a/src/blenderbim/blenderbim/bim/import_ifc.py +++ b/src/blenderbim/blenderbim/bim/import_ifc.py @@ -494,7 +494,7 @@ class IfcImporter: rep = representation while True: - if rep.Items and rep.Items[0].is_a("IfcMappedItem"): + 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 @@ -547,7 +547,7 @@ class IfcImporter: return True def is_native_swept_disk_solid(self, element, representation): - items = representation.Items or [] # Be forgiving of invalid IFCs because Revit :( + 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 @@ -563,6 +563,7 @@ class IfcImporter: 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 @@ -1316,12 +1317,17 @@ class IfcImporter: curve.resolution_u = 2 polyline = curve.splines.new("POLY") - for item in native_data["representation"].Items: + 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 = [[v[i], v[i + 1], v[i + 2], 1] for i in range(0, len(v), 3)] + 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: diff --git a/src/ifcopenshell-python/ifcopenshell/util/representation.py b/src/ifcopenshell-python/ifcopenshell/util/representation.py index 2d5d252e72..68842d3ef3 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/representation.py +++ b/src/ifcopenshell-python/ifcopenshell/util/representation.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 numpy as np import ifcopenshell @@ -67,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 From 19a3f56941bd6452da0e347ba19ea8eba8536ee3 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 1 Nov 2023 14:41:25 +1100 Subject: [PATCH 160/220] Fix #3958. Bug where reassigning type class would incorrectly assign occurrence classes. --- .../blenderbim/bim/module/root/operator.py | 13 +++++++------ .../ifcopenshell/api/root/reassign_class.py | 3 ++- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/root/operator.py b/src/blenderbim/blenderbim/bim/module/root/operator.py index fccbb2c850..ecf1d95753 100644 --- a/src/blenderbim/blenderbim/bim/module/root/operator.py +++ b/src/blenderbim/blenderbim/bim/module/root/operator.py @@ -92,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": @@ -101,11 +104,9 @@ 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")) tool.Ifc.link(product, obj) diff --git a/src/ifcopenshell-python/ifcopenshell/api/root/reassign_class.py b/src/ifcopenshell-python/ifcopenshell/api/root/reassign_class.py index ae2843479d..3c93eeee80 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/root/reassign_class.py +++ b/src/ifcopenshell-python/ifcopenshell/api/root/reassign_class.py @@ -80,11 +80,12 @@ class Usecase: element.ObjectType = self.settings["predefined_type"] if element.is_a("IfcTypeProduct"): for typed_element in ifcopenshell.util.element.get_types(element) or []: + ifc_class = self.settings["ifc_class"].removesuffix("Type").removesuffix("Style") ifcopenshell.api.run( "root.reassign_class", self.file, product=typed_element, - ifc_class=self.settings["ifc_class"].strip("Type"), + ifc_class=ifc_class, predefined_type= self.settings["predefined_type"] ) return element From 20b7ee009de1ddcb8d5e44402e4cd886ace36e44 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 1 Nov 2023 15:18:57 +1100 Subject: [PATCH 161/220] Fix #3957. Fix bug where shared properties were not edited independently. --- .../ifcopenshell/api/pset/edit_pset.py | 50 +++++++++---------- .../test/api/pset/test_edit_pset.py | 31 +++++++++--- 2 files changed, 49 insertions(+), 32 deletions(-) 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/test/api/pset/test_edit_pset.py b/src/ifcopenshell-python/test/api/pset/test_edit_pset.py index 54e1d61633..9d308fd559 100644 --- a/src/ifcopenshell-python/test/api/pset/test_edit_pset.py +++ b/src/ifcopenshell-python/test/api/pset/test_edit_pset.py @@ -95,6 +95,7 @@ class TestEditPset(test.bootstrap.IFC4): element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall") pset = ifcopenshell.api.run("pset.add_pset", self.file, product=element, name="Pset_WallCommon") ifcopenshell.api.run("pset.edit_pset", self.file, pset=pset, properties={"Reference": "Foo"}) + print("test") ifcopenshell.api.run("pset.edit_pset", self.file, pset=pset, properties={"Reference": None}, should_purge=True) pset = element.IsDefinedBy[0].RelatingPropertyDefinition assert len(pset.HasProperties) == 0 @@ -168,7 +169,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 +181,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 +265,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 +285,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" From dfd5cc4728fffe1d00769aa64a56f17ed5b6f759 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 1 Nov 2023 16:28:42 +1100 Subject: [PATCH 162/220] See #3953. Fix bug where IDSes with a single enumeration value didn't validate. --- src/ifctester/ifctester/facet.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/ifctester/ifctester/facet.py b/src/ifctester/ifctester/facet.py index 78e718a264..f2d9412c8d 100644 --- a/src/ifctester/ifctester/facet.py +++ b/src/ifctester/ifctester/facet.py @@ -919,12 +919,15 @@ class Restriction: return self self.base = ids_dict.get("@base", "xs:string")[3:] for key, value in ids_dict.items(): + key = key.split(":")[-1] if key in ["@base", "annotation"]: continue - if isinstance(value, dict): - self.options[key.split(":")[-1]] = value["@value"] + if key == "enumeration" and isinstance(value, dict): + self.options[key] = [value["@value"]] # A single enumeration value which is pretty meaningless + elif isinstance(value, dict): + self.options[key] = value["@value"] else: - self.options[key.split(":")[-1]] = [v["@value"] for v in value] + self.options[key] = [v["@value"] for v in value] return self def asdict(self): From 0d87d5927e00a8e8ca6fbda0064a867cdbcbf011 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 1 Nov 2023 10:49:35 +0500 Subject: [PATCH 163/220] bim.select_all_array_objects not to clear previous selection #3960 --- src/blenderbim/blenderbim/bim/module/model/array.py | 4 +++- src/blenderbim/blenderbim/tool/blender.py | 7 ++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/array.py b/src/blenderbim/blenderbim/bim/module/model/array.py index 7ecef126fc..fa685677f0 100644 --- a/src/blenderbim/blenderbim/bim/module/model/array.py +++ b/src/blenderbim/blenderbim/bim/module/model/array.py @@ -262,7 +262,9 @@ class SelectAllArrayObjects(bpy.types.Operator): return {"CANCELLED"} 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) + 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/tool/blender.py b/src/blenderbim/blenderbim/tool/blender.py index 07c04a3786..1fab04c442 100644 --- a/src/blenderbim/blenderbim/tool/blender.py +++ b/src/blenderbim/blenderbim/tool/blender.py @@ -366,9 +366,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 From b6e24559e5844b9f9f144b296eaae96dd71aff69 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 1 Nov 2023 18:04:32 +1100 Subject: [PATCH 164/220] Fix #3961. Improve UI so setting null now clears the value. --- src/blenderbim/blenderbim/bim/prop.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) 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) From 7bf8d58cde3f0b35d4b3f2b0287081bb7d677bca Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 1 Nov 2023 22:23:55 +1100 Subject: [PATCH 165/220] Improve data type error reporting --- src/ifctester/ifctester/facet.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/ifctester/ifctester/facet.py b/src/ifctester/ifctester/facet.py index f2d9412c8d..1f1560dbfc 100644 --- a/src/ifctester/ifctester/facet.py +++ b/src/ifctester/ifctester/facet.py @@ -650,7 +650,7 @@ class Property(Facet): if data_type.lower() != self.datatype.lower(): is_pass = False - reason = {"type": "DATATYPE", "actual": data_type} + reason = {"type": "DATATYPE", "actual": data_type, "datatype": self.datatype} break unit = ifcopenshell.util.unit.get_property_unit(prop_entity, inst.wrapped_data.file) @@ -669,7 +669,7 @@ class Property(Facet): if data_type.lower() != self.datatype.lower(): is_pass = False - reason = {"type": "DATATYPE", "actual": data_type} + reason = {"type": "DATATYPE", "actual": data_type, "datatype": self.datatype} break unit = ifcopenshell.util.unit.get_property_unit(prop_entity, inst.wrapped_data.file) @@ -689,7 +689,7 @@ class Property(Facet): data_type = prop_entity.EnumerationValues[0].is_a() if data_type.lower() != self.datatype.lower(): is_pass = False - reason = {"type": "DATATYPE", "actual": data_type} + reason = {"type": "DATATYPE", "actual": data_type, "datatype": self.datatype} break elif prop_entity.is_a("IfcPropertyListValue"): if not prop_entity.ListValues: @@ -699,7 +699,7 @@ class Property(Facet): data_type = prop_entity.ListValues[0].is_a() if data_type.lower() != self.datatype.lower(): is_pass = False - reason = {"type": "DATATYPE", "actual": data_type} + reason = {"type": "DATATYPE", "actual": data_type, "datatype": self.datatype} break unit = ifcopenshell.util.unit.get_property_unit(prop_entity, inst.wrapped_data.file) if unit: @@ -722,7 +722,7 @@ class Property(Facet): values.append(value.wrappedValue) if data_type.lower() != self.datatype.lower(): is_pass = False - reason = {"type": "DATATYPE", "actual": data_type} + reason = {"type": "DATATYPE", "actual": data_type, "datatype": self.datatype} break unit = ifcopenshell.util.unit.get_property_unit(prop_entity, inst.wrapped_data.file) if unit: @@ -762,7 +762,7 @@ class Property(Facet): values.extend(column_values) if not values: is_pass = False - reason = {"type": "DATATYPE", "actual": data_type} + reason = {"type": "DATATYPE", "actual": data_type, "datatype": self.datatype} break props[pset_name][prop_entity.Name] = values else: @@ -1049,7 +1049,7 @@ class PropertyResult(Result): elif self.reason["type"] == "NOVALUE": return "The property set does not contain the required property" elif self.reason["type"] == "DATATYPE": - return f"The data type \"{str(self.reason['actual'])}\" does not match the requirements" + return f"The property's data type \"{str(self.reason['actual'])}\" does not match the required data type of \"{str(self.reason['datatype'])}\"" elif self.reason["type"] == "VALUE": if isinstance(self.reason["actual"], list): if len(self.reason["actual"]) == 1: From 8eeb2120039177080d50e6257424cb45c0d3f993 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 1 Nov 2023 22:47:16 +1100 Subject: [PATCH 166/220] See #3951. IfcCSV now supports list concatenation. --- src/blenderbim/blenderbim/bim/module/csv/operator.py | 1 + src/blenderbim/blenderbim/bim/module/csv/prop.py | 1 + src/blenderbim/blenderbim/bim/module/csv/ui.py | 2 ++ src/ifccsv/ifccsv.py | 5 +++++ src/ifcopenshell-python/docs/ifccsv.rst | 5 +++-- 5 files changed, 12 insertions(+), 2 deletions(-) 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/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/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 ...] From 7c694e5b3efa33752cc958c8cc4174e92d979f3a Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 1 Nov 2023 22:48:31 +1100 Subject: [PATCH 167/220] Fix #3951. `mats` selector now supports IfcMaterialList. --- src/ifcopenshell-python/ifcopenshell/util/element.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ifcopenshell-python/ifcopenshell/util/element.py b/src/ifcopenshell-python/ifcopenshell/util/element.py index f3654407d6..11d222d318 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/element.py +++ b/src/ifcopenshell-python/ifcopenshell/util/element.py @@ -435,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): From 8b23c615c33c67c2e8592edd980b23964082f1c3 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 1 Nov 2023 17:33:00 +0500 Subject: [PATCH 168/220] Fix issue with calculated params in stair ui it was displaying incorrect data when stair was just loaded because it was relying on BIMStairProperties in ui.py --- .../blenderbim/bim/module/model/data.py | 23 +++++++++++++++++++ .../blenderbim/bim/module/model/ui.py | 14 ++++------- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/data.py b/src/blenderbim/blenderbim/bim/module/model/data.py index bef3f91a7d..c5b44b9c8b 100644 --- a/src/blenderbim/blenderbim/bim/module/model/data.py +++ b/src/blenderbim/blenderbim/bim/module/model/data.py @@ -314,6 +314,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): @@ -330,6 +331,28 @@ class StairData: general_params[prop_readable_name] = prop_value return general_params + @classmethod + def calculated_params(cls): + 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 + else: + data = cls.data["pset_data"]["data_dict"] + number_of_treads = data["number_of_treads"] + height = data["height"] + tread_run = data["tread_run"] + + 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) + calculated_params["Length"] = round(tread_run * number_of_rises, 5) + return calculated_params + class SverchokData: data = {} diff --git a/src/blenderbim/blenderbim/bim/module/model/ui.py b/src/blenderbim/blenderbim/bim/module/model/ui.py index 44ede97125..4e2047996c 100644 --- a/src/blenderbim/blenderbim/bim/module/model/ui.py +++ b/src/blenderbim/blenderbim/bim/module/model/ui.py @@ -278,16 +278,10 @@ class BIM_PT_stair(bpy.types.Panel): 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 StairData.data["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") From 2f951d352b93fcc029b37fc73ab458db62eb81b9 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 2 Nov 2023 12:28:53 +1100 Subject: [PATCH 169/220] Fix #3948. Bug where IfcTester PartOf facet didn't correctly read entity XML. --- src/ifctester/ifctester/facet.py | 42 ++++++++++++------------ src/ifctester/test/test_facet.py | 56 +++++++++++++++++--------------- 2 files changed, 50 insertions(+), 48 deletions(-) diff --git a/src/ifctester/ifctester/facet.py b/src/ifctester/ifctester/facet.py index 1f1560dbfc..f068ca4400 100644 --- a/src/ifctester/ifctester/facet.py +++ b/src/ifctester/ifctester/facet.py @@ -354,23 +354,23 @@ class Classification(Facet): class PartOf(Facet): def __init__( self, - entity="IFCWALL", + name="IFCWALL", predefinedType=None, relation=None, minOccurs=None, maxOccurs="unbounded", instructions=None, ): - self.parameters = ["entity", "predefinedType", "@relation", "@minOccurs", "@maxOccurs", "@instructions"] + self.parameters = ["name", "predefinedType", "@relation", "@minOccurs", "@maxOccurs", "@instructions"] self.applicability_templates = [ - "An element with an {relation} relationship with an {entity}", + "An element with an {relation} relationship with an {name}", "An element with an {relation} relationship", ] self.requirement_templates = [ - "An element must have an {relation} relationship with an {entity}", + "An element must have an {relation} relationship with an {name}", "An element must have an {relation} relationship", ] - super().__init__(entity, predefinedType, relation, minOccurs, maxOccurs, instructions) + super().__init__(name, predefinedType, relation, minOccurs, maxOccurs, instructions) def filter(self, ifc_file, elements): if isinstance(elements, list): @@ -380,9 +380,9 @@ class PartOf(Facet): def asdict(self): results = super().asdict() entity = {} - if "entity" in results: - entity["name"] = results["entity"] - del results["entity"] + if "name" in results: + entity["name"] = results["name"] + del results["name"] if "predefinedType" in results: entity["predefinedType"] = results["predefinedType"] del results["predefinedType"] @@ -407,7 +407,7 @@ class PartOf(Facet): parent = self.get_parent(inst) while parent: ancestors.append(parent.is_a()) - if parent.is_a().upper() == self.entity: + if parent.is_a().upper() == self.name: if self.predefinedType: if ifcopenshell.util.element.get_predefined_type(parent) == self.predefinedType: is_pass = True @@ -422,12 +422,12 @@ class PartOf(Facet): is_pass = aggregate is not None if not is_pass: reason = {"type": "NOVALUE"} - if is_pass and self.entity: + if is_pass and self.name: is_pass = False ancestors = [] while aggregate is not None: ancestors.append(aggregate.is_a()) - if aggregate.is_a().upper() == self.entity: + if aggregate.is_a().upper() == self.name: if self.predefinedType: if ifcopenshell.util.element.get_predefined_type(aggregate) == self.predefinedType: is_pass = True @@ -446,8 +446,8 @@ class PartOf(Facet): is_pass = group is not None if not is_pass: reason = {"type": "NOVALUE"} - if is_pass and self.entity: - if group.is_a().upper() != self.entity: + if is_pass and self.name: + if group.is_a().upper() != self.name: is_pass = False reason = {"type": "ENTITY", "actual": group.is_a().upper()} if self.predefinedType: @@ -460,8 +460,8 @@ class PartOf(Facet): is_pass = container is not None if not is_pass: reason = {"type": "NOVALUE"} - if is_pass and self.entity: - if container.is_a().upper() != self.entity: + if is_pass and self.name: + if container.is_a().upper() != self.name: is_pass = False reason = {"type": "ENTITY", "actual": container.is_a().upper()} if self.predefinedType: @@ -474,12 +474,12 @@ class PartOf(Facet): is_pass = nest is not None if not is_pass: reason = {"type": "NOVALUE"} - if is_pass and self.entity: + if is_pass and self.name: is_pass = False ancestors = [] while nest is not None: ancestors.append(nest.is_a()) - if nest.is_a().upper() == self.entity: + if nest.is_a().upper() == self.name: if self.predefinedType: if ifcopenshell.util.element.get_predefined_type(nest) == self.predefinedType: is_pass = True @@ -494,9 +494,9 @@ class PartOf(Facet): is_pass = building_element is not None if not is_pass: reason = {"type": "NOVALUE"} - if is_pass and self.entity: + if is_pass and self.name: is_pass = False - if building_element.is_a().upper() == self.entity: + if building_element.is_a().upper() == self.name: if self.predefinedType: if ifcopenshell.util.element.get_predefined_type(building_element) == self.predefinedType: is_pass = True @@ -509,9 +509,9 @@ class PartOf(Facet): is_pass = opening is not None if not is_pass: reason = {"type": "NOVALUE"} - if is_pass and self.entity: + if is_pass and self.name: is_pass = False - if opening.is_a().upper() == self.entity: + if opening.is_a().upper() == self.name: if self.predefinedType: if ifcopenshell.util.element.get_predefined_type(opening) == self.predefinedType: is_pass = True diff --git a/src/ifctester/test/test_facet.py b/src/ifctester/test/test_facet.py index a495fa2554..7d9307dba1 100644 --- a/src/ifctester/test/test_facet.py +++ b/src/ifctester/test/test_facet.py @@ -20,6 +20,7 @@ import uuid import ifcopenshell import ifcopenshell.api +import ifctester.facet from ifctester.facet import Entity, Attribute, Classification, Property, PartOf, Material, Restriction @@ -28,6 +29,8 @@ def set_facet(facet): def run(name, *, facet, inst, expected): + ifctester.facet.get_pset.cache_clear() + ifctester.facet.get_psets.cache_clear() assert bool(facet(inst)) is expected @@ -76,7 +79,6 @@ class TestEntity: expected=False, ) - # TODO But in that case why are the enumerations for things like partOf using the IFC capitalisation? facet = Entity(name="IfcWall") ifc = ifcopenshell.file() run( @@ -1406,7 +1408,7 @@ class TestPartOf: facet = PartOf() assert facet.asdict() == {"entity": {"name": {"simpleValue": "IFCWALL"}}, "@maxOccurs": "unbounded" } facet = PartOf( - entity="IFCGROUP", + name="IFCGROUP", predefinedType="predefinedType", relation="IFCRELASSIGNSTOGROUP", minOccurs="0", @@ -1431,16 +1433,16 @@ class TestPartOf: element = ifcopenshell.api.run("root.create_entity", ifc, ifc_class="IfcElementAssembly") subelement = ifcopenshell.api.run("root.create_entity", ifc, ifc_class="IfcWall") - facet = PartOf(entity="IFCELEMENTASSEMBLY", relation="IFCRELAGGREGATES") + facet = PartOf(name="IFCELEMENTASSEMBLY", relation="IFCRELAGGREGATES") run("A non aggregated element fails an aggregate relationship", facet=facet, inst=subelement, expected=False) ifcopenshell.api.run("aggregate.assign_object", ifc, product=subelement, relating_object=element) run("The aggregated whole fails an aggregate relationship", facet=facet, inst=element, expected=False) run("The aggregated part passes an aggregate relationship", facet=facet, inst=subelement, expected=True) run("A required facet checks all parameters as normal", facet=facet, inst=subelement, expected=True) - facet = PartOf(entity="IFCELEMENTASSEMBLY", relation="IFCRELAGGREGATES", minOccurs=0, maxOccurs=0) + facet = PartOf(name="IFCELEMENTASSEMBLY", relation="IFCRELAGGREGATES", minOccurs=0, maxOccurs=0) run("A prohibited facet returns the opposite of a required facet", facet=facet, inst=subelement, expected=False) - facet = PartOf(entity="IFCELEMENTASSEMBLY", relation="IFCRELAGGREGATES", minOccurs=0) + facet = PartOf(name="IFCELEMENTASSEMBLY", relation="IFCRELAGGREGATES", minOccurs=0) run("An optional facet always passes regardless of outcome 1/2", facet=facet, inst=element, expected=True) run("An optional facet always passes regardless of outcome 2/2", facet=facet, inst=subelement, expected=True) @@ -1448,17 +1450,17 @@ class TestPartOf: element = ifcopenshell.api.run("root.create_entity", ifc, ifc_class="IfcSlab") subelement = ifcopenshell.api.run("root.create_entity", ifc, ifc_class="IfcBeam") ifcopenshell.api.run("aggregate.assign_object", ifc, product=subelement, relating_object=element) - facet = PartOf(entity="IFCSLAB", relation="IFCRELAGGREGATES") + facet = PartOf(name="IFCSLAB", relation="IFCRELAGGREGATES") run("An aggregate may specify the entity of the whole 1/2", facet=facet, inst=subelement, expected=True) - facet = PartOf(entity="IFCWALL", relation="IFCRELAGGREGATES") + facet = PartOf(name="IFCWALL", relation="IFCRELAGGREGATES") run("An aggregate may specify the entity of the whole 2/2", facet=facet, inst=subelement, expected=False) element.PredefinedType = "BASESLAB" - facet = PartOf(entity="IFCSLAB", predefinedType="BASESLAB", relation="IFCRELAGGREGATES") + facet = PartOf(name="IFCSLAB", predefinedType="BASESLAB", relation="IFCRELAGGREGATES") run( "An aggregate may specify the predefined type of the whole 1/2", facet=facet, inst=subelement, expected=True ) - facet = PartOf(entity="IFCSLAB", predefinedType="SLABRADOR", relation="IFCRELAGGREGATES") + facet = PartOf(name="IFCSLAB", predefinedType="SLABRADOR", relation="IFCRELAGGREGATES") run( "An aggregate may specify the predefined type of the whole 2/2", facet=facet, @@ -1472,13 +1474,13 @@ class TestPartOf: subsubelement = ifcopenshell.api.run("root.create_entity", ifc, ifc_class="IfcBeam") ifcopenshell.api.run("aggregate.assign_object", ifc, product=subelement, relating_object=element) ifcopenshell.api.run("aggregate.assign_object", ifc, product=subsubelement, relating_object=subelement) - facet = PartOf(entity="IFCELEMENTASSEMBLY", relation="IFCRELAGGREGATES") + facet = PartOf(name="IFCELEMENTASSEMBLY", relation="IFCRELAGGREGATES") run("An aggregate entity may pass any ancestral whole passes", facet=facet, inst=subsubelement, expected=True) ifc = ifcopenshell.file() element = ifcopenshell.api.run("root.create_entity", ifc, ifc_class="IfcElementAssembly") group = ifcopenshell.api.run("group.add_group", ifc) - facet = PartOf(entity="IFCGROUP", relation="IFCRELASSIGNSTOGROUP") + facet = PartOf(name="IFCGROUP", relation="IFCRELASSIGNSTOGROUP") run("A non grouped element fails a group relationship", facet=facet, inst=element, expected=False) ifcopenshell.api.run("group.assign_group", ifc, products=[element], group=group) run("A grouped element passes a group relationship", facet=facet, inst=element, expected=True) @@ -1486,22 +1488,22 @@ class TestPartOf: ifc = ifcopenshell.file() element = ifcopenshell.api.run("root.create_entity", ifc, ifc_class="IfcElementAssembly") group = ifc.createIfcInventory() - facet = PartOf(entity="IFCGROUP", relation="IFCRELASSIGNSTOGROUP") + facet = PartOf(name="IFCGROUP", relation="IFCRELASSIGNSTOGROUP") ifcopenshell.api.run("group.assign_group", ifc, products=[element], group=group) run("A group entity must match exactly 1/2", facet=facet, inst=element, expected=False) - facet = PartOf(entity="IFCINVENTORY", relation="IFCRELASSIGNSTOGROUP") + facet = PartOf(name="IFCINVENTORY", relation="IFCRELASSIGNSTOGROUP") run("A group entity must match exactly 2/2", facet=facet, inst=element, expected=True) group.ObjectType = "BUNNY" - facet = PartOf(entity="IFCINVENTORY", predefinedType="BUNNARY", relation="IFCRELASSIGNSTOGROUP") + facet = PartOf(name="IFCINVENTORY", predefinedType="BUNNARY", relation="IFCRELASSIGNSTOGROUP") run("A group predefined type must match exactly 2/2", facet=facet, inst=element, expected=False) - facet = PartOf(entity="IFCINVENTORY", predefinedType="BUNNY", relation="IFCRELASSIGNSTOGROUP") + facet = PartOf(name="IFCINVENTORY", predefinedType="BUNNY", relation="IFCRELASSIGNSTOGROUP") run("A group predefined type must match exactly 2/2", facet=facet, inst=element, expected=True) ifc = ifcopenshell.file() element = ifcopenshell.api.run("root.create_entity", ifc, ifc_class="IfcElementAssembly") container = ifcopenshell.api.run("root.create_entity", ifc, ifc_class="IfcSpace") - facet = PartOf(entity="IFCSPACE", relation="IFCRELCONTAINEDINSPATIALSTRUCTURE") + facet = PartOf(name="IFCSPACE", relation="IFCRELCONTAINEDINSPATIALSTRUCTURE") run("Any contained element passes a containment relationship 1/2", facet=facet, inst=element, expected=False) ifcopenshell.api.run("spatial.assign_container", ifc, product=element, relating_structure=container) run("Any contained element passes a containment relationship 2/2", facet=facet, inst=element, expected=True) @@ -1511,15 +1513,15 @@ class TestPartOf: element = ifcopenshell.api.run("root.create_entity", ifc, ifc_class="IfcElementAssembly") container = ifcopenshell.api.run("root.create_entity", ifc, ifc_class="IfcSpace") ifcopenshell.api.run("spatial.assign_container", ifc, product=element, relating_structure=container) - facet = PartOf(relation="IFCRELCONTAINEDINSPATIALSTRUCTURE", entity="IFCSITE") + facet = PartOf(relation="IFCRELCONTAINEDINSPATIALSTRUCTURE", name="IFCSITE") run("The container entity must match exactly 1/2", facet=facet, inst=element, expected=False) - facet = PartOf(relation="IFCRELCONTAINEDINSPATIALSTRUCTURE", entity="IFCSPACE") + facet = PartOf(relation="IFCRELCONTAINEDINSPATIALSTRUCTURE", name="IFCSPACE") run("The container entity must match exactly 2/2", facet=facet, inst=element, expected=True) container.ObjectType = "BURROW" - facet = PartOf(relation="IFCRELCONTAINEDINSPATIALSTRUCTURE", entity="IFCSPACE", predefinedType="WARREN") + facet = PartOf(relation="IFCRELCONTAINEDINSPATIALSTRUCTURE", name="IFCSPACE", predefinedType="WARREN") run("The container predefined type must match exactly 1/2", facet=facet, inst=element, expected=False) - facet = PartOf(relation="IFCRELCONTAINEDINSPATIALSTRUCTURE", entity="IFCSPACE", predefinedType="BURROW") + facet = PartOf(relation="IFCRELCONTAINEDINSPATIALSTRUCTURE", name="IFCSPACE", predefinedType="BURROW") run("The container predefined type must match exactly 2/2", facet=facet, inst=element, expected=True) ifc = ifcopenshell.file() @@ -1528,14 +1530,14 @@ class TestPartOf: ifcopenshell.api.run("aggregate.assign_object", ifc, product=subelement, relating_object=element) container = ifcopenshell.api.run("root.create_entity", ifc, ifc_class="IfcSpace") ifcopenshell.api.run("spatial.assign_container", ifc, product=element, relating_structure=container) - facet = PartOf(relation="IFCRELCONTAINEDINSPATIALSTRUCTURE", entity="IFCSPACE") + facet = PartOf(relation="IFCRELCONTAINEDINSPATIALSTRUCTURE", name="IFCSPACE") run("The container may be indirect", facet=facet, inst=subelement, expected=True) ifc = ifcopenshell.file() element = ifcopenshell.api.run("root.create_entity", ifc, ifc_class="IfcFurniture") subelement = ifcopenshell.api.run("root.create_entity", ifc, ifc_class="IfcDiscreteAccessory") ifcopenshell.api.run("nest.assign_object", ifc, related_object=subelement, relating_object=element) - facet = PartOf(entity="IFCFURNITURE", relation="IFCRELNESTS") + facet = PartOf(name="IFCFURNITURE", relation="IFCRELNESTS") run("Any nested part passes a nest relationship", facet=facet, inst=subelement, expected=True) run("Any nested whole fails a nest relationship", facet=facet, inst=element, expected=False) @@ -1543,16 +1545,16 @@ class TestPartOf: element = ifcopenshell.api.run("root.create_entity", ifc, ifc_class="IfcFurniture") subelement = ifcopenshell.api.run("root.create_entity", ifc, ifc_class="IfcDiscreteAccessory") ifcopenshell.api.run("nest.assign_object", ifc, related_object=subelement, relating_object=element) - facet = PartOf(relation="IFCRELNESTS", entity="IFCBEAM") + facet = PartOf(relation="IFCRELNESTS", name="IFCBEAM") run("The nest entity must match exactly 1/2", facet=facet, inst=subelement, expected=False) - facet = PartOf(relation="IFCRELNESTS", entity="IFCFURNITURE") + facet = PartOf(relation="IFCRELNESTS", name="IFCFURNITURE") run("The nest entity must match exactly 2/2", facet=facet, inst=subelement, expected=True) element.PredefinedType = "USERDEFINED" element.ObjectType = "WATERBOTTLE" - facet = PartOf(relation="IFCRELNESTS", entity="IFCFURNITURE", predefinedType="LITTERBOX") + facet = PartOf(relation="IFCRELNESTS", name="IFCFURNITURE", predefinedType="LITTERBOX") run("The nest predefined type must match exactly 1/2", facet=facet, inst=subelement, expected=False) - facet = PartOf(relation="IFCRELNESTS", entity="IFCFURNITURE", predefinedType="WATERBOTTLE") + facet = PartOf(relation="IFCRELNESTS", name="IFCFURNITURE", predefinedType="WATERBOTTLE") run("The nest predefined type must match exactly 2/2", facet=facet, inst=subelement, expected=True) ifc = ifcopenshell.file() @@ -1561,7 +1563,7 @@ class TestPartOf: subsubelement = ifcopenshell.api.run("root.create_entity", ifc, ifc_class="IfcMechanicalFastener") ifcopenshell.api.run("nest.assign_object", ifc, related_object=subelement, relating_object=element) ifcopenshell.api.run("nest.assign_object", ifc, related_object=subsubelement, relating_object=subelement) - facet = PartOf(relation="IFCRELNESTS", entity="IFCFURNITURE") + facet = PartOf(relation="IFCRELNESTS", name="IFCFURNITURE") run("Nesting may be indirect", facet=facet, inst=subsubelement, expected=True) From 44f5be142f3a54ddd1e84d04e76211726feb6b55 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 2 Nov 2023 13:03:56 +1100 Subject: [PATCH 170/220] Fix #3963. Bind IFC separate to P hotkey and prevent separation on non-IFC meshes. --- .../blenderbim/bim/module/geometry/__init__.py | 8 +++++++- .../blenderbim/bim/module/geometry/operator.py | 5 ++++- .../blenderbim/bim/module/geometry/ui.py | 17 +++++++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/geometry/__init__.py b/src/blenderbim/blenderbim/bim/module/geometry/__init__.py index d8c7b4b8ee..90642c3375 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/__init__.py @@ -61,6 +61,7 @@ classes = ( ui.BIM_PT_workarounds, ui.BIM_MT_object_set_origin, ui.BIM_MT_separate, + ui.BIM_MT_hotkey_separate, ui.BIM_UL_representation_items, ) @@ -91,7 +92,9 @@ def register(): addon_keymaps.append((km, kmi)) kmi = km.keymap_items.new("bim.override_object_duplicate_move_linked_macro", "D", "PRESS", alt=True) addon_keymaps.append((km, kmi)) - kmi = km.keymap_items.new("bim.override_object_duplicate_move_aggregate_macro", "D", "PRESS", ctrl=True, shift=True) + kmi = km.keymap_items.new( + "bim.override_object_duplicate_move_aggregate_macro", "D", "PRESS", ctrl=True, shift=True + ) addon_keymaps.append((km, kmi)) kmi = km.keymap_items.new("bim.override_paste_buffer", "V", "PRESS", ctrl=True) addon_keymaps.append((km, kmi)) @@ -106,6 +109,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") diff --git a/src/blenderbim/blenderbim/bim/module/geometry/operator.py b/src/blenderbim/blenderbim/bim/module/geometry/operator.py index 7475cbdb16..fd036832ce 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/operator.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/operator.py @@ -67,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. diff --git a/src/blenderbim/blenderbim/bim/module/geometry/ui.py b/src/blenderbim/blenderbim/bim/module/geometry/ui.py index c0f5ad5e49..53c65b3b28 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/ui.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/ui.py @@ -17,6 +17,7 @@ # along with BlenderBIM Add-on. If not, see . import bpy +import blenderbim.bim import blenderbim.tool as tool from bpy.types import Panel, Menu, UIList from blenderbim.bim.ifc import IfcStore @@ -53,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" From ba97da20eb75cabe93fe8db14506dfeb88b0c195 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 2 Nov 2023 14:59:18 +1100 Subject: [PATCH 171/220] New data purging IfcPatch recipe --- src/ifcpatch/ifcpatch/recipes/PurgeData.py | 175 +++++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 src/ifcpatch/ifcpatch/recipes/PurgeData.py diff --git a/src/ifcpatch/ifcpatch/recipes/PurgeData.py b/src/ifcpatch/ifcpatch/recipes/PurgeData.py new file mode 100644 index 0000000000..8b0217ea58 --- /dev/null +++ b/src/ifcpatch/ifcpatch/recipes/PurgeData.py @@ -0,0 +1,175 @@ +# IfcPatch - IFC patching utiliy +# Copyright (C) 2023 Dion Moult +# +# This file is part of IfcPatch. +# +# IfcPatch 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. +# +# IfcPatch 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 IfcPatch. If not, see . + +import datetime + + +class Patcher: + def __init__(self, src, file, logger): + """Purge IFC properties, relationships, and other data + + In some rare cases (i.e. "resetting" a model or for security purposes) + you may need to purge all relationships and data within a model but + retain the ability to view the geometry in a model. This patch purges + the following relationships: + + - STEP comments, which may include software export metadata + - Header data, which may include filenames + - Owner, person, organisation, and application data + - Addresses + - Rooted names + - Tags (that reference original software) + - Properties and quantities + - Materials + - Styles (e.g. colours) + - External references like classifications, documents, libraries + - Types + - Groups (such as model groups or search groups) and systems + - Profile names + + Example: + + .. code:: python + + # Watch the world burn + ifcpatch.execute({"input": model, "recipe": "PurgeData", "arguments": []}) + """ + self.src = src + self.file = file + self.logger = logger + + def patch(self): + self.file.wrapped_data.header.file_name.name = "" + self.file.wrapped_data.header.file_name.time_stamp = ( + datetime.datetime.utcnow() + .replace(tzinfo=datetime.timezone.utc) + .astimezone() + .replace(microsecond=0) + .isoformat() + ) + self.file.wrapped_data.header.file_name.preprocessor_version = "" + self.file.wrapped_data.header.file_name.originating_system = "" + + for element in self.file.by_type("IfcApplication"): + element.Version = "" + element.ApplicationFullName = "" + element.ApplicationIdentifier = "" + + for element in self.file.by_type("IfcOrganization"): + element[0] = None # Id + element.Name = "" + element.Description = None + element.Roles = [] + element.Addresses = [] + + for element in self.file.by_type("IfcPerson"): + for i in range(0, len(element)): + element[i] = None + + for element in self.file.by_type("IfcPersonAndOrganization"): + element.Roles = [] + + for element in self.file.by_type("IfcActorRole"): + self.file.remove(element) + + for element in self.file.by_type("IfcAddress"): + self.file.remove(element) + + for element in self.file.by_type("IfcRoot"): + element.Name = "" + element.Description = "" + + for element in self.file.by_type("IfcContext"): + element.ObjectType = None + element.LongName = None + element.Phase = None + + for element in self.file.by_type("IfcSpatialElement"): + element.LongName = None + + for element in self.file.by_type("IfcOwnerHistory"): + element.State = None + element.ChangeAction = None + element.LastModifiedDate = None + element.LastModifyingUser = None + element.LastModifyingApplication = None + element.CreationDate = 0 + + for element in self.file.by_type("IfcRelDefines"): + self.file.remove(element) + + for element in self.file.by_type("IfcTypeProduct"): + self.file.remove(element) + + for element in self.file.by_type("IfcElement"): + element.Tag = None + element.ObjectType = None + + for element in self.file.by_type("IfcPropertyDefinition"): + self.file.remove(element) + + for element in self.file.by_type("IfcPropertyAbstraction"): + self.file.remove(element) + + for element in self.file.by_type("IfcPhysicalQuantity"): + self.file.remove(element) + + for element in self.file.by_type("IfcRelAssociates"): + self.file.remove(element) + + for element in self.file.by_type("IfcMaterialDefinition"): + self.file.remove(element) + + for element in self.file.by_type("IfcMaterialDefinitionRepresentation"): + self.file.remove(element) + + for element in self.file.by_type("IfcMaterialUsageDefinition"): + self.file.remove(element) + + for element in self.file.by_type("IfcMaterialList"): + self.file.remove(element) + + for element in self.file.by_type("IfcStyledItem"): + self.file.remove(element) + + for element in self.file.by_type("IfcStyledRepresentation"): + self.file.remove(element) + + for element in self.file.by_type("IfcPresentationStyle"): + self.file.remove(element) + + for element in self.file.by_type("IfcPresentationItem"): + self.file.remove(element) + + for element in self.file.by_type("IfcExternalInformation"): + self.file.remove(element) + + for element in self.file.by_type("IfcExternalReference"): + self.file.remove(element) + + for element in self.file.by_type("IfcTypeObject"): + self.file.remove(element) + + for element in self.file.by_type("IfcGroup"): + self.file.remove(element) + + for element in self.file.by_type("IfcRelAssigns"): + self.file.remove(element) + + for element in self.file.by_type("IfcProfileDef"): + element.ProfileName = None From 2fbc9e4424130ff385f0c2243e65ba7b560a5edc Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 2 Nov 2023 15:15:04 +1100 Subject: [PATCH 172/220] Forgot rabbit branding. --- src/ifcpatch/ifcpatch/recipes/PurgeData.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/ifcpatch/ifcpatch/recipes/PurgeData.py b/src/ifcpatch/ifcpatch/recipes/PurgeData.py index 8b0217ea58..0fc7ed4c44 100644 --- a/src/ifcpatch/ifcpatch/recipes/PurgeData.py +++ b/src/ifcpatch/ifcpatch/recipes/PurgeData.py @@ -54,7 +54,7 @@ class Patcher: self.logger = logger def patch(self): - self.file.wrapped_data.header.file_name.name = "" + self.file.wrapped_data.header.file_name.name = "Rabbit" self.file.wrapped_data.header.file_name.time_stamp = ( datetime.datetime.utcnow() .replace(tzinfo=datetime.timezone.utc) @@ -62,17 +62,17 @@ class Patcher: .replace(microsecond=0) .isoformat() ) - self.file.wrapped_data.header.file_name.preprocessor_version = "" - self.file.wrapped_data.header.file_name.originating_system = "" + self.file.wrapped_data.header.file_name.preprocessor_version = "Rabbit" + self.file.wrapped_data.header.file_name.originating_system = "Rabbit" for element in self.file.by_type("IfcApplication"): - element.Version = "" - element.ApplicationFullName = "" - element.ApplicationIdentifier = "" + element.Version = "Rabbit" + element.ApplicationFullName = "Rabbit" + element.ApplicationIdentifier = "Rabbit" for element in self.file.by_type("IfcOrganization"): element[0] = None # Id - element.Name = "" + element.Name = "Rabbit" element.Description = None element.Roles = [] element.Addresses = [] @@ -91,8 +91,8 @@ class Patcher: self.file.remove(element) for element in self.file.by_type("IfcRoot"): - element.Name = "" - element.Description = "" + element.Name = "Rabbit" + element.Description = "Rabbit" for element in self.file.by_type("IfcContext"): element.ObjectType = None From 01f52e069eac5bff0829530ee74938c782065287 Mon Sep 17 00:00:00 2001 From: ceegartner <83513981+ceegartner@users.noreply.github.com> Date: Thu, 26 Oct 2023 16:50:53 +0200 Subject: [PATCH 173/220] Update unit.py - convert function, case issue Hi, I noticed an issue and suggest a fix: Unit names from are all lowercase, whereas project units extracted from the IFC files with are uppercase. So the convert function didn't seem to work properly. Hope this helps! --- src/ifcopenshell-python/ifcopenshell/util/unit.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ifcopenshell-python/ifcopenshell/util/unit.py b/src/ifcopenshell-python/ifcopenshell/util/unit.py index 29561605a4..28bc705f00 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/unit.py +++ b/src/ifcopenshell-python/ifcopenshell/util/unit.py @@ -506,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: @@ -515,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: From bfd4559da8554b4477be7cc45bfe41274604b434 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 2 Nov 2023 10:54:47 +0500 Subject: [PATCH 174/220] move generate_stair_2d_profile to tool, add tests --- .../blenderbim/bim/module/model/stair.py | 122 +---------- src/blenderbim/blenderbim/tool/model.py | 124 +++++++++++ src/blenderbim/test/tool/test_model.py | 197 ++++++++++++++++++ 3 files changed, 322 insertions(+), 121 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/stair.py b/src/blenderbim/blenderbim/bim/module/model/stair.py index ec7d178387..1a3e700f35 100644 --- a/src/blenderbim/blenderbim/bim/module/model/stair.py +++ b/src/blenderbim/blenderbim/bim/module/model/stair.py @@ -27,7 +27,6 @@ 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 -from ifcopenshell.util.shape_builder import V, ShapeBuilder def add_dumb_stair_object(self, context): @@ -78,129 +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 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() diff --git a/src/blenderbim/blenderbim/tool/model.py b/src/blenderbim/blenderbim/tool/model.py index e974b675e3..54d24ba15e 100644 --- a/src/blenderbim/blenderbim/tool/model.py +++ b/src/blenderbim/blenderbim/tool/model.py @@ -32,6 +32,7 @@ from mathutils import Matrix, Vector 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 +from ifcopenshell.util.shape_builder import V, ShapeBuilder class Model(blenderbim.core.tool.Model): @@ -906,3 +907,126 @@ 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 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, + ): + """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 + 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) diff --git a/src/blenderbim/test/tool/test_model.py b/src/blenderbim/test/tool/test_model.py index 71289bf64f..a2d8375af9 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): @@ -105,3 +106,199 @@ class TestGetManualBooleans(NewFile): assert len(subject.get_manual_booleans(element)) == 0 subject.mark_manual_booleans(element, booleans) assert len(subject.get_manual_booleans(element)) == 2 + + +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 edges == tuple(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), + (8, 7), + (8, 9), + (0, 11), + (10, 11), + (10, 9), + ) + faces_data = ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11),) + 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), + (8, 7), + (8, 9), + (9, 10), + (0, 12), + (11, 12), + (11, 10), + ) + + faces_data = ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12),) + 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 = ( + (0,), + (4,), + (8,), + (12,), + ) + + 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) From fa6192e9bc423745c142af415efd216d6cf8bebc Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 2 Nov 2023 11:20:58 +0500 Subject: [PATCH 175/220] Fixed stair calculated params not updating during edit (after 8b23c615c) .data doesn't update on props change, so need to take data from props explicitly when BIMStairProperties.is_editing --- .../blenderbim/bim/module/model/data.py | 20 +----------------- .../blenderbim/bim/module/model/ui.py | 5 +++-- src/blenderbim/blenderbim/tool/model.py | 21 +++++++++++++++++++ 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/data.py b/src/blenderbim/blenderbim/bim/module/model/data.py index c5b44b9c8b..2f3b69a85c 100644 --- a/src/blenderbim/blenderbim/bim/module/model/data.py +++ b/src/blenderbim/blenderbim/bim/module/model/data.py @@ -333,25 +333,7 @@ class StairData: @classmethod def calculated_params(cls): - 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 - else: - data = cls.data["pset_data"]["data_dict"] - number_of_treads = data["number_of_treads"] - height = data["height"] - tread_run = data["tread_run"] - - 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) - calculated_params["Length"] = round(tread_run * number_of_rises, 5) - return calculated_params + return tool.Model.get_active_stair_calculated_params(cls.data["pset_data"]["data_dict"]) class SverchokData: diff --git a/src/blenderbim/blenderbim/bim/module/model/ui.py b/src/blenderbim/blenderbim/bim/module/model/ui.py index 4e2047996c..b6d07b9fff 100644 --- a/src/blenderbim/blenderbim/bim/module/model/ui.py +++ b/src/blenderbim/blenderbim/bim/module/model/ui.py @@ -259,8 +259,8 @@ 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="") @@ -269,6 +269,7 @@ class BIM_PT_stair(bpy.types.Panel): 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) @@ -278,7 +279,7 @@ class BIM_PT_stair(bpy.types.Panel): row.label(text=str(prop_value)) # calculated properties - for prop_name, prop_value in StairData.data["calculated_params"].items(): + 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)) diff --git a/src/blenderbim/blenderbim/tool/model.py b/src/blenderbim/blenderbim/tool/model.py index 54d24ba15e..11f0573d49 100644 --- a/src/blenderbim/blenderbim/tool/model.py +++ b/src/blenderbim/blenderbim/tool/model.py @@ -908,6 +908,27 @@ class Model(blenderbim.core.tool.Model): 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 + else: + number_of_treads = pset_data["number_of_treads"] + height = pset_data["height"] + tread_run = pset_data["tread_run"] + + 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) + calculated_params["Length"] = round(tread_run * number_of_rises, 5) + return calculated_params + @classmethod def generate_stair_2d_profile( cls, From 9933cc1b2062af2360d6886ff0a1da9c11d6d637 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 2 Nov 2023 16:00:04 +0500 Subject: [PATCH 176/220] stair profile generation code refactor hopefully it's now a bit more readable --- .../blenderbim/bim/module/model/prop.py | 10 +- src/blenderbim/blenderbim/tool/model.py | 109 ++++++++++-------- src/blenderbim/test/tool/test_model.py | 11 +- 3 files changed, 69 insertions(+), 61 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/prop.py b/src/blenderbim/blenderbim/bim/module/model/prop.py index 2b167bd730..052d14952a 100644 --- a/src/blenderbim/blenderbim/bim/module/model/prop.py +++ b/src/blenderbim/blenderbim/bim/module/model/prop.py @@ -201,13 +201,13 @@ 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") def get_props_kwargs(self, convert_to_project_units=False, stair_type=None): if not stair_type: diff --git a/src/blenderbim/blenderbim/tool/model.py b/src/blenderbim/blenderbim/tool/model.py index 11f0573d49..96fd58528c 100644 --- a/src/blenderbim/blenderbim/tool/model.py +++ b/src/blenderbim/blenderbim/tool/model.py @@ -924,8 +924,8 @@ class Model(blenderbim.core.tool.Model): 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) + calculated_params["Number of Risers"] = number_of_rises + calculated_params["Tread Rise"] = round(height / number_of_rises, 5) calculated_params["Length"] = round(tread_run * number_of_rises, 5) return calculated_params @@ -956,98 +956,111 @@ class Model(blenderbim.core.tool.Model): 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)) + size=V(tread_run, tread_depth), position=V(0, -(tread_depth - tread_rise)) ) - tread_offset = V(tread_run, 0, tread_rise) + tread_offset = V(tread_run, tread_rise) + # each tread is a separate shape 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), - ] + 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), ) - faces.append(list(range(cur_vertex, cur_vertex + 1))) - - return (vertices, edges, faces) + edges.extend(verts_to_add) elif stair_type == "GENERIC": - vertices.append(Vector([0, 0, 0])) + vertices.append(Vector([0, 0])) - tread_verts = [Vector([0, 0, tread_rise]), Vector([tread_run, 0, tread_rise])] - tread_offset = Vector([tread_run, 0, tread_rise]) + tread_verts = [Vector([0, tread_rise]), Vector([tread_run, tread_rise])] + tread_offset = Vector([tread_run, tread_rise]) + # treads 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 + last_vert_i = i * 2 edges.extend([(last_vert_i, last_vert_i + 1), (last_vert_i + 1, last_vert_i + 2)]) vertices.extend(current_tread_verts) + # close the shape last_vert_i = len(vertices) - vertices.append(vertices[-1] * V(1, 0, 0)) + vertices.append(vertices[-1] * V(1, 0)) edges.extend([(last_vert_i - 1, last_vert_i), (last_vert_i, 0)]) - return (vertices, edges, faces) - elif stair_type == "CONCRETE": + # treads 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)))] - ) + vertices.append(Vector((tread_run * i, tread_rise * i))) + vertices.append(Vector((tread_run * i, 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))) + vertices.append(Vector((tread_run * number_of_risers, 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 + # add the nibs + tread_diagonal_dir = vertices[2].normalized() + # td_vector is clockwise orthogonal vector + td_vector = tread_diagonal_dir.yx * V(1, -1) * tread_depth - k = tread_rise / tread_run + # graph: https://www.desmos.com/calculator/bilmnti3cp + stair_tan = 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)) + # comes from y = stair_tan * x + b + b = s0.y - stair_tan * s0.x + # if we use td_vector as depth_vector + # then stair won't be perpendicular to the X+ + # to make it perpendicular to X+ we calculate `b` + # `b` is basically Z-offset where stair starts + depth_vector = V(0, b) # 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(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)) + vertices.append(last_vert + Vector((0, -top_slab_depth))) + slab_overlaps_stair = abs(b) - top_slab_depth + # run distance by X until stair will meet the slab + run_slab_distance = slab_overlaps_stair / stair_tan + vertices.append(last_vert + Vector((run_slab_distance, -top_slab_depth))) + edges.append((last_vertex_i, last_vertex_i + 1)) + edges.append((last_vertex_i + 1, last_vertex_i + 2)) 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)) + vertices.append(last_vert + depth_vector) + edges.append((last_vertex_i, last_vertex_i + 1)) top_nib_end = len(vertices) - 1 # bottom nib - if abs(b) <= base_slab_depth: - vertices.append(vertices[0] + depth_vector) + start_vert = vertices[0] + slab_overlaps_stair = max(abs(b) - base_slab_depth, 0) + if slab_overlaps_stair == 0: + # stair doesn't meet the slab + vertices.append(start_vert + 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))) + # run distance by X until stair will meet the slab + run_slab_distance = slab_overlaps_stair / stair_tan + vertices.append(start_vert + Vector((run_slab_distance, -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)) - faces = [list(range(len(vertices)))] + else: + raise Exception(f"Unsupported stair type: {stair_type}") - return (vertices, edges, faces) + vertices = (v.to_3d().xzy for v in vertices) + return (vertices, edges, faces) diff --git a/src/blenderbim/test/tool/test_model.py b/src/blenderbim/test/tool/test_model.py index a2d8375af9..8bab751641 100644 --- a/src/blenderbim/test/tool/test_model.py +++ b/src/blenderbim/test/tool/test_model.py @@ -158,7 +158,7 @@ class TestGenerateStair2DProfile(NewFile): (10, 11), (10, 9), ) - faces_data = ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11),) + 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) @@ -207,7 +207,7 @@ class TestGenerateStair2DProfile(NewFile): (11, 10), ) - faces_data = ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 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) @@ -259,12 +259,7 @@ class TestGenerateStair2DProfile(NewFile): (15, 12), ) - faces_data = ( - (0,), - (4,), - (8,), - (12,), - ) + faces_data = () expected_profile = (verts_data, edges_data, faces_data) generated_profile = subject.generate_stair_2d_profile(**kwargs) From 0f29de03913c50c9f512413bfea23e5429e5f139 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 2 Nov 2023 16:02:28 +0500 Subject: [PATCH 177/220] skip black format on type manager template description for readibility --- src/blenderbim/blenderbim/bim/module/model/prop.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/blenderbim/blenderbim/bim/module/model/prop.py b/src/blenderbim/blenderbim/bim/module/model/prop.py index 052d14952a..9dc27fb3f1 100644 --- a/src/blenderbim/blenderbim/bim/module/model/prop.py +++ b/src/blenderbim/blenderbim/bim/module/model/prop.py @@ -140,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"), @@ -159,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") From 1e0dc7749d826146951be87282b7e72fccb1bf29 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 2 Nov 2023 19:58:38 +0500 Subject: [PATCH 178/220] add force depsgraph update method --- src/blenderbim/blenderbim/tool/blender.py | 9 +++++++++ src/blenderbim/test/tool/test_drawing.py | 5 +---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/blenderbim/blenderbim/tool/blender.py b/src/blenderbim/blenderbim/tool/blender.py index 1fab04c442..9568be1af6 100644 --- a/src/blenderbim/blenderbim/tool/blender.py +++ b/src/blenderbim/blenderbim/tool/blender.py @@ -248,6 +248,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 diff --git a/src/blenderbim/test/tool/test_drawing.py b/src/blenderbim/test/tool/test_drawing.py index 9de78792d3..68c316941b 100644 --- a/src/blenderbim/test/tool/test_drawing.py +++ b/src/blenderbim/test/tool/test_drawing.py @@ -681,9 +681,6 @@ class TestDrawingMaintainingSheetPosition(NewFile): obj = bpy.data.objects["Cube"] bpy.ops.bim.assign_class(ifc_class="IfcActuator", predefined_type="ELECTRICACTUATOR", userdefined_type="") - def update_depsgraph(): - obj.hide_render = obj.hide_render # hacky way to trigger depsgraph_update_pre - bpy.ops.bim.load_sheets() bpy.ops.bim.add_sheet() @@ -714,7 +711,7 @@ class TestDrawingMaintainingSheetPosition(NewFile): bpy.context.scene.camera.data.BIMCameraProperties.width = 25 bpy.context.scene.camera.data.BIMCameraProperties.height = 25 - update_depsgraph() + tool.Blender.force_depsgraph_update() bpy.ops.bim.create_drawing() bpy.ops.bim.open_sheet() From 142e41b3ade9d934425afb94515aed76448754f8 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 3 Nov 2023 10:52:16 +0500 Subject: [PATCH 179/220] minor refactor --- src/blenderbim/blenderbim/bim/helper.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) 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: From 98de86e0bafd2f7ea138998bd84a90084a0c4992 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 3 Nov 2023 11:26:29 +0500 Subject: [PATCH 180/220] Customize tread width for the first and last treads #3419 Available on all types of stairs, shouldn't break stairs previously created with BBIM. Example - https://imgur.com/a/2wSueTM --- .../blenderbim/bim/module/model/data.py | 2 +- .../blenderbim/bim/module/model/prop.py | 11 ++ .../blenderbim/bim/module/model/ui.py | 18 +- src/blenderbim/blenderbim/tool/model.py | 161 +++++++++++++----- 4 files changed, 149 insertions(+), 43 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/data.py b/src/blenderbim/blenderbim/bim/module/model/data.py index 2f3b69a85c..2fa9f0bc28 100644 --- a/src/blenderbim/blenderbim/bim/module/model/data.py +++ b/src/blenderbim/blenderbim/bim/module/model/data.py @@ -361,7 +361,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/prop.py b/src/blenderbim/blenderbim/bim/module/model/prop.py index 9dc27fb3f1..97a6c53bb8 100644 --- a/src/blenderbim/blenderbim/bim/module/model/prop.py +++ b/src/blenderbim/blenderbim/bim/module/model/prop.py @@ -210,6 +210,14 @@ class BIMStairProperties(PropertyGroup): 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") + 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, + ) def get_props_kwargs(self, convert_to_project_units=False, stair_type=None): if not stair_type: @@ -240,6 +248,9 @@ class BIMStairProperties(PropertyGroup): elif stair_type == "GENERIC": pass + # 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/ui.py b/src/blenderbim/blenderbim/bim/module/model/ui.py index b6d07b9fff..7d97d82498 100644 --- a/src/blenderbim/blenderbim/bim/module/model/ui.py +++ b/src/blenderbim/blenderbim/bim/module/model/ui.py @@ -266,7 +266,13 @@ class BIM_PT_stair(bpy.types.Panel): 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) + prop_value = getattr(props, prop_name) + if isinstance(prop_value, bpy.types.bpy_prop_array): + 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"] @@ -275,8 +281,14 @@ class BIM_PT_stair(bpy.types.Panel): 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, bpy.types.bpy_prop_array): + 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 for prop_name, prop_value in calculated_params.items(): diff --git a/src/blenderbim/blenderbim/tool/model.py b/src/blenderbim/blenderbim/tool/model.py index 96fd58528c..62ef5be96e 100644 --- a/src/blenderbim/blenderbim/tool/model.py +++ b/src/blenderbim/blenderbim/tool/model.py @@ -29,6 +29,8 @@ 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 @@ -917,16 +919,32 @@ class Model(blenderbim.core.tool.Model): 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 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 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) - calculated_params["Length"] = round(tread_run * number_of_rises, 5) + + 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) + calculated_params["Length"] = round(length, 5) return calculated_params @classmethod @@ -943,6 +961,7 @@ class Model(blenderbim.core.tool.Model): has_top_nib=None, top_slab_depth=None, base_slab_depth=None, + custom_first_last_tread_run=(0, 0), ): """returns a tuple of stair profile data: (vertices, edges, faces)""" vertices = [] @@ -951,18 +970,35 @@ class Model(blenderbim.core.tool.Model): number_of_risers = number_of_treads + 1 tread_rise = height / number_of_risers - length = tread_run * number_of_risers + custom_tread_run = any(run != 0 for run in custom_first_last_tread_run) if stair_type == "WOOD/STEEL": builder = ShapeBuilder(None) - tread_shape = builder.get_rectangle_coords( - size=V(tread_run, tread_depth), position=V(0, -(tread_depth - tread_rise)) - ) - tread_offset = V(tread_run, tread_rise) + # 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, tread_depth)) + default_tread_offset = V(tread_run, 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 + tread_verts = get_tread_verts(size=V(current_tread_run, 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): - cur_trade_shape = [v + tread_offset * i for v in tread_shape] + tread_offset, tread_verts = get_tread_data(i) + cur_trade_shape = [v + cur_offset for v in tread_verts] vertices.extend(cur_trade_shape) cur_vertex = i * 4 @@ -973,19 +1009,40 @@ class Model(blenderbim.core.tool.Model): (cur_vertex + 3, cur_vertex), ) edges.extend(verts_to_add) + cur_offset += tread_offset elif stair_type == "GENERIC": vertices.append(Vector([0, 0])) - tread_verts = [Vector([0, tread_rise]), Vector([tread_run, tread_rise])] - tread_offset = Vector([tread_run, tread_rise]) + # horizontal tread line + default_tread_verts = [Vector([0, tread_rise]), Vector([tread_run, tread_rise])] + 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): - current_tread_verts = [v + tread_offset * i for v in tread_verts] + tread_offset, tread_verts = get_tread_data(i) + current_tread_verts = [v + current_offset for v in tread_verts] last_vert_i = i * 2 edges.extend([(last_vert_i, last_vert_i + 1), (last_vert_i + 1, last_vert_i + 2)]) vertices.extend(current_tread_verts) + current_offset += tread_offset # close the shape last_vert_i = len(vertices) @@ -993,33 +1050,62 @@ class Model(blenderbim.core.tool.Model): edges.extend([(last_vert_i - 1, last_vert_i), (last_vert_i, 0)]) elif stair_type == "CONCRETE": - # treads - for i in range(number_of_risers): - vertices.append(Vector((tread_run * i, tread_rise * i))) - vertices.append(Vector((tread_run * i, 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(V(0, 0)) - vertices.append(Vector((tread_run * number_of_risers, tread_rise * number_of_risers))) - edges.append((number_of_risers * 2, number_of_risers * 2 - 1)) + # NOTE: code until adding nibs is very similar to GENERIC + # horizontal tread line + default_tread_verts = [Vector([0, tread_rise]), Vector([tread_run, tread_rise])] + 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): + tread_offset, tread_verts = get_tread_data(i) + current_tread_verts = [v + current_offset for v in tread_verts] + last_vert_i = i * 2 + edges.extend([(last_vert_i, last_vert_i + 1), (last_vert_i + 1, last_vert_i + 2)]) + vertices.extend(current_tread_verts) + current_offset += tread_offset # add the nibs - tread_diagonal_dir = vertices[2].normalized() + # 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 - # graph: https://www.desmos.com/calculator/bilmnti3cp stair_tan = tread_rise / tread_run - s0 = vertices[0] + td_vector + # 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 = vertices[2] + td_vector # comes from y = stair_tan * x + b b = s0.y - stair_tan * s0.x - # if we use td_vector as depth_vector - # then stair won't be perpendicular to the X+ - # to make it perpendicular to X+ we calculate `b` - # `b` is basically Z-offset where stair starts - depth_vector = V(0, b) + + 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] @@ -1027,30 +1113,27 @@ class Model(blenderbim.core.tool.Model): # 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))) - slab_overlaps_stair = abs(b) - top_slab_depth - # run distance by X until stair will meet the slab - run_slab_distance = slab_overlaps_stair / stair_tan - vertices.append(last_vert + Vector((run_slab_distance, -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: - vertices.append(last_vert + depth_vector) + 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] - slab_overlaps_stair = max(abs(b) - base_slab_depth, 0) - if slab_overlaps_stair == 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(start_vert + depth_vector) + vertices.append(base_point) edges.append((0, len(vertices) - 1)) bottom_nib_end = len(vertices) - 1 else: - # run distance by X until stair will meet the slab - run_slab_distance = slab_overlaps_stair / stair_tan - vertices.append(start_vert + Vector((run_slab_distance, -base_slab_depth))) + # 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)) From 0de0422c2e8fadec0bee724edd2f9783f1780d1d Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 3 Nov 2023 22:45:18 +1100 Subject: [PATCH 181/220] Minor fix --- .../ifcopenshell/api/root/reassign_class.py | 7 ++++--- src/ifcopenshell-python/test/api/pset/test_edit_pset.py | 1 - 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ifcopenshell-python/ifcopenshell/api/root/reassign_class.py b/src/ifcopenshell-python/ifcopenshell/api/root/reassign_class.py index 3c93eeee80..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,12 @@ 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 []: - ifc_class = self.settings["ifc_class"].removesuffix("Type").removesuffix("Style") + 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, + product=occurrence, ifc_class=ifc_class, predefined_type= self.settings["predefined_type"] ) 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 9d308fd559..d7c8fdf025 100644 --- a/src/ifcopenshell-python/test/api/pset/test_edit_pset.py +++ b/src/ifcopenshell-python/test/api/pset/test_edit_pset.py @@ -95,7 +95,6 @@ class TestEditPset(test.bootstrap.IFC4): element = ifcopenshell.api.run("root.create_entity", self.file, ifc_class="IfcWall") pset = ifcopenshell.api.run("pset.add_pset", self.file, product=element, name="Pset_WallCommon") ifcopenshell.api.run("pset.edit_pset", self.file, pset=pset, properties={"Reference": "Foo"}) - print("test") ifcopenshell.api.run("pset.edit_pset", self.file, pset=pset, properties={"Reference": None}, should_purge=True) pset = element.IsDefinedBy[0].RelatingPropertyDefinition assert len(pset.HasProperties) == 0 From 6f3ff51d91468abb0ba6882e56502bc32db2b3f8 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Fri, 3 Nov 2023 22:45:35 +1100 Subject: [PATCH 182/220] Docs now mention historic builds --- .../docs/ifcopenshell-python/geometry_processing.rst | 4 ++++ .../docs/ifcopenshell-python/installation.rst | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/src/ifcopenshell-python/docs/ifcopenshell-python/geometry_processing.rst b/src/ifcopenshell-python/docs/ifcopenshell-python/geometry_processing.rst index 75c89cfcc3..8fd8579c69 100644 --- a/src/ifcopenshell-python/docs/ifcopenshell-python/geometry_processing.rst +++ b/src/ifcopenshell-python/docs/ifcopenshell-python/geometry_processing.rst @@ -63,6 +63,7 @@ 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, ...] @@ -105,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/installation.rst b/src/ifcopenshell-python/docs/ifcopenshell-python/installation.rst index 91adc41ee3..d2bdcfc913 100644 --- a/src/ifcopenshell-python/docs/ifcopenshell-python/installation.rst +++ b/src/ifcopenshell-python/docs/ifcopenshell-python/installation.rst @@ -280,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 `_ From 4e76f36af114969cf6712674906fb265a9976c64 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Sat, 4 Nov 2023 16:07:40 +1100 Subject: [PATCH 183/220] Black --- src/blenderbim/blenderbim/bim/module/drawing/operator.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/bim/module/drawing/operator.py b/src/blenderbim/blenderbim/bim/module/drawing/operator.py index 9c49f2bb2f..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) From 5f129e23573fd4009da5cef3ac285a5dfcc0acd1 Mon Sep 17 00:00:00 2001 From: "Igor.Sokolov" Date: Sat, 4 Nov 2023 07:00:58 +0400 Subject: [PATCH 184/220] bf: pass-attr-count-ok.ifc failed --- .../test/fixtures/validate/pass-attr-count-ok.ifc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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; From aab011f7bfbfee88e2046f59af2bb87becb96adf Mon Sep 17 00:00:00 2001 From: "Igor.Sokolov" Date: Sat, 4 Nov 2023 07:16:48 +0400 Subject: [PATCH 185/220] bf: pass-group-1-rels-IFC2X3.ifc failed --- .../test/fixtures/validate/pass-group-1-rels-IFC2X3.ifc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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; From 52700452d9d1a2be1ebb41f838d3ca33d0ffc472 Mon Sep 17 00:00:00 2001 From: "Igor.Sokolov" Date: Sat, 4 Nov 2023 07:30:26 +0400 Subject: [PATCH 186/220] bf: pass-valid-selected-enumeration.ifc --- .../fixtures/validate/pass-valid-selected-enumeration.ifc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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; From b3a6b8e07f2f637db88c20fff6690768912d43d8 Mon Sep 17 00:00:00 2001 From: "Igor.Sokolov" Date: Sat, 4 Nov 2023 08:09:13 +0400 Subject: [PATCH 187/220] bf: IfcBSplineCurve is an isntance of abstract entity --- .../rules/pass-bspline-curve-point-dimensions-2-2-2-ifc2x3.ifc | 2 +- .../rules/pass-bspline-curve-point-dimensions-3-3-3-ifc2x3.ifc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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; From a218ce5160f6b5a4b602f0acf5c37d723e8ca430 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sat, 4 Nov 2023 11:35:30 -0500 Subject: [PATCH 188/220] Select multiple arrays at one time, from various parts. Deselect non-compliant objects. --- .../blenderbim/bim/module/model/array.py | 37 +++++++++++-------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/array.py b/src/blenderbim/blenderbim/bim/module/model/array.py index fa685677f0..55820b74a1 100644 --- a/src/blenderbim/blenderbim/bim/module/model/array.py +++ b/src/blenderbim/blenderbim/bim/module/model/array.py @@ -248,23 +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, clear_previous_selection=False - ) + 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"} From d9fdc0908acc7d44d68a81600ea4ae52a20cefdf Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 6 Nov 2023 11:50:52 +0500 Subject: [PATCH 189/220] Nosing Lengths / Tread Gap for parametric stairs #3422 Example - https://imgur.com/d8PxLV4 --- .../blenderbim/bim/module/model/prop.py | 29 +++- .../blenderbim/bim/module/model/stair.py | 2 + .../blenderbim/bim/module/model/ui.py | 5 +- src/blenderbim/blenderbim/tool/model.py | 146 +++++++++--------- src/blenderbim/test/tool/test_model.py | 6 +- 5 files changed, 112 insertions(+), 76 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/prop.py b/src/blenderbim/blenderbim/bim/module/model/prop.py index 97a6c53bb8..2049020ce2 100644 --- a/src/blenderbim/blenderbim/bim/module/model/prop.py +++ b/src/blenderbim/blenderbim/bim/module/model/prop.py @@ -193,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", ""), @@ -209,7 +213,9 @@ class BIMStairProperties(PropertyGroup): 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") + 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.', @@ -218,6 +224,20 @@ class BIMStairProperties(PropertyGroup): 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: @@ -228,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, @@ -246,7 +268,10 @@ 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 diff --git a/src/blenderbim/blenderbim/bim/module/model/stair.py b/src/blenderbim/blenderbim/bim/module/model/stair.py index 1a3e700f35..ed21e820b5 100644 --- a/src/blenderbim/blenderbim/bim/module/model/stair.py +++ b/src/blenderbim/blenderbim/bim/module/model/stair.py @@ -146,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": @@ -171,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) diff --git a/src/blenderbim/blenderbim/bim/module/model/ui.py b/src/blenderbim/blenderbim/bim/module/model/ui.py index 7d97d82498..b56ceab0b3 100644 --- a/src/blenderbim/blenderbim/bim/module/model/ui.py +++ b/src/blenderbim/blenderbim/bim/module/model/ui.py @@ -36,6 +36,7 @@ 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): @@ -267,7 +268,7 @@ class BIM_PT_stair(bpy.types.Panel): row = self.layout.row(align=True) for prop_name in props.get_props_kwargs(): prop_value = getattr(props, prop_name) - if isinstance(prop_value, bpy.types.bpy_prop_array): + 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="") @@ -281,7 +282,7 @@ class BIM_PT_stair(bpy.types.Panel): row = self.layout.row(align=True) for prop_name, prop_value in StairData.data["general_params"].items(): row = self.layout.row(align=True) - if isinstance(prop_value, bpy.types.bpy_prop_array): + 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: diff --git a/src/blenderbim/blenderbim/tool/model.py b/src/blenderbim/blenderbim/tool/model.py index 62ef5be96e..89db72daf4 100644 --- a/src/blenderbim/blenderbim/tool/model.py +++ b/src/blenderbim/blenderbim/tool/model.py @@ -921,6 +921,7 @@ class Model(blenderbim.core.tool.Model): 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"] @@ -928,12 +929,14 @@ class Model(blenderbim.core.tool.Model): # 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: @@ -944,7 +947,16 @@ class Model(blenderbim.core.tool.Model): 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 @@ -962,6 +974,9 @@ class Model(blenderbim.core.tool.Model): 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 = [] @@ -971,13 +986,67 @@ class Model(blenderbim.core.tool.Model): 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, tread_depth)) - default_tread_offset = V(tread_run, 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: @@ -989,8 +1058,8 @@ class Model(blenderbim.core.tool.Model): if current_tread_run: tread_offset = default_tread_offset.copy() - tread_offset.x = current_tread_run - tread_verts = get_tread_verts(size=V(current_tread_run, tread_depth)) + 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 @@ -998,7 +1067,7 @@ class Model(blenderbim.core.tool.Model): 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 for v in tread_verts] + cur_trade_shape = [v + cur_offset + nosing_overlap_offset for v in tread_verts] vertices.extend(cur_trade_shape) cur_vertex = i * 4 @@ -1012,37 +1081,7 @@ class Model(blenderbim.core.tool.Model): cur_offset += tread_offset elif stair_type == "GENERIC": - vertices.append(Vector([0, 0])) - - # horizontal tread line - default_tread_verts = [Vector([0, tread_rise]), Vector([tread_run, tread_rise])] - 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): - tread_offset, tread_verts = get_tread_data(i) - current_tread_verts = [v + current_offset for v in tread_verts] - last_vert_i = i * 2 - edges.extend([(last_vert_i, last_vert_i + 1), (last_vert_i + 1, last_vert_i + 2)]) - vertices.extend(current_tread_verts) - current_offset += tread_offset + define_generic_stair_treads() # close the shape last_vert_i = len(vertices) @@ -1050,38 +1089,7 @@ class Model(blenderbim.core.tool.Model): edges.extend([(last_vert_i - 1, last_vert_i), (last_vert_i, 0)]) elif stair_type == "CONCRETE": - vertices.append(V(0, 0)) - - # NOTE: code until adding nibs is very similar to GENERIC - # horizontal tread line - default_tread_verts = [Vector([0, tread_rise]), Vector([tread_run, tread_rise])] - 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): - tread_offset, tread_verts = get_tread_data(i) - current_tread_verts = [v + current_offset for v in tread_verts] - last_vert_i = i * 2 - edges.extend([(last_vert_i, last_vert_i + 1), (last_vert_i + 1, last_vert_i + 2)]) - vertices.extend(current_tread_verts) - current_offset += tread_offset + define_generic_stair_treads() # add the nibs # basically we define stair bottom line as a line at `tread_depth` distance @@ -1096,7 +1104,7 @@ class Model(blenderbim.core.tool.Model): # 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 = vertices[2] + td_vector + 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 diff --git a/src/blenderbim/test/tool/test_model.py b/src/blenderbim/test/tool/test_model.py index 8bab751641..af57133737 100644 --- a/src/blenderbim/test/tool/test_model.py +++ b/src/blenderbim/test/tool/test_model.py @@ -113,7 +113,7 @@ class TestGenerateStair2DProfile(NewFile): verts_gen, edges_gen, faces_gen = generated_profile verts, edges, faces = expected_profile - assert edges == tuple(edges_gen) + 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) @@ -152,7 +152,7 @@ class TestGenerateStair2DProfile(NewFile): (4, 5), (5, 6), (6, 7), - (8, 7), + (7, 8), (8, 9), (0, 11), (10, 11), @@ -199,7 +199,7 @@ class TestGenerateStair2DProfile(NewFile): (4, 5), (5, 6), (6, 7), - (8, 7), + (7, 8), (8, 9), (9, 10), (0, 12), From 8cd9fb901535da65e0c763edca32b6798cd98e00 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 6 Nov 2023 15:56:33 +0500 Subject: [PATCH 190/220] test stairs calculated params --- src/blenderbim/test/tool/test_model.py | 45 ++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/blenderbim/test/tool/test_model.py b/src/blenderbim/test/tool/test_model.py index af57133737..f82f4f8a1c 100644 --- a/src/blenderbim/test/tool/test_model.py +++ b/src/blenderbim/test/tool/test_model.py @@ -108,6 +108,51 @@ class TestGetManualBooleans(NewFile): 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 From 8e80f456cbb4719dc4a005fb4823793dbd97c4fa Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 8 Nov 2023 11:50:05 +0500 Subject: [PATCH 191/220] fixed bug with system decoration data if no system were selected --- src/blenderbim/blenderbim/bim/module/system/data.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/blenderbim/blenderbim/bim/module/system/data.py b/src/blenderbim/blenderbim/bim/module/system/data.py index abeddb605b..645c770440 100644 --- a/src/blenderbim/blenderbim/bim/module/system/data.py +++ b/src/blenderbim/blenderbim/bim/module/system/data.py @@ -210,7 +210,7 @@ class SystemDecorationData: decorated_elements = set(ifcopenshell.util.system.get_system_elements(active_system)) if not decorated_elements: - decorated_elements += ObjectSystemData.data["connected_elements"] + decorated_elements.update(ObjectSystemData.data["connected_elements"]) return decorated_elements From d0adbab9c2f725683d02540444c4df8c4b55f37b Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 8 Nov 2023 12:21:50 +0500 Subject: [PATCH 192/220] fixed issue finding finding compatible fitting it occured sometimes when segment's or fitting's PredefinedType/System were not defined --- src/blenderbim/blenderbim/bim/module/model/mep.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/mep.py b/src/blenderbim/blenderbim/bim/module/model/mep.py index f7a96f9431..efaa684da1 100644 --- a/src/blenderbim/blenderbim/bim/module/model/mep.py +++ b/src/blenderbim/blenderbim/bim/module/model/mep.py @@ -451,11 +451,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 From c0d8467154df76adff9d4b625fda2969e1a5cd34 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 8 Nov 2023 14:19:36 +0500 Subject: [PATCH 193/220] define inherited ports attributes in bim.add_constr_type_instance --- src/blenderbim/blenderbim/bim/module/model/product.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/blenderbim/blenderbim/bim/module/model/product.py b/src/blenderbim/blenderbim/bim/module/model/product.py index 1c54febc74..1427714b38 100644 --- a/src/blenderbim/blenderbim/bim/module/model/product.py +++ b/src/blenderbim/blenderbim/bim/module/model/product.py @@ -249,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) From ebfc8ef619a02b04aadcac41a9d394fe90bf9d5c Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 8 Nov 2023 15:09:17 +0500 Subject: [PATCH 194/220] remove BIMGroupProperties.is_adding attribute to avoid confusion The problem with that attribute was that object's and project's group ui section were both using groups loaded to BIMGroupProperties.groups. So you could run into situation when you try to load object's groups ui and it would show empty list because user never loaded the groups from the project's ui... So it was either caching groups twice or just using same `is_editing` flag to check whether groups were previously loaded and I went with the single flag. --- src/blenderbim/blenderbim/bim/module/group/__init__.py | 1 - src/blenderbim/blenderbim/bim/module/group/operator.py | 10 ---------- src/blenderbim/blenderbim/bim/module/group/prop.py | 1 - src/blenderbim/blenderbim/bim/module/group/ui.py | 6 +++--- 4 files changed, 3 insertions(+), 15 deletions(-) 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) From ea5e3c30b64a6186b467e379660ce68888862268 Mon Sep 17 00:00:00 2001 From: Dirk Olbrich Date: Mon, 6 Nov 2023 21:07:16 +0100 Subject: [PATCH 195/220] bbim docs: update bbim version, copyright year --- src/blenderbim/docs/conf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 --------------------------------------------------- From a024d5c07f523f15c7a9eaf32e313f8cf7b8e5f7 Mon Sep 17 00:00:00 2001 From: Dirk Olbrich Date: Mon, 6 Nov 2023 21:23:40 +0100 Subject: [PATCH 196/220] bbim docs: fix minor warning in ux-guidelines --- src/blenderbim/docs/devs/ux_guidelines.rst | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) 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. From 1dbe42061dae1f1d17a83855572124aea9297c3a Mon Sep 17 00:00:00 2001 From: Dirk Olbrich Date: Mon, 6 Nov 2023 21:45:55 +0100 Subject: [PATCH 197/220] bbim doc: fix list indentation --- src/blenderbim/docs/blenderbim/scene.rst | 271 +++++++++++------------ 1 file changed, 134 insertions(+), 137 deletions(-) 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. From cb3392ec70e3cb6d4aa0a6e99fedf1337b1dd119 Mon Sep 17 00:00:00 2001 From: Dirk Olbrich Date: Mon, 6 Nov 2023 22:03:36 +0100 Subject: [PATCH 198/220] bbim docs: use absolute path for icon images --- .../docs/users/general_usage/ifc_project.rst | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) 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 From a5f0de4d19a42547274902c0c483f63786dda589 Mon Sep 17 00:00:00 2001 From: Dirk Olbrich Date: Tue, 7 Nov 2023 09:58:13 +0100 Subject: [PATCH 199/220] bbim docs: reorder images folder in dev section --- src/blenderbim/docs/devs/hello_world.rst | 12 ++++++------ .../docs/devs/{ => images}/architecture.png | Bin .../docs/devs/{ => images}/demo-module.png | Bin src/blenderbim/docs/devs/{ => images}/diagrams.svg | 0 .../docs/devs/{ => images}/documentation-style.png | Bin .../docs/devs/{ => images}/github-editing.png | Bin .../devs/{ => images}/ifcopenshell-architecture.png | Bin .../docs/devs/{ => images}/module-architecture.png | Bin .../docs/devs/{ => images}/native-openbim.png | Bin src/blenderbim/docs/devs/writing_docs.rst | 2 +- 10 files changed, 7 insertions(+), 7 deletions(-) rename src/blenderbim/docs/devs/{ => images}/architecture.png (100%) rename src/blenderbim/docs/devs/{ => images}/demo-module.png (100%) rename src/blenderbim/docs/devs/{ => images}/diagrams.svg (100%) rename src/blenderbim/docs/devs/{ => images}/documentation-style.png (100%) rename src/blenderbim/docs/devs/{ => images}/github-editing.png (100%) rename src/blenderbim/docs/devs/{ => images}/ifcopenshell-architecture.png (100%) rename src/blenderbim/docs/devs/{ => images}/module-architecture.png (100%) rename src/blenderbim/docs/devs/{ => images}/native-openbim.png (100%) 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/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* From 85bdeaeef4c6bb125f5fd13bdc8915ffb08141fb Mon Sep 17 00:00:00 2001 From: Dirk Olbrich Date: Tue, 7 Nov 2023 10:16:58 +0100 Subject: [PATCH 200/220] bbimdocs: reorder images folder in users section --- .../docs/users/creating_an_ifc_model.rst | 12 ++--- .../docs/users/dealing_with_large_models.rst | 4 +- .../docs/users/exploring_an_ifc_model.rst | 48 +++++++++--------- src/blenderbim/docs/users/georeferencing.rst | 18 +++---- .../{ => images}/advanced-mode-settings.png | Bin .../docs/users/{ => images}/advanced-mode.png | Bin .../docs/users/{ => images}/assign-class.png | Bin .../docs/users/{ => images}/attributes.png | Bin .../users/{ => images}/blenderbim-layout.png | Bin .../docs/users/{ => images}/blenderoffset.png | Bin .../{ => images}/coordinateconversion.png | Bin .../users/{ => images}/create-project.png | Bin .../{ => images}/default-spatial-tree.png | Bin .../docs/users/{ => images}/dimensions.png | Bin .../{ => images}/drag-drop-outliner-tree.png | Bin .../{ => images}/element-class-select.png | Bin .../docs/users/{ => images}/element-class.png | Bin .../users/{ => images}/example-project.png | Bin .../users/{ => images}/frame-selected.png | Bin .../docs/users/{ => images}/ifc-pipeline.png | Bin .../{ => images}/install-blenderbim-1.png | Bin .../{ => images}/install-blenderbim-2.png | Bin .../{ => images}/install-blenderbim-3.png | Bin .../{ => images}/install-blenderbim-4.png | Bin .../docs/users/{ => images}/manualorigin.png | Bin .../docs/users/{ => images}/mapconversion.png | Bin .../users/{ => images}/mapcoordinates.png | Bin .../docs/users/{ => images}/materials.png | Bin .../docs/users/{ => images}/measure-tool.png | Bin .../users/{ => images}/navigate-gizmo.png | Bin .../docs/users/{ => images}/offsetmode.png | Bin .../users/{ => images}/outliner-filter.png | Bin .../users/{ => images}/outliner-isolate.png | Bin .../users/{ => images}/outliner-types.png | Bin .../docs/users/{ => images}/outliner.png | Bin .../docs/users/{ => images}/projectedcrs.png | Bin .../{ => images}/properties-loadproject.png | Bin .../users/{ => images}/properties-tabs.png | Bin .../users/{ => images}/properties-types.png | Bin .../docs/users/{ => images}/psets.png | Bin .../docs/users/{ => images}/qtos.png | Bin .../docs/users/{ => images}/save-project.png | Bin .../users/{ => images}/scene-statistics.png | Bin .../docs/users/{ => images}/snap-targets.png | Bin .../users/{ => images}/spatial-container.png | Bin .../docs/users/{ => images}/truenorth.png | Bin .../users/{ => images}/type-local-view.png | Bin .../docs/users/{ => images}/x-ray-mode.png | Bin .../{ => images}/xaxisabscissaordinate.png | Bin src/blenderbim/docs/users/installation.rst | 8 +-- 50 files changed, 45 insertions(+), 45 deletions(-) rename src/blenderbim/docs/users/{ => images}/advanced-mode-settings.png (100%) rename src/blenderbim/docs/users/{ => images}/advanced-mode.png (100%) rename src/blenderbim/docs/users/{ => images}/assign-class.png (100%) rename src/blenderbim/docs/users/{ => images}/attributes.png (100%) rename src/blenderbim/docs/users/{ => images}/blenderbim-layout.png (100%) rename src/blenderbim/docs/users/{ => images}/blenderoffset.png (100%) rename src/blenderbim/docs/users/{ => images}/coordinateconversion.png (100%) rename src/blenderbim/docs/users/{ => images}/create-project.png (100%) rename src/blenderbim/docs/users/{ => images}/default-spatial-tree.png (100%) rename src/blenderbim/docs/users/{ => images}/dimensions.png (100%) rename src/blenderbim/docs/users/{ => images}/drag-drop-outliner-tree.png (100%) rename src/blenderbim/docs/users/{ => images}/element-class-select.png (100%) rename src/blenderbim/docs/users/{ => images}/element-class.png (100%) rename src/blenderbim/docs/users/{ => images}/example-project.png (100%) rename src/blenderbim/docs/users/{ => images}/frame-selected.png (100%) rename src/blenderbim/docs/users/{ => images}/ifc-pipeline.png (100%) rename src/blenderbim/docs/users/{ => images}/install-blenderbim-1.png (100%) rename src/blenderbim/docs/users/{ => images}/install-blenderbim-2.png (100%) rename src/blenderbim/docs/users/{ => images}/install-blenderbim-3.png (100%) rename src/blenderbim/docs/users/{ => images}/install-blenderbim-4.png (100%) rename src/blenderbim/docs/users/{ => images}/manualorigin.png (100%) rename src/blenderbim/docs/users/{ => images}/mapconversion.png (100%) rename src/blenderbim/docs/users/{ => images}/mapcoordinates.png (100%) rename src/blenderbim/docs/users/{ => images}/materials.png (100%) rename src/blenderbim/docs/users/{ => images}/measure-tool.png (100%) rename src/blenderbim/docs/users/{ => images}/navigate-gizmo.png (100%) rename src/blenderbim/docs/users/{ => images}/offsetmode.png (100%) rename src/blenderbim/docs/users/{ => images}/outliner-filter.png (100%) rename src/blenderbim/docs/users/{ => images}/outliner-isolate.png (100%) rename src/blenderbim/docs/users/{ => images}/outliner-types.png (100%) rename src/blenderbim/docs/users/{ => images}/outliner.png (100%) rename src/blenderbim/docs/users/{ => images}/projectedcrs.png (100%) rename src/blenderbim/docs/users/{ => images}/properties-loadproject.png (100%) rename src/blenderbim/docs/users/{ => images}/properties-tabs.png (100%) rename src/blenderbim/docs/users/{ => images}/properties-types.png (100%) rename src/blenderbim/docs/users/{ => images}/psets.png (100%) rename src/blenderbim/docs/users/{ => images}/qtos.png (100%) rename src/blenderbim/docs/users/{ => images}/save-project.png (100%) rename src/blenderbim/docs/users/{ => images}/scene-statistics.png (100%) rename src/blenderbim/docs/users/{ => images}/snap-targets.png (100%) rename src/blenderbim/docs/users/{ => images}/spatial-container.png (100%) rename src/blenderbim/docs/users/{ => images}/truenorth.png (100%) rename src/blenderbim/docs/users/{ => images}/type-local-view.png (100%) rename src/blenderbim/docs/users/{ => images}/x-ray-mode.png (100%) rename src/blenderbim/docs/users/{ => images}/xaxisabscissaordinate.png (100%) 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/exploring_an_ifc_model.rst b/src/blenderbim/docs/users/exploring_an_ifc_model.rst index e13e61b88d..3e35a99c2e 100644 --- a/src/blenderbim/docs/users/exploring_an_ifc_model.rst +++ b/src/blenderbim/docs/users/exploring_an_ifc_model.rst @@ -25,20 +25,20 @@ 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. -.. image:: properties-tabs.png +.. image:: images/properties-tabs.png Click on ``File > Open IFC Project`` and browse to your ``.ifc`` file. -.. image:: properties-loadproject.png +.. 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 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** @@ -65,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 @@ -91,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-``` @@ -105,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:: @@ -127,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 @@ -144,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 @@ -159,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 ----------------------- @@ -185,7 +185,7 @@ To view an object's class, click on an object in the **Viewport** or **Outliner* 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** @@ -221,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:: @@ -234,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 --------------------------------- @@ -246,7 +246,7 @@ 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: @@ -277,7 +277,7 @@ Sets**. Each **Property Set** also has a name. 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 @@ -301,7 +301,7 @@ quantities defined as part of the international standard, denoted by the prefix You can find **Quantities** in the **Object Quantity Sets** subpanel. -.. image:: qtos.png +.. image:: images/qtos.png Finding the location of objects ------------------------------- @@ -322,7 +322,7 @@ 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 --------------------------- @@ -338,14 +338,14 @@ three **IfcWallType** objects with those same names in the **Outliner**. 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 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 @@ -362,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:: @@ -385,7 +385,7 @@ 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 -------------------------- @@ -398,13 +398,13 @@ 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:: 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:: @@ -421,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/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/attributes.png b/src/blenderbim/docs/users/images/attributes.png similarity index 100% rename from src/blenderbim/docs/users/attributes.png rename to src/blenderbim/docs/users/images/attributes.png diff --git a/src/blenderbim/docs/users/blenderbim-layout.png b/src/blenderbim/docs/users/images/blenderbim-layout.png similarity index 100% rename from src/blenderbim/docs/users/blenderbim-layout.png rename to src/blenderbim/docs/users/images/blenderbim-layout.png 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/dimensions.png b/src/blenderbim/docs/users/images/dimensions.png similarity index 100% rename from src/blenderbim/docs/users/dimensions.png rename to src/blenderbim/docs/users/images/dimensions.png 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/element-class-select.png b/src/blenderbim/docs/users/images/element-class-select.png similarity index 100% rename from src/blenderbim/docs/users/element-class-select.png rename to src/blenderbim/docs/users/images/element-class-select.png diff --git a/src/blenderbim/docs/users/element-class.png b/src/blenderbim/docs/users/images/element-class.png similarity index 100% rename from src/blenderbim/docs/users/element-class.png rename to src/blenderbim/docs/users/images/element-class.png diff --git a/src/blenderbim/docs/users/example-project.png b/src/blenderbim/docs/users/images/example-project.png similarity index 100% rename from src/blenderbim/docs/users/example-project.png rename to src/blenderbim/docs/users/images/example-project.png 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/install-blenderbim-4.png b/src/blenderbim/docs/users/images/install-blenderbim-4.png similarity index 100% rename from src/blenderbim/docs/users/install-blenderbim-4.png rename to src/blenderbim/docs/users/images/install-blenderbim-4.png 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/materials.png b/src/blenderbim/docs/users/images/materials.png similarity index 100% rename from src/blenderbim/docs/users/materials.png rename to src/blenderbim/docs/users/images/materials.png 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/outliner-isolate.png b/src/blenderbim/docs/users/images/outliner-isolate.png similarity index 100% rename from src/blenderbim/docs/users/outliner-isolate.png rename to src/blenderbim/docs/users/images/outliner-isolate.png 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/properties-loadproject.png b/src/blenderbim/docs/users/images/properties-loadproject.png similarity index 100% rename from src/blenderbim/docs/users/properties-loadproject.png rename to src/blenderbim/docs/users/images/properties-loadproject.png diff --git a/src/blenderbim/docs/users/properties-tabs.png b/src/blenderbim/docs/users/images/properties-tabs.png similarity index 100% rename from src/blenderbim/docs/users/properties-tabs.png rename to src/blenderbim/docs/users/images/properties-tabs.png diff --git a/src/blenderbim/docs/users/properties-types.png b/src/blenderbim/docs/users/images/properties-types.png similarity index 100% rename from src/blenderbim/docs/users/properties-types.png rename to src/blenderbim/docs/users/images/properties-types.png diff --git a/src/blenderbim/docs/users/psets.png b/src/blenderbim/docs/users/images/psets.png similarity index 100% rename from src/blenderbim/docs/users/psets.png rename to src/blenderbim/docs/users/images/psets.png diff --git a/src/blenderbim/docs/users/qtos.png b/src/blenderbim/docs/users/images/qtos.png similarity index 100% rename from src/blenderbim/docs/users/qtos.png rename to src/blenderbim/docs/users/images/qtos.png 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/spatial-container.png b/src/blenderbim/docs/users/images/spatial-container.png similarity index 100% rename from src/blenderbim/docs/users/spatial-container.png rename to src/blenderbim/docs/users/images/spatial-container.png 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/type-local-view.png b/src/blenderbim/docs/users/images/type-local-view.png similarity index 100% rename from src/blenderbim/docs/users/type-local-view.png rename to src/blenderbim/docs/users/images/type-local-view.png 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/installation.rst b/src/blenderbim/docs/users/installation.rst index 183a74f53b..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! 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. From d1a7b99eda3cc69db1395c8e0c649bcc18851560 Mon Sep 17 00:00:00 2001 From: Dirk Olbrich Date: Wed, 8 Nov 2023 10:27:11 +0100 Subject: [PATCH 201/220] bbim docs: add user interface subsection, general workspace --- src/blenderbim/docs/users/general_usage.rst | 1 + .../docs/users/general_usage/interface.rst | 11 +++++++ .../images/interface_window_file-menue.png | Bin 0 -> 40946 bytes .../images/interface_window_start-up.png | Bin 0 -> 536392 bytes .../general_usage/interface/workspace.rst | 27 ++++++++++++++++++ 5 files changed, 39 insertions(+) create mode 100644 src/blenderbim/docs/users/general_usage/interface.rst create mode 100644 src/blenderbim/docs/users/general_usage/interface/images/interface_window_file-menue.png create mode 100644 src/blenderbim/docs/users/general_usage/interface/images/interface_window_start-up.png create mode 100644 src/blenderbim/docs/users/general_usage/interface/workspace.rst 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/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 0000000000000000000000000000000000000000..8b24f50bf673340a938d2868873b353358a4f3dc GIT binary patch literal 40946 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≧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�-a8J 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⪼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 z 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. + +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 From 11ed8cc7879f9a5001a40bcd4812c69bf8d1f347 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 8 Nov 2023 16:49:31 +0500 Subject: [PATCH 202/220] fixed issue in `add_ports` mutating object's matrix inherently modifying ports positions in some cases --- src/blenderbim/blenderbim/tool/system.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/blenderbim/blenderbim/tool/system.py b/src/blenderbim/blenderbim/tool/system.py index d52a94ec1d..0ce26d14f2 100644 --- a/src/blenderbim/blenderbim/tool/system.py +++ b/src/blenderbim/blenderbim/tool/system.py @@ -50,9 +50,9 @@ 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 + m = obj.matrix_world.copy() if end_port_pos: m.translation = end_port_pos else: From 5d4d953320d4d5d9d3fdfe6c53ec468ba78302e5 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 8 Nov 2023 16:51:41 +0500 Subject: [PATCH 203/220] fixed issue placing ports on a bend if start segment is bending using Z- --- src/blenderbim/blenderbim/bim/module/model/mep.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/mep.py b/src/blenderbim/blenderbim/bim/module/model/mep.py index efaa684da1..f171dec3e7 100644 --- a/src/blenderbim/blenderbim/bim/module/model/mep.py +++ b/src/blenderbim/blenderbim/bim/module/model/mep.py @@ -1009,6 +1009,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"] @@ -1077,9 +1079,9 @@ class MEPAddBend(bpy.types.Operator, tool.Ifc.Operator): 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) - second_object_offset = radial_offset + V(0, 0, self.start_length) - second_object_offset += z_axis_end_object_local * (self.end_length * -end_segment_sign) + 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(): segments_intersection = segments_intersection_ws - start_point @@ -1203,7 +1205,7 @@ class MEPAddBend(bpy.types.Operator, tool.Ifc.Operator): pset=pset, properties={"Data": tool.Ifc.get().createIfcText(json.dumps(bend_data, default=list))}, ) - tool.System.add_ports(obj, end_port_pos=second_object_offset) + tool.System.add_ports(obj, end_port_pos=end_port_offset) # NOTE: at this point we loose current blender objects selection # create transition element From 912b01587bc186a27f5348ea5ba21eee1c60a44d Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Wed, 8 Nov 2023 17:58:52 +0500 Subject: [PATCH 204/220] tool.System.add_ports tests --- src/blenderbim/test/tool/test_system.py | 56 +++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/src/blenderbim/test/tool/test_system.py b/src/blenderbim/test/tool/test_system.py index d10817068e..605e1204c6 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() From 6bda066e1bdb0a69dcb84a5e5c758551ba33c005 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 9 Nov 2023 13:48:44 +0500 Subject: [PATCH 205/220] Fixed typo in control.assign_control, added tests --- .../api/control/assign_control.py | 9 ++-- .../test/api/control/test_assign_control.py | 50 +++++++++++++++++++ .../test/api/control/test_unassign_control.py | 43 ++++++++++++++++ 3 files changed, 99 insertions(+), 3 deletions(-) create mode 100644 src/ifcopenshell-python/test/api/control/test_assign_control.py create mode 100644 src/ifcopenshell-python/test/api/control/test_unassign_control.py 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/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,) From 9a80dc14e9dec15d31558f8f7e5cda34a4dc1ef4 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 9 Nov 2023 13:58:35 +0500 Subject: [PATCH 206/220] api for assigning/unassigning flow controls #3981 --- .../api/system/assign_flow_control.py | 85 +++++++++++++++++++ .../api/system/unassign_flow_control.py | 72 ++++++++++++++++ .../api/system/test_assign_flow_control.py | 68 +++++++++++++++ .../api/system/test_unassign_flow_control.py | 64 ++++++++++++++ 4 files changed, 289 insertions(+) create mode 100644 src/ifcopenshell-python/ifcopenshell/api/system/assign_flow_control.py create mode 100644 src/ifcopenshell-python/ifcopenshell/api/system/unassign_flow_control.py create mode 100644 src/ifcopenshell-python/test/api/system/test_assign_flow_control.py create mode 100644 src/ifcopenshell-python/test/api/system/test_unassign_flow_control.py 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/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,) From 325c3665d96249ba4aac463898f41ad3919079dc Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 9 Nov 2023 17:16:32 +0500 Subject: [PATCH 207/220] UI for assigning controls to flow elements #3981 Example - https://imgur.com/a/CZQIoHp --- .../blenderbim/bim/module/system/__init__.py | 2 + .../blenderbim/bim/module/system/data.py | 21 ++++++ .../blenderbim/bim/module/system/operator.py | 64 +++++++++++++++++++ .../blenderbim/bim/module/system/ui.py | 63 ++++++++++++++++++ src/blenderbim/blenderbim/tool/system.py | 12 ++++ .../test/bim/feature/system.feature | 25 ++++++++ src/blenderbim/test/tool/test_system.py | 27 ++++++++ 7 files changed, 214 insertions(+) diff --git a/src/blenderbim/blenderbim/bim/module/system/__init__.py b/src/blenderbim/blenderbim/bim/module/system/__init__.py index cb1c8d24dc..0c500595da 100644 --- a/src/blenderbim/blenderbim/bim/module/system/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/system/__init__.py @@ -24,6 +24,7 @@ classes = ( operator.AddSystem, operator.AddZone, operator.AssignSystem, + operator.AssignUnassignFlowControl, operator.ConnectPort, operator.DisableEditingSystem, operator.DisableEditingZone, @@ -54,6 +55,7 @@ classes = ( 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_zones, ) diff --git a/src/blenderbim/blenderbim/bim/module/system/data.py b/src/blenderbim/blenderbim/bim/module/system/data.py index 645c770440..a1c8665e7e 100644 --- a/src/blenderbim/blenderbim/bim/module/system/data.py +++ b/src/blenderbim/blenderbim/bim/module/system/data.py @@ -72,6 +72,7 @@ class ObjectSystemData: "systems": cls.systems(), # AFTER SYSTEMS "connected_elements": cls.connected_elements(), + "flow_controls_data": cls.flow_controls_data(), } cls.is_loaded = True @@ -91,6 +92,26 @@ class ObjectSystemData: 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 = {} diff --git a/src/blenderbim/blenderbim/bim/module/system/operator.py b/src/blenderbim/blenderbim/bim/module/system/operator.py index de617ae7b3..cef76d5979 100644 --- a/src/blenderbim/blenderbim/bim/module/system/operator.py +++ b/src/blenderbim/blenderbim/bim/module/system/operator.py @@ -421,3 +421,67 @@ class RemoveZone(bpy.types.Operator, Operator): 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/ui.py b/src/blenderbim/blenderbim/bim/module/system/ui.py index f986ca0883..063a28c4ee 100644 --- a/src/blenderbim/blenderbim/bim/module/system/ui.py +++ b/src/blenderbim/blenderbim/bim/module/system/ui.py @@ -16,6 +16,7 @@ # You should have received a copy of the GNU General Public License # along with BlenderBIM Add-on. If not, see . +import bpy import blenderbim.bim.helper import blenderbim.tool as tool from blenderbim.bim.helper import prop_with_search @@ -272,6 +273,68 @@ 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_object" + + @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" diff --git a/src/blenderbim/blenderbim/tool/system.py b/src/blenderbim/blenderbim/tool/system.py index 0ce26d14f2..4a2c148c24 100644 --- a/src/blenderbim/blenderbim/tool/system.py +++ b/src/blenderbim/blenderbim/tool/system.py @@ -368,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/test/bim/feature/system.feature b/src/blenderbim/test/bim/feature/system.feature index 486f01fbaf..addd965b95 100644 --- a/src/blenderbim/test/bim/feature/system.feature +++ b/src/blenderbim/test/bim/feature/system.feature @@ -101,3 +101,28 @@ Scenario: Select system products 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/tool/test_system.py b/src/blenderbim/test/tool/test_system.py index 605e1204c6..419c46cc7f 100644 --- a/src/blenderbim/test/tool/test_system.py +++ b/src/blenderbim/test/tool/test_system.py @@ -277,3 +277,30 @@ class TestSetActiveSystem(NewFile): system = ifcopenshell.api.run("system.add_system", ifc, ifc_class="IfcSystem") 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 From 46e70c92c5b11109ccfe16f559a519185731c441 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 10 Nov 2023 11:39:49 +0500 Subject: [PATCH 208/220] fixed issues with ports ui on undo data.py doesn't update on every undo, so passed blender objects got invalidated on undo resulting in errors. changed blender objects to blender object names --- .../blenderbim/bim/module/system/data.py | 26 +++++++++++-------- .../blenderbim/bim/module/system/ui.py | 23 +++++++++------- 2 files changed, 28 insertions(+), 21 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/system/data.py b/src/blenderbim/blenderbim/bim/module/system/data.py index a1c8665e7e..9a37c1f48d 100644 --- a/src/blenderbim/blenderbim/bim/module/system/data.py +++ b/src/blenderbim/blenderbim/bim/module/system/data.py @@ -126,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 @@ -142,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): @@ -159,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 diff --git a/src/blenderbim/blenderbim/bim/module/system/ui.py b/src/blenderbim/blenderbim/bim/module/system/ui.py index 063a28c4ee..d4a9bf9d5e 100644 --- a/src/blenderbim/blenderbim/bim/module/system/ui.py +++ b/src/blenderbim/blenderbim/bim/module/system/ui.py @@ -177,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") @@ -243,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 From c26988b29203de99972b42dfabcb618d4034b034 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 10 Nov 2023 12:10:22 +0500 Subject: [PATCH 209/220] root.remove_product to remove IfcRelFlowControlElements --- .../ifcopenshell/api/root/remove_product.py | 5 +++ .../test/api/root/test_remove_product.py | 42 +++++++++++++++++++ 2 files changed, 47 insertions(+) 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/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") From 8fe92e810f66d00836cda0879ad51f578ac6de60 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 10 Nov 2023 16:17:02 +0500 Subject: [PATCH 210/220] show mep regenerate and connecte elements for non-profile based elements --- .../blenderbim/bim/module/model/workspace.py | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/workspace.py b/src/blenderbim/blenderbim/bim/module/model/workspace.py index 7c4e881234..2180040a52 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,14 +352,12 @@ 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__) @@ -402,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") @@ -676,21 +684,23 @@ class Hotkey(bpy.types.Operator, tool.Ifc.Operator): 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() From 55763ea7dfd552005629e9579f7dcd57a284615a Mon Sep 17 00:00:00 2001 From: Massimo Fabbro Date: Fri, 10 Nov 2023 22:06:54 +0100 Subject: [PATCH 211/220] Covering Tool now it is possible to add ceiling coverings from selected walls --- .../bim/module/covering/workspace.py | 12 +++++- .../blenderbim/bim/module/model/__init__.py | 1 + .../blenderbim/bim/module/model/covering.py | 39 +++++++++++++++++++ src/blenderbim/blenderbim/core/covering.py | 24 +++++++++++- 4 files changed, 74 insertions(+), 2 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/covering/workspace.py b/src/blenderbim/blenderbim/bim/module/covering/workspace.py index 47b85fc904..abae481529 100644 --- a/src/blenderbim/blenderbim/bim/module/covering/workspace.py +++ b/src/blenderbim/blenderbim/bim/module/covering/workspace.py @@ -139,6 +139,16 @@ class CoveringToolUI: 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 @@ -243,7 +253,7 @@ class Hotkey(bpy.types.Operator, Operator): 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"): - pass + 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: diff --git a/src/blenderbim/blenderbim/bim/module/model/__init__.py b/src/blenderbim/blenderbim/bim/module/model/__init__.py index 7fe9bc021e..47253d5047 100644 --- a/src/blenderbim/blenderbim/bim/module/model/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/model/__init__.py @@ -108,6 +108,7 @@ classes = ( space.GenerateSpace, space.GenerateSpacesFromWalls, covering.AddInstanceFlooringCoveringsFromWalls, + covering.AddInstanceCeilingCoveringsFromWalls, covering.AddInstanceFlooringCoveringFromCursor, covering.AddInstanceCeilingCoveringFromCursor, covering.RegenSelectedCoveringObject, diff --git a/src/blenderbim/blenderbim/bim/module/model/covering.py b/src/blenderbim/blenderbim/bim/module/model/covering.py index 17256b56f0..9d9729be56 100644 --- a/src/blenderbim/blenderbim/bim/module/model/covering.py +++ b/src/blenderbim/blenderbim/bim/module/model/covering.py @@ -145,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/core/covering.py b/src/blenderbim/blenderbim/core/covering.py index 65b07bcee0..e764dd4c78 100644 --- a/src/blenderbim/blenderbim/core/covering.py +++ b/src/blenderbim/blenderbim/core/covering.py @@ -124,7 +124,7 @@ def regen_selected_covering_object(ifc, spatial, model, Type, geometry): 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() @@ -148,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) From dd044c8516a7b4cde2c0027ef2e0d790ffc19b90 Mon Sep 17 00:00:00 2001 From: VDobranov <112861900+VDobranov@users.noreply.github.com> Date: Sat, 11 Nov 2023 15:39:38 +0500 Subject: [PATCH 212/220] Update reference_structure.py A mistype in docs: should be IfcRelReferencedInSpatialStructure instead of IfcRelContainedInSpatialStructure --- .../ifcopenshell/api/spatial/reference_structure.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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: From 66431158b5ced0378d2464dabb98546f08b72c68 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sun, 12 Nov 2023 10:11:13 -0600 Subject: [PATCH 213/220] fixes #3908: Close the opening (bim.edit_openings) while having the opening selected --- src/blenderbim/blenderbim/bim/module/model/opening.py | 6 ++++++ src/blenderbim/blenderbim/bim/module/model/workspace.py | 3 +++ 2 files changed, 9 insertions(+) diff --git a/src/blenderbim/blenderbim/bim/module/model/opening.py b/src/blenderbim/blenderbim/bim/module/model/opening.py index 795abf3652..6b22dd0a83 100644 --- a/src/blenderbim/blenderbim/bim/module/model/opening.py +++ b/src/blenderbim/blenderbim/bim/module/model/opening.py @@ -732,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) @@ -759,6 +762,9 @@ 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] diff --git a/src/blenderbim/blenderbim/bim/module/model/workspace.py b/src/blenderbim/blenderbim/bim/module/model/workspace.py index 2180040a52..03c76396a6 100644 --- a/src/blenderbim/blenderbim/bim/module/model/workspace.py +++ b/src/blenderbim/blenderbim/bim/module/model/workspace.py @@ -427,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", "") From 02ebc805250d6afb20e91a8617aa8684d5aaffe6 Mon Sep 17 00:00:00 2001 From: Ryan Schultz Date: Sun, 12 Nov 2023 12:39:44 -0600 Subject: [PATCH 214/220] closes #4006: automatically update the geometry of all the objects that have 'similar openings'. --- src/blenderbim/blenderbim/bim/module/model/opening.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/opening.py b/src/blenderbim/blenderbim/bim/module/model/opening.py index 6b22dd0a83..5e7579ce86 100644 --- a/src/blenderbim/blenderbim/bim/module/model/opening.py +++ b/src/blenderbim/blenderbim/bim/module/model/opening.py @@ -769,6 +769,7 @@ class EditOpenings(Operator, tool.Ifc.Operator): 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) @@ -776,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) From e98ff136c27c6247d5837240ddc8800092653915 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 13 Nov 2023 14:25:09 +0500 Subject: [PATCH 215/220] Merge two Services sections in Services and Systems tab #4001 Two similar sections were needed in the old ui before we added tabs --- src/blenderbim/blenderbim/bim/__init__.py | 1 - src/blenderbim/blenderbim/bim/module/system/ui.py | 6 +++--- src/blenderbim/blenderbim/bim/ui.py | 15 --------------- 3 files changed, 3 insertions(+), 19 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/__init__.py b/src/blenderbim/blenderbim/bim/__init__.py index 617c7c8248..f1a441d6f7 100644 --- a/src/blenderbim/blenderbim/bim/__init__.py +++ b/src/blenderbim/blenderbim/bim/__init__.py @@ -151,7 +151,6 @@ classes = [ 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, diff --git a/src/blenderbim/blenderbim/bim/module/system/ui.py b/src/blenderbim/blenderbim/bim/module/system/ui.py index d4a9bf9d5e..4ad2922074 100644 --- a/src/blenderbim/blenderbim/bim/module/system/ui.py +++ b/src/blenderbim/blenderbim/bim/module/system/ui.py @@ -129,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): @@ -209,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): @@ -284,7 +284,7 @@ class BIM_PT_flow_controls(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): diff --git a/src/blenderbim/blenderbim/bim/ui.py b/src/blenderbim/blenderbim/bim/ui.py index f63c32a138..f1d8301db8 100644 --- a/src/blenderbim/blenderbim/bim/ui.py +++ b/src/blenderbim/blenderbim/bim/ui.py @@ -750,21 +750,6 @@ class BIM_PT_tab_references(Panel): pass -class BIM_PT_tab_services_object(Panel): - bl_label = "Services" - 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, "SERVICES") and tool.Ifc.get() - - def draw(self, context): - pass - - class BIM_PT_tab_misc(Panel): bl_label = "Misc." bl_space_type = "PROPERTIES" From c5d38227fc916a8fbbe666cd40c9f9e683012f4c Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 13 Nov 2023 14:25:34 +0500 Subject: [PATCH 216/220] black format --- src/blenderbim/blenderbim/bim/__init__.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/__init__.py b/src/blenderbim/blenderbim/bim/__init__.py index f1a441d6f7..5ac6de6011 100644 --- a/src/blenderbim/blenderbim/bim/__init__.py +++ b/src/blenderbim/blenderbim/bim/__init__.py @@ -219,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 @@ -238,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 From 608b3e5401bf6ccf8aa0f75525a4f45aae9fe047 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 13 Nov 2023 15:37:50 +0500 Subject: [PATCH 217/220] DumpSlabPlaner.change_thickness to use si units #4004 It was providing project units to `geometry.add_slab_representation` resulting and then they were converted to project units once again during `geometry.add_slab_representation`. --- src/blenderbim/blenderbim/bim/module/model/slab.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/slab.py b/src/blenderbim/blenderbim/bim/module/model/slab.py index b3cbe091b4..124a405cb3 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( From 48b237ab5463c952081fef334116befe8e2e56ee Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 13 Nov 2023 15:51:50 +0500 Subject: [PATCH 218/220] New context override method for setting viewport tools #3876 --- src/blenderbim/blenderbim/bim/module/boundary/operator.py | 2 +- src/blenderbim/blenderbim/bim/module/model/profile.py | 2 +- src/blenderbim/blenderbim/bim/module/model/railing.py | 2 +- src/blenderbim/blenderbim/bim/module/model/roof.py | 2 +- src/blenderbim/blenderbim/bim/module/model/slab.py | 2 +- src/blenderbim/blenderbim/bim/module/profile/operator.py | 2 +- src/blenderbim/blenderbim/tool/blender.py | 5 +++++ 7 files changed, 11 insertions(+), 6 deletions(-) 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/model/profile.py b/src/blenderbim/blenderbim/bim/module/model/profile.py index 8dc104e08e..4330ef3f87 100644 --- a/src/blenderbim/blenderbim/bim/module/model/profile.py +++ b/src/blenderbim/blenderbim/bim/module/model/profile.py @@ -961,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/railing.py b/src/blenderbim/blenderbim/bim/module/model/railing.py index 28aaab790d..c7dc278fe5 100644 --- a/src/blenderbim/blenderbim/bim/module/model/railing.py +++ b/src/blenderbim/blenderbim/bim/module/model/railing.py @@ -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 5582f15879..c07236cc02 100644 --- a/src/blenderbim/blenderbim/bim/module/model/roof.py +++ b/src/blenderbim/blenderbim/bim/module/model/roof.py @@ -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 124a405cb3..624d41e2bd 100644 --- a/src/blenderbim/blenderbim/bim/module/model/slab.py +++ b/src/blenderbim/blenderbim/bim/module/model/slab.py @@ -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/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/tool/blender.py b/src/blenderbim/blenderbim/tool/blender.py index 9568be1af6..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: From e8aa8c44e596b9ae8d2acd8cd64918842e73226c Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 13 Nov 2023 16:56:58 +0500 Subject: [PATCH 219/220] Fixed issue with UI for types withotu PredefinedType after 1621449 Noticed the issue adding IfcFurnitureType in IFC2x3 ``` Traceback (most recent call last): File "\Blender\4.0\scripts\addons\blenderbim\bim\module\model\workspace.py", line 71, in draw_settings BimToolUI.draw(context, layout, ifc_element_type="all") File "\Blender\4.0\scripts\addons\blenderbim\bim\module\model\workspace.py", line 230, in draw AuthoringData.load(ifc_element_type) File "\Blender\4.0\scripts\addons\blenderbim\bim\module\model\data.py", line 56, in load cls.data["predefined_type"] = cls.predefined_type() File "\Blender\4.0\scripts\addons\blenderbim\bim\module\model\data.py", line 258, in predefined_type predefined_type = relating_type.PredefinedType File "\Blender\4.0\scripts\addons\blenderbim\libs\site\packages\ifcopenshell\entity_instance.py", line 191, in __getattr__ raise AttributeError( AttributeError: entity instance of type 'IFC2X3.IfcFurnitureType' has no attribute 'PredefinedType' ``` --- src/blenderbim/blenderbim/bim/module/model/data.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/blenderbim/blenderbim/bim/module/model/data.py b/src/blenderbim/blenderbim/bim/module/model/data.py index 2fa9f0bc28..3a05528554 100644 --- a/src/blenderbim/blenderbim/bim/module/model/data.py +++ b/src/blenderbim/blenderbim/bim/module/model/data.py @@ -255,6 +255,8 @@ class AuthoringData: 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 From c6454803eeefee565842d6f1bd6f81ec475ddca9 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 14 Nov 2023 17:18:57 +0500 Subject: [PATCH 220/220] fixed issue adding bend between segments located at the same point also added some tests --- .../blenderbim/bim/module/model/mep.py | 38 ++++++----- src/blenderbim/test/bim/feature/model.feature | 64 ++++++++++++++++++- src/blenderbim/test/bim/test_feature.py | 17 ++++- .../ifcopenshell/util/shape_builder.py | 18 +++--- 4 files changed, 106 insertions(+), 31 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/model/mep.py b/src/blenderbim/blenderbim/bim/module/model/mep.py index f171dec3e7..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 @@ -1025,7 +1026,14 @@ 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(): @@ -1049,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, @@ -1075,7 +1083,7 @@ 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 @@ -1083,21 +1091,19 @@ class MEPAddBend(bpy.types.Operator, tool.Ifc.Operator): 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(): - segments_intersection = segments_intersection_ws - start_point - segments_intersection = to_start_object_space @ segments_intersection - + 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. @@ -1117,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( @@ -1127,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( @@ -1148,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, ) diff --git a/src/blenderbim/test/bim/feature/model.feature b/src/blenderbim/test/bim/feature/model.feature index d49c455625..66022e0cdf 100644 --- a/src/blenderbim/test/bim/feature/model.feature +++ b/src/blenderbim/test/bim/feature/model.feature @@ -530,6 +530,7 @@ 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" @@ -542,11 +543,70 @@ Scenario: Create a MEP transition 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()" + And I press "bim.mep_add_transition" - Then the object "IfcDuctSegment/RectSegment" is at "0,0,0" + 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/test_feature.py b/src/blenderbim/test/bim/test_feature.py index 87787caf66..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") @@ -241,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/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 = []

      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 F{{jD&&#V9d diff --git a/src/blenderbim/docs/users/spatial-container.png b/src/blenderbim/docs/users/spatial-container.png index a8c2c74e830930405429b72adb6735010d492203..2d13edfd42a9559b90c59933e279faa8475d2d7d 100644 GIT binary patch literal 274059 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

    2. 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 z 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 #$`^v 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�q&U8#NQE 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